├── LICENSE ├── README.md ├── SQFMI-controversy-conversation ├── Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html └── Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files │ ├── 0-EB806.png │ ├── 1f62d-02603.svg │ ├── 261d-23B11.svg │ ├── 2764-A3D25.svg │ ├── 36d10e1f0874970af106af4c3954e214-4CD21.png │ ├── 88b8eae1a58828373696aa77c31f259b-04962.png │ ├── Screenshot_20240511_145609-1D83F.png │ ├── bd3eef18e0f6caa35d415c81c3e058c2-6C938.png │ ├── fd9716ee2ea9dff94eb1bec9a8bec322-3CC05.png │ ├── ggsans-italic-400-E988B.woff2 │ ├── ggsans-italic-500-0777F.woff2 │ ├── ggsans-italic-600-CB411.woff2 │ ├── ggsans-italic-700-891AC.woff2 │ ├── ggsans-italic-800-D36B0.woff2 │ ├── ggsans-normal-400-1456D.woff2 │ ├── ggsans-normal-500-89CE5.woff2 │ ├── ggsans-normal-600-C1EA8.woff2 │ ├── ggsans-normal-700-1949A.woff2 │ ├── ggsans-normal-800-58487.woff2 │ ├── highlight.min-D8D27.js │ ├── image-DC87A.png │ ├── lottie.min-99657.js │ └── solarized-dark.min-BA98F.css ├── Watchy 3.0 review.md ├── images ├── 3.0 │ ├── 2.0connector.png │ ├── 20240629_223446.png │ ├── 20240629_223535.png │ └── pcb.png ├── imgc1.jpg ├── imgc2.jpg ├── imgc3.jpg ├── imgc4.jpg ├── imgc5.jpg └── old-micro-usb │ ├── img1.jpg │ ├── img2.jpg │ ├── img3.jpg │ ├── img5.jpg │ └── img6.jpg └── watchy-usbc ├── README.md ├── hardware ├── WATCHY.xlsx ├── WatchySchematic.pdf ├── pcb_outlines_of_layers.dxf ├── watchy-1.0.PcbDoc ├── watchy_altium_export.zip ├── watchy_usbc_chips_and_datasheets.html └── 屏幕截图 2021-12-09 192203.png ├── images ├── 01space.png ├── case.png └── pcb.png ├── original-program ├── README.md └── backup.bin ├── watchy_usbc_case.step └── watchy_usbc_case_v2.step /LICENSE: -------------------------------------------------------------------------------- 1 | I quess it's a fork of SQFMI work, so the license stays the same 2 | 3 | MIT License 4 | 5 | Copyright (c) 2020 SQFMI 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WatchySourcingHub 2 | 3 | ### Contents 4 | - [Original Watchy v3](#original-watchy-v3) 5 | - [Clones](#clones) 6 | - [Morality of those clones](#morality-of-those-clones) 7 | - [Notes about the clones](#further-notes-that-you-should-know-before-you-buy) 8 | - [Things to know when coding the watchy](#things-to-know-when-coding-the-watch) 9 | - [Some firmwares for the watchy that I like](#some-firmwares-for-the-watchy-that-i-like) 10 | - [Some 3D printed cases](#some-3d-printed-cases) 11 | - [Contact and the community](#contact-and-the-community) 12 | - [Community mantained wiki](#community-mantained-wiki) 13 | - [Shameless ad of something cool I made which is related to watchy so check it if you want out or be mad at me for wasting your time reading this 34 word long sentence](https://github.com/Szybet/Yatchy) 14 | 15 | ## Original Watchy v3 16 | 17 |
18 | SQFMI released only the schematic, no kicad files for the v3. Is it really open source if you can't replicate it yourself, or even repair it by looking at the PCB layout? In my opinion the v3 doesn't make sense then, that's why the text is hidden, decide for yourself as always, I just don't find it meaningful for most people now 19 | 20 | * * * 21 | 22 | ### TLDR and latest update [here](https://github.com/Szybet/WatchySourcingHub/blob/main/Watchy%203.0%20review.md#tldr-after-4-months) 23 | 24 | SQFMI, the original creator of the watchy started shipping again, further more it's in stock so no more waiting. Well now, the reputation of SQFMI is not that great because of the sooo long shipping delays in the past (see the "Whyyyy" section below) and the rough release of the watchy 3.0 and it's design (Situation explained [here](https://github.com/Szybet/WatchySourcingHub/blob/main/Watchy%203.0%20review.md)) but I still think it's better to buy from him, for those reasons: 25 | 26 | - It's always better to support the original creator who open sourced his work (or will eventually) (He did not do that, lol) than a copy who "borrowed" the design and didn't contributed much back 27 | - You buying from mouser / any shop that is not aliexpress really will be a better experience for you - warranty, faster shipping, safer shipping, better packaging, better more quality components (battery, case & strap). Do I really need to explain that aliexpress is the last resort for buying stuff? 28 | - The V3 has some cool features (mainly for me bigger flash) and some flaws If you can get either one of them, then get the newer version (as software support will slowly shift to the newer one) 29 | - Communication recently improved, I hope I will not need to remove this statement from here 30 | 31 | Also SQFMI about the clones: 32 | 33 | "it has become a problem for us to support and address issues. Many users have reached out to us on receiving faulty hardware, broken parts, case not fitting, or other firmware issues, and only upon further discussion did we realize they have purchased a clone" 34 | 35 | With that in mind, here is the link: https://watchy.sqfmi.com/ as always decide for yourself 36 | 37 | And for the people who bought a watchy from aliexpress and then went to SQFMI to complain... what the **** ** ***** **** ***. No further comment. 38 | 39 |
40 | 41 | * * * 42 | 43 | The rest of the repo is about those alternative clones, There is also infortmation about communities, firmwares, 3D printed case and more which also concern the watchy v3 44 | 45 | The USB-C 1.0 watchy is now depracated. To find info about it, look into watchy-usbc folder. The rest of this repo contains info about the replacement of it. the USB-C 2.0 version that is currently sold 46 | 47 | ## Clones 48 | A clone of the Watchy, sold on various platforms from probably various sellers, but the manufacturer is probably the same. 49 | - Aliexpress sellers 50 | - the first one that appeared, the most trusted in my opinion (The most people buught from him) 51 | - Here is their Github repo for the "E-watch". There is nothing really there ;) - https://github.com/01Space/E-Watch 52 | - Their aliexpress store: https://pl.aliexpress.com/store/912632218 53 | - And the watchy on their store: https://pl.aliexpress.com/item/1005005209927318.html (It's the original manufacturer, others on Ali probably resell his watchy) 54 | - Another seller/reseller 55 | - [AliExpress link](https://www.aliexpress.com/item/1005007684185170.html) 56 | - Has the cheapest option for an included anodised aluminium case w/ silicone strap (as of time of writing) 57 | - Battery is ok, but could be better 58 | - Banggood 59 | - One person bought and is satisfied 60 | - [A horrible long link](https://usa.banggood.com/Watchy-ESP32-Open-Source-E-Watch-WiFi-bluetooth-Programmable-Watch-E-Paper-Watch-with-Open-Source-Hardware-and-Software-p-2004157.html?af_force_deeplink=true&tags=direct&source_caller=api&pid=direct&is_retargeting=true&shortlink=ecydp3md&af_ad=-&deep_link_value=https%3A%2F%2Fm.banggood.com%2FWatchy-ESP32-Open-Source-E-Watch-WiFi-bluetooth-Programmable-Watch-E-Paper-Watch-with-Open-Source-Hardware-and-Software-p-2004157.html%3Futm_source%3Ddirect%26utm_medium%3Dnone%26utm_content%3D-%26utm_campaign%3Dnone_pps_copy&af_channel=none&c=-&cur_warehouse=CN) 61 | - Shopee 62 | - No one bought it 63 | - [A horrible link, I can't change the language from vietnamese](https://shopee.vn/product/936949083/25811373902?d_id=605f0&uls_trackid=4vh4705i000v) 64 | - There is at least [one reseller](https://shopee.ph/ESP32-E-ink-display-Smart-Watch-Adjustable-DIY-Dial-3D-Printer-CNC-Cases-Customizable-Connect-With-B-i.1118147316.25614088712) on Shopee that provides options for a 3D-printed or CNC case 65 | - Lazada 66 | - For people in Southeast Asia, check your regional Lazada for resellers of Watchy 2.0 clones 67 | - For example, Lazada Singapore shows [this](https://www.lazada.sg/catalog/?spm=a2o42.homepage.search.d_go&q=watchy) when searching for Watchy 68 |

69 | 70 | 71 | 72 | 73 | 74 |

75 | 76 | ## Morality of those clones 77 | A few thousand people ordered on crowdfund and now their shippind date is shifting and shifting again and again. On mouser 1.5k people are waiting. Pi hut doesn't ship anywhere really ( Like couldn't you just don't ship the battery, we could buy it locally... ). Obviously I don't blame anyone. I understand the problems with supply chains in the recent years. But the situation is and was bad, just bad. 78 | 79 | This statement was true in october 2023 and is still true in january 2024🥴. While the Watchy v3 released, this statement is still a bit true. 80 | 81 | I wasn't able to get a original watchy as I was hunting for it from 2021 so... 82 | 83 | **That was a light version of this whole situation. [Here](https://szybet.github.io/WatchySourcingHub/SQFMI-controversy-conversation/Watchy%20-%20Text%20Channels%20-%20general%20[804832183516266498]%20(after%202024-05-11).html) is a whole conversation about it.** 84 | 85 | This conversation was heated up. Later we concluded that SQFMI is not a scammer because he didn't run away with the money and after 2 years he cleared up the situation a bit, but the pain remains. 86 | 87 | SQFMI about the whole situation: 88 | 89 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/1379433e-449f-464c-9b52-875d11787fc6) 90 | 91 | **The rest of the repo describes the aliexpress micro USB 2.0 watchy. Currently the seller sells USBC 2.0 Watchy, but I quess they are the same, as only the USB port changed** 92 | 93 | ## Further notes that you should know before you buy: 94 | **Some of those issues below, are related to the design of the 2.0 version of the Watchy. Don't contact the aliexpress seller for no reason, If you have any questions, ask me through contact below.** 95 | - ~~The schematic is 1:1 with the oryginal watchy (Now it's the 2.0 version). The PCB too because **it is compatible** with official SQFMI metal cases. That's why this repo no longer contains schematics for this version. They are the same as the SQFMI ones~~ Well now there is a USBC 2.0 version. I quess, logically it's not compabitable with SQFMI cases 96 | - In the previous USB-C version, the components were not original. Maybe they were recycled or idk. In the current version I didn't checked, but expect the same thing `¯\_(ツ)_/¯` 97 | - The screen is already glued in and has a foil that can be taken off. cool. 98 | - As you can see in the images - It comes in a mini pcb based case that it's screwed in. Even with the screw holes, the PCB is solid. You can use that case or 3D print one like I did. 99 | - It also comes with a very good looking 200mAh battery and a strap. cool. But the capacity of the battery may very, you might need to replace it sooner than you expect. 100 | - The buttons from their design are very fragile, some of them are more clicky then others. They may come off after some time. Replacements cost a few cents but the soldering is tricky 101 | - **🇩🇪🇩🇪🇩🇪 GERMANS LOOK HERE 🇩🇪🇩🇪🇩🇪 DEUTSCHLAND 🇩🇪🇩🇪🇩🇪** This seller doesn't ship to germany. But there are others that ship (Very fast shipping it was) to germany but have at a higher price, just search for them **🇩🇪🇩🇪🇩🇪 GERMANS LOOK HERE 🇩🇪🇩🇪🇩🇪 DEUTSCHLAND 🇩🇪🇩🇪🇩🇪** If I see one more guy complaining they don't ship to germany I will not hesitate to steal your Bratwurst 102 | - The screens used by Watchy clones are of variable quality, with reports of optimal operating temperatures ranging from as narrow as 0°C-30°C to as wide as -10°C-38°C. 103 | - The V2 doesn't have TVS diodes, so the usb uart chip may break, it happened to many people, it may for you or don't, it's a silicon, cable, usb second end quality lottery 104 | 105 | ### The rest of the repo is for general things, not only the clones :) 106 | 107 | ## Things to know when coding the watch 108 | - **Use platformio. Don't use arduino IDE. 90% of issues on the Watchy server are solved by using platformio. Not only that, arduino ide compiling is slower.** 109 | - The 2.0 version doesn't work without a battery - the RTC reading are corrupted. Just connect the battery. 110 | - The RTC is drifting, **that's normal for the RTC by design.** You just need to adjust for that, there are automated libraries to do that. 111 | - When USB is connected the RTC drifts in a non linear way - that's horrible, my solution to that is connect to wifi when charging and sync NTP every few minutes 112 | 113 | # For people who are not tech savvy 114 | Don't worry! You can either learn, ask for help in the communities I listed below or buy me a big coffe for premium guidanance or even to create your personal firmware / add some features to existing ones (I could also propably 3D print you a case...) Contact below :) 115 | 116 | ## Some firmwares for the watchy that I like 117 | ### Firmwares that are "the new generation?" 118 | 119 | Using other firmwares than these 4 will get you problems (most probably), these are the newest written ones 120 | 121 | - https://github.com/GuruSR/Watchy_GSR - Has many features that you would expect from a smart watch, but the codebase... motivated me to write mine 122 | - https://github.com/Szybet/InkWatchy - Mine, many unique features, the most configurable one 123 | - https://github.com/Michal-Szczepaniak/TinyWatchy - doesn't support watchy v3 124 | 125 | ### Other firmwares, inspiration more than actually usable firmwares 126 | - https://github.com/Szybet/watchy-starfield - Looks awesome 127 | - https://github.com/OregonJunco/Watchytchi - Cool idea 128 | - https://github.com/NiklasNeugebauer/minty-os - Abandoned, but the code looks good 129 | ### Other other things 130 | - https://github.com/Szybet/watchy-scom - For lazy people 131 | - https://github.com/Szybet/Yatchy - :DDD 132 | 133 | ## Contributed / Other firmwares 134 | As the creators requested to be here, but I don't have any experience with them, but im good with providing a platform to share them further 135 | - https://github.com/jtolio/watchyflow/ - A new firmware. Main focus is currently on calendar viewing (Only Arduino IDE / CLI, no platformio, based loosly on default watchy firmware) 136 | 137 | # Some 3D printed cases 138 | - https://www.printables.com/model/745711-watchy-invader-remix - Reuben designed it from the Watchy discord server, thanks! Some users reported that it works with USB-C and micro usb. This case is really thick 139 | - https://www.printables.com/model/664145-watchy-10-usb-c-case-with-a-bigger-battery - By me, Szybet - for the Watchy 1.0 USB-C. You would need to adjust it for your new 2.0 version 140 | - https://www.printables.com/model/906093-watchy-flat-case - By me too, the flattest watchy, for the micro usb version 141 | - https://www.printables.com/model/503282-watchy-case-minty - Minty case by minty 142 | - https://www.printables.com/model/906117-watchy-kit-case - By me, slimmer minty version 143 | - https://makerworld.com/en/models/498091 - Slimmer stock version from [this](https://www.reddit.com/r/watchy/comments/1e75bzy/best_3d_printable_cases/) reddit post 144 | - https://github.com/Michal-Szczepaniak/watchy-case 145 | 146 | # FAQ 147 | Q: Can I trust the seller? Won't they scam me? 148 | 149 | A: ~~**I do not know.** Now I'm talking about the one seller I'm linking. I was talking to someone who knows what a schematic is ( That's rare too ). He was a human too so I'm happy with the service. Delivered without issues, device works without issues too. Many other people were very happy with their watch. They praised the seller for communication that it was better than SQFMI. When they changed to the 2.0 version from the USB-C one, the communication and tranfer was clear. No one was dissatisfied.~~ At this point so many people bought the device that there is no risk basically. But well, the crossed out text still is true 150 | 151 | # Contact and the community 152 | for any questions, you can create a github issue here or catch me on: 153 | - Because of the lack of moderation on the official watchy server, while also ~~banning random people without giving any reason~~ other reasons I don't feel comfortable with advertising it here, We created an alternative, a community drived discord server: *atchy community 154 | 155 | # Community mantained wiki 156 | Here it is: https://github.com/Szybet/InkWatchy/wiki/New-Watchy-user%3F 157 | -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/0-EB806.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/0-EB806.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/1f62d-02603.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/261d-23B11.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/2764-A3D25.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/36d10e1f0874970af106af4c3954e214-4CD21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/36d10e1f0874970af106af4c3954e214-4CD21.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/88b8eae1a58828373696aa77c31f259b-04962.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/88b8eae1a58828373696aa77c31f259b-04962.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/Screenshot_20240511_145609-1D83F.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/Screenshot_20240511_145609-1D83F.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/bd3eef18e0f6caa35d415c81c3e058c2-6C938.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/bd3eef18e0f6caa35d415c81c3e058c2-6C938.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/fd9716ee2ea9dff94eb1bec9a8bec322-3CC05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/fd9716ee2ea9dff94eb1bec9a8bec322-3CC05.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-400-E988B.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-400-E988B.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-500-0777F.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-500-0777F.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-600-CB411.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-600-CB411.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-700-891AC.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-700-891AC.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-800-D36B0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-italic-800-D36B0.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-400-1456D.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-400-1456D.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-500-89CE5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-500-89CE5.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-600-C1EA8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-600-C1EA8.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-700-1949A.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-700-1949A.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-800-58487.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/ggsans-normal-800-58487.woff2 -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/highlight.min-D8D27.js: -------------------------------------------------------------------------------- 1 | /*! highlight.js v9.15.6 | BSD3 License | git.io/hljslicense */ 2 | !function(e){var t="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):t&&(t.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return t.hljs}))}(function(n){var b=[],o=Object.keys,h={},p={},t=/^(no-?highlight|plain|text)$/i,m=/\blang(?:uage)?-([\w-]+)\b/i,r=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,a={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",relevance:"r",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},N="",v={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function y(e){return e.replace(/&/g,"&").replace(//g,">")}function f(e){return e.nodeName.toLowerCase()}function w(e,t){var r=e&&e.exec(t);return r&&0===r.index}function g(e){return t.test(e)}function u(e){var t,r={},a=Array.prototype.slice.call(arguments,1);for(t in e)r[t]=e[t];return a.forEach(function(e){for(t in e)r[t]=e[t]}),r}function _(e){var n=[];return function e(t,r){for(var a=t.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(n.push({event:"start",offset:r,node:a}),r=e(a,r),f(a).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:a}));return r}(e,0),n}function i(e){if(a&&!e.langApiRestored){for(var t in e.langApiRestored=!0,a)e[t]&&(e[a[t]]=e[t]);(e.c||[]).concat(e.v||[]).forEach(i)}}function E(s){function l(e){return e&&e.source||e}function c(e,t){return new RegExp(l(e),"m"+(s.cI?"i":"")+(t?"g":""))}!function t(r,e){if(!r.compiled){if(r.compiled=!0,r.k=r.k||r.bK,r.k){var a={},n=function(r,e){s.cI&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var t=e.split("|");a[t[0]]=[r,t[1]?Number(t[1]):1]})};"string"==typeof r.k?n("keyword",r.k):o(r.k).forEach(function(e){n(e,r.k[e])}),r.k=a}r.lR=c(r.l||/\w+/,!0),e&&(r.bK&&(r.b="\\b("+r.bK.split(" ").join("|")+")\\b"),r.b||(r.b=/\B|\b/),r.bR=c(r.b),r.endSameAsBegin&&(r.e=r.b),r.e||r.eW||(r.e=/\B|\b/),r.e&&(r.eR=c(r.e)),r.tE=l(r.e)||"",r.eW&&e.tE&&(r.tE+=(r.e?"|":"")+e.tE)),r.i&&(r.iR=c(r.i)),null==r.r&&(r.r=1),r.c||(r.c=[]),r.c=Array.prototype.concat.apply([],r.c.map(function(e){return(t="self"===e?r:e).v&&!t.cached_variants&&(t.cached_variants=t.v.map(function(e){return u(t,{v:null},e)})),t.cached_variants||t.eW&&[u(t)]||[t];var t})),r.c.forEach(function(e){t(e,r)}),r.starts&&t(r.starts,e);var i=r.c.map(function(e){return e.bK?"\\.?(?:"+e.b+")\\.?":e.b}).concat([r.tE,r.i]).map(l).filter(Boolean);r.t=i.length?c(function(e,t){for(var r=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,a=0,n="",i=0;i')+t+(r?"":N)}function l(){p+=null!=b.sL?function(){var e="string"==typeof b.sL;if(e&&!h[b.sL])return y(m);var t=e?k(b.sL,m,!0,i[b.sL]):x(m,b.sL.length?b.sL:void 0);return 0")+'"');return m+=t,t.length||1}var d=C(e);if(!d)throw new Error('Unknown language: "'+e+'"');E(d);var n,b=r||d,i={},p="";for(n=b;n!==d;n=n.parent)n.cN&&(p=o(n.cN,"",!0)+p);var m="",f=0;try{for(var s,g,_=0;b.t.lastIndex=_,s=b.t.exec(t);)g=a(t.substring(_,s.index),s[0]),_=s.index+g;for(a(t.substr(_)),n=b;n.parent;n=n.parent)n.cN&&(p+=N);return{r:f,value:p,language:e,top:b}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{r:0,value:y(t)};throw e}}function x(r,e){e=e||v.languages||o(h);var a={r:0,value:y(r)},n=a;return e.filter(C).filter(l).forEach(function(e){var t=k(e,r,!1);t.language=e,t.r>n.r&&(n=t),t.r>a.r&&(n=a,a=t)}),n.language&&(a.second_best=n),a}function M(e){return v.tabReplace||v.useBR?e.replace(r,function(e,t){return v.useBR&&"\n"===e?"
":v.tabReplace?t.replace(/\t/g,v.tabReplace):""}):e}function s(e){var t,r,a,n,i,s,c,o,l,u,d=function(e){var t,r,a,n,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",r=m.exec(i))return C(r[1])?r[1]:"no-highlight";for(t=0,a=(i=i.split(/\s+/)).length;t/g,"\n"):t=e,i=t.textContent,a=d?k(d,i,!0):x(i),(r=_(t)).length&&((n=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=a.value,a.value=function(e,t,r){var a=0,n="",i=[];function s(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function o(e){n+=""}function l(e){("start"===e.event?c:o)(e.node)}for(;e.length||t.length;){var u=s();if(n+=y(r.substring(a,u[0].offset)),a=u[0].offset,u===e){for(i.reverse().forEach(o);l(u.splice(0,1)[0]),(u=s())===e&&u.length&&u[0].offset===a;);i.reverse().forEach(c)}else"start"===u[0].event?i.push(u[0].node):i.pop(),l(u.splice(0,1)[0])}return n+y(r.substr(a))}(r,_(n),i)),a.value=M(a.value),e.innerHTML=a.value,e.className=(s=e.className,c=d,o=a.language,l=c?p[c]:o,u=[s.trim()],s.match(/\bhljs\b/)||u.push("hljs"),-1===s.indexOf(l)&&u.push(l),u.join(" ").trim()),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r}))}function c(){if(!c.called){c.called=!0;var e=document.querySelectorAll("pre code");b.forEach.call(e,s)}}function C(e){return e=(e||"").toLowerCase(),h[e]||h[p[e]]}function l(e){var t=C(e);return t&&!t.disableAutodetect}return n.highlight=k,n.highlightAuto=x,n.fixMarkup=M,n.highlightBlock=s,n.configure=function(e){v=u(v,e)},n.initHighlighting=c,n.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",c,!1),addEventListener("load",c,!1)},n.registerLanguage=function(t,e){var r=h[t]=e(n);i(r),r.aliases&&r.aliases.forEach(function(e){p[e]=t})},n.listLanguages=function(){return o(h)},n.getLanguage=C,n.autoDetection=l,n.inherit=u,n.IR=n.IDENT_RE="[a-zA-Z]\\w*",n.UIR=n.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",n.NR=n.NUMBER_RE="\\b\\d+(\\.\\d+)?",n.CNR=n.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",n.BNR=n.BINARY_NUMBER_RE="\\b(0b[01]+)",n.RSR=n.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",n.BE=n.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",r:0},n.ASM=n.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[n.BE]},n.QSM=n.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[n.BE]},n.PWM=n.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},n.C=n.COMMENT=function(e,t,r){var a=n.inherit({cN:"comment",b:e,e:t,c:[]},r||{});return a.c.push(n.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},n.CLCM=n.C_LINE_COMMENT_MODE=n.C("//","$"),n.CBCM=n.C_BLOCK_COMMENT_MODE=n.C("/\\*","\\*/"),n.HCM=n.HASH_COMMENT_MODE=n.C("#","$"),n.NM=n.NUMBER_MODE={cN:"number",b:n.NR,r:0},n.CNM=n.C_NUMBER_MODE={cN:"number",b:n.CNR,r:0},n.BNM=n.BINARY_NUMBER_MODE={cN:"number",b:n.BNR,r:0},n.CSSNM=n.CSS_NUMBER_MODE={cN:"number",b:n.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},n.RM=n.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[n.BE,{b:/\[/,e:/\]/,r:0,c:[n.BE]}]},n.TM=n.TITLE_MODE={cN:"title",b:n.IR,r:0},n.UTM=n.UNDERSCORE_TITLE_MODE={cN:"title",b:n.UIR,r:0},n.METHOD_GUARD={b:"\\.\\s*"+n.UIR,r:0},n.registerLanguage("apache",function(e){var t={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",t]},t,e.QSM]}}],i:/\S/}}),n.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,r,{cN:"string",b:/'/,e:/'/},t]}}),n.registerLanguage("coffeescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},r="[A-Za-z$_][0-9A-Za-z$_]*",a={cN:"subst",b:/#\{/,e:/}/,k:t},n=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,a]},{b:/"/,e:/"/,c:[e.BE,a]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[a,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];a.c=n;var i=e.inherit(e.TM,{b:r}),s="(\\(.*\\))?\\s*\\B[-=]>",c={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(n)}]};return{aliases:["coffee","cson","iced"],k:t,i:/\/\*/,c:n.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,c]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[c]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),n.registerLanguage("cpp",function(e){var t={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/},{b:"'\\\\?.",e:"'",i:"."}]},a={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},e.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},i=e.IR+"\\s*\\(",s={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},c=[t,e.CLCM,e.CBCM,a,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:s,i:"",k:s,c:["self",t]},{b:e.IR+"::",k:s},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:s,c:c.concat([{b:/\(/,e:/\)/,k:s,c:c.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+e.IR+"[\\*&\\s]+)+"+i,rB:!0,e:/[{;=]/,eE:!0,k:s,i:/[^\w\s\*&]/,c:[{b:i,rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:s,r:0,c:[e.CLCM,e.CBCM,r,a,t,{b:/\(/,e:/\)/,k:s,r:0,c:["self",e.CLCM,e.CBCM,r,a,t]}]},e.CLCM,e.CBCM,n]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:r,k:s}}}),n.registerLanguage("cs",function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},a={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},n=e.inherit(a,{i:/\n/}),i={cN:"subst",b:"{",e:"}",k:t},s=e.inherit(i,{i:/\n/}),c={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,s]},o={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},i]},l=e.inherit(o,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},s]});i.c=[o,c,a,e.ASM,e.QSM,r,e.CBCM],s.c=[l,c,n,e.ASM,e.QSM,r,e.inherit(e.CBCM,{i:/\n/})];var u={v:[o,c,a,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:t,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"\x3c!--|--\x3e"},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},u,r,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:t,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,r:0,c:[u,r,e.CBCM]},e.CLCM,e.CBCM]}]}}),n.registerLanguage("css",function(e){var t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}}),n.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}}),n.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}}),n.registerLanguage("ini",function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_\.-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}}),n.registerLanguage("java",function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",r={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r:0};return{aliases:["jsp"],k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"meta",b:"@[A-Za-z]+"}]}}),n.registerLanguage("javascript",function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:r,c:[]},i={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,i,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:r,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}}),n.registerLanguage("json",function(e){var t={literal:"true false null"},r=[e.QSM,e.CNM],a={e:",",eW:!0,eE:!0,c:r,k:t},n={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(a,{b:/:/})],i:"\\S"},i={b:"\\[",e:"\\]",c:[e.inherit(a)],i:"\\S"};return r.splice(r.length,0,n,i),{c:r,k:t,i:"\\S"}}),n.registerLanguage("makefile",function(e){var t={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},e.C("\x3c!--","--\x3e",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}}),n.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}|\t)",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}}),n.registerLanguage("nginx",function(e){var t={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},r={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,t],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[t]},{cN:"regexp",c:[e.BE,t],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},t]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:r}],r:0}],i:"[^\\s\\}]"}}),n.registerLanguage("objectivec",function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,r="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},l:t,i:""}]}]},{cN:"class",b:"("+r.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:r,l:t,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}}),n.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},a={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],s=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),a,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=s,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:a.c=s}}),n.registerLanguage("php",function(e){var t={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},r={cN:"meta",b:/<\?(php)?|\?>/},a={cN:"string",c:[e.BE,r],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},n={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[r]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},r,{cN:"keyword",b:/\$this\b/},t,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",t,e.CBCM,a,n]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},a,n]}}),n.registerLanguage("properties",function(e){var t="[ \\t\\f]*",r="("+t+"[:=]"+t+"|[ \\t\\f]+)",a="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",n="([^\\\\:= \\t\\f\\n]|\\\\.)+",i={e:r,r:0,starts:{cN:"string",e:/$/,r:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[e.C("^\\s*[!#]","$"),{b:a+r,rB:!0,c:[{cN:"attr",b:a,endsParent:!0,r:0}],starts:i},{b:n+r,rB:!0,r:0,c:[{cN:"meta",b:n,endsParent:!0,r:0}],starts:i},{cN:"attr",r:0,b:n+t+"$"}]}}),n.registerLanguage("python",function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},r={cN:"meta",b:/^(>>>|\.\.\.) /},a={cN:"subst",b:/\{/,e:/\}/,k:t,i:/#/},n={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,r],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,r,a]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,r,a]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,a]},e.ASM,e.QSM]},i={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},s={cN:"params",b:/\(/,e:/\)/,c:["self",r,i,n]};return a.c=[n,i,r],{aliases:["py","gyp","ipython"],k:t,i:/(<\/|->|\?)|=>/,c:[r,i,n,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,s,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}}),n.registerLanguage("ruby",function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},a={cN:"doctag",b:"@[A-Za-z]+"},n={b:"#<",e:">"},i=[e.C("#","$",{c:[a]}),e.C("^\\=begin","^\\=end",{c:[a],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},c={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},o={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},l=[c,n,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(i)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:t}),o].concat(i)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[c,{b:t}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[n,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(i),r:0}].concat(i);s.c=l;var u=[{b:/^\s*=>/,starts:{e:"$",c:o.c=l}},{cN:"meta",b:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:i.concat(u).concat(l)}}),n.registerLanguage("shell",function(e){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}}),n.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}}),n}); -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/image-DC87A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/image-DC87A.png -------------------------------------------------------------------------------- /SQFMI-controversy-conversation/Watchy - Text Channels - general [804832183516266498] (after 2024-05-11).html_Files/solarized-dark.min-BA98F.css: -------------------------------------------------------------------------------- 1 | .hljs{display:block;overflow-x:auto;padding:.5em;background:#002b36;color:#839496}.hljs-comment,.hljs-quote{color:#586e75}.hljs-keyword,.hljs-selector-tag,.hljs-addition{color:#859900}.hljs-number,.hljs-string,.hljs-meta .hljs-meta-string,.hljs-literal,.hljs-doctag,.hljs-regexp{color:#2aa198}.hljs-title,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#268bd2}.hljs-attribute,.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-class .hljs-title,.hljs-type{color:#b58900}.hljs-symbol,.hljs-bullet,.hljs-subst,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-link{color:#cb4b16}.hljs-built_in,.hljs-deletion{color:#dc322f}.hljs-formula{background:#073642}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} -------------------------------------------------------------------------------- /Watchy 3.0 review.md: -------------------------------------------------------------------------------- 1 | ### Please read the whole text, as there were updates, some of the parts of this text are outdated (for purpuse to preserve how it was on the day 1 launch) 2 | 3 | ## Early review of the Watchy 3.0 - It's worse than bad. It's unacceptable. 4 | 5 | First, a bit of introduction. Watchy is an open source eink watch, with open hardware and software. I'm a hobby [developer](https://github.com/Szybet/InkWatchy) for that device and a member of the community of it (I'm not associated with SQFMI in any way). I have been maintaining a [list of resellers](https://github.com/Szybet/WatchySourcingHub) because SQFMI delayed the 3.0 version for almost 2 years saying it "Will be shipping next month"... Well that situation was pretty much cleared out, SQFMI officially allowed those resellers to "resell". Well I'm not here about that, more information about it is in the repo above. 6 | 7 | So the 3.0 version of the Watchy finally starts shipping to customers. I have been helping the first guy that received it to use it. Here is the story. His watch was not responding because he wanted to connect it to wifi. He tried to follow the official docs to troubleshoot it. And here is the second problem (apart from the endless delaying of shipping it). The docs are outdated at least 3 years, they don't work. They don't even work for the 2.0 watchy. That's not a problem I said, let's get the latest code for it... There is nothing, nothing is open sourced about it yet. We wanted to reflash the firmware, there is nothing. We wanted to look at the schematic to add support to my firmware, there is nothing... Customers have been waiting for 2 years and when the product arrives there is nothing what was promised. Let me say that again. Nothing. 8 | 9 | Okay, well let's try to restore the firmware that's on there, I suggested he restarts it with esptool but he went with disconnecting the battery. Here is the reason why I'm writing the post, this was the final straw. There are small SMD components next to the battery port, Obviously when trying to disconnect it they broke off, the watchy is broken. 10 | 11 | https://github.com/Szybet/WatchySourcingHub/blob/main/images/3.0/20240629_223535.png 12 | 13 | https://github.com/Szybet/WatchySourcingHub/blob/main/images/3.0/20240629_223446.png 14 | 15 | This is a fatal design. 16 | 17 | Do you know the best thing? In the 2.0 version there was empty space instead, so they thought of it then, not now. 18 | 19 | https://github.com/Szybet/WatchySourcingHub/blob/main/images/3.0/2.0connector.png 20 | 21 | For people who will say they needed to put it there because of lack of space, um no, the PCB is pretty empty in my standards of PCB designing 22 | 23 | https://github.com/Szybet/WatchySourcingHub/blob/main/images/3.0/pcb.png 24 | 25 | I have only noticed it now, but they shipped that guy one button with the wrong size... 26 | 27 | Further more, the 3.0 improvements are laughable compared to 2.0, with the increase in price. It's 100$ while the 2.0 is 50$ (Well I know the 2.0 currently is a reseller from china), I hope. I really do hope that the case costed so much, as for the improvements: 28 | - CPU is more modern, it uses less components on the PCB. So in theory the thing should be cheaper. No USB-UART IC, no RTC IC. Well it will be a bit more power efficient for sure 29 | - Buttons look more solid but it's still the same flawed design. The previous ones broke off too often. 30 | - Screen is said to be a modern version. It's said it's faster, well no - Only full screen refreshes are, but my eye can't see a difference. 31 | - They added a TVS protection diode on the USB traces. Yay, at least that 32 | 33 | There may be more, but there is no spec or anything, so just my eye is guessing. 34 | 35 | And to other issues with SQFMI: 36 | - There has been almost no communication with the community, only a few times on discord (In 2 years!). I'm not even sure all people know who ordered that they will receive the 3.0 version instead of the 2.0. It's supposed to be better, but not really 37 | - Recently people started getting banned from the discord server (without explanations), the watchy subreddit is now restricted, I can't post this post there. I could a month ago (Update: Reddit closed the subreddit, I contacted the mod and he reopened it... classic reddit) 38 | - The software SQFMI provides is horribly basic, that's not an issue because I and others similar to me exist who write third party software, but for the 3.0 we can't. Also the software he wrote made the device not responding in the first place... 39 | 40 | And that's the basics, I didn't even go deeper in the problems I described. 41 | 42 | With all of that in mind, even if some issues that will be resolved in the future, others can't. Do you support such behavior? I don't, I will vote with my wallet and just order the 2.0 watchy from aliexpress, It's fine enough. 43 | 44 | Why am I writing this? I just can't handle it anymore, I wanted the watchy to succeed, to be an awesome device. That's why I spend hundreds of hours to write a fully custom firmware for it, to help people in the community with their tech problems (mostly solved by not using the SQFMI provided software) but SQFMI does everything wrong. I'm sick of it. 45 | 46 | But the biggest problem, the summary of it all? No communication, zero, none. None... Almost all of those issues would be solved with a bit of communication, a tiny tiny bit... 47 | 48 | # Some further updates 49 | I will not edit the text above with new informations, as this was the information I gathered when the first watchy v3 users appeared, so, new info: 50 | - The cpu is esp32s3 so 8Mb of flash and usb otg support (the circuitry is not designed to support it, will be harder to use). Well the flash storage is cool 51 | - Another customer received an broken screen. This is weird, packaging of the screen was pretty good and when I ordered 3 of those screens they came in a horrible packaging and survived. I hope this is a one off incident. Also the count of watchy 3.0 users who received something wrong / broken is now 2 out of 4. This number means nothing, but it's weird that it happened? 52 | - Another person with a broken button... Ugh 53 | 54 | Cry, acceptance, laugh 55 | 56 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/d3046384-e13b-45aa-88eb-fcad600b6a9a) 57 | 58 | Finally some communication! 59 | 60 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/a4fdd57a-6b59-410d-9ea4-d8ee5830d3ad) 61 | 62 | So software & firmware has been addressed finally :D 63 | 64 | 2 users tried the software with the same not working result... lol... 65 | 66 | Ok firmware maybe fixed, WatchyGSR and I with InkWatchy also added support for it, looks good 67 | 68 | Another person did it :( 69 | 70 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/2b3c2950-f6dd-4a48-828b-fc650f5e0e1b) 71 | 72 | # TLDR after 4 months 73 | - **There is only the schematic, no PCB source files, which is lying to customers.** 74 | - Official software and docs were made to barely work. 75 | - There were a few users who had wrong resistor values on the charging IC. It got hot really fast, could probably burn down or even start a fire if the users weren't paying attention 76 | - Nothing what was promised was delivered, like platformio support 77 | - I and another user took some measurments of the 32khz quartz used to track time, in short, they cheaped out on it and time will drift like in the previous 2 versions. The device would need to cost 1$ more for it to track time reasonable well. 78 | - Zero communication with the community 79 | - The official software has some comments about [Chinese timezone](https://github.com/sqfmi/Watchy/blob/9f3accdb076b567c2e34b0347f292effcde04a6f/src/Watchy32KRTC.cpp#L44) for no reason at all. My **wild theory** is it was fully outsourced, as SQFMI was originally originated and was placed in the USA 80 | - the OSHWA certification is outdated, it's for the version 1 while we are on version 3 81 | - Many knocked out components because of the location of them near the battery connector, many damaged watchies... 82 | 83 | Yea, I'm tired of this 84 | 85 | Community provides support for it, Inkwatchy and watchy gsr support it (but writing the software for it clearly indicates there was no second thought put into it) 86 | 87 | Well that's rough for sure, do what you want 88 | 89 | # Old TLDR 90 | I think all the problems were resolved (as much as they could be) 91 | 92 | So, a bit of a TLDR: 93 | - Software, Hardware, Docs situation cleared out (Soon available). It's a bit sad it wasn't there on day 1, or maybe even before production has begun (I would catch that smd components - connector flaw...) but hey, better sooner than never 94 | - The flaw I described should be covered under warranty and will be addressed in the docs to make sure everyone is careful. Good, very good. SQFMI also points out that the device will work anyway without those components, I disagree, it's more complicated than that and we both are right, it's a bit of a lottery. I would advise users to use a bit of hot glue (not crazy hot) on those components or add more solder to them (If you can do that) to make them more solid 95 | - Apologized for the lack of communication 96 | - Took into account some of the suggestions the community made 97 | - The banned user I was taking into example was reported by many users, Idk what he did so wrong to take a ban, not the nicest dude I have met but an OK one, whatever at least not random baning complaining random customers. Still the user should have received warnings first 98 | 99 | Also a big thing, at least for me: He didn't banned me and we had a nice conversation about it all, which is suprising. This post was very negative about him, further more I advertised watchy clones, Took it out to other social media platforms, I create a "competitor" device https://github.com/Szybet/Yatchy (It's not commercial just my hobby project leave me alone, but it can be received as a competitor I understand that) 100 | 101 | But well, I achieved what I wanted: change, action - I don't know if it's because of me or just a coincidence, the point being that the wheels started rolling for a better future, we will see. Everything I have done or said is, in my opinion for the best of the future of the Watchy project, I love this thing, and it was dying off so I needed to take action. 102 | 103 | The conversation I had with SQFMI for further details: 104 | 105 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/0571ab69-5eb4-4b36-97a7-37746447775e) 106 | 107 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/b9b3f77f-1917-46fc-894f-88b9cb7a39ac) 108 | 109 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/0d0765cc-38c8-4825-9daa-7a0937c942dd) 110 | 111 | ![image](https://github.com/Szybet/WatchySourcingHub/assets/53944559/6479f063-9e7e-401c-8ba1-9e38b0e78ff1) 112 | -------------------------------------------------------------------------------- /images/3.0/2.0connector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/3.0/2.0connector.png -------------------------------------------------------------------------------- /images/3.0/20240629_223446.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/3.0/20240629_223446.png -------------------------------------------------------------------------------- /images/3.0/20240629_223535.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/3.0/20240629_223535.png -------------------------------------------------------------------------------- /images/3.0/pcb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/3.0/pcb.png -------------------------------------------------------------------------------- /images/imgc1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/imgc1.jpg -------------------------------------------------------------------------------- /images/imgc2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/imgc2.jpg -------------------------------------------------------------------------------- /images/imgc3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/imgc3.jpg -------------------------------------------------------------------------------- /images/imgc4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/imgc4.jpg -------------------------------------------------------------------------------- /images/imgc5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/imgc5.jpg -------------------------------------------------------------------------------- /images/old-micro-usb/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/old-micro-usb/img1.jpg -------------------------------------------------------------------------------- /images/old-micro-usb/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/old-micro-usb/img2.jpg -------------------------------------------------------------------------------- /images/old-micro-usb/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/old-micro-usb/img3.jpg -------------------------------------------------------------------------------- /images/old-micro-usb/img5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/old-micro-usb/img5.jpg -------------------------------------------------------------------------------- /images/old-micro-usb/img6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/images/old-micro-usb/img6.jpg -------------------------------------------------------------------------------- /watchy-usbc/README.md: -------------------------------------------------------------------------------- 1 | # E-Watch-FOSS 2 | A clone of the Watchy with USB-C, sold mostly on aliexpress. Now thanks to the kindness of the creator and my relentless requests - it's open source 3 | 4 | read all the text before making the decission. The FAQ is the most important 5 | 6 |

7 | 8 | 9 | 10 |

11 | I'm only describing the one that has 01Space on it. 12 |

13 | I have received the schematics and the permission to share it ( I know it's a open source fork, but I'm kind anyway ) from the oryginal creator: 14 | - Here is their Github repo for the "E-watch". There is nothing really there ;) - https://github.com/01Space/E-Watch 15 | - Their aliexpress store: https://pl.aliexpress.com/store/912632218 16 | - And the watchy on their store: https://pl.aliexpress.com/item/1005005209927318.html ( It has the least ammount of description among other stores, but it's the original creator ;o ) 17 | 18 | # Why?... 19 | A few thousand people ordered on crowdfund and now their shippind date is shifting and shifting again and again. On mouser 1.5k people are waiting. Pi hut doesn't ship anywhere really ( Like couldn't you just don't ship the battery, we could buy it locally... ). Obviously I don't blame anyone. I understand the problems with supply chains in the recent years. But it's bad as you see to get it. That's why i ~~harrased ;)~~ asked all sellers of this clone for half a month to release the schematics, until I found the original creator. Is it moral to use this clone? To my quick google search, yes until the schematic is shared + taking in mind all the issues in actually getting the oryginal watchy... 20 | 21 | # Further notes that you should know before you buy: 22 | - The schematic is 1:1 with the oryginal watchy, the creator said that the only diffrence is usb-c. We have the board view so it's not a problem 23 | - The components are not original but they work without issues. Looking for datasheets took a while but they are here: https://szybet.github.io/E-Watch-FOSS/hardware/watchy_usbc_chips_and_datasheets.html 24 | - It has a blue charging LED, cool 25 | - The screen is glued in. It seems that the screen could be detached with a heat gun - I haven't tried, won't risk it 26 | - The buttons are horrible to press without the case and they all sound and behave diffrently. With a case where the click area is bigger it's fine 27 | - No confirmation yet if it would fit inside original watchy cases. Grab the dxf file and compare dimensions I quess 28 | - It's the V1 of the watchy so the battery life will be worse 29 | - The battery that cames with the device could be better, get a replacement 30 | - PCBDOC can be imported into kicad without any converters 31 | - The PCB is solid, no risk of breaking it where the screws go 32 | - GSR firmware works fine so I think it's fully compatible. Here is a list of firmwares I like: 33 | - https://github.com/GuruSR/Watchy_GSR 34 | - https://github.com/Szybet/Watchy_Hard_Firmware - Mine ;p 35 | - And here are some I didn't tested but people sended over when I asked on the discord server 36 | - https://github.com/Prokuon/watchy-starfield - Looks awesome 37 | - https://github.com/OregonJunco/Watchytchi 38 | - https://github.com/NiklasNeugebauer/minty-os 39 | 40 | # 3D printed case 41 | I have created a 3D printed case for it which uses a bigger battery than other cases 42 | 43 | ![image](https://github.com/Szybet/E-Watch-FOSS/assets/53944559/471df6ef-0f95-44ad-8bc7-2b0d6ecb533a) 44 | 45 | Here posted on printables: 46 | 47 | https://www.printables.com/model/664145-watchy-usb-c-case-with-a-bigger-battery 48 | 49 | **It's designed to be printed with 0.25 Nozzle** 50 | # FAQ 51 | Q: Can I trust the seller? Won't they scam me? 52 | 53 | A: **I do not know.** The one seller I'm linking provided me with the schematics, I was talking to someone who knows what a schematic is ( That's rare too ). He was a human too so I'm happy with the service. Delivered without issues, device works without issues too. 54 | 55 | ### But 56 | They changed the photos and the description of the item. They say now it's 2.0 version with microusb so idk? **Your decission, your risk. I'm only happy with my device and sharing my happiness. Nothing more**. I asked the seller about this ~~now I'm waiting~~ 57 | 58 | I received an answer 59 | - The watchy has been updated to 2.0, now the battery life lasts longer 60 | - Buttons are better quality 61 | - the strap has been replaced with a better one too 62 | - But it's micro usb again which means it should better fit original cases ( its still not official if it fits in official cases, but propably ) 63 | 64 | We will see. I will archive this page and make a similar one for the 2.0 Version 65 | -------------------------------------------------------------------------------- /watchy-usbc/hardware/WATCHY.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/hardware/WATCHY.xlsx -------------------------------------------------------------------------------- /watchy-usbc/hardware/WatchySchematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/hardware/WatchySchematic.pdf -------------------------------------------------------------------------------- /watchy-usbc/hardware/watchy-1.0.PcbDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/hardware/watchy-1.0.PcbDoc -------------------------------------------------------------------------------- /watchy-usbc/hardware/watchy_altium_export.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/hardware/watchy_altium_export.zip -------------------------------------------------------------------------------- /watchy-usbc/hardware/屏幕截图 2021-12-09 192203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/hardware/屏幕截图 2021-12-09 192203.png -------------------------------------------------------------------------------- /watchy-usbc/images/01space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/images/01space.png -------------------------------------------------------------------------------- /watchy-usbc/images/case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/images/case.png -------------------------------------------------------------------------------- /watchy-usbc/images/pcb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/images/pcb.png -------------------------------------------------------------------------------- /watchy-usbc/original-program/README.md: -------------------------------------------------------------------------------- 1 | Here is the stock program dumped from the esp32 like that 2 | ``` 3 | esptool.py --port /dev/ttyACM1 --baud 921600 read_flash 0 0x400000 backup.bin 4 | ``` 5 | can be flashed using: 6 | ``` 7 | esptool.py --chip esp32 --port /dev/ttyACM1 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0x0 backup.bin 8 | ``` 9 | Here is an awesome video on this topic: https://youtu.be/2GwzbBn7uRw 10 | 11 | \+ Reset the esp: 12 | ``` 13 | esptool.py --after hard_reset chip_id 14 | ``` 15 | -------------------------------------------------------------------------------- /watchy-usbc/original-program/backup.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Szybet/WatchySourcingHub/34b1aedff6156cab7993fa3bcb54e7009f56b5c0/watchy-usbc/original-program/backup.bin --------------------------------------------------------------------------------