Created
September 16, 2025 23:31
-
-
Save illuminatianon/8fa502ee4f375e32e0a02277b9cf3768 to your computer and use it in GitHub Desktop.
DDD Trainer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name DDD Trainer — Single File | |
| // @namespace ddd-trainer | |
| // @version 1.0.0 | |
| // @description One-file trainer with embedded chart + auto-retry + latency/speed tuning | |
| // @match https://neal.fun/not-a-robot* | |
| // @run-at document-end | |
| // @grant GM_getResourceText | |
| // @resource dddchart data:application/json;base64,WwogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAxLjU1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyLjIKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDIuNjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyLjgyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDMuMDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMy4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzLjYKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzLjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNS4zMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDUuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2LjEKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2LjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDYuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNi43NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNy4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDcuNAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA4LjcyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOS4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDkuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDkuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDEwLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTAuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTAuOAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDExLjg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTIuMTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTIuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTIuOTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDEzLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTMuMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxMy41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDEzLjkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxNC4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTQuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDE0Ljg3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTUuMQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMTUuMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxNS4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMTYuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxNi43MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDE3CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAxNy40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDE3Ljg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTguMDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTguMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDE4LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxOS4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDE5LjM3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDE5LjU1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTkuOTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyMC4yMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDIwLjQKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAyMC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyMC44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAyMS4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMjEuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjEuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMjIuOTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMjMuNDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAyMy42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMjMuODI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjMuODI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyNC4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAyNC43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyNC45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDI1LjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMjUuNTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyNi4wMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAyNi40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyNi44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMjcuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjcuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjcuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDI4LjEyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMjguMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAyOC41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDI5LjIyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDI5LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyOS44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDMwLjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAzMC40NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDMwLjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzMC43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzEuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAzMS41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMzEuNzc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAzMgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMzIuNAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDMyLjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAzMi44NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAzMy4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzMy4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDM0LjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzQuMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDM0LjQ3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDM1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzUuMjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzUuNDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDM2LjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDM2LjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAzNi43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAzNy4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDM3LjM3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMzcuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzNy41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDM3LjkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzOC4yMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDM4LjQ1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzguNgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMzguODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDM5LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDM5LjYyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDAuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNDAuNTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0MC45NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA0MC45NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQxLjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQxLjg3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQyLjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQyLjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQyLjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDQyLjk1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA0My4xMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDQzLjMyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDMuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQzLjkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA0NC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0NC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNDQuODI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0NS4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQ1LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDQ2LjEyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNDYuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNDYuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQ2Ljk3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQ3LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQ3Ljg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0Ny44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDguMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNDguNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDkuMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA0OS41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQ5LjU3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDUwCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1MC40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA1MC44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDUxLjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNTEuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1MS43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNTIuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1Mi41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDUzCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNTMuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA1My44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU0LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTQuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDU0LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDU1LjEyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU1LjU1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1NgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU2LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDU2LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNTYuOQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNTcuMzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA1Ny43MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA1OC4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTguNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA1OQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTkuMgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU5LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDU5LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNTkuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2MC4yCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjAuNDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYwLjQ1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjAuNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYwLjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjEuMDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYxLjA1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjEuMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYxLjM1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA2MS41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDYxLjk3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDYyLjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjIuNjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjIuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYzLjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNjMuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA2My42CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA2My45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2My45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDY0LjIyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDY0LjIyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjQuNTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjQuNTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA2NC44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2NC44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjUuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjUuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDY2LjA1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjYuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjYuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDY2LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny4wMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny4zNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjcuMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjcuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny45NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjcuOTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2OC4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjguMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDY4LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjguODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2OS4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDY5LjQ1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjkuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNjkuOTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3MC4xMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA3MC4xMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA3MC40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDcwLjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNzAuNzc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzAuNzc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNzEuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3MS40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDcxLjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzEuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA3MS44NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDcxLjg3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzIuMTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3Mi41CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3My4xCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNzMuMzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA3My41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA3My41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDc0CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzQuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA3NC42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzQuODc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNzUuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzUuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3Ni4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNzYuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzYuNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA3NwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzcuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzcuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDc3LjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzguMwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDc4LjcyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDc4LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDc5LjM1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA3OS42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODAKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4MC40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDgwLjg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODEuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA4MS41CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA4MS43NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDgyLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODIuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDgzCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4My40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA4My40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogODMuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDg0LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogODQuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDg0LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDg0LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDg0LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogODUuMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA4NS4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDg1Ljc3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODYuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA4Ni44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA4Ny4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDg3LjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDg3LjcyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogODguMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA4OC4zNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDg4LjYKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4OQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDg5LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODkuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4OS44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODkuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDkwLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTAuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogOTAuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5MS4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOTEuNTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTEuOAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogOTIuMDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogOTIuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogOTIuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDkyLjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5My4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5My4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDkzLjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDkzLjYKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5My45NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk0LjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5NC41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOTUuMjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5NS40NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk1Ljg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTUuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDk2LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDk2LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOTYuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTYuOTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5Ny4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk3LjM3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk3LjU3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogOTgKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDk4LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDk4LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5OC44NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDk5LjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5OS45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDEwMC4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTAwLjU3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTAwLjgKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAxMDEuMDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDEwMS4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMTAxLjA1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTAxLjA1CiAgICB9Cl0= | |
| // ==/UserScript== | |
| (() => { | |
| 'use strict'; | |
| // ---------- UI/behavior config ---------- | |
| const START_SELECTOR = '.start'; | |
| const FAIL_SEL = '.stats-item.stats-title'; | |
| const RETRY_SEL = '.stats-btn'; | |
| const HOLD_MS = 40; | |
| const LOOKAHEAD = 12; | |
| const STORE = 'ddd_trainer_cfg'; | |
| // --------------------------------------- | |
| // Load embedded chart (fallback to localStorage or window.DDR_NOTES) | |
| function loadEmbeddedChart() { | |
| try { | |
| const txt = GM_getResourceText && GM_getResourceText('dddchart'); | |
| if (txt) { | |
| log('Loaded chart from GM resource'); | |
| return JSON.parse(txt); | |
| } | |
| } catch { } | |
| try { | |
| const ls = localStorage.getItem('ddd_chart'); | |
| if (ls) { | |
| log('Loaded chart from localStorage'); | |
| return JSON.parse(ls); | |
| } | |
| } catch { } | |
| // Try multiple sources for the notes | |
| let notes = []; | |
| if (Array.isArray(window.DDR_NOTES)) { | |
| notes = window.DDR_NOTES; | |
| log('Loaded chart from window.DDR_NOTES:', notes.length, 'notes'); | |
| } else if (Array.isArray(globalThis.DDR_NOTES)) { | |
| notes = globalThis.DDR_NOTES; | |
| log('Loaded chart from globalThis.DDR_NOTES:', notes.length, 'notes'); | |
| } else { | |
| log('No DDR_NOTES found in window or globalThis'); | |
| } | |
| return notes; | |
| } | |
| const cfg = loadCfg() || { enabled: false, latency: 0, speed: 1, autoRetry: false }; | |
| let notesCache = normalize(loadEmbeddedChart()); | |
| let runner = null; | |
| console.log(notesCache); | |
| // Debug logging | |
| log('Initialized with', notesCache.length, 'notes, enabled:', cfg.enabled); | |
| // Find and monitor the video element | |
| function findVideo() { | |
| return document.querySelector('video[src*="dance.mp4"], video.bg-video'); | |
| } | |
| function logVideoState() { | |
| const video = findVideo(); | |
| if (video) { | |
| log(`VIDEO: currentTime=${video.currentTime.toFixed(3)}s paused=${video.paused} readyState=${video.readyState}`); | |
| } else { | |
| log('VIDEO: not found'); | |
| } | |
| } | |
| // Log video state periodically for debugging | |
| setInterval(logVideoState, 1000); | |
| // ===== Panel ===== | |
| function injectPanel() { | |
| if (document.getElementById('ddd-panel')) return; | |
| const el = document.createElement('label'); | |
| el.id = 'ddd-panel'; | |
| el.innerHTML = ` | |
| <input id="ddd-enable" type="checkbox"${cfg.enabled ? ' checked' : ''}> | |
| <span style="margin-right:.75rem">Enable DDD Trainer</span> | |
| <span id="ddd-stats" style="opacity:.85">lat=${cfg.latency}ms ×${cfg.speed.toFixed(3)} | notes: ${notesCache.length}</span> | |
| `; | |
| Object.assign(el.style, { | |
| position: 'fixed', zIndex: 999999, top: '10px', right: '10px', | |
| background: 'rgba(0,0,0,.6)', color: '#fff', padding: '6px 10px', | |
| borderRadius: '6px', font: '12px/1.2 system-ui, sans-serif', userSelect: 'none' | |
| }); | |
| el.querySelector('#ddd-enable').addEventListener('change', e => { | |
| cfg.enabled = e.target.checked; saveCfg(); log('enabled:', cfg.enabled); | |
| }); | |
| document.body.appendChild(el); | |
| } | |
| waitForBody(injectPanel); | |
| // ===== Start hook ===== | |
| const onStart = (e) => { | |
| if (!cfg.enabled) return; | |
| if (e.target && e.target.closest(START_SELECTOR)) { | |
| if (!notesCache.length) { log('no notes loaded'); return; } | |
| runner = makeRunner(notesCache); | |
| runner.start(); | |
| } | |
| }; | |
| document.addEventListener('click', onStart, true); | |
| document.addEventListener('pointerdown', onStart, true); | |
| // ===== Fail detect & retry ===== | |
| const failObserver = new MutationObserver(() => { | |
| const failEl = [...document.querySelectorAll(FAIL_SEL)] | |
| .find(n => /stage failed/i.test(n.textContent || '')); | |
| if (failEl) { | |
| if (runner) { runner.stop(); runner = null; } | |
| log('Stage Failed detected.'); | |
| if (cfg.autoRetry) { | |
| setTimeout(() => { | |
| const btn = [...document.querySelectorAll(RETRY_SEL)] | |
| .find(n => /try again/i.test(n.textContent || '')); | |
| if (btn) { btn.click(); log('Clicked Try Again.'); } | |
| }, 150); | |
| } | |
| } | |
| }); | |
| failObserver.observe(document.documentElement, { childList: true, subtree: true }); | |
| // ===== Tuning keys ===== | |
| document.addEventListener('keydown', (e) => { | |
| if (!cfg.enabled) return; | |
| if (e.key === ']') { cfg.latency += 5; saveCfg(); stat(); } | |
| else if (e.key === '[') { cfg.latency -= 5; saveCfg(); stat(); } | |
| else if (e.key === '+') { cfg.speed *= 1.01; saveCfg(); stat(); } | |
| else if (e.key === '-') { cfg.speed /= 1.01; saveCfg(); stat(); } | |
| else if (/^r$/i.test(e.key)) { notesCache = normalize(loadEmbeddedChart()); stat(); } | |
| }); | |
| // ===== Runner ===== | |
| function makeRunner(seq) { | |
| const notes = [...seq]; | |
| let i = 0, running = false, raf = 0; | |
| let lastVideoTime = 0; | |
| let frameCount = 0; | |
| let lastFrameTime = performance.now(); | |
| function loop(now) { | |
| if (!running) return; | |
| const video = findVideo(); | |
| if (!video) { | |
| log('VIDEO: not found, stopping runner'); | |
| running = false; | |
| return; | |
| } | |
| const videoTimeMs = video.currentTime * 1000; | |
| const elapsed = videoTimeMs * (1 / cfg.speed); | |
| // Detect freezes/jumps in video time | |
| const videoTimeDelta = videoTimeMs - lastVideoTime; | |
| const frameDelta = now - lastFrameTime; | |
| frameCount++; | |
| // Log if we detect unusual timing | |
| if (videoTimeDelta > 100 || frameDelta > 50) { // More than 100ms video jump or 50ms frame time | |
| log(`FREEZE DETECTED: videoJump=${videoTimeDelta.toFixed(1)}ms frameTime=${frameDelta.toFixed(1)}ms`); | |
| } | |
| // Log every 60 frames for performance monitoring | |
| if (frameCount % 60 === 0) { | |
| log(`PERF: frame#${frameCount} videoTime=${videoTimeMs.toFixed(1)}ms paused=${video.paused} buffered=${video.buffered.length > 0 ? video.buffered.end(0).toFixed(1) : 'none'}`); | |
| } | |
| // Process notes that are ready to be played | |
| let processedThisFrame = 0; | |
| while (i < notes.length && processedThisFrame < 10) { // Limit to 10 notes per frame to prevent lockup | |
| const note = notes[i]; | |
| const timeUntilNote = note.t + cfg.latency - elapsed; | |
| // If this note is way overdue (more than 200ms late), skip it | |
| if (timeUntilNote < -200) { | |
| log(`SKIP: ${note.key} @${note.t}ms (${(-timeUntilNote).toFixed(1)}ms late)`); | |
| i++; | |
| processedThisFrame++; | |
| continue; | |
| } | |
| // If this note is ready to play (within lookahead window) | |
| if (timeUntilNote <= LOOKAHEAD) { | |
| const expectedTime = note.t + cfg.latency; | |
| const actualTime = elapsed; | |
| const diff = actualTime - expectedTime; | |
| log(`CHART: ${note.key} expected@${expectedTime.toFixed(1)}ms actual@${actualTime.toFixed(1)}ms diff=${diff.toFixed(1)}ms`); | |
| press(note.key, note.hold ?? HOLD_MS); | |
| i++; // Move to next note only after processing this one | |
| processedThisFrame++; | |
| } else { | |
| // This note and all following notes are not ready yet | |
| break; | |
| } | |
| } | |
| lastVideoTime = videoTimeMs; | |
| lastFrameTime = now; | |
| if (i >= notes.length) { running = false; return; } | |
| raf = requestAnimationFrame(loop); | |
| } | |
| return { | |
| start() { | |
| const video = findVideo(); | |
| if (!video) { | |
| log('VIDEO: not found, cannot start'); | |
| return; | |
| } | |
| i = 0; running = true; | |
| requestAnimationFrame(loop); | |
| log(`START: videoTime=${(video.currentTime * 1000).toFixed(1)}ms latency=${cfg.latency}ms speed×${cfg.speed.toFixed(3)}`); | |
| log('First few notes:', notes.slice(0, 5).map(n => `${n.key}@${n.t}ms`).join(', ')); | |
| }, | |
| stop() { running = false; cancelAnimationFrame(raf); } | |
| }; | |
| } | |
| // ===== Keys ===== | |
| const mapKey = k => { | |
| const s = String(k).toLowerCase(); | |
| return ({ | |
| left: 'ArrowLeft', right: 'ArrowRight', up: 'ArrowUp', down: 'ArrowDown', | |
| space: ' ', enter: 'Enter' | |
| }[s]) || k; | |
| }; | |
| const keyCode = k => ({ | |
| ArrowLeft: 37, ArrowUp: 38, ArrowRight: 39, ArrowDown: 40, Enter: 13, ' ': 32 | |
| }[k] ?? (k.length === 1 ? k.toUpperCase().charCodeAt(0) : 0)); | |
| function fireKey(key, type) { | |
| const kc = keyCode(key); | |
| const ev = new KeyboardEvent(type, { | |
| key, | |
| code: key.startsWith('Arrow') ? key : (key === 'Enter' ? 'Enter' : (key.length === 1 ? 'Key' + key.toUpperCase() : key)), | |
| keyCode: kc, which: kc, bubbles: true, cancelable: true | |
| }); | |
| [document.activeElement, document.body, document, window].forEach(t => t && t.dispatchEvent(ev)); | |
| } | |
| let songStartTime = 0; // Track when the song started | |
| function press(k, hold = HOLD_MS) { | |
| const key = mapKey(k); | |
| const now = performance.now(); | |
| const songTime = now - songStartTime; | |
| log(`PRESS: ${key} at song-time ${songTime.toFixed(1)}ms (absolute ${now.toFixed(1)}ms)`); | |
| fireKey(key, 'keydown'); | |
| setTimeout(() => fireKey(key, 'keyup'), hold); | |
| } | |
| // ===== Utils ===== | |
| function normalize(seq) { | |
| return (seq || []).map(n => ({ t: (n.time || 0) * 1000, key: n.key, hold: n.hold })) | |
| .sort((a, b) => a.t - b.t); | |
| } | |
| function stat() { | |
| const s = document.getElementById('ddd-stats'); | |
| if (s) s.textContent = `lat=${cfg.latency}ms ×${cfg.speed.toFixed(3)} | notes: ${notesCache.length}`; | |
| } | |
| function saveCfg() { localStorage.setItem(STORE, JSON.stringify(cfg)); } | |
| function loadCfg() { try { return JSON.parse(localStorage.getItem(STORE)); } catch (e) { return null; } } | |
| function waitForBody(fn) { | |
| if (document.body) return fn(); | |
| const obs = new MutationObserver(() => { | |
| if (document.body) { obs.disconnect(); fn(); } | |
| }); | |
| obs.observe(document.documentElement, { childList: true, subtree: true }); | |
| } | |
| function log(...a) { console.log('[DDD]', ...a); } | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment