{"componentChunkName":"component---gatsby-theme-spaceout-src-templates-article-template-tsx","path":"/flipper-postman-esp32s2","result":{"pageContext":{"article":{"id":"def77ef4-19fa-52e0-aeee-70b25b5d28ca","slug":"/flipper-postman-esp32s2","secret":false,"title":"Flipper postman esp32s2","author":"Luke Celitan","date":"November 10th, 2024","dateForSEO":"2024-11-10T00:00:00.000Z","timeToRead":4,"excerpt":"Custom flash software for Flipper Dev Board exposing the WIFI and HTTP methods via serial (UART) that can be picked up by the flipper zero device for building web enabled applications.","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Flipper postman esp32s2\",\n  \"excerpt\": \"Custom flash software for Flipper Dev Board exposing the WIFI and HTTP methods via serial (UART) that can be picked up by the flipper zero device for building web enabled applications.\",\n  \"date\": \"2024-11-10T00:00:00.000Z\",\n  \"hero\": \"foldersCover.jpg\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Productivity\",\n  \"category\": \"Project\",\n  \"tech\": [\"C\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"project-overview\"\n  }, \"Project Overview\"), mdx(\"p\", null, \"Hey there, fellow tinkerers and security enthusiasts! SpaceGhost here, and I\\u2019ve got an exciting project to share with you. My recent adventures with Flipper device programming have led me down another fascinating rabbit hole. This time, I\\u2019ve embarked on a mission to bring network capabilities to the Flipper Zero by developing custom firmware for the official ESP32 chip board.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1280px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"42.578125%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAACQAwCdASoUAAkAPtFUo0uoJKMhsAgBABoJZwDImB7A9pIx27MAAP72EzwBsBK2dDkVYXITtKAnRPgPfbSEjF0SSWKtnbbnyTLVuY2NsFHQ4gAA')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/92290f2c14160787412489f9ff0a712d/4b075/schematics.webp 1280w\"],\n    \"sizes\": \"(max-width: 1280px) 100vw, 1280px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/92290f2c14160787412489f9ff0a712d/4b075/schematics.webp 1280w\"],\n    \"sizes\": \"(max-width: 1280px) 100vw, 1280px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/92290f2c14160787412489f9ff0a712d/4b075/schematics.webp\",\n    \"alt\": \"Flipper Dev Board\",\n    \"title\": \"Flipper Dev Board\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \"), \"\\n\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Image source: \", mdx(\"a\", {\n    parentName: \"em\",\n    \"href\": \"https://docs.flipper.net/development/hardware/wifi-developer-board/schematics\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://docs.flipper.net/development/hardware/wifi-developer-board/schematics\"))), mdx(\"h2\", {\n    \"id\": \"the-power-of-esp32\"\n  }, \"The Power of ESP32\"), mdx(\"p\", null, \"Before we dive into the project details, let\\u2019s take a moment to appreciate the ESP32 chip. Developed by Espressif Systems, this little powerhouse has become a favorite in the IoT and embedded systems world. Here\\u2019s a quick rundown of its impressive capabilities:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Dual-core processor running at up to 240 MHz\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Wi-Fi and Bluetooth connectivity\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Robust security features\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A plethora of peripherals and interfaces\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Low power modes for energy-efficient operation\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Extensive development support\")), mdx(\"p\", null, \"With these features, the ESP32 is perfectly suited for our goal of enhancing the Flipper Zero\\u2019s capabilities.\"), mdx(\"h2\", {\n    \"id\": \"project-flipper-postman-esp32-s2\"\n  }, \"Project: Flipper Postman ESP32-S2\"), mdx(\"p\", null, \"Our project, which I\\u2019ve dubbed \\u201CFlipper Postman ESP32-S2,\\u201D aims to create custom flash software for the Flipper Dev Board. This software exposes WiFi and HTTP methods via serial (UART), allowing the Flipper Zero to pick them up and build web-enabled applications.\"), mdx(\"h3\", {\n    \"id\": \"key-features\"\n  }, \"Key Features\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"WiFi network management (connect, disconnect, list networks)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"HTTP requests (GET, POST, PATCH, STREAM)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Custom HTTP request builder\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"UDP communication\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"LED indicators for various states\")), mdx(\"h3\", {\n    \"id\": \"how-it-works\"\n  }, \"How It Works\"), mdx(\"p\", null, \"The custom firmware acts as a bridge between the Flipper Zero and the internet. Here\\u2019s a simplified workflow:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Flash the custom firmware onto the ESP32-S2 board.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Connect the board to the Flipper Zero.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use UART commands to control WiFi connections and make HTTP requests.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The ESP32-S2 handles the network operations and returns the results to the Flipper Zero.\")), mdx(\"p\", null, \"This setup essentially turns your Flipper Zero into a pocket-sized web client, opening up a world of possibilities for security testing, IoT experimentation, and more.\"), mdx(\"h2\", {\n    \"id\": \"potential-applications\"\n  }, \"Potential Applications\"), mdx(\"p\", null, \"With this new capability, we can explore several exciting avenues:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"WiFi Penetration Testing\"), \": Create portable tools for network scanning, deauthentication attacks, and security audits.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"IoT Device Emulation\"), \": Simulate various IoT devices to test network security or set up honeypots.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Remote Control and Monitoring\"), \": Implement web interfaces or mobile apps to control your Flipper Zero remotely.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Mesh Networking\"), \": Develop networks of multiple Flipper devices for distributed tasks or long-range communication.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Signal Processing and SDR\"), \": Implement basic software-defined radio functionalities or create spectrum analyzers.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Network Protocol Analysis\"), \": Build portable packet sniffers, protocol analyzers, and debugging tools.\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Environmental Sensing\"), \": Integrate various sensors for portable weather stations or environmental monitoring.\"))), mdx(\"h2\", {\n    \"id\": \"project-information\"\n  }, \"Project Information\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/flipper-postman-esp32s2\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Github repo\")), mdx(\"p\", null, \"Custom flash software for Flipper Dev Board exposing the WIFI and HTTP methods via serial (UART) that can be picked up by the flipper zero device for building web enabled applications.\"), mdx(\"h2\", {\n    \"id\": \"features\"\n  }, \"Features\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Connect / Disonnect to WiFi networks\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"List available WiFi networks\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Make HTTP GET, POST, PATCH and STREAM requests\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Custom HTTP request builder with all the methods GET, POST, HEAD, DELETE, PATCH, PUT, attach custom headers (Authorization), show and hide response headers\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Stream serial responses for large payloads.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"UDP communication, send commands and messages over the network via UDP packets\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"LED indicators for different states\")), mdx(\"h2\", {\n    \"id\": \"udp--network-communication\"\n  }, \"UDP / Network communication\"), mdx(\"p\", null, \"After you establish wifi the board listens to UDP packets you can use mobile apps (with TCP/UDP) or use cmd line tools like \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"echo -n \\\"GET https://api.spacexdata.com/v3/rockets\\\" | nc -u 192.168.0.115 1234\"), \".\"), mdx(\"p\", null, \"The board will transmit the local port and into the serial\"), mdx(\"p\", null, \"You can also send custom messages to the flipper, type MESSAGE: {your text} for transmitting whatever you want to your flipper device.\"), mdx(\"h2\", {\n    \"id\": \"flipper-zero-uart-terminal\"\n  }, \"Flipper Zero Uart Terminal\"), mdx(\"p\", null, \"You can use the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/cool4uma/UART_Terminal\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://github.com/cool4uma/UART_Terminal\"), \" to communicate directly with the board. You don\\u2019t have to write \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"https://\"), \" it will be auto added by the board.\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"/af0d09d1c03730a10a6c6f5d9351680d/flipper-uart-terminal.gif\",\n    \"alt\": \"Flipper UART Terminal\"\n  })), mdx(\"h2\", {\n    \"id\": \"arduino-ide-serial-monitor\"\n  }, \"Arduino Ide Serial Monitor\"), mdx(\"p\", null, \"Communication via usb to flipperzero (GPIO->USB-UART Bridge) with Arduino Ide Serial Monitor\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"/5c5f39e655c45932a093b9de52a5fc6c/flipper-board-serial-monitor.gif\",\n    \"alt\": \"Arduino Ide SerialMonitor\"\n  })), mdx(\"h2\", {\n    \"id\": \"installation-build-from-source\"\n  }, \"Installation (Build from source)\"), mdx(\"ol\", {\n    \"start\": 0\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Git clone the project\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Install \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.arduino.cc/en/software\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Arduino IDE\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Arduino IDE -> Settings (Preferences)\")), mdx(\"p\", null, \"Copy and paste the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Wait for installation\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Arduino IDE -> Tools -> Board -> Board Manager -> look for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"esp32 by Expressif systems\"), \" and install\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Arduino IDE -> Tools -> Manage Libraries -> find ArduinoJSON package and install\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Arduino IDE -> Select Board -> choose esp32s2 dev board\")), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/cool4uma/UART_Terminal\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"UART Terminal Application\"), \". You can also connect flipper to your computer via usb cable then enter GPIO and enable the UART-USB Bridge to communicate directly to board via Arduino IDE Serial Monitor or \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://wiki.emacinc.com/wiki/Getting_Started_With_Minicom\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"minicom\"), \" cmd line program\"), mdx(\"ol\", {\n    \"start\": 7\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Set the SSID and password for the WiFi connection using the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SET_SSID\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SET_PASSWORD\"), \" commands.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Activate the WiFi connection using the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ACTIVATE_WIFI\"), \" command.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"GET\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"POST\"), \", or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"GET_STREAM\"), \" commands to make HTTP requests.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Build custom HTTP requests using the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"BUILD_HTTP_*\"), \" commands.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Execute custom HTTP requests using the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"EXECUTE_HTTP_CALL\"), \" command.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"?\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"HELP\"), \" commands to print help information.\")), mdx(\"h2\", {\n    \"id\": \"serial-api-documentation\"\n  }, \"SERIAL API Documentation\"), mdx(\"p\", null, \"This section provides detailed information about the available commands, their descriptions, arguments, responses, and response types. It also includes the possible serial responses that the receiver can expect.\"), mdx(\"h3\", {\n    \"id\": \"commands\"\n  }, \"Commands\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Command\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Arguments\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Response Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Response Description\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"VERSION\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Get board version\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"VERSION: <version>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_CONNECT <SSID> <password>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Connect to a WiFi network\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<SSID> <password>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_SSID: <SSID><br>WIFI_PASSWORD: <password><br>WIFI_CONNECT: Connecting to WiFi...\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_SET_SSID <ssid>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the SSID for WiFi connection\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<ssid>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_SSID: <ssid>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_SET_PASSWORD <password>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the password for WiFi connection\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<password>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_PASSWORD: <password>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_ACTIVATE\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Activate the WiFi connection\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_CONNECT: Connecting to WiFi...\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_DEACTIVATE\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Disconnect from the WiFi network\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_DISCONNECT: Wifi disconnected\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_LIST\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"List available WiFi networks\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_LIST: <list>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_STATUS\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Show WiFi status\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_STATUS: CONNECTED\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_STATUS: DISCONNECTED\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_GET_ACTIVE_SSID\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Get the name of the connected SSID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_GET_ACTIVE_SSID: <ssid>\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_GET_ACTIVE_SSID: Not connected\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"WIFI_GET_LOCAL_IP\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Get the local IP address\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<ip_address>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"GET <url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Make an HTTP GET request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"GET: <url><br>STATUS: <number><br>RESPONSE:<br><response><br>RESPONSE_END\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"GET_STREAM <url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Make an HTTP GET request and stream the response\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Stream\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"GET_STREAM: <url><br>STATUS: <number><br>STREAM: <br><streamed data><br>STREAM_END\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"FILE_STREAM <url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Direct stream, no messages\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<stream>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST <url> <json_payload>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Make an HTTP POST request with JSON payload\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<url> <json_payload>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST: <url><br>Payload: <json_payload><br>STATUS: <number><br>RESPONSE:<br><response><br>RESPONSE_END\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST_STREAM <url> <json_payload>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Make an HTTP POST request and stream the response\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<url> <json_payload>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Stream\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST_STREAM: <url><br>STATUS: <number><br>STREAM: <br><streamed data><br>STREAM_END\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_METHOD <method>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the HTTP method for custom request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<method>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_SET_METHOD: <method>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_URL <url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the URL for custom HTTP request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<url>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_URL: <url>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_HEADER <key:value>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Add a header to custom HTTP request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<key:value>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_ADD_HEADER: <key:value>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_PAYLOAD <payload>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the payload for custom HTTP request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<payload>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_SET_PAYLOAD: <payload>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"REMOVE_HTTP_HEADER <key>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Remove a header from custom HTTP request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<key>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_REMOVE_HEADER: <key>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"RESET_HTTP_CONFIG\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Reset custom HTTP request configuration\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_CONFIG_RESET: All configurations reset\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_SHOW_RESPONSE_HEADERS <true/false>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Show or hide HTTP response headers\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<true/false>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_BUILDER_SHOW_RESPONSE_HEADERS: <true/false>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_IMPLEMENTATION <STREAM/CALL>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set HTTP implementation type\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<STREAM/CALL>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_SET_IMPLEMENTATION: <STREAM/CALL>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"EXECUTE_HTTP_CALL\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Execute the custom HTTP request\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text/Stream\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Depends on implementation type\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"BUILD_HTTP_SHOW_CONFIG\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Show current HTTP configuration\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HTTP_BUILDER_CONFIG: <current configuration>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"MESSAGE_UDP <message> <remoteIP> <remotePort>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Send UDP message\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"<message> <remoteIP> <remotePort>\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"UDP message sent: <message><br>To IP: <remoteIP>, Port: <remotePort>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"?\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Print help information\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"Available Commands: <list of commands>\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"HELP\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Print help information\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"None\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"Available Commands: <list of commands>\"))))), mdx(\"h4\", {\n    \"id\": \"sending-commands\"\n  }, \"Sending Commands\"), mdx(\"p\", null, \"To set the SSID for the WiFi connection:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-plaintext\"\n  }, \"SET_SSID MyWiFiNetwork\\n\")), mdx(\"p\", null, \"To make an HTTP GET request:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-plaintext\"\n  }, \"GET https://api.example.com/data\\n\")), mdx(\"p\", null, \"To make an HTTP GET request and stream the response:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-plaintext\"\n  }, \"GET_STREAM https://api.example.com/data\\n\")), mdx(\"p\", null, \"To make an HTTP POST request with a JSON payload:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-plaintext\"\n  }, \"POST https://api.example.com/data {\\\"key\\\":\\\"value\\\"}\\n\")), mdx(\"h2\", {\n    \"id\": \"http-builder\"\n  }, \"HTTP Builder\"), mdx(\"p\", null, \"The firmware holds a http config you can manipulate and then execute the call.\\nCheck the flags in the table above.\"), mdx(\"h4\", {\n    \"id\": \"show-response-headers\"\n  }, \"Show response headers\"), mdx(\"p\", null, \"HTTP builder if set for showing headers will only transmit the headers from this list \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"\\\"Content-Type\\\", \\\"Content-Length\\\", \\\"Connection\\\",\\n                                \\\"Date\\\", \\\"Server\\\"\")), mdx(\"h4\", {\n    \"id\": \"simple-build-call\"\n  }, \"Simple Build call\"), mdx(\"p\", null, \"BUILD_HTTP_METHOD HEAD\\nBUILD_HTTP_URL \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://api.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://api.com/\"), \"\\nEXECUTE_HTTP_CALL\"), mdx(\"h4\", {\n    \"id\": \"receiving-responses\"\n  }, \"Receiving Responses\"), mdx(\"p\", null, \"When you send a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GET_STREAM\"), \" command, you will receive the following responses:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-plaintext\"\n  }, \"GET_STREAM request to: https://api.example.com/data\\nSTREAM:\\n<streamed data>\\nSTREAM_END\\n\")), mdx(\"p\", null, \"When you list available WiFi networks:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-plaintext\"\n  }, \"WIFI_LIST: Available WiFi networks: <list>\\n\")), mdx(\"h2\", {\n    \"id\": \"notes\"\n  }, \"Notes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The firmware currently follow strict redirects (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"HTTPC_STRICT_FOLLOW_REDIRECTS\"), \" - strict RFC2616, only requests using GET or HEAD methods will be redirected (using the same method), since the RFC requires end-user confirmation in other cases.)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Website crawls will print html only on smaller websites.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You should be able to stream files and images to flipper via stream (untested)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Simple get call will make a head call first and determine the possible size of the content, that will not always be possible, if the content length is unknown, firmware will choose safer stream method\")), mdx(\"h2\", {\n    \"id\": \"esp32-links\"\n  }, \"ESP32 links\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"ESP32 Arduino Setup \")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32s2/api-guides/tools/idf-tools.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"ESP-IDF\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"ESP32S2 Specs\"))), mdx(\"p\", null, \"Author: SpaceGhost @ spaceout.pl\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["C"],"category":"Project","appDescription":"Productivity","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQFA//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHKrn6kgNKgWQH/xAAaEAACAwEBAAAAAAAAAAAAAAABAgADEhEE/9oACAEBAAEFAkCknzrmFeSlsNyBRpq1WMoB/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAEDAQE/AUyv/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EAB4QAAEDBAMAAAAAAAAAAAAAAAABETECAxASIkGh/9oACAEBAAY/AuSshtbq2bpSRpyzEekH/8QAGxABAQEBAQADAAAAAAAAAAAAAREAIVFBcaH/2gAIAQEAAT8h/I5cxqQrycgSB5goPDxPnPRsNfm8u+3Qpd9WlTP/2gAMAwEAAgADAAAAEN/wAv/EABcRAAMBAAAAAAAAAAAAAAAAAAABEVH/2gAIAQMBAT8QjwrCso//xAAXEQADAQAAAAAAAAAAAAAAAAAAEVFh/9oACAECAQE/EGg0Gpof/8QAHhABAQACAgIDAAAAAAAAAAAAAREAMSFxQVFhkfD/2gAIAQEAAT8Qi+nsvxiOZBCE2JubmcU1CoPD6yZoSJg8OBx2rH6xqyD1kFVafhwajbyJ1zi0M7c//9k=","aspectRatio":1,"src":"/static/6025f105ff999e2f85121bab83df7fd7/58fe7/foldersCover.jpg","srcSet":"/static/6025f105ff999e2f85121bab83df7fd7/e0f30/foldersCover.jpg 236w,\n/static/6025f105ff999e2f85121bab83df7fd7/86afd/foldersCover.jpg 472w,\n/static/6025f105ff999e2f85121bab83df7fd7/58fe7/foldersCover.jpg 944w,\n/static/6025f105ff999e2f85121bab83df7fd7/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/6025f105ff999e2f85121bab83df7fd7/99fbb/foldersCover.webp","srcSetWebp":"/static/6025f105ff999e2f85121bab83df7fd7/77392/foldersCover.webp 236w,\n/static/6025f105ff999e2f85121bab83df7fd7/1f177/foldersCover.webp 472w,\n/static/6025f105ff999e2f85121bab83df7fd7/99fbb/foldersCover.webp 944w,\n/static/6025f105ff999e2f85121bab83df7fd7/9000d/foldersCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20200v200h52a241%20241%200%200064-2h2l1-2%205-4c6-3%206-5-1-5l-4-1h-3c-3%202-7%202-7%200l3-2%204-2c1-2-9%200-12%202l-5%203c-3%200-8%205-6%205l4-2%203-1%202%201c2%201%201%201-2%202-9%203-12%203-14%201l-4-1h-5l-2%201c-1-1-10%201-13%203l-4%202c-1-1%202-4%207-5l4-2h-8l-10%201c-2%201-5%202-7%201-4%200-5-1-2-1l4-1c0-1-12-1-23%201l-14%201-7%201-1-6v-6h12a732%20732%200%200126%204c0%202%200%202%201%201s9-3%209-1h4l7%201c1%201%200%201-5%201l-7-1h-6l3%201%2014%201c11%201%2015%201%2012-1-1-1%201-1%204-1%208%200%207-1%200-1l-6%201-2%201-3-1%201-1%203-1-1-1h-1l-3-1-14-2c-10-2-10-2-3-1l16%201a231%20231%200%200054-1c11%200%2012-1%203-3-7-2-12-2-41-2l-8-1-6-2c-3-1-3-1-1-2l1-1c-10%200-46-6-47-8h15c14%200%2018%200%2031%203%2016%203%2034%205%2034%203l-7-1-12-2-10-1c-10-1-11-1-4-2a76%2076%200%200126%201c1-1%2033-2%2035-1%201%200%201%201-1%201l18%201c18%200%2046%203%2048%204l-1%206c-3%206-3%206%201%206s10-2%2010-3h-1c-2%200-2%200-1-3%201-4%202-4%205-4s4%201%203%202h3c2%200%203%200%206%204l4%204%201-4%202-4v-1c-1-1-1-1%201-3l2-2h-2c-2-1-2-1%200-1l5-2c3-3%2010-3%2013%200l4%202h1c-1%202%205%200%208-2s5-2%2053-2a1733%201733%200%200158%203c-2%201-2%201%200%201l3-1c1-1%206-2%2017-2%2014%200%2015%200%2015%202%200%203-8%204-23%202-3-1-5%200-7%201l-7%204-4%202-3%201h-2l3%201%203%201h-8c0-3-30-2-34%200h16a433%20433%200%2000-50%207c-13%200-11%201%209%203%207%201%207%201%202%201l-12-1c-7-1-7%200-1%202a346%20346%200%200079-1%20547%20547%200%200024-1l4%201-6%201a421%20421%200%2000-40%203h-11l5%202%2017%201%2012%201c1%201%2021%204%2029%204l6%201V0H0v200m0%201c0%20110%200%20199%201%20198%200-2%201-2%206-2l8-1H1v-17h4c3%200%203%200%201-1l-2-1c2%200%201-2-1-2l-2-1%202-1c18%204%2025%204%2011%200l-6-2%205%201%2010%202%209%201%2010%201%2019%201c7-3-15-7-28-5l-12-1-7-2%206%201a15090%2015090%200%2000-14-4l-5-1v-84l2%202%202%203h38l-6-7c-11-11-21-24-28-35l-8-12V116c0-63-1-25-1%2085M131%2039l-3%201%203%202c3%203%203%207%202%2010-3%204%204%205%208%200%207-7-1-18-10-13m162%208c-12%206-8%2023%205%2023l7-1c1-2%201-2-2-2-4%200-5-2-6-7%200-6%202-10%205-11%202-1%202-1%200-2h-9M167%2069c-37%206-69%2024-90%2051-6%208-6%208%201%202l6-4%201-1%201-1%203-1%204-1%201-1c-1-1-1-1%200%200l2-1%203-1c1%201%203%200%206-1%204-3%206-2%202%201-5%203-4%204%202%201%205-2%207-2%207%201h2c3-1%204-1%202%202-1%201-1%201%202%201a509%20509%200%200119-3c-2%201-2%201%203%201l2%202%203-1c1-1%202%200%205%202l3%202%201-1c3%201%209-1%208-2h-9l-4-2%204-2c6-3%2015-3%2012-1s-2%203%200%202h2l2%201%203%201h2c2%200%203-2%201-2l-1-2%202%201h2c2%200%202%200%202%202l-2%201-2%202c0%203%203%204%205%202l1-1%201%201v1l1-1h2c2%202%205%202%203%200l1-1%201%201%203%203%202%201-6%203c-3-1-6%200-6%201l1%201h3c2%201%203%202%203%206l-1%206%201%202%201%201a321%20321%200%20002-17c1%200%203%205%203%208%200%202%200%202%202%201v3c-2%202%200%206%202%205l2%201c1%201%201%201%201-1s0-3-1-2c-2%201-3-2-1-5s0-7-3-7l-2-3-1-6v-1c1-2%202-1%202%201l1-1c2-4%207-6%209-3%201%202-3%206-6%206-2%200-2%200-1%201h3c2%200%202%200%201%201s-2%202-3%201l-2%201%201%202%203%201c0%202%200%202%201%201h2l-1%203%201%202c1%201%203%200%202-2h2c1%201%201%201%201-1-1-1%200-2%201-2h1l1%201h1l-1%202-1%201-1%201c-2%201-1%203%201%202l1-2c0-1%201-1%201%201%201%202%201%202%202%201l1-2v2h1v-3h-2c-1-2%203-7%206-7%205-1%204%205%200%207-2%201-2%201%201%201%203%201%205%204%203%204v2l3%201v5c0%204%200%205%201%204s1-1%202%201c0%202%200%202%201%201s1-1%201%201h2l1%202%202%203c1%202%201%202%201%200l2-2c2%200%203%202%201%202v2l1%202%201%201v1c-1%202-1%206%201%206v-4h1l2-1c2%200%202%200%201-1-1%200-2-1-1-2%201-3%203%201%202%205%200%203%200%203%202%202%203%200%203%200%202%202l1%202%201%202-2%202c-3%200-3%200-2%201%202%202%206%203%206%201l1-1%203-2h2l2%201h2v1l-1%201v7l-2%202-1%202v1l-2%201c-2%200-2%200-1%201l1%202h-1l-1%202%201%201h1l-1%201v3l2%205v5c0%202%200%202-2%201v-3c2%200%201-2-1-1-2%200-3%200-3-6l-4-9-1-3c0-4-4-9-6-9s-4-3-8-8h-1l5%209%203%204h1v-1l1-1c1%200%203%204%202%205l-1-1c0-1-2%200-2%202l1%201c1-1%203%202%202%203l2%202c2%201%204%203%203%205v3l2%201-1%202h-1l1%201%201%202%201%201%207%206v4l-3%202c-2%202-2%202%200%202%201%201%202%200%202-1l2-1c2%200%203-3%201-5-3-2-2-4%200-4%202-1%206%203%204%204v1l1%203v2l1%203v2h2l1%201c-3%204-2%209%201%208%202%200%202-1%201-2v-4c1-3%201-4-1-7a321%20321%200%2001-4-8l-4-9h1c0-1-1-2-3-2-1%200-2%200-1-1v-7l1-6c1-1%202-2%201-3%200-2%200-2%201-1%202%202%205%203%204%201l1-2h1l2%201c2-1%203%200%201%201l-2%202%202%202%201%201-1%201-2%201%201%201c2%200%201%204-2%205-2%200-2%200-1%201v2l-1%202%201%202c3-1%205%201%204%204l1%203%201-1h1l1-1v-1c3%200%206%204%206%207l1%202h1c0%202-3%202-4%200l-1-2c-2%200-3-2-2-3%201-2%200-3-2-1s-1%206%201%206c1%200%202%202%200%202-1%201-1%205%201%205v4l-1%202-2%203v2c2%200%202%201%201%203v8l-3%2013c-1%203-1%203%201%203l1-1v-3c2-3%202-3%202-12l3-9c2-1%202%201%201%203l-2%203v3c-1%202%200%205%203%205l-1%204c-1%202-2%204-1%205h-1l-1%201c1%201%200%202-1%203l-1%204-1%203h-2l-1-2-1-2c0-4-1-4-4%200l-3%202h-1c-1%200-2%201-1%202v3h2l2-3%202-3h2l-1%203-2%202%201%201c2-1%201%200-1%202l-4%201-2%201%2011%201h11l2-3A135%20135%200%2000167%2069m189%2017c-11%204-18%2017-15%2027%202%209%2011%2017%2019%2017%203%200%203%200%201-2-6-5-7-18-2-29%204-8%204-9%207-11l2-2h-12m-72%2090c-4%205-1%2011%204%209%204%200%205-2%205-5%201-6-5-8-9-4M94%20322l1%208h3c3%201%206-2%206-5%200-5-2-7-6-7-2%201-2%201-2-1l-1-3-1%208m51-7l-1%202c0%202%200%202-2%202-2-1-6%202-6%206%200%203%204%206%206%205h3l1-8c0-8%200-9-1-7m125%207l1%208%201-3c0-3%200-3%203-3s7-3%207-5-4-5-8-5h-4v8m-222-3c-2%200-2%201-2%208l1%208%201-3c0-2%200-2%202-2%202%201%206-2%206-5s-3-7-5-7l-3%201m13%200h-3c-1%200-2%2014%200%2016l1-3c0-2%200-2%202-2%204%201%206-1%206-5%200-5-3-8-6-6m47%201c-4%203-1%2011%203%2011%202%200%205-4%205-6%200-6-5-9-8-5m263%2054l-19%203-18%203-3%201%203%201c3%201%201%201-8%201a229%20229%200%2000-22%201c-3%200-3%200%202%201h13l13-1h21a406%20406%200%200125-4h-21c-3-1%2016-2%2023-2%207%201%2020%200%2020-1l-3-1c-10%201-18%200-17-1%200-1-8-2-9-1m-225%2012l-4%201-4%202-5%201c-4%201-12%206-11%207l1%202c-1%201%200%201%202%201%203%200%204-1%207-3l5-4c2-1%202-1%201-2v-1l2%201c1%201%209-3%209-4l-3-1m83%202l3%203%206%203%206%203%204%201-6-1-13-2-5-2c-4%200-2%202%203%205%204%202%205%202%2027%202h24l-5-2-15-4a750%20750%200%2001-29-6m19%202a263%20263%200%200030%208l24%202h19l-9-2-18-2c-9%200-13-1-29-5l-17-1'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQFA//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHKrn6kgNKgWQH/xAAaEAACAwEBAAAAAAAAAAAAAAABAgADEhEE/9oACAEBAAEFAkCknzrmFeSlsNyBRpq1WMoB/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAEDAQE/AUyv/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EAB4QAAEDBAMAAAAAAAAAAAAAAAABETECAxASIkGh/9oACAEBAAY/AuSshtbq2bpSRpyzEekH/8QAGxABAQEBAQADAAAAAAAAAAAAAREAIVFBcaH/2gAIAQEAAT8h/I5cxqQrycgSB5goPDxPnPRsNfm8u+3Qpd9WlTP/2gAMAwEAAgADAAAAEN/wAv/EABcRAAMBAAAAAAAAAAAAAAAAAAABEVH/2gAIAQMBAT8QjwrCso//xAAXEQADAQAAAAAAAAAAAAAAAAAAEVFh/9oACAECAQE/EGg0Gpof/8QAHhABAQACAgIDAAAAAAAAAAAAAREAMSFxQVFhkfD/2gAIAQEAAT8Qi+nsvxiOZBCE2JubmcU1CoPD6yZoSJg8OBx2rH6xqyD1kFVafhwajbyJ1zi0M7c//9k=","aspectRatio":1,"src":"/static/6025f105ff999e2f85121bab83df7fd7/1dc0b/foldersCover.jpg","srcSet":"/static/6025f105ff999e2f85121bab83df7fd7/3a5ce/foldersCover.jpg 163w,\n/static/6025f105ff999e2f85121bab83df7fd7/05730/foldersCover.jpg 327w,\n/static/6025f105ff999e2f85121bab83df7fd7/1dc0b/foldersCover.jpg 653w,\n/static/6025f105ff999e2f85121bab83df7fd7/f72c7/foldersCover.jpg 980w,\n/static/6025f105ff999e2f85121bab83df7fd7/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/6025f105ff999e2f85121bab83df7fd7/0acdf/foldersCover.webp","srcSetWebp":"/static/6025f105ff999e2f85121bab83df7fd7/ac59e/foldersCover.webp 163w,\n/static/6025f105ff999e2f85121bab83df7fd7/7660b/foldersCover.webp 327w,\n/static/6025f105ff999e2f85121bab83df7fd7/0acdf/foldersCover.webp 653w,\n/static/6025f105ff999e2f85121bab83df7fd7/75470/foldersCover.webp 980w,\n/static/6025f105ff999e2f85121bab83df7fd7/9000d/foldersCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20200v200h52a241%20241%200%200064-2h2l1-2%205-4c6-3%206-5-1-5l-4-1h-3c-3%202-7%202-7%200l3-2%204-2c1-2-9%200-12%202l-5%203c-3%200-8%205-6%205l4-2%203-1%202%201c2%201%201%201-2%202-9%203-12%203-14%201l-4-1h-5l-2%201c-1-1-10%201-13%203l-4%202c-1-1%202-4%207-5l4-2h-8l-10%201c-2%201-5%202-7%201-4%200-5-1-2-1l4-1c0-1-12-1-23%201l-14%201-7%201-1-6v-6h12a732%20732%200%200126%204c0%202%200%202%201%201s9-3%209-1h4l7%201c1%201%200%201-5%201l-7-1h-6l3%201%2014%201c11%201%2015%201%2012-1-1-1%201-1%204-1%208%200%207-1%200-1l-6%201-2%201-3-1%201-1%203-1-1-1h-1l-3-1-14-2c-10-2-10-2-3-1l16%201a231%20231%200%200054-1c11%200%2012-1%203-3-7-2-12-2-41-2l-8-1-6-2c-3-1-3-1-1-2l1-1c-10%200-46-6-47-8h15c14%200%2018%200%2031%203%2016%203%2034%205%2034%203l-7-1-12-2-10-1c-10-1-11-1-4-2a76%2076%200%200126%201c1-1%2033-2%2035-1%201%200%201%201-1%201l18%201c18%200%2046%203%2048%204l-1%206c-3%206-3%206%201%206s10-2%2010-3h-1c-2%200-2%200-1-3%201-4%202-4%205-4s4%201%203%202h3c2%200%203%200%206%204l4%204%201-4%202-4v-1c-1-1-1-1%201-3l2-2h-2c-2-1-2-1%200-1l5-2c3-3%2010-3%2013%200l4%202h1c-1%202%205%200%208-2s5-2%2053-2a1733%201733%200%200158%203c-2%201-2%201%200%201l3-1c1-1%206-2%2017-2%2014%200%2015%200%2015%202%200%203-8%204-23%202-3-1-5%200-7%201l-7%204-4%202-3%201h-2l3%201%203%201h-8c0-3-30-2-34%200h16a433%20433%200%2000-50%207c-13%200-11%201%209%203%207%201%207%201%202%201l-12-1c-7-1-7%200-1%202a346%20346%200%200079-1%20547%20547%200%200024-1l4%201-6%201a421%20421%200%2000-40%203h-11l5%202%2017%201%2012%201c1%201%2021%204%2029%204l6%201V0H0v200m0%201c0%20110%200%20199%201%20198%200-2%201-2%206-2l8-1H1v-17h4c3%200%203%200%201-1l-2-1c2%200%201-2-1-2l-2-1%202-1c18%204%2025%204%2011%200l-6-2%205%201%2010%202%209%201%2010%201%2019%201c7-3-15-7-28-5l-12-1-7-2%206%201a15090%2015090%200%2000-14-4l-5-1v-84l2%202%202%203h38l-6-7c-11-11-21-24-28-35l-8-12V116c0-63-1-25-1%2085M131%2039l-3%201%203%202c3%203%203%207%202%2010-3%204%204%205%208%200%207-7-1-18-10-13m162%208c-12%206-8%2023%205%2023l7-1c1-2%201-2-2-2-4%200-5-2-6-7%200-6%202-10%205-11%202-1%202-1%200-2h-9M167%2069c-37%206-69%2024-90%2051-6%208-6%208%201%202l6-4%201-1%201-1%203-1%204-1%201-1c-1-1-1-1%200%200l2-1%203-1c1%201%203%200%206-1%204-3%206-2%202%201-5%203-4%204%202%201%205-2%207-2%207%201h2c3-1%204-1%202%202-1%201-1%201%202%201a509%20509%200%200119-3c-2%201-2%201%203%201l2%202%203-1c1-1%202%200%205%202l3%202%201-1c3%201%209-1%208-2h-9l-4-2%204-2c6-3%2015-3%2012-1s-2%203%200%202h2l2%201%203%201h2c2%200%203-2%201-2l-1-2%202%201h2c2%200%202%200%202%202l-2%201-2%202c0%203%203%204%205%202l1-1%201%201v1l1-1h2c2%202%205%202%203%200l1-1%201%201%203%203%202%201-6%203c-3-1-6%200-6%201l1%201h3c2%201%203%202%203%206l-1%206%201%202%201%201a321%20321%200%20002-17c1%200%203%205%203%208%200%202%200%202%202%201v3c-2%202%200%206%202%205l2%201c1%201%201%201%201-1s0-3-1-2c-2%201-3-2-1-5s0-7-3-7l-2-3-1-6v-1c1-2%202-1%202%201l1-1c2-4%207-6%209-3%201%202-3%206-6%206-2%200-2%200-1%201h3c2%200%202%200%201%201s-2%202-3%201l-2%201%201%202%203%201c0%202%200%202%201%201h2l-1%203%201%202c1%201%203%200%202-2h2c1%201%201%201%201-1-1-1%200-2%201-2h1l1%201h1l-1%202-1%201-1%201c-2%201-1%203%201%202l1-2c0-1%201-1%201%201%201%202%201%202%202%201l1-2v2h1v-3h-2c-1-2%203-7%206-7%205-1%204%205%200%207-2%201-2%201%201%201%203%201%205%204%203%204v2l3%201v5c0%204%200%205%201%204s1-1%202%201c0%202%200%202%201%201s1-1%201%201h2l1%202%202%203c1%202%201%202%201%200l2-2c2%200%203%202%201%202v2l1%202%201%201v1c-1%202-1%206%201%206v-4h1l2-1c2%200%202%200%201-1-1%200-2-1-1-2%201-3%203%201%202%205%200%203%200%203%202%202%203%200%203%200%202%202l1%202%201%202-2%202c-3%200-3%200-2%201%202%202%206%203%206%201l1-1%203-2h2l2%201h2v1l-1%201v7l-2%202-1%202v1l-2%201c-2%200-2%200-1%201l1%202h-1l-1%202%201%201h1l-1%201v3l2%205v5c0%202%200%202-2%201v-3c2%200%201-2-1-1-2%200-3%200-3-6l-4-9-1-3c0-4-4-9-6-9s-4-3-8-8h-1l5%209%203%204h1v-1l1-1c1%200%203%204%202%205l-1-1c0-1-2%200-2%202l1%201c1-1%203%202%202%203l2%202c2%201%204%203%203%205v3l2%201-1%202h-1l1%201%201%202%201%201%207%206v4l-3%202c-2%202-2%202%200%202%201%201%202%200%202-1l2-1c2%200%203-3%201-5-3-2-2-4%200-4%202-1%206%203%204%204v1l1%203v2l1%203v2h2l1%201c-3%204-2%209%201%208%202%200%202-1%201-2v-4c1-3%201-4-1-7a321%20321%200%2001-4-8l-4-9h1c0-1-1-2-3-2-1%200-2%200-1-1v-7l1-6c1-1%202-2%201-3%200-2%200-2%201-1%202%202%205%203%204%201l1-2h1l2%201c2-1%203%200%201%201l-2%202%202%202%201%201-1%201-2%201%201%201c2%200%201%204-2%205-2%200-2%200-1%201v2l-1%202%201%202c3-1%205%201%204%204l1%203%201-1h1l1-1v-1c3%200%206%204%206%207l1%202h1c0%202-3%202-4%200l-1-2c-2%200-3-2-2-3%201-2%200-3-2-1s-1%206%201%206c1%200%202%202%200%202-1%201-1%205%201%205v4l-1%202-2%203v2c2%200%202%201%201%203v8l-3%2013c-1%203-1%203%201%203l1-1v-3c2-3%202-3%202-12l3-9c2-1%202%201%201%203l-2%203v3c-1%202%200%205%203%205l-1%204c-1%202-2%204-1%205h-1l-1%201c1%201%200%202-1%203l-1%204-1%203h-2l-1-2-1-2c0-4-1-4-4%200l-3%202h-1c-1%200-2%201-1%202v3h2l2-3%202-3h2l-1%203-2%202%201%201c2-1%201%200-1%202l-4%201-2%201%2011%201h11l2-3A135%20135%200%2000167%2069m189%2017c-11%204-18%2017-15%2027%202%209%2011%2017%2019%2017%203%200%203%200%201-2-6-5-7-18-2-29%204-8%204-9%207-11l2-2h-12m-72%2090c-4%205-1%2011%204%209%204%200%205-2%205-5%201-6-5-8-9-4M94%20322l1%208h3c3%201%206-2%206-5%200-5-2-7-6-7-2%201-2%201-2-1l-1-3-1%208m51-7l-1%202c0%202%200%202-2%202-2-1-6%202-6%206%200%203%204%206%206%205h3l1-8c0-8%200-9-1-7m125%207l1%208%201-3c0-3%200-3%203-3s7-3%207-5-4-5-8-5h-4v8m-222-3c-2%200-2%201-2%208l1%208%201-3c0-2%200-2%202-2%202%201%206-2%206-5s-3-7-5-7l-3%201m13%200h-3c-1%200-2%2014%200%2016l1-3c0-2%200-2%202-2%204%201%206-1%206-5%200-5-3-8-6-6m47%201c-4%203-1%2011%203%2011%202%200%205-4%205-6%200-6-5-9-8-5m263%2054l-19%203-18%203-3%201%203%201c3%201%201%201-8%201a229%20229%200%2000-22%201c-3%200-3%200%202%201h13l13-1h21a406%20406%200%200125-4h-21c-3-1%2016-2%2023-2%207%201%2020%200%2020-1l-3-1c-10%201-18%200-17-1%200-1-8-2-9-1m-225%2012l-4%201-4%202-5%201c-4%201-12%206-11%207l1%202c-1%201%200%201%202%201%203%200%204-1%207-3l5-4c2-1%202-1%201-2v-1l2%201c1%201%209-3%209-4l-3-1m83%202l3%203%206%203%206%203%204%201-6-1-13-2-5-2c-4%200-2%202%203%205%204%202%205%202%2027%202h24l-5-2-15-4a750%20750%200%2001-29-6m19%202a263%20263%200%200030%208l24%202h19l-9-2-18-2c-9%200-13-1-29-5l-17-1'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQFA//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHKrn6kgNKgWQH/xAAaEAACAwEBAAAAAAAAAAAAAAABAgADEhEE/9oACAEBAAEFAkCknzrmFeSlsNyBRpq1WMoB/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEQ/9oACAEDAQE/AUyv/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EAB4QAAEDBAMAAAAAAAAAAAAAAAABETECAxASIkGh/9oACAEBAAY/AuSshtbq2bpSRpyzEekH/8QAGxABAQEBAQADAAAAAAAAAAAAAREAIVFBcaH/2gAIAQEAAT8h/I5cxqQrycgSB5goPDxPnPRsNfm8u+3Qpd9WlTP/2gAMAwEAAgADAAAAEN/wAv/EABcRAAMBAAAAAAAAAAAAAAAAAAABEVH/2gAIAQMBAT8QjwrCso//xAAXEQADAQAAAAAAAAAAAAAAAAAAEVFh/9oACAECAQE/EGg0Gpof/8QAHhABAQACAgIDAAAAAAAAAAAAAREAMSFxQVFhkfD/2gAIAQEAAT8Qi+nsvxiOZBCE2JubmcU1CoPD6yZoSJg8OBx2rH6xqyD1kFVafhwajbyJ1zi0M7c//9k=","aspectRatio":1,"src":"/static/6025f105ff999e2f85121bab83df7fd7/eaa58/foldersCover.jpg","srcSet":"/static/6025f105ff999e2f85121bab83df7fd7/5a3ee/foldersCover.jpg 114w,\n/static/6025f105ff999e2f85121bab83df7fd7/41f8f/foldersCover.jpg 229w,\n/static/6025f105ff999e2f85121bab83df7fd7/eaa58/foldersCover.jpg 457w,\n/static/6025f105ff999e2f85121bab83df7fd7/c309b/foldersCover.jpg 686w,\n/static/6025f105ff999e2f85121bab83df7fd7/e3008/foldersCover.jpg 914w,\n/static/6025f105ff999e2f85121bab83df7fd7/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/6025f105ff999e2f85121bab83df7fd7/15384/foldersCover.webp","srcSetWebp":"/static/6025f105ff999e2f85121bab83df7fd7/31fce/foldersCover.webp 114w,\n/static/6025f105ff999e2f85121bab83df7fd7/e3e25/foldersCover.webp 229w,\n/static/6025f105ff999e2f85121bab83df7fd7/15384/foldersCover.webp 457w,\n/static/6025f105ff999e2f85121bab83df7fd7/0258d/foldersCover.webp 686w,\n/static/6025f105ff999e2f85121bab83df7fd7/64ea2/foldersCover.webp 914w,\n/static/6025f105ff999e2f85121bab83df7fd7/9000d/foldersCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20200v200h52a241%20241%200%200064-2h2l1-2%205-4c6-3%206-5-1-5l-4-1h-3c-3%202-7%202-7%200l3-2%204-2c1-2-9%200-12%202l-5%203c-3%200-8%205-6%205l4-2%203-1%202%201c2%201%201%201-2%202-9%203-12%203-14%201l-4-1h-5l-2%201c-1-1-10%201-13%203l-4%202c-1-1%202-4%207-5l4-2h-8l-10%201c-2%201-5%202-7%201-4%200-5-1-2-1l4-1c0-1-12-1-23%201l-14%201-7%201-1-6v-6h12a732%20732%200%200126%204c0%202%200%202%201%201s9-3%209-1h4l7%201c1%201%200%201-5%201l-7-1h-6l3%201%2014%201c11%201%2015%201%2012-1-1-1%201-1%204-1%208%200%207-1%200-1l-6%201-2%201-3-1%201-1%203-1-1-1h-1l-3-1-14-2c-10-2-10-2-3-1l16%201a231%20231%200%200054-1c11%200%2012-1%203-3-7-2-12-2-41-2l-8-1-6-2c-3-1-3-1-1-2l1-1c-10%200-46-6-47-8h15c14%200%2018%200%2031%203%2016%203%2034%205%2034%203l-7-1-12-2-10-1c-10-1-11-1-4-2a76%2076%200%200126%201c1-1%2033-2%2035-1%201%200%201%201-1%201l18%201c18%200%2046%203%2048%204l-1%206c-3%206-3%206%201%206s10-2%2010-3h-1c-2%200-2%200-1-3%201-4%202-4%205-4s4%201%203%202h3c2%200%203%200%206%204l4%204%201-4%202-4v-1c-1-1-1-1%201-3l2-2h-2c-2-1-2-1%200-1l5-2c3-3%2010-3%2013%200l4%202h1c-1%202%205%200%208-2s5-2%2053-2a1733%201733%200%200158%203c-2%201-2%201%200%201l3-1c1-1%206-2%2017-2%2014%200%2015%200%2015%202%200%203-8%204-23%202-3-1-5%200-7%201l-7%204-4%202-3%201h-2l3%201%203%201h-8c0-3-30-2-34%200h16a433%20433%200%2000-50%207c-13%200-11%201%209%203%207%201%207%201%202%201l-12-1c-7-1-7%200-1%202a346%20346%200%200079-1%20547%20547%200%200024-1l4%201-6%201a421%20421%200%2000-40%203h-11l5%202%2017%201%2012%201c1%201%2021%204%2029%204l6%201V0H0v200m0%201c0%20110%200%20199%201%20198%200-2%201-2%206-2l8-1H1v-17h4c3%200%203%200%201-1l-2-1c2%200%201-2-1-2l-2-1%202-1c18%204%2025%204%2011%200l-6-2%205%201%2010%202%209%201%2010%201%2019%201c7-3-15-7-28-5l-12-1-7-2%206%201a15090%2015090%200%2000-14-4l-5-1v-84l2%202%202%203h38l-6-7c-11-11-21-24-28-35l-8-12V116c0-63-1-25-1%2085M131%2039l-3%201%203%202c3%203%203%207%202%2010-3%204%204%205%208%200%207-7-1-18-10-13m162%208c-12%206-8%2023%205%2023l7-1c1-2%201-2-2-2-4%200-5-2-6-7%200-6%202-10%205-11%202-1%202-1%200-2h-9M167%2069c-37%206-69%2024-90%2051-6%208-6%208%201%202l6-4%201-1%201-1%203-1%204-1%201-1c-1-1-1-1%200%200l2-1%203-1c1%201%203%200%206-1%204-3%206-2%202%201-5%203-4%204%202%201%205-2%207-2%207%201h2c3-1%204-1%202%202-1%201-1%201%202%201a509%20509%200%200119-3c-2%201-2%201%203%201l2%202%203-1c1-1%202%200%205%202l3%202%201-1c3%201%209-1%208-2h-9l-4-2%204-2c6-3%2015-3%2012-1s-2%203%200%202h2l2%201%203%201h2c2%200%203-2%201-2l-1-2%202%201h2c2%200%202%200%202%202l-2%201-2%202c0%203%203%204%205%202l1-1%201%201v1l1-1h2c2%202%205%202%203%200l1-1%201%201%203%203%202%201-6%203c-3-1-6%200-6%201l1%201h3c2%201%203%202%203%206l-1%206%201%202%201%201a321%20321%200%20002-17c1%200%203%205%203%208%200%202%200%202%202%201v3c-2%202%200%206%202%205l2%201c1%201%201%201%201-1s0-3-1-2c-2%201-3-2-1-5s0-7-3-7l-2-3-1-6v-1c1-2%202-1%202%201l1-1c2-4%207-6%209-3%201%202-3%206-6%206-2%200-2%200-1%201h3c2%200%202%200%201%201s-2%202-3%201l-2%201%201%202%203%201c0%202%200%202%201%201h2l-1%203%201%202c1%201%203%200%202-2h2c1%201%201%201%201-1-1-1%200-2%201-2h1l1%201h1l-1%202-1%201-1%201c-2%201-1%203%201%202l1-2c0-1%201-1%201%201%201%202%201%202%202%201l1-2v2h1v-3h-2c-1-2%203-7%206-7%205-1%204%205%200%207-2%201-2%201%201%201%203%201%205%204%203%204v2l3%201v5c0%204%200%205%201%204s1-1%202%201c0%202%200%202%201%201s1-1%201%201h2l1%202%202%203c1%202%201%202%201%200l2-2c2%200%203%202%201%202v2l1%202%201%201v1c-1%202-1%206%201%206v-4h1l2-1c2%200%202%200%201-1-1%200-2-1-1-2%201-3%203%201%202%205%200%203%200%203%202%202%203%200%203%200%202%202l1%202%201%202-2%202c-3%200-3%200-2%201%202%202%206%203%206%201l1-1%203-2h2l2%201h2v1l-1%201v7l-2%202-1%202v1l-2%201c-2%200-2%200-1%201l1%202h-1l-1%202%201%201h1l-1%201v3l2%205v5c0%202%200%202-2%201v-3c2%200%201-2-1-1-2%200-3%200-3-6l-4-9-1-3c0-4-4-9-6-9s-4-3-8-8h-1l5%209%203%204h1v-1l1-1c1%200%203%204%202%205l-1-1c0-1-2%200-2%202l1%201c1-1%203%202%202%203l2%202c2%201%204%203%203%205v3l2%201-1%202h-1l1%201%201%202%201%201%207%206v4l-3%202c-2%202-2%202%200%202%201%201%202%200%202-1l2-1c2%200%203-3%201-5-3-2-2-4%200-4%202-1%206%203%204%204v1l1%203v2l1%203v2h2l1%201c-3%204-2%209%201%208%202%200%202-1%201-2v-4c1-3%201-4-1-7a321%20321%200%2001-4-8l-4-9h1c0-1-1-2-3-2-1%200-2%200-1-1v-7l1-6c1-1%202-2%201-3%200-2%200-2%201-1%202%202%205%203%204%201l1-2h1l2%201c2-1%203%200%201%201l-2%202%202%202%201%201-1%201-2%201%201%201c2%200%201%204-2%205-2%200-2%200-1%201v2l-1%202%201%202c3-1%205%201%204%204l1%203%201-1h1l1-1v-1c3%200%206%204%206%207l1%202h1c0%202-3%202-4%200l-1-2c-2%200-3-2-2-3%201-2%200-3-2-1s-1%206%201%206c1%200%202%202%200%202-1%201-1%205%201%205v4l-1%202-2%203v2c2%200%202%201%201%203v8l-3%2013c-1%203-1%203%201%203l1-1v-3c2-3%202-3%202-12l3-9c2-1%202%201%201%203l-2%203v3c-1%202%200%205%203%205l-1%204c-1%202-2%204-1%205h-1l-1%201c1%201%200%202-1%203l-1%204-1%203h-2l-1-2-1-2c0-4-1-4-4%200l-3%202h-1c-1%200-2%201-1%202v3h2l2-3%202-3h2l-1%203-2%202%201%201c2-1%201%200-1%202l-4%201-2%201%2011%201h11l2-3A135%20135%200%2000167%2069m189%2017c-11%204-18%2017-15%2027%202%209%2011%2017%2019%2017%203%200%203%200%201-2-6-5-7-18-2-29%204-8%204-9%207-11l2-2h-12m-72%2090c-4%205-1%2011%204%209%204%200%205-2%205-5%201-6-5-8-9-4M94%20322l1%208h3c3%201%206-2%206-5%200-5-2-7-6-7-2%201-2%201-2-1l-1-3-1%208m51-7l-1%202c0%202%200%202-2%202-2-1-6%202-6%206%200%203%204%206%206%205h3l1-8c0-8%200-9-1-7m125%207l1%208%201-3c0-3%200-3%203-3s7-3%207-5-4-5-8-5h-4v8m-222-3c-2%200-2%201-2%208l1%208%201-3c0-2%200-2%202-2%202%201%206-2%206-5s-3-7-5-7l-3%201m13%200h-3c-1%200-2%2014%200%2016l1-3c0-2%200-2%202-2%204%201%206-1%206-5%200-5-3-8-6-6m47%201c-4%203-1%2011%203%2011%202%200%205-4%205-6%200-6-5-9-8-5m263%2054l-19%203-18%203-3%201%203%201c3%201%201%201-8%201a229%20229%200%2000-22%201c-3%200-3%200%202%201h13l13-1h21a406%20406%200%200125-4h-21c-3-1%2016-2%2023-2%207%201%2020%200%2020-1l-3-1c-10%201-18%200-17-1%200-1-8-2-9-1m-225%2012l-4%201-4%202-5%201c-4%201-12%206-11%207l1%202c-1%201%200%201%202%201%203%200%204-1%207-3l5-4c2-1%202-1%201-2v-1l2%201c1%201%209-3%209-4l-3-1m83%202l3%203%206%203%206%203%204%201-6-1-13-2-5-2c-4%200-2%202%203%205%204%202%205%202%2027%202h24l-5-2-15-4a750%20750%200%2001-29-6m19%202a263%20263%200%200030%208l24%202h19l-9-2-18-2c-9%200-13-1-29-5l-17-1'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/6025f105ff999e2f85121bab83df7fd7/0ff54/foldersCover.jpg"}}},"authors":[{"authorsPage":true,"bio":"Hello everybody 👋 !  My name is Luke and I am the creator and owner of the spaceout.pl. Personally, I am a big geek with huge love for Star Wars, Marvel and DC comic books, Funk and 80s music. I take most of my design inspiration from offline experiences like going to art museums, galleries and working with other creative people on various projects. I also work with various Activist and NGO groups as a pro-bono designer and developer.\n","id":"f69d27c7-7f9a-5fbd-b05d-1a324fd10c0a","name":"Luke Celitan","featured":true,"social":[{"url":"https://www.facebook.com/spaceout/"},{"url":"https://twitter.com/spaceout.pl"},{"url":"https://www.instagram.com/spaceout.pl/"},{"url":"https://huggingface.co/MassivDash"},{"url":"https://bsky.app/profile/lukecelitan.bsky.social"}],"slug":"/authors/luke-celitan","avatar":{"small":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/afb2b/spaceghost.jpg 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/03612/spaceghost.jpg 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/58718/spaceghost.webp 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/ed320/spaceghost.webp 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 50px) 100vw, 50px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"medium":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/59538/spaceghost.jpg 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fd013/spaceghost.jpg 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/d9b14/spaceghost.webp 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/6b183/spaceghost.webp 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 100px) 100vw, 100px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"large":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/a2637/spaceghost.jpg 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/15203/spaceghost.jpg 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/2d087/spaceghost.webp 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/29d87/spaceghost.webp 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 305px) 100vw, 305px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"}}}],"basePath":"/","tech":["C"],"category":"Project","slug":"/flipper-postman-esp32s2","id":"def77ef4-19fa-52e0-aeee-70b25b5d28ca","title":"Flipper postman esp32s2","appDescription":"Productivity","mailchimp":false,"next":[{"id":"9ea83f87-b55b-5eb0-b267-2d3874723c40","slug":"/flipper-time-tracker","secret":false,"title":"Flipper Time Tracker","author":"Luke Celitan","date":"June 6th, 2024","dateForSEO":"2024-06-06T00:00:00.000Z","timeToRead":2,"excerpt":"Time tracking app for Flipperzero","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Flipper Time Tracker\",\n  \"excerpt\": \"Time tracking app for Flipperzero\",\n  \"date\": \"2024-06-06T00:00:00.000Z\",\n  \"hero\": \"foldersCover.jpg\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Productivity\",\n  \"category\": \"Project\",\n  \"tech\": [\"C\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"As a security and app developer enthusiast, I\\u2019ve been using Flipper Zero for\\nsome time now. For those who don\\u2019t know, Flipper Zero is a versatile multitool\\ndevice designed for hardware and RF enthusiasts, security researchers, and\\nhobbyists. It\\u2019s a portable gadget that can interact with various digital systems\\nand wireless protocols.\"), mdx(\"p\", null, \"Flipper Zero has a range of capabilities, including reading and emulating RFID\\ncards, interacting with NFC devices, transmitting and receiving radio signals,\\nand communicating with infrared devices. It features a compact design with a\\nmonochrome display, navigation buttons, and an SD card slot for expandable\\nstorage. The device runs on open-source firmware, which is one of its most\\nexciting aspects.\"), mdx(\"p\", null, \"The cool thing about Flipper Zero is that you can write custom applications for\\nit, which is exactly what I\\u2019ve been trying to do. Recently, Flipper allowed Rust\\nlanguage execution, and I jumped into the possibility of writing an application\\nin Rust for Flipper. However, I faced some challenges. The unsafe clusters and\\nthe way Rust is built made it difficult for me to write the apps the way I\\nwanted.\"), mdx(\"p\", null, \"That\\u2019s why I decided to implement the same idea directly in C programming\\nlanguage, often referred to as the father of all languages. These endeavors\\nended up with the creation of Flipper Time Tracker.\"), mdx(\"p\", null, \"Flipper Time Tracker is an application for the Flipper Zero device that allows\\nthe user to track multiple tasks simultaneously. The application uses a CSV file\\nto store and handle task data, which can be easily exported to Excel or similar\\nsoftware for further analysis. This approach also allows for tracking task time\\nin the background or even when the device is switched off!\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"/e3f31c665b039830cb91370036978638/demo.gif\",\n    \"alt\": \"Demo\"\n  })), mdx(\"h2\", {\n    \"id\": \"features\"\n  }, \"Features\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"track multiple tasks at the same\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"start / stop the task at will, resume tracking when needed.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"mark task as complete\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"edit task details (name, description, price per hour)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"quick continue last used task\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"task running with timer counter view\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"you can download your csv file from \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"apps_data/trackerflipx/data.csv\"))), mdx(\"p\", null, \"This project showcases the potential of Flipper Zero as a platform for custom\\napplication development. The active community of developers and users who create\\nand share applications and modifications for Flipper Zero has been a great\\nsource of inspiration and support throughout this project. It\\u2019s exciting to see\\nhow this compact device can be transformed into a practical tool for time\\nmanagement and productivity.\"), mdx(\"p\", null, \"Checkout this\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/flipper-tracker/blob/main/docs/development.md\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"document\"), \"\\non how to prepare your environment and development for Flipper Zero device.\"), mdx(\"h2\", {\n    \"id\": \"installation\"\n  }, \"Installation\"), mdx(\"p\", null, \"To install the Flipper Time Tracker on your Flipper Zero device, you can use the\\nofficial Flipper Zero App store or download the .fap file directly from the\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/flipper-tracker/releases/tag/v1.0.3\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"github release page\")));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["C"],"category":"Project","appDescription":"Productivity","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQDAv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABjno4zcVA3vJYgf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMQExESIv/aAAgBAQABBQKtgyYNbGanmsxnIXgdLfL/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABgRAAMBAQAAAAAAAAAAAAAAAAASUQEC/9oACAECAQE/AWyjZRcgvMP/xAAcEAAABgMAAAAAAAAAAAAAAAAAAQIQETEhQWH/2gAIAQEABj8CUhV2T05dExoYMf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWGx/9oACAEBAAE/IUCpNr8nU7MswJQ9h2rHu4VgWRuOIhuOVssgoT//2gAMAwEAAgADAAAAEBTQPv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCKKquv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAGGR/9oACAECAQE/EJtTJkmP/8QAIBABAAICAgEFAAAAAAAAAAAAAREhADFBYVFxgZGh4f/aAAgBAQABPxAIneNz7jWWKmHmojrAOQX0wZqZREeCOTESGFJ2/GFqAuy8UEkWW4kNfODkJ8xtDpwbrQKr6z//2Q==","aspectRatio":1,"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/58fe7/foldersCover.jpg","srcSet":"/static/eaed1349ae375d7d26cff434c9b9f2c2/e0f30/foldersCover.jpg 236w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/86afd/foldersCover.jpg 472w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/58fe7/foldersCover.jpg 944w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/99fbb/foldersCover.webp","srcSetWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/77392/foldersCover.webp 236w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/1f177/foldersCover.webp 472w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/99fbb/foldersCover.webp 944w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/9000d/foldersCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%203c0%202%200%203%202%203v1c-3%202-2%204%200%203%202%200%202-1%202-4-1-3%201-3%204%201%201%201%201%201-1%201H5l2%201%202%204c0%202%200%202-1%201-2-3-3-2-2%200%200%203-3%205-5%204l1%202c2%202%202%203%202%206-1%203-2%205-2%203l-1-1c-2%202-1%20188%200%20188%201-1%203%200%204%201l2%203v-4c0-3%201-3%201-2%200%203%202%206%203%205%202%200%203%203%205%208%200%203%200%203-2%202l-3-4c0-2-1-2-1-1-2%205-2%2011-1%2014l2%203v-3c0-4%202-4%203%200l2%206%201%204%202%204c2%200%204%207%202%209l1%201c3%200%205%208%202%209l-2-5c0-2%200-2-1-1h-5l2-1c3-1%202-5-3-9l-2-3v-2l-1-2-2-1-2-2c0-2%201-3%203-1h1c0-2-3-3-6-2H3c-2-1-3%200-2%202v1l-1%2020%201%2020%202-1h2c2%203%204%202%203-1-2-3%200-3%204%200%203%204%205%204%203%200-3-4-2-4%201-2l3%203c0%201%203%202%2010%202%2010%200%2014%200%2013-2l1-1v-1l1-1%203%201v1c0%202%203%201%204%200s2-1%203%203l2-1h19l3-1%202%201%202%201v-3h8l1-1c0-1%201-2%205-1%205%201%207%201%203-1l-2-1%202-1c3-1%201-3-3-3s-6-2-2-4c2-2%202-2%205-1%202%202%202%202%202-1s0-3%201-1c0%203%200%203%201%202s1-1%202%202l3%203c2%200%205%204%204%207-2%203-1%204%203%204%203%200%204-1%202-2l-1-3-2-3-2-3h3c2%202%207%202%207%201l3%201c3%201%203%201%203%205l-1%204h8c10%200%2010%200%208-6l-1-4v-10l-2%202-1%202-1-2v-5c1-1%200-2-1-3-3-1%200-3%203-2l3-1%203-1c3%200%203%202-1%202-2%200-2%200%200%201l2%201-1%201c-1%200-2%201-2%206l1%206%201%202%201%202v-2l2-1h2l1-1%202-2c1-2%200-3-1-1-2%202-3%201-2-1v-3l1-1%201-1v-1h1l1%201v-2c0-3%202-3%203-1%202%202%202%202%203%201%202-2%203-1%204%201l1%202%201%201c1%202%201%202%202%201l2%203c2%205%205%205%204%200%200-2%200-3%201-1l1%203c1%201%200%203-1%202l-1%202%202%202c2%201%202%201%201-1s-1-2%203-1l4%201%202%201c2%201%205%201%207-2l2-2v1c-1%202-1%202%202%202%202%201%202%201-1%201l-3%201-1%201c-1%201%200%201%201%201%203%200%204%202%202%202l-2%201-4-1h-2l-6%201-5%201%2011%201c10%200%2011%200%2011-2s1-2%203-1c1%201%201%201-1%202-1%201%203%201%2017%201l16-1-7-2-4-1c-1%201-7-1-6-2l-1-3c-2-2%201-2%203%201l3%201v-1c-2-1-1-2%203-2l5-2%202%201v1c2%201%206-2%206-4v-3c0-2%200-2%201%201l1%203%201-3%201-3%201%205%203%206v-3c-2-1-1-3%201-3%202-1%203%200%201%202v1l2-1%203-2c4%200%204%200%202%203s-1%204%201%204l2-1%201-3%204-6%203-7%202-6c1-5%206-14%207-14v6l-1%201h3l1%202c-2%209-2%2010%201%204l4-6a58%2058%200%2001-10%2021l-1%203c0%203%200%203-1%201h-2l1%202c1%200%201%205-1%208%200%201%200%202%202%201%201%200%202-1%201-2-1-2%202-4%206-4%203%200%203%200%202-1v-1l3-1v2c-1%202-1%202%201%202h3c0%201%207-5%207-7l1-1v2l1%203c1%201%204-5%204-7l1-2c2-1%202-1%202%201v2c2%200%201%205-1%208-2%202%203%201%205-1l2-2-1%202c-1%205%205%204%2011-1%205-6%205-6%205-3l3-2%203-4v2c-1%201%200%201%203%201v3l-2-1h-1c-1%203-1%203%201%202v1c0%201-1%202-2%201l-1%201-1%201v-2c0-2%200-2-1-1l-1%201-2%203v3l1-1%202-2c2%200%202%200%201%203s0%203%203%200c2-2%204-1%202%202v1l3-3c1-3%202-3%202%200l-1%203h13l12-1-3-1-4-2c-1-1-1-1%203-1%203%201%204%200%204-1l1-1%201-3c0-3%201-4%203-4s2%200%201%201l-3%208v1l-1%202c0%202%200%202%201%201%201-2%201-2%202-1%200%202%203%203%205%201l1-1%201%201c-1%201%200%201%202%201l4-1%202-2%201%202%203%201c2%200%202%200%201-1-2-1-1-1%206-1%204%200%205%200%203-1l-2-2c1-1%200-1-2-1-3%200-3%200-2-3%202-3%202-3%205-3l3-1a300%20300%200%20002-4l1%207c0%2015%201%208%201-12l-1-20v3l-1%201c-2%200-2%200-1%202%202%202%202%203%200%204%200%200-2%201-2%203l-2%201%202-5v-3c-2%201-1-1%202-5s3-4%201-4c-2%201-3%200-1-5%202-3%202-3%202-1v-8l-1-11v-1c2%200%202-4%202-107V0H259a1505%201505%200%2000-145%202c1-2-1-2-15-2L83%201h1c3%200%204%202%201%203l-2%202h-2l3%203%201-1c0-2%201-2%204%200l5%201c3%200%206%206%204%207v2l-1%201c-4-1-4%203%200%204%202%201%202%201%201%202s-1%201%202%202l4%201%208%205c6%203%209%206%206%207h-3l-2-2c-3-1-3-1-2%201l-3%201-4%202-3%201-1%201%202%201%208%202%203%203%203%202c2-1%206%202%206%205%201%201%201%202%202%201%203-2%2011%201%2013%206l3%204v2c-1%200-4-3-4-6l-3-2-2-1c-1-2-3-1-3%201s-3%201-4-1-1-2-3%201l-2%204-1%202%202-1h1l-2%202v3l2%203%203%203c3%201%203%201%202%204s-1%203%201%203l1%202h-6c-1%201-1%201%204%204l1%202%202%202%203%201%202%201%202%201c2%202%202%202%200%202-2%201%203%206%207%206s5%203%202%206l-1%202%204%203%203%203h-3c-1%201-3%200-4-2-2-2-2-2-4-1l-2%201-1%201%203%203%206%203%204%202c3%200%205%202%205%204s-1%202-3%201l-2%201%204%202c4%200%206%202%205%203l3%203c2%201%203%201%202%202l2%203%203-1%205%205%202%202v1c-2%202%201%204%203%203%202%200%202%200%203%202%200%201%201%202%204%202l4%202c0%205-31-8-49-19l-9-6-4%204c-6%205-7%204-2-2l3-4-12-12C86%2093%2065%2054%2060%2013%2058-2%2059%200%2049%200c-7%200-9%201-9%202v1l-1%202c-1%203-3%203-4%200l-4-3-3-1C28-1%205%200%203%201H2L1%200%200%203m264%2049c-4%202-7%206-8%2010%200%203-1%204-3%205l-4%204c-2%202-2%202%200%202l6-1c3-2%203-2%205%200%203%204%209%206%2013%204l4-2h-4c-5%200-11-5-8-7%201-1%201-1-2-1-3-1-3-1-2-2l2-3c0-6%209-10%2015-7l4%202v-1l-5-3c-4-2-8-3-13%200M163%2089l-1%201-1%201c0%202-8%209-10%209s-2%200-1%201l2%203%206%202%202%201%201%201%201-2%201-2%203-2%204-2v-1c-2-2-3-6-2-6%202%200%200-4-2-5s-3-1-3%201m121%2031l-1%204c-1%201-1%201%201%201%201%200%202%200%201%201-1%200-1%201%201%202v5h1a117087%20117087%200%20004%207v-6a74%2074%200%2001-2-12l-1-4c0-3-4-1-4%202m113%2013l-6%2010c-6%208-12%2024-11%2032l-1%203c-3%200-4%204-4%207%201%203%200%204-1%206-2%201-3%204-4%206%200%202%200%202%201%201h1c0%203%202%202%203-1l2-5v2l1%201v2l-1%204c0%202%200%201%201-1l3-5v-2c-2%200-2-3-1-7v-3c-1-1-1-4%201-4s4%203%203%206c-2%205-2%208-1%208l3-10%204-11c2-3-1-3-4%200l-2%202v-3l1-5c1-1%201-1%201%201v2l2-3c0-3%200-3%201-1%201%201%201%201%202-1v-3l2-6%203-12c0-4%202-8%203-10l1-4-3%204M30%20153l1%202%201%202c2%200%201%205%200%205-2%200%200%205%202%207%202%201%201%202-3%201-1%200%200%203%202%203l1%202h-1c-2-1-2-1-2%201%200%205%207%204%207%200%201-3%201-5-2-5v-1l1-6c0-5%200-6-2-9l-5-3v1m158%2015c-6%206-1%2017%208%2017%204%200%209-3%209-5h-2c-4%204-10%201-9-5%201-4-4-10-6-7m-142%205c-2%202%205%206%2023%2014%2010%204%2014%206%2015%208l2%203%201-1c-1-1%201-2%203-1l12%205c11%203%2016%204%207%200-22-8-32-12-31-14%200-1%2011%202%2010%204l4%201%204%201%204%202h5l-3-2-7-3%2028%209h-6l6%202c7%202%2015%208%2011%208s3%202%2010%202c14%202-1-7-37-21-10-4-12-5-8-7%205-2%2010-1%2014%203s4%202%201-3c-7-8-21-9-28-3-2%202-2%202-9-1-15-5-30-8-31-6m-22%2011l2%202c3%203%203%204%200%203-2%200-2%200-1%201l1%206c1%205%200%206-3%204-1-1-1-1-1%201v3c-2-2-1%202%202%205l3%204h-1c-2-3-2%200%200%204l2%206%201%201c1%200%202-1%201-4%200-4%200-4%202-4s2%201%202%204l1%203c1%201%201%201%201-1%200-4%202-2%203%202v15c-1%201%200%202%201%203%203%201%203%201%203-2%200-5%201-8%202-6%201%201%201%200%201-2%200-3%200-3%201-2l2%202%203%201c2%203%203%201%203-2l1-3v-2l-1-2c0-2%200-2-1-1-1%203-5-1-6-6l-1-4v4c1%205-1%209-2%206-1-1-1%200-1%201l-1%203-3-14c0-5-1-8-2-9v-10c0-9%200-9-4-10l-2%201h-3c-1-2-5-3-5-1m228%204l-2%201-2%201c0%201-1%202-2%201l-3%202-3%202-4%202c-7%205-10%206-14%205-5%200-5%202-1%203h3l-2%203-2%203-2%203-1%204h2l2-1c3-1%204-4%202-5-1-1-1-1%201-1l3%202c0%202%201%201%205-2l3-2-3-2-1-1c2%200%202%200%200-1v-2l3%202v1l1%201%203%201v-1l-1-1a61%2061%200%200116-16c4-3%204-3%202-3l-3%201m117%2017l-2%206-2%206-2%2010%201%204c1-2%201-2%202-1l-1%203v13l1-2c0-1%201-1%202%201%201%203%201%207-1%207v-2l-1-2c-3%201-4%2011-1%2011l1-2c0-3%203-4%203-2l1%203%201-3%203-8-2%203c-1%203-2%202-2-3l1-5c1%200%203-4%203-8l1-3%201-3v-12l1-10-3%203c-4%203-4%205-1%209%202%203%202%204%201%207-1%204-3%206-4%203v-5c1-3%201-5-1-6-2-3-1-9%202-12l1-2-3%202M61%20223l2%205c2%202%202%203%202%206l1%203v-5l1%202%202%204c-1%201%200%203%201%204s1%201%201-2c0-4%200-4%201-1l1%201%205-3%201%202v-6l-2-2c-2%200-7-3-7-5l-1%201c-1%202-1%202-3-2-4-5-5-5-5-2m240%206l-3%202h-8l-7%201%204%201c4%200%205%201%2012%209l6%203h4l-4-2c-3-2-4-4-2-4l-4-2c-7-3-6-3%202-2%209%201%2010%201%205-1-4-3-4-3-2-3h4l2-1c-1-1-5-2-9-1m-194%2013v4l-1%201c-2%201-2%201-1%202l2%205c0%204%203%209%205%208h1l-2%202-2%201-2%201h-2l2%202c1%202%202%202%203%201h2l3-1%204-2%202-1v-2l-1-1-2-2c-2%200-4-5-4-9%200-2-1-4-3-5l-3-5c-1-2-1-2-1%201m18%205c0%204%200%205-1%204h-1l1%202v3c1%200%201%201-1%203v3c2-1%205-2%207-1s1%204%200%203c-3%200-2%201%200%204%202%202%202%203%201%204l-1%203%202-1c1-2%202-11%201-12v-3c0-2%200-3-1-2-1%202-5-5-6-11l-1-5v6m-89-4c-1%204-1%205%201%207v-2c0-3%201-5%203-3%201%202%204%2011%204%2015%201%202%202%203%204%203v-7l-1-6c0-3%200-4-2-5l-9-2M15%20361l-4%201%201%201-1%201h-1l-1%201-1-1c0-3-1-2-3%201-1%202-1%202%203%202h4c1%201%202%202%205%201l7%201h9c5-1%207%200%207%203h3v-2c0-2%200-2%203-2h4l3-1%205-2c1-1%204-1%205%201l1%201%201-1%201-2%202-1-1%202c-1%201-1%202%201%203%202%202%203%201%202-1%200-2%200-2%201-1l3%201%202%201%202%201v-2c-1-1-1-1%201-1%203%202%202%200-2-2s-4-2%202-1l5%201%206-1v-1h-2l-1-1H74l-2%201-2%201c0%202%200%202-1%200l-1-2-22-1a162%20162%200%2000-24%201l-2-1-5%201m130%200v2l-2%202-3%203c0%204-1%204-3-1l-2-3v4c1%203%201%204-1%203l-2%202c0%202%200%202-1%200h-2c-1%201%200%202%201%202v2l-3%201h-7c-5-5-35%202-33%207%201%201%200%201-3%201-2%200-3%200-2%201%202%200%202%201%202%204%200%204%200%204%201%202%201-3%203-3%204-1l-1%202h-1l2%201%201%202h-2c-2-1-7%201-7%203h15c13%200%2015%200%2014-1l-1-4v-2l-1-3c0-2%202-3%202%200l5%203c5%201%207%203%203%203l-2%201%202%201c3%200%204%200%202%201h22c0%202%205%201%209-1l5-3c2%200%206-2%205-3-2-1-1-2%204-3%203%200%204-1%204-2l3-1%203%201%202%201c2%201%203-1%201-2h2l3-1c-1-1%204-5%206-5%203%200%206-3%204-3-2-1-8%201-8%202l-3%201-4-1h-2v-1c2-1%203-2%204-1l3-1-2-2c-2%200-2-2%201-2l2-1-3-1-2%201c0%202-2%201-5-2s-6-4-4-1v4l-1%201c0-2-3-6-5-6l-1-1%202-1c2%200%203%200%202-2s-3-3-2%200l-2-1c-2-2-3-2-10-2l-8%201m198%200c-2%200-2%200-1%202%201%203%200%206-2%205l-2%201h-7c0%204%2012%203%2018-1h3c1%202%200%206-3%206v3c1%201%200%201-1%201-4%201-3%204%200%203%203%200%203%200%202%203-1%202-1%202%203%200%202%200%204-2%203-2-1-2%201-5%203-6%201%200%202-1%202-3l1-2%201%206%201%202v1c-2%200-2%200-1%202h3l4-3%207-1c3-2%204-2%206%200s3%207%201%207l-1-1-1-2-1%202%202%202%201%201h-5c-1-1-1-1-1%201l2%203%202%204c0%202%202%203%205%203l-1-1c-1-2-1-2%201-2l2%202%203%201c2%200%202%200%201-1-2-1-2-1%200-1l4%201c4%203%204%203%204-8l-1-20v-9h-18l-18%201h-21M1%20387v13h8l7-1%201-2%201%201c0%202%201%202%206%202s5%200%204-1l-2-3c0-3-1-5-2-4-1%200-2-1-2-4l-2-7%201-2%202%201v5c1%204%204%205%203%201%200-3%200-3%204-3%203%201%205%200%202-1l-2-3c-1-2%202-1%204%201h2c0-2-1-3-4-3l-5-2-2-1v3c-2%200-5%200-9%202-2%201-3%202-2%205v4l-1-3-3-6c-2-6-3-5-3%201%200%205%200%205-2%203-1-1-2-2%200-3%201-2%200-3-2-2H2v-3c-1-1-1%204-1%2012m49-9l1%203v5c1%201-1%203-6%206-1%201-1%201%204%201l5%201%201%202%201-1%201-2c2%200%202%200%201%202s1%203%203%202c3-2%205-1%205%201%200%203%2014%203%2015%200%200-3-3-6-5-6l1%202c3%202%203%205%200%203s-6-2-6%200l-2%201c-3%200-2-2%202-3l2-1-3-3c-2-2-4-4-5-3l-2-2v-2l2-2h-6l-3-2-2-2c-1-2-3-3-4%200m249%200l-1%201c-1-1-2%202%200%203l1%202v11c-1%203%200%205%201%205l1-2%201-2h2v2c0%202%201%202%2011%202l10-1c0-2-1-4-3-4l-4-5-3-4c0%202-2%201-4-3s-2-4-2%201c0%203%200%202-2%200-5-7-10-10-8-6m-47%2016c-7%201-13%203-13%205a99%2099%200%200030%200v-1l-5-3-4-1h-8'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQDAv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABjno4zcVA3vJYgf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMQExESIv/aAAgBAQABBQKtgyYNbGanmsxnIXgdLfL/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABgRAAMBAQAAAAAAAAAAAAAAAAASUQEC/9oACAECAQE/AWyjZRcgvMP/xAAcEAAABgMAAAAAAAAAAAAAAAAAAQIQETEhQWH/2gAIAQEABj8CUhV2T05dExoYMf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWGx/9oACAEBAAE/IUCpNr8nU7MswJQ9h2rHu4VgWRuOIhuOVssgoT//2gAMAwEAAgADAAAAEBTQPv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCKKquv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAGGR/9oACAECAQE/EJtTJkmP/8QAIBABAAICAgEFAAAAAAAAAAAAAREhADFBYVFxgZGh4f/aAAgBAQABPxAIneNz7jWWKmHmojrAOQX0wZqZREeCOTESGFJ2/GFqAuy8UEkWW4kNfODkJ8xtDpwbrQKr6z//2Q==","aspectRatio":1,"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/1dc0b/foldersCover.jpg","srcSet":"/static/eaed1349ae375d7d26cff434c9b9f2c2/3a5ce/foldersCover.jpg 163w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/05730/foldersCover.jpg 327w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/1dc0b/foldersCover.jpg 653w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/f72c7/foldersCover.jpg 980w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/0acdf/foldersCover.webp","srcSetWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/ac59e/foldersCover.webp 163w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/7660b/foldersCover.webp 327w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0acdf/foldersCover.webp 653w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/75470/foldersCover.webp 980w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/9000d/foldersCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%203c0%202%200%203%202%203v1c-3%202-2%204%200%203%202%200%202-1%202-4-1-3%201-3%204%201%201%201%201%201-1%201H5l2%201%202%204c0%202%200%202-1%201-2-3-3-2-2%200%200%203-3%205-5%204l1%202c2%202%202%203%202%206-1%203-2%205-2%203l-1-1c-2%202-1%20188%200%20188%201-1%203%200%204%201l2%203v-4c0-3%201-3%201-2%200%203%202%206%203%205%202%200%203%203%205%208%200%203%200%203-2%202l-3-4c0-2-1-2-1-1-2%205-2%2011-1%2014l2%203v-3c0-4%202-4%203%200l2%206%201%204%202%204c2%200%204%207%202%209l1%201c3%200%205%208%202%209l-2-5c0-2%200-2-1-1h-5l2-1c3-1%202-5-3-9l-2-3v-2l-1-2-2-1-2-2c0-2%201-3%203-1h1c0-2-3-3-6-2H3c-2-1-3%200-2%202v1l-1%2020%201%2020%202-1h2c2%203%204%202%203-1-2-3%200-3%204%200%203%204%205%204%203%200-3-4-2-4%201-2l3%203c0%201%203%202%2010%202%2010%200%2014%200%2013-2l1-1v-1l1-1%203%201v1c0%202%203%201%204%200s2-1%203%203l2-1h19l3-1%202%201%202%201v-3h8l1-1c0-1%201-2%205-1%205%201%207%201%203-1l-2-1%202-1c3-1%201-3-3-3s-6-2-2-4c2-2%202-2%205-1%202%202%202%202%202-1s0-3%201-1c0%203%200%203%201%202s1-1%202%202l3%203c2%200%205%204%204%207-2%203-1%204%203%204%203%200%204-1%202-2l-1-3-2-3-2-3h3c2%202%207%202%207%201l3%201c3%201%203%201%203%205l-1%204h8c10%200%2010%200%208-6l-1-4v-10l-2%202-1%202-1-2v-5c1-1%200-2-1-3-3-1%200-3%203-2l3-1%203-1c3%200%203%202-1%202-2%200-2%200%200%201l2%201-1%201c-1%200-2%201-2%206l1%206%201%202%201%202v-2l2-1h2l1-1%202-2c1-2%200-3-1-1-2%202-3%201-2-1v-3l1-1%201-1v-1h1l1%201v-2c0-3%202-3%203-1%202%202%202%202%203%201%202-2%203-1%204%201l1%202%201%201c1%202%201%202%202%201l2%203c2%205%205%205%204%200%200-2%200-3%201-1l1%203c1%201%200%203-1%202l-1%202%202%202c2%201%202%201%201-1s-1-2%203-1l4%201%202%201c2%201%205%201%207-2l2-2v1c-1%202-1%202%202%202%202%201%202%201-1%201l-3%201-1%201c-1%201%200%201%201%201%203%200%204%202%202%202l-2%201-4-1h-2l-6%201-5%201%2011%201c10%200%2011%200%2011-2s1-2%203-1c1%201%201%201-1%202-1%201%203%201%2017%201l16-1-7-2-4-1c-1%201-7-1-6-2l-1-3c-2-2%201-2%203%201l3%201v-1c-2-1-1-2%203-2l5-2%202%201v1c2%201%206-2%206-4v-3c0-2%200-2%201%201l1%203%201-3%201-3%201%205%203%206v-3c-2-1-1-3%201-3%202-1%203%200%201%202v1l2-1%203-2c4%200%204%200%202%203s-1%204%201%204l2-1%201-3%204-6%203-7%202-6c1-5%206-14%207-14v6l-1%201h3l1%202c-2%209-2%2010%201%204l4-6a58%2058%200%2001-10%2021l-1%203c0%203%200%203-1%201h-2l1%202c1%200%201%205-1%208%200%201%200%202%202%201%201%200%202-1%201-2-1-2%202-4%206-4%203%200%203%200%202-1v-1l3-1v2c-1%202-1%202%201%202h3c0%201%207-5%207-7l1-1v2l1%203c1%201%204-5%204-7l1-2c2-1%202-1%202%201v2c2%200%201%205-1%208-2%202%203%201%205-1l2-2-1%202c-1%205%205%204%2011-1%205-6%205-6%205-3l3-2%203-4v2c-1%201%200%201%203%201v3l-2-1h-1c-1%203-1%203%201%202v1c0%201-1%202-2%201l-1%201-1%201v-2c0-2%200-2-1-1l-1%201-2%203v3l1-1%202-2c2%200%202%200%201%203s0%203%203%200c2-2%204-1%202%202v1l3-3c1-3%202-3%202%200l-1%203h13l12-1-3-1-4-2c-1-1-1-1%203-1%203%201%204%200%204-1l1-1%201-3c0-3%201-4%203-4s2%200%201%201l-3%208v1l-1%202c0%202%200%202%201%201%201-2%201-2%202-1%200%202%203%203%205%201l1-1%201%201c-1%201%200%201%202%201l4-1%202-2%201%202%203%201c2%200%202%200%201-1-2-1-1-1%206-1%204%200%205%200%203-1l-2-2c1-1%200-1-2-1-3%200-3%200-2-3%202-3%202-3%205-3l3-1a300%20300%200%20002-4l1%207c0%2015%201%208%201-12l-1-20v3l-1%201c-2%200-2%200-1%202%202%202%202%203%200%204%200%200-2%201-2%203l-2%201%202-5v-3c-2%201-1-1%202-5s3-4%201-4c-2%201-3%200-1-5%202-3%202-3%202-1v-8l-1-11v-1c2%200%202-4%202-107V0H259a1505%201505%200%2000-145%202c1-2-1-2-15-2L83%201h1c3%200%204%202%201%203l-2%202h-2l3%203%201-1c0-2%201-2%204%200l5%201c3%200%206%206%204%207v2l-1%201c-4-1-4%203%200%204%202%201%202%201%201%202s-1%201%202%202l4%201%208%205c6%203%209%206%206%207h-3l-2-2c-3-1-3-1-2%201l-3%201-4%202-3%201-1%201%202%201%208%202%203%203%203%202c2-1%206%202%206%205%201%201%201%202%202%201%203-2%2011%201%2013%206l3%204v2c-1%200-4-3-4-6l-3-2-2-1c-1-2-3-1-3%201s-3%201-4-1-1-2-3%201l-2%204-1%202%202-1h1l-2%202v3l2%203%203%203c3%201%203%201%202%204s-1%203%201%203l1%202h-6c-1%201-1%201%204%204l1%202%202%202%203%201%202%201%202%201c2%202%202%202%200%202-2%201%203%206%207%206s5%203%202%206l-1%202%204%203%203%203h-3c-1%201-3%200-4-2-2-2-2-2-4-1l-2%201-1%201%203%203%206%203%204%202c3%200%205%202%205%204s-1%202-3%201l-2%201%204%202c4%200%206%202%205%203l3%203c2%201%203%201%202%202l2%203%203-1%205%205%202%202v1c-2%202%201%204%203%203%202%200%202%200%203%202%200%201%201%202%204%202l4%202c0%205-31-8-49-19l-9-6-4%204c-6%205-7%204-2-2l3-4-12-12C86%2093%2065%2054%2060%2013%2058-2%2059%200%2049%200c-7%200-9%201-9%202v1l-1%202c-1%203-3%203-4%200l-4-3-3-1C28-1%205%200%203%201H2L1%200%200%203m264%2049c-4%202-7%206-8%2010%200%203-1%204-3%205l-4%204c-2%202-2%202%200%202l6-1c3-2%203-2%205%200%203%204%209%206%2013%204l4-2h-4c-5%200-11-5-8-7%201-1%201-1-2-1-3-1-3-1-2-2l2-3c0-6%209-10%2015-7l4%202v-1l-5-3c-4-2-8-3-13%200M163%2089l-1%201-1%201c0%202-8%209-10%209s-2%200-1%201l2%203%206%202%202%201%201%201%201-2%201-2%203-2%204-2v-1c-2-2-3-6-2-6%202%200%200-4-2-5s-3-1-3%201m121%2031l-1%204c-1%201-1%201%201%201%201%200%202%200%201%201-1%200-1%201%201%202v5h1a117087%20117087%200%20004%207v-6a74%2074%200%2001-2-12l-1-4c0-3-4-1-4%202m113%2013l-6%2010c-6%208-12%2024-11%2032l-1%203c-3%200-4%204-4%207%201%203%200%204-1%206-2%201-3%204-4%206%200%202%200%202%201%201h1c0%203%202%202%203-1l2-5v2l1%201v2l-1%204c0%202%200%201%201-1l3-5v-2c-2%200-2-3-1-7v-3c-1-1-1-4%201-4s4%203%203%206c-2%205-2%208-1%208l3-10%204-11c2-3-1-3-4%200l-2%202v-3l1-5c1-1%201-1%201%201v2l2-3c0-3%200-3%201-1%201%201%201%201%202-1v-3l2-6%203-12c0-4%202-8%203-10l1-4-3%204M30%20153l1%202%201%202c2%200%201%205%200%205-2%200%200%205%202%207%202%201%201%202-3%201-1%200%200%203%202%203l1%202h-1c-2-1-2-1-2%201%200%205%207%204%207%200%201-3%201-5-2-5v-1l1-6c0-5%200-6-2-9l-5-3v1m158%2015c-6%206-1%2017%208%2017%204%200%209-3%209-5h-2c-4%204-10%201-9-5%201-4-4-10-6-7m-142%205c-2%202%205%206%2023%2014%2010%204%2014%206%2015%208l2%203%201-1c-1-1%201-2%203-1l12%205c11%203%2016%204%207%200-22-8-32-12-31-14%200-1%2011%202%2010%204l4%201%204%201%204%202h5l-3-2-7-3%2028%209h-6l6%202c7%202%2015%208%2011%208s3%202%2010%202c14%202-1-7-37-21-10-4-12-5-8-7%205-2%2010-1%2014%203s4%202%201-3c-7-8-21-9-28-3-2%202-2%202-9-1-15-5-30-8-31-6m-22%2011l2%202c3%203%203%204%200%203-2%200-2%200-1%201l1%206c1%205%200%206-3%204-1-1-1-1-1%201v3c-2-2-1%202%202%205l3%204h-1c-2-3-2%200%200%204l2%206%201%201c1%200%202-1%201-4%200-4%200-4%202-4s2%201%202%204l1%203c1%201%201%201%201-1%200-4%202-2%203%202v15c-1%201%200%202%201%203%203%201%203%201%203-2%200-5%201-8%202-6%201%201%201%200%201-2%200-3%200-3%201-2l2%202%203%201c2%203%203%201%203-2l1-3v-2l-1-2c0-2%200-2-1-1-1%203-5-1-6-6l-1-4v4c1%205-1%209-2%206-1-1-1%200-1%201l-1%203-3-14c0-5-1-8-2-9v-10c0-9%200-9-4-10l-2%201h-3c-1-2-5-3-5-1m228%204l-2%201-2%201c0%201-1%202-2%201l-3%202-3%202-4%202c-7%205-10%206-14%205-5%200-5%202-1%203h3l-2%203-2%203-2%203-1%204h2l2-1c3-1%204-4%202-5-1-1-1-1%201-1l3%202c0%202%201%201%205-2l3-2-3-2-1-1c2%200%202%200%200-1v-2l3%202v1l1%201%203%201v-1l-1-1a61%2061%200%200116-16c4-3%204-3%202-3l-3%201m117%2017l-2%206-2%206-2%2010%201%204c1-2%201-2%202-1l-1%203v13l1-2c0-1%201-1%202%201%201%203%201%207-1%207v-2l-1-2c-3%201-4%2011-1%2011l1-2c0-3%203-4%203-2l1%203%201-3%203-8-2%203c-1%203-2%202-2-3l1-5c1%200%203-4%203-8l1-3%201-3v-12l1-10-3%203c-4%203-4%205-1%209%202%203%202%204%201%207-1%204-3%206-4%203v-5c1-3%201-5-1-6-2-3-1-9%202-12l1-2-3%202M61%20223l2%205c2%202%202%203%202%206l1%203v-5l1%202%202%204c-1%201%200%203%201%204s1%201%201-2c0-4%200-4%201-1l1%201%205-3%201%202v-6l-2-2c-2%200-7-3-7-5l-1%201c-1%202-1%202-3-2-4-5-5-5-5-2m240%206l-3%202h-8l-7%201%204%201c4%200%205%201%2012%209l6%203h4l-4-2c-3-2-4-4-2-4l-4-2c-7-3-6-3%202-2%209%201%2010%201%205-1-4-3-4-3-2-3h4l2-1c-1-1-5-2-9-1m-194%2013v4l-1%201c-2%201-2%201-1%202l2%205c0%204%203%209%205%208h1l-2%202-2%201-2%201h-2l2%202c1%202%202%202%203%201h2l3-1%204-2%202-1v-2l-1-1-2-2c-2%200-4-5-4-9%200-2-1-4-3-5l-3-5c-1-2-1-2-1%201m18%205c0%204%200%205-1%204h-1l1%202v3c1%200%201%201-1%203v3c2-1%205-2%207-1s1%204%200%203c-3%200-2%201%200%204%202%202%202%203%201%204l-1%203%202-1c1-2%202-11%201-12v-3c0-2%200-3-1-2-1%202-5-5-6-11l-1-5v6m-89-4c-1%204-1%205%201%207v-2c0-3%201-5%203-3%201%202%204%2011%204%2015%201%202%202%203%204%203v-7l-1-6c0-3%200-4-2-5l-9-2M15%20361l-4%201%201%201-1%201h-1l-1%201-1-1c0-3-1-2-3%201-1%202-1%202%203%202h4c1%201%202%202%205%201l7%201h9c5-1%207%200%207%203h3v-2c0-2%200-2%203-2h4l3-1%205-2c1-1%204-1%205%201l1%201%201-1%201-2%202-1-1%202c-1%201-1%202%201%203%202%202%203%201%202-1%200-2%200-2%201-1l3%201%202%201%202%201v-2c-1-1-1-1%201-1%203%202%202%200-2-2s-4-2%202-1l5%201%206-1v-1h-2l-1-1H74l-2%201-2%201c0%202%200%202-1%200l-1-2-22-1a162%20162%200%2000-24%201l-2-1-5%201m130%200v2l-2%202-3%203c0%204-1%204-3-1l-2-3v4c1%203%201%204-1%203l-2%202c0%202%200%202-1%200h-2c-1%201%200%202%201%202v2l-3%201h-7c-5-5-35%202-33%207%201%201%200%201-3%201-2%200-3%200-2%201%202%200%202%201%202%204%200%204%200%204%201%202%201-3%203-3%204-1l-1%202h-1l2%201%201%202h-2c-2-1-7%201-7%203h15c13%200%2015%200%2014-1l-1-4v-2l-1-3c0-2%202-3%202%200l5%203c5%201%207%203%203%203l-2%201%202%201c3%200%204%200%202%201h22c0%202%205%201%209-1l5-3c2%200%206-2%205-3-2-1-1-2%204-3%203%200%204-1%204-2l3-1%203%201%202%201c2%201%203-1%201-2h2l3-1c-1-1%204-5%206-5%203%200%206-3%204-3-2-1-8%201-8%202l-3%201-4-1h-2v-1c2-1%203-2%204-1l3-1-2-2c-2%200-2-2%201-2l2-1-3-1-2%201c0%202-2%201-5-2s-6-4-4-1v4l-1%201c0-2-3-6-5-6l-1-1%202-1c2%200%203%200%202-2s-3-3-2%200l-2-1c-2-2-3-2-10-2l-8%201m198%200c-2%200-2%200-1%202%201%203%200%206-2%205l-2%201h-7c0%204%2012%203%2018-1h3c1%202%200%206-3%206v3c1%201%200%201-1%201-4%201-3%204%200%203%203%200%203%200%202%203-1%202-1%202%203%200%202%200%204-2%203-2-1-2%201-5%203-6%201%200%202-1%202-3l1-2%201%206%201%202v1c-2%200-2%200-1%202h3l4-3%207-1c3-2%204-2%206%200s3%207%201%207l-1-1-1-2-1%202%202%202%201%201h-5c-1-1-1-1-1%201l2%203%202%204c0%202%202%203%205%203l-1-1c-1-2-1-2%201-2l2%202%203%201c2%200%202%200%201-1-2-1-2-1%200-1l4%201c4%203%204%203%204-8l-1-20v-9h-18l-18%201h-21M1%20387v13h8l7-1%201-2%201%201c0%202%201%202%206%202s5%200%204-1l-2-3c0-3-1-5-2-4-1%200-2-1-2-4l-2-7%201-2%202%201v5c1%204%204%205%203%201%200-3%200-3%204-3%203%201%205%200%202-1l-2-3c-1-2%202-1%204%201h2c0-2-1-3-4-3l-5-2-2-1v3c-2%200-5%200-9%202-2%201-3%202-2%205v4l-1-3-3-6c-2-6-3-5-3%201%200%205%200%205-2%203-1-1-2-2%200-3%201-2%200-3-2-2H2v-3c-1-1-1%204-1%2012m49-9l1%203v5c1%201-1%203-6%206-1%201-1%201%204%201l5%201%201%202%201-1%201-2c2%200%202%200%201%202s1%203%203%202c3-2%205-1%205%201%200%203%2014%203%2015%200%200-3-3-6-5-6l1%202c3%202%203%205%200%203s-6-2-6%200l-2%201c-3%200-2-2%202-3l2-1-3-3c-2-2-4-4-5-3l-2-2v-2l2-2h-6l-3-2-2-2c-1-2-3-3-4%200m249%200l-1%201c-1-1-2%202%200%203l1%202v11c-1%203%200%205%201%205l1-2%201-2h2v2c0%202%201%202%2011%202l10-1c0-2-1-4-3-4l-4-5-3-4c0%202-2%201-4-3s-2-4-2%201c0%203%200%202-2%200-5-7-10-10-8-6m-47%2016c-7%201-13%203-13%205a99%2099%200%200030%200v-1l-5-3-4-1h-8'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQDAv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABjno4zcVA3vJYgf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMQExESIv/aAAgBAQABBQKtgyYNbGanmsxnIXgdLfL/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABgRAAMBAQAAAAAAAAAAAAAAAAASUQEC/9oACAECAQE/AWyjZRcgvMP/xAAcEAAABgMAAAAAAAAAAAAAAAAAAQIQETEhQWH/2gAIAQEABj8CUhV2T05dExoYMf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWGx/9oACAEBAAE/IUCpNr8nU7MswJQ9h2rHu4VgWRuOIhuOVssgoT//2gAMAwEAAgADAAAAEBTQPv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCKKquv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAGGR/9oACAECAQE/EJtTJkmP/8QAIBABAAICAgEFAAAAAAAAAAAAAREhADFBYVFxgZGh4f/aAAgBAQABPxAIneNz7jWWKmHmojrAOQX0wZqZREeCOTESGFJ2/GFqAuy8UEkWW4kNfODkJ8xtDpwbrQKr6z//2Q==","aspectRatio":1,"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/eaa58/foldersCover.jpg","srcSet":"/static/eaed1349ae375d7d26cff434c9b9f2c2/5a3ee/foldersCover.jpg 114w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/41f8f/foldersCover.jpg 229w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/eaa58/foldersCover.jpg 457w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/c309b/foldersCover.jpg 686w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/e3008/foldersCover.jpg 914w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/15384/foldersCover.webp","srcSetWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/31fce/foldersCover.webp 114w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/e3e25/foldersCover.webp 229w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/15384/foldersCover.webp 457w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0258d/foldersCover.webp 686w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/64ea2/foldersCover.webp 914w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/9000d/foldersCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%203c0%202%200%203%202%203v1c-3%202-2%204%200%203%202%200%202-1%202-4-1-3%201-3%204%201%201%201%201%201-1%201H5l2%201%202%204c0%202%200%202-1%201-2-3-3-2-2%200%200%203-3%205-5%204l1%202c2%202%202%203%202%206-1%203-2%205-2%203l-1-1c-2%202-1%20188%200%20188%201-1%203%200%204%201l2%203v-4c0-3%201-3%201-2%200%203%202%206%203%205%202%200%203%203%205%208%200%203%200%203-2%202l-3-4c0-2-1-2-1-1-2%205-2%2011-1%2014l2%203v-3c0-4%202-4%203%200l2%206%201%204%202%204c2%200%204%207%202%209l1%201c3%200%205%208%202%209l-2-5c0-2%200-2-1-1h-5l2-1c3-1%202-5-3-9l-2-3v-2l-1-2-2-1-2-2c0-2%201-3%203-1h1c0-2-3-3-6-2H3c-2-1-3%200-2%202v1l-1%2020%201%2020%202-1h2c2%203%204%202%203-1-2-3%200-3%204%200%203%204%205%204%203%200-3-4-2-4%201-2l3%203c0%201%203%202%2010%202%2010%200%2014%200%2013-2l1-1v-1l1-1%203%201v1c0%202%203%201%204%200s2-1%203%203l2-1h19l3-1%202%201%202%201v-3h8l1-1c0-1%201-2%205-1%205%201%207%201%203-1l-2-1%202-1c3-1%201-3-3-3s-6-2-2-4c2-2%202-2%205-1%202%202%202%202%202-1s0-3%201-1c0%203%200%203%201%202s1-1%202%202l3%203c2%200%205%204%204%207-2%203-1%204%203%204%203%200%204-1%202-2l-1-3-2-3-2-3h3c2%202%207%202%207%201l3%201c3%201%203%201%203%205l-1%204h8c10%200%2010%200%208-6l-1-4v-10l-2%202-1%202-1-2v-5c1-1%200-2-1-3-3-1%200-3%203-2l3-1%203-1c3%200%203%202-1%202-2%200-2%200%200%201l2%201-1%201c-1%200-2%201-2%206l1%206%201%202%201%202v-2l2-1h2l1-1%202-2c1-2%200-3-1-1-2%202-3%201-2-1v-3l1-1%201-1v-1h1l1%201v-2c0-3%202-3%203-1%202%202%202%202%203%201%202-2%203-1%204%201l1%202%201%201c1%202%201%202%202%201l2%203c2%205%205%205%204%200%200-2%200-3%201-1l1%203c1%201%200%203-1%202l-1%202%202%202c2%201%202%201%201-1s-1-2%203-1l4%201%202%201c2%201%205%201%207-2l2-2v1c-1%202-1%202%202%202%202%201%202%201-1%201l-3%201-1%201c-1%201%200%201%201%201%203%200%204%202%202%202l-2%201-4-1h-2l-6%201-5%201%2011%201c10%200%2011%200%2011-2s1-2%203-1c1%201%201%201-1%202-1%201%203%201%2017%201l16-1-7-2-4-1c-1%201-7-1-6-2l-1-3c-2-2%201-2%203%201l3%201v-1c-2-1-1-2%203-2l5-2%202%201v1c2%201%206-2%206-4v-3c0-2%200-2%201%201l1%203%201-3%201-3%201%205%203%206v-3c-2-1-1-3%201-3%202-1%203%200%201%202v1l2-1%203-2c4%200%204%200%202%203s-1%204%201%204l2-1%201-3%204-6%203-7%202-6c1-5%206-14%207-14v6l-1%201h3l1%202c-2%209-2%2010%201%204l4-6a58%2058%200%2001-10%2021l-1%203c0%203%200%203-1%201h-2l1%202c1%200%201%205-1%208%200%201%200%202%202%201%201%200%202-1%201-2-1-2%202-4%206-4%203%200%203%200%202-1v-1l3-1v2c-1%202-1%202%201%202h3c0%201%207-5%207-7l1-1v2l1%203c1%201%204-5%204-7l1-2c2-1%202-1%202%201v2c2%200%201%205-1%208-2%202%203%201%205-1l2-2-1%202c-1%205%205%204%2011-1%205-6%205-6%205-3l3-2%203-4v2c-1%201%200%201%203%201v3l-2-1h-1c-1%203-1%203%201%202v1c0%201-1%202-2%201l-1%201-1%201v-2c0-2%200-2-1-1l-1%201-2%203v3l1-1%202-2c2%200%202%200%201%203s0%203%203%200c2-2%204-1%202%202v1l3-3c1-3%202-3%202%200l-1%203h13l12-1-3-1-4-2c-1-1-1-1%203-1%203%201%204%200%204-1l1-1%201-3c0-3%201-4%203-4s2%200%201%201l-3%208v1l-1%202c0%202%200%202%201%201%201-2%201-2%202-1%200%202%203%203%205%201l1-1%201%201c-1%201%200%201%202%201l4-1%202-2%201%202%203%201c2%200%202%200%201-1-2-1-1-1%206-1%204%200%205%200%203-1l-2-2c1-1%200-1-2-1-3%200-3%200-2-3%202-3%202-3%205-3l3-1a300%20300%200%20002-4l1%207c0%2015%201%208%201-12l-1-20v3l-1%201c-2%200-2%200-1%202%202%202%202%203%200%204%200%200-2%201-2%203l-2%201%202-5v-3c-2%201-1-1%202-5s3-4%201-4c-2%201-3%200-1-5%202-3%202-3%202-1v-8l-1-11v-1c2%200%202-4%202-107V0H259a1505%201505%200%2000-145%202c1-2-1-2-15-2L83%201h1c3%200%204%202%201%203l-2%202h-2l3%203%201-1c0-2%201-2%204%200l5%201c3%200%206%206%204%207v2l-1%201c-4-1-4%203%200%204%202%201%202%201%201%202s-1%201%202%202l4%201%208%205c6%203%209%206%206%207h-3l-2-2c-3-1-3-1-2%201l-3%201-4%202-3%201-1%201%202%201%208%202%203%203%203%202c2-1%206%202%206%205%201%201%201%202%202%201%203-2%2011%201%2013%206l3%204v2c-1%200-4-3-4-6l-3-2-2-1c-1-2-3-1-3%201s-3%201-4-1-1-2-3%201l-2%204-1%202%202-1h1l-2%202v3l2%203%203%203c3%201%203%201%202%204s-1%203%201%203l1%202h-6c-1%201-1%201%204%204l1%202%202%202%203%201%202%201%202%201c2%202%202%202%200%202-2%201%203%206%207%206s5%203%202%206l-1%202%204%203%203%203h-3c-1%201-3%200-4-2-2-2-2-2-4-1l-2%201-1%201%203%203%206%203%204%202c3%200%205%202%205%204s-1%202-3%201l-2%201%204%202c4%200%206%202%205%203l3%203c2%201%203%201%202%202l2%203%203-1%205%205%202%202v1c-2%202%201%204%203%203%202%200%202%200%203%202%200%201%201%202%204%202l4%202c0%205-31-8-49-19l-9-6-4%204c-6%205-7%204-2-2l3-4-12-12C86%2093%2065%2054%2060%2013%2058-2%2059%200%2049%200c-7%200-9%201-9%202v1l-1%202c-1%203-3%203-4%200l-4-3-3-1C28-1%205%200%203%201H2L1%200%200%203m264%2049c-4%202-7%206-8%2010%200%203-1%204-3%205l-4%204c-2%202-2%202%200%202l6-1c3-2%203-2%205%200%203%204%209%206%2013%204l4-2h-4c-5%200-11-5-8-7%201-1%201-1-2-1-3-1-3-1-2-2l2-3c0-6%209-10%2015-7l4%202v-1l-5-3c-4-2-8-3-13%200M163%2089l-1%201-1%201c0%202-8%209-10%209s-2%200-1%201l2%203%206%202%202%201%201%201%201-2%201-2%203-2%204-2v-1c-2-2-3-6-2-6%202%200%200-4-2-5s-3-1-3%201m121%2031l-1%204c-1%201-1%201%201%201%201%200%202%200%201%201-1%200-1%201%201%202v5h1a117087%20117087%200%20004%207v-6a74%2074%200%2001-2-12l-1-4c0-3-4-1-4%202m113%2013l-6%2010c-6%208-12%2024-11%2032l-1%203c-3%200-4%204-4%207%201%203%200%204-1%206-2%201-3%204-4%206%200%202%200%202%201%201h1c0%203%202%202%203-1l2-5v2l1%201v2l-1%204c0%202%200%201%201-1l3-5v-2c-2%200-2-3-1-7v-3c-1-1-1-4%201-4s4%203%203%206c-2%205-2%208-1%208l3-10%204-11c2-3-1-3-4%200l-2%202v-3l1-5c1-1%201-1%201%201v2l2-3c0-3%200-3%201-1%201%201%201%201%202-1v-3l2-6%203-12c0-4%202-8%203-10l1-4-3%204M30%20153l1%202%201%202c2%200%201%205%200%205-2%200%200%205%202%207%202%201%201%202-3%201-1%200%200%203%202%203l1%202h-1c-2-1-2-1-2%201%200%205%207%204%207%200%201-3%201-5-2-5v-1l1-6c0-5%200-6-2-9l-5-3v1m158%2015c-6%206-1%2017%208%2017%204%200%209-3%209-5h-2c-4%204-10%201-9-5%201-4-4-10-6-7m-142%205c-2%202%205%206%2023%2014%2010%204%2014%206%2015%208l2%203%201-1c-1-1%201-2%203-1l12%205c11%203%2016%204%207%200-22-8-32-12-31-14%200-1%2011%202%2010%204l4%201%204%201%204%202h5l-3-2-7-3%2028%209h-6l6%202c7%202%2015%208%2011%208s3%202%2010%202c14%202-1-7-37-21-10-4-12-5-8-7%205-2%2010-1%2014%203s4%202%201-3c-7-8-21-9-28-3-2%202-2%202-9-1-15-5-30-8-31-6m-22%2011l2%202c3%203%203%204%200%203-2%200-2%200-1%201l1%206c1%205%200%206-3%204-1-1-1-1-1%201v3c-2-2-1%202%202%205l3%204h-1c-2-3-2%200%200%204l2%206%201%201c1%200%202-1%201-4%200-4%200-4%202-4s2%201%202%204l1%203c1%201%201%201%201-1%200-4%202-2%203%202v15c-1%201%200%202%201%203%203%201%203%201%203-2%200-5%201-8%202-6%201%201%201%200%201-2%200-3%200-3%201-2l2%202%203%201c2%203%203%201%203-2l1-3v-2l-1-2c0-2%200-2-1-1-1%203-5-1-6-6l-1-4v4c1%205-1%209-2%206-1-1-1%200-1%201l-1%203-3-14c0-5-1-8-2-9v-10c0-9%200-9-4-10l-2%201h-3c-1-2-5-3-5-1m228%204l-2%201-2%201c0%201-1%202-2%201l-3%202-3%202-4%202c-7%205-10%206-14%205-5%200-5%202-1%203h3l-2%203-2%203-2%203-1%204h2l2-1c3-1%204-4%202-5-1-1-1-1%201-1l3%202c0%202%201%201%205-2l3-2-3-2-1-1c2%200%202%200%200-1v-2l3%202v1l1%201%203%201v-1l-1-1a61%2061%200%200116-16c4-3%204-3%202-3l-3%201m117%2017l-2%206-2%206-2%2010%201%204c1-2%201-2%202-1l-1%203v13l1-2c0-1%201-1%202%201%201%203%201%207-1%207v-2l-1-2c-3%201-4%2011-1%2011l1-2c0-3%203-4%203-2l1%203%201-3%203-8-2%203c-1%203-2%202-2-3l1-5c1%200%203-4%203-8l1-3%201-3v-12l1-10-3%203c-4%203-4%205-1%209%202%203%202%204%201%207-1%204-3%206-4%203v-5c1-3%201-5-1-6-2-3-1-9%202-12l1-2-3%202M61%20223l2%205c2%202%202%203%202%206l1%203v-5l1%202%202%204c-1%201%200%203%201%204s1%201%201-2c0-4%200-4%201-1l1%201%205-3%201%202v-6l-2-2c-2%200-7-3-7-5l-1%201c-1%202-1%202-3-2-4-5-5-5-5-2m240%206l-3%202h-8l-7%201%204%201c4%200%205%201%2012%209l6%203h4l-4-2c-3-2-4-4-2-4l-4-2c-7-3-6-3%202-2%209%201%2010%201%205-1-4-3-4-3-2-3h4l2-1c-1-1-5-2-9-1m-194%2013v4l-1%201c-2%201-2%201-1%202l2%205c0%204%203%209%205%208h1l-2%202-2%201-2%201h-2l2%202c1%202%202%202%203%201h2l3-1%204-2%202-1v-2l-1-1-2-2c-2%200-4-5-4-9%200-2-1-4-3-5l-3-5c-1-2-1-2-1%201m18%205c0%204%200%205-1%204h-1l1%202v3c1%200%201%201-1%203v3c2-1%205-2%207-1s1%204%200%203c-3%200-2%201%200%204%202%202%202%203%201%204l-1%203%202-1c1-2%202-11%201-12v-3c0-2%200-3-1-2-1%202-5-5-6-11l-1-5v6m-89-4c-1%204-1%205%201%207v-2c0-3%201-5%203-3%201%202%204%2011%204%2015%201%202%202%203%204%203v-7l-1-6c0-3%200-4-2-5l-9-2M15%20361l-4%201%201%201-1%201h-1l-1%201-1-1c0-3-1-2-3%201-1%202-1%202%203%202h4c1%201%202%202%205%201l7%201h9c5-1%207%200%207%203h3v-2c0-2%200-2%203-2h4l3-1%205-2c1-1%204-1%205%201l1%201%201-1%201-2%202-1-1%202c-1%201-1%202%201%203%202%202%203%201%202-1%200-2%200-2%201-1l3%201%202%201%202%201v-2c-1-1-1-1%201-1%203%202%202%200-2-2s-4-2%202-1l5%201%206-1v-1h-2l-1-1H74l-2%201-2%201c0%202%200%202-1%200l-1-2-22-1a162%20162%200%2000-24%201l-2-1-5%201m130%200v2l-2%202-3%203c0%204-1%204-3-1l-2-3v4c1%203%201%204-1%203l-2%202c0%202%200%202-1%200h-2c-1%201%200%202%201%202v2l-3%201h-7c-5-5-35%202-33%207%201%201%200%201-3%201-2%200-3%200-2%201%202%200%202%201%202%204%200%204%200%204%201%202%201-3%203-3%204-1l-1%202h-1l2%201%201%202h-2c-2-1-7%201-7%203h15c13%200%2015%200%2014-1l-1-4v-2l-1-3c0-2%202-3%202%200l5%203c5%201%207%203%203%203l-2%201%202%201c3%200%204%200%202%201h22c0%202%205%201%209-1l5-3c2%200%206-2%205-3-2-1-1-2%204-3%203%200%204-1%204-2l3-1%203%201%202%201c2%201%203-1%201-2h2l3-1c-1-1%204-5%206-5%203%200%206-3%204-3-2-1-8%201-8%202l-3%201-4-1h-2v-1c2-1%203-2%204-1l3-1-2-2c-2%200-2-2%201-2l2-1-3-1-2%201c0%202-2%201-5-2s-6-4-4-1v4l-1%201c0-2-3-6-5-6l-1-1%202-1c2%200%203%200%202-2s-3-3-2%200l-2-1c-2-2-3-2-10-2l-8%201m198%200c-2%200-2%200-1%202%201%203%200%206-2%205l-2%201h-7c0%204%2012%203%2018-1h3c1%202%200%206-3%206v3c1%201%200%201-1%201-4%201-3%204%200%203%203%200%203%200%202%203-1%202-1%202%203%200%202%200%204-2%203-2-1-2%201-5%203-6%201%200%202-1%202-3l1-2%201%206%201%202v1c-2%200-2%200-1%202h3l4-3%207-1c3-2%204-2%206%200s3%207%201%207l-1-1-1-2-1%202%202%202%201%201h-5c-1-1-1-1-1%201l2%203%202%204c0%202%202%203%205%203l-1-1c-1-2-1-2%201-2l2%202%203%201c2%200%202%200%201-1-2-1-2-1%200-1l4%201c4%203%204%203%204-8l-1-20v-9h-18l-18%201h-21M1%20387v13h8l7-1%201-2%201%201c0%202%201%202%206%202s5%200%204-1l-2-3c0-3-1-5-2-4-1%200-2-1-2-4l-2-7%201-2%202%201v5c1%204%204%205%203%201%200-3%200-3%204-3%203%201%205%200%202-1l-2-3c-1-2%202-1%204%201h2c0-2-1-3-4-3l-5-2-2-1v3c-2%200-5%200-9%202-2%201-3%202-2%205v4l-1-3-3-6c-2-6-3-5-3%201%200%205%200%205-2%203-1-1-2-2%200-3%201-2%200-3-2-2H2v-3c-1-1-1%204-1%2012m49-9l1%203v5c1%201-1%203-6%206-1%201-1%201%204%201l5%201%201%202%201-1%201-2c2%200%202%200%201%202s1%203%203%202c3-2%205-1%205%201%200%203%2014%203%2015%200%200-3-3-6-5-6l1%202c3%202%203%205%200%203s-6-2-6%200l-2%201c-3%200-2-2%202-3l2-1-3-3c-2-2-4-4-5-3l-2-2v-2l2-2h-6l-3-2-2-2c-1-2-3-3-4%200m249%200l-1%201c-1-1-2%202%200%203l1%202v11c-1%203%200%205%201%205l1-2%201-2h2v2c0%202%201%202%2011%202l10-1c0-2-1-4-3-4l-4-5-3-4c0%202-2%201-4-3s-2-4-2%201c0%203%200%202-2%200-5-7-10-10-8-6m-47%2016c-7%201-13%203-13%205a99%2099%200%200030%200v-1l-5-3-4-1h-8'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg"}}},{"id":"ea25109b-23d1-53da-86ff-d9c58a1ea842","slug":"/folders-files-and-everything-in-between","secret":false,"title":"Folders, Files and everything in between","author":"Luke Celitan","date":"June 6th, 2024","dateForSEO":"2024-06-06T00:00:00.000Z","timeToRead":5,"excerpt":"Folders, Files, and the Mayhem That Comes With It","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Folders, Files and everything in between\",\n  \"excerpt\": \"Folders, Files, and the Mayhem That Comes With It\",\n  \"date\": \"2024-06-06T00:00:00.000Z\",\n  \"hero\": \"foldersCover.jpg\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Architecture\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"Nodejs\", \"Nextjs\", \"ReactIcon\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"folders-files-and-the-mayhem-that-comes-with-it\"\n  }, \"Folders, Files, and the Mayhem That Comes With It\"), mdx(\"p\", null, \"Let\\u2019s dive into the fascinating world of project structure and its impact on\\nDeveloper Experience (DX). We\\u2019ll explore how folder organization affects a\\nproject\\u2019s long-term maintainability and scalability.\"), mdx(\"p\", null, \"Buckle up\\u2014this journey might change how you think about your code\\u2019s\\narchitecture! A Developer\\u2019s Perspective As software developers, we\\u2019re constantly\\nwrestling with intricate systems, complex algorithms, and elaborate code.\"), mdx(\"p\", null, \"The complexity of our codebases doesn\\u2019t just impact our productivity\\u2014it\\u2019s a key\\nfactor in the reliability and maintainability of our software. Folders and files\\nare the building blocks of any project, but how do we measure their impact on\\ncomplexity? Is a project with more folders and files inherently more complex? Or\\ncould proper refactoring, testing, and documentation actually make a larger\\nproject less complex?\"), mdx(\"p\", null, \"These are the questions we\\u2019ll be pondering as we search for that elusive \\u201Cmagic\\nratio\\u201D of folders, files, and code that could give us insights into a project\\u2019s\\noverall complexity.\"), mdx(\"h3\", {\n    \"id\": \"the-folder-labyrinth-a-case-study-of-nextjs\"\n  }, \"The Folder Labyrinth: A Case Study of Next.js\"), mdx(\"p\", null, \"Before we embark on our quest for the perfect project structure, let\\u2019s take a\\npeek at one of the most complex open-source projects out there: Next.js. Brace\\nyourself for some mind-bending numbers:\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"codelines\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"All Characters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Folders\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Files\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Deepest Level\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1675551\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"84344594\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"7513\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"16360\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"13\")))), mdx(TreeChart, {\n    folder: nextjs,\n    mdxType: \"TreeChart\"\n  }), mdx(\"p\", null, \"Take a moment to let those figures sink in. Can you imagine navigating through\\n7,513 folders spread across 13 levels of depth? It\\u2019s enough to make even the\\nmost seasoned developer\\u2019s head spin! Next.js serves as a prime example of how\\noverwhelming a project structure can become. At first glance, it\\u2019s clear that\\nmaking meaningful contributions to this behemoth requires a highly dedicated\\ndeveloper. This monorepo encompasses various technologies like Rust and\\nTypeScript, and includes example pages, tests, mysterious experimental folders,\\nplugins, errors, and much more. Despite its incredibly complex structure,\\nNext.js remains a widely popular and well-maintained open-source project. Or\\ndoes it? The sheer amount of code-digging and setup required before contributing\\ngot me thinking: How can proper structure and documentation make a project more\\naccessible and less intimidating? Next.js will serve as our benchmark for\\ncomplexity. But before we dive into our own complexity metric, let\\u2019s explore\\nsome existing methods for calculating project complexity.\"), mdx(\"h3\", {\n    \"id\": \"cyclomatic-complexity-and-the-halstead-volume-metric\"\n  }, \"Cyclomatic Complexity and the Halstead Volume Metric\"), mdx(\"p\", null, \"When searching for code complexity formulas, two metrics often pop up:\\nCyclomatic Complexity and the Halstead Volume Metric. Let\\u2019s break these down\\nbefore we continue our journey.\"), mdx(\"h3\", {\n    \"id\": \"cyclomatic-complexity-unraveling-code-paths\"\n  }, \"Cyclomatic Complexity: Unraveling Code Paths\"), mdx(\"p\", null, \"Introduced by Thomas McCabe in 1976, Cyclomatic Complexity quantifies the number\\nof linearly independent paths through a program\\u2019s source code. Imagine your code\\nas a labyrinth, with each decision point (like an if statement or a loop)\\ncreating a branching path. The more branches, the more complex the code. The\\nformula for Cyclomatic Complexity is:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-math\"\n  }, \"M = E - N + 2P\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(M) represents the cyclomatic complexity.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(E) is the number of edges (control flow paths) in the control graph.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(N) is the number of nodes (decision points) in the graph.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(P) is the number of connected components (usually 1 for a single program).\")), mdx(\"h3\", {\n    \"id\": \"thresholds-and-interpretation\"\n  }, \"Thresholds and Interpretation:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A higher cyclomatic complexity indicates greater code complexity.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Common thresholds:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"1-10: Simple code.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"11-20: Moderately complex code.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"21+: Complex code that needs attention.\")))), mdx(\"p\", null, \"Higher complexity can lead to bugs, maintenance challenges, and reduced code\\nquality. But remember, this metric focuses solely on control flow, not on other\\naspects of code complexity.\"), mdx(\"h3\", {\n    \"id\": \"the-halstead-volume-metric-measuring-code-vocabulary\"\n  }, \"The Halstead Volume Metric: Measuring Code Vocabulary\"), mdx(\"p\", null, \"Proposed by Maurice Howard Halstead in 1977, the Halstead Volume Metric takes a\\ndifferent approach. It analyzes code structure and vocabulary, considering both\\noperators and operands. The formula for the Halstead Volume Metric is:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-math\"\n  }, \"V = N * log2(n)\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(V) represents the volume.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(N) is the program length (sum of operators and operands).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(n) is the total number of unique operators and operands.\")), mdx(\"p\", null, \"Unlike Cyclomatic Complexity, which focuses on control flow, the Halstead metric\\nconsiders the richness of the code\\u2019s vocabulary. It reflects how challenging it\\nis to understand the code due to its unique constructs.\"), mdx(\"h3\", {\n    \"id\": \"a-new-metric-\"\n  }, \"A new metric ?\"), mdx(\"p\", null, \"While commercial tools like SonarQube, Codacy, and Jellyfish provide code\\nquality and complexity metrics, I was looking for a simple metric that could be\\napplied to any software project, regardless of language or framework. Unable to\\nfind existing packages that provided a single meaningful metric for project\\ncomplexity, I decided to create my own.\"), mdx(\"h3\", {\n    \"id\": \"celitans-complexity-measurement-ccm\"\n  }, \"Celitan\\u2019s Complexity Measurement (CCM):\"), mdx(\"p\", null, \"After much consideration, I\\u2019ve developed a new metric called Celitan\\u2019s\\nComplexity Measurement (CCM). Here\\u2019s the formula:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-math\"\n  }, \"CCM = [(0.2 * F/D) + (0.2 * L/400) + (0.2 * C/4000) + (0.1 * T)] * [1 + log(F + D + 1)]\\n\")), mdx(\"p\", null, \"Where:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"F = Number of files\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"D = Number of directories\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"L = Total lines of code\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"C = Total characters\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"T = Tree depth (deepest level of the project structure)\")), mdx(\"p\", null, \"Let\\u2019s break down each component:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"File to Directory Ratio (0.2 \", \"*\", \" F/D): Measures the distribution of files\\nacross directories. A higher ratio indicates more files per directory,\\npotentially increasing complexity.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Normalized Lines (0.2 \", \"*\", \" L/400): Normalizes the total lines of code against\\nan arbitrary maximum of 400 lines per file, contributing to complexity based\\non overall code volume.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Normalized Characters (0.2 \", \"*\", \" C/4000): Similar to normalized lines, this\\nfactor considers the total character count, normalized against an arbitrary\\nmaximum of 4000 characters per file.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Tree Depth (0.1 \", \"*\", \" T): Accounts for the depth of the project structure.\\nDeeper structures are considered more complex, but with less weight than\\nother factors.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Scale Factor \", \"[1 + log(F + D + 1)]\", \": This logarithmic scale factor increases\\nthe complexity measurement as the total number of files and directories\\ngrows, but at a decreasing rate.\")), mdx(\"p\", null, \"The formula combines these elements to produce a single complexity score. The\\nbase complexity is calculated as a weighted sum of the first four factors, then\\nmultiplied by the scale factor to account for overall project size. To give you\\nan idea of how this metric scales, here\\u2019s a table showing complexity scores for\\nprojects of varying sizes:\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Project\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Files\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Directories\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Total Lines\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Total Chars\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Tree Depth\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Complexity\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"A\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"69\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"644\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"B\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"500\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"7\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"D\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"4\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"12\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"E\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"45\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"F\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"15\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"6\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"93\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"G\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"200\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"200000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"7\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"199\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"H\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"500\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"30\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"500000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"8\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"544\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"I\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"9\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1157\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"J\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"200000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2000000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2467\")))), mdx(\"p\", null, \"The metric is calibrated so that a basic \\u201CHello World\\u201D project in Express.js has\\na complexity of 1, serving as our baseline. For reference, that project has one\\nfolder, 2 files (index.js and package.json), 39 lines of code, 644 characters,\\nand a tree depth of 1.\"), mdx(\"h3\", {\n    \"id\": \"visualizing-the-complexity-curve\"\n  }, \"Visualizing the Complexity Curve\"), mdx(\"p\", null, \"If we plot these values, we can see how the complexity score grows with the size\\nof the project. The growth isn\\u2019t linear\\u2014it increases more rapidly as projects\\nbecome larger and more intricate. This reflects the real-world experience that\\nmanaging very large projects becomes exponentially more challenging.\"), mdx(LineChartComplexity, {\n    data: complexityGraphData,\n    mdxType: \"LineChartComplexity\"\n  }), mdx(\"h3\", {\n    \"id\": \"complexity-in-practice\"\n  }, \"Complexity in Practice\"), mdx(\"p\", null, \"To truly measure the effectiveness of our Celitan\\u2019s Complexity Measurement\\n(CCM), we need to put it to the test in real-world scenarios. Applying the\\nformula to various starter projects across different frameworks and languages\\nwill give us a more concrete understanding of its performance. This practical\\napproach will allow us to see if the CCM accurately reflects the perceived\\ncomplexity of these projects from a developer\\u2019s perspective.\"), mdx(\"h4\", {\n    \"id\": \"the-popular-starter-projects-from-the-biggest-frontend-frameworks\"\n  }, \"The popular starter projects from the biggest frontend frameworks\"), mdx(\"div\", {\n    style: {\n      \"height\": \"25px\"\n    }\n  }), mdx(ComplexityChart, {\n    data: complexityScoresStarters.projects,\n    labelKey: true,\n    mdxType: \"ComplexityChart\"\n  }), mdx(\"p\", null, \"You can check the folder structre of those projects below, select from the\\ndropdown to see the folder structure of the project.\"), mdx(TreeChartChanger, {\n    folders: [angularStarter, reactStarter, svelteStarter, nestStarter, vueStarter],\n    mdxType: \"TreeChartChanger\"\n  }), mdx(\"h4\", {\n    \"id\": \"complexity-scores-on-the-projects-from-the-biggest-frontend-frameworks\"\n  }, \"Complexity scores on the projects from the biggest frontend frameworks\"), mdx(\"div\", {\n    style: {\n      \"height\": \"25px\"\n    }\n  }), mdx(ComplexityChart, {\n    data: complexityScores.projects,\n    labelKey: true,\n    mdxType: \"ComplexityChart\"\n  }), mdx(TreeChartChanger, {\n    folders: [angular, react, svelte, nest, vue, nextjs],\n    mdxType: \"TreeChartChanger\"\n  }), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Next.js project ended up with +2 mil complexlity score, is it justified ?\")), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Do the results align with your intuition and experience?\")), mdx(\"h3\", {\n    \"id\": \"feedback-and-refinement\"\n  }, \"Feedback and Refinement\"), mdx(\"p\", null, \"By comparing the formula\\u2019s output with the collective wisdom of developers, we\\ncan fine-tune the metric, adjust its parameters if necessary, and ultimately\\ncreate a more robust and reliable measure of project complexity. This iterative\\nprocess of testing, gathering feedback, and refining will be key to developing a\\ntruly useful complexity measurement tool for the development community.\"), mdx(\"p\", null, \"Any thoughts on the results ? Let me know at \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"mailto:luke@spaceout.pl\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"luke@spaceout.pl\")), mdx(\"h3\", {\n    \"id\": \"implementation\"\n  }, \"Implementation\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"interface ProjectStructure {\\n  files: number;\\n  directories: number;\\n  totalLines: number;\\n  totalChars: number;\\n  treeDepth: number;\\n}\\n\\nfunction calculateComplexity(project: ProjectStructure): number {\\n  const { files, directories, totalLines, totalChars, treeDepth } = project;\\n\\n  const fileToDirectoryRatio = files / directories;\\n  const normalizedLines = totalLines / 400; // 400 lines = max lines per file (arbitary, can be adjustable)\\n  const normalizedChars = totalChars / 4000; // 4000 chars = max chars per file (arbitary, can be adjustable)\\n\\n  const baseComplexity =\\n    fileToDirectoryRatio * 0.2 +\\n    normalizedLines * 0.2 +\\n    normalizedChars * 0.2 +\\n    deepestLevel * 0.1;\\n\\n  const scaleFactor = 1 + Math.log(files + directories + 1);\\n  return baseComplexity * scaleFactor;\\n}\\n\")), mdx(\"p\", null, \"Whole project is published on npm as project-analyzer, published to npm\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.npmjs.com/package/project-analyzer\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://www.npmjs.com/package/project-analyzer\"), \",\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"npm i -g project-analyzer\\n\")), mdx(\"p\", null, \"you can also find the source for the project on\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/ProjectAnalyzer\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://github.com/MassivDash/ProjectAnalyzer\")), mdx(\"h3\", {\n    \"id\": \"practical-applications\"\n  }, \"Practical Applications\"), mdx(\"p\", null, \"This formula is highly customizable. You can adjust the normalization factors\\nand weights to better suit your specific project types or development practices.\\nFor instance, if your projects tend to have deeper folder structures, you might\\nincrease the weight of the tree depth factor. Some potential applications of\\nthis complexity metric include:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Estimating development time and resources for new projects\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Identifying overly complex parts of a system that might need refactoring\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Comparing different solutions or architectures for the same problem\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tracking project complexity over time to ensure it doesn\\u2019t grow uncontrollably\")), mdx(\"h3\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"Quantifying project complexity isn\\u2019t an exact science, but having a consistent,\\ncustomizable method can provide valuable insights. This formula offers a\\nstarting point for teams to measure and discuss project complexity in a more\\nobjective manner.\"), mdx(\"p\", null, \"Remember, the goal isn\\u2019t to achieve the lowest complexity score possible, but to\\nunderstand your projects better and make informed decisions about architecture,\\nrefactoring, and resource allocation.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","Nodejs","Nextjs","ReactIcon"],"category":"Post","appDescription":"Architecture","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB8c9HPKICPZZpCX//xAAaEAEBAQEAAwAAAAAAAAAAAAABAgADEhQh/9oACAEBAAEFAoHovzR3qQrn6ziTeToVsiU//8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EABwQAAICAwEBAAAAAAAAAAAAAAABAhEQITESQf/aAAgBAQAGPwK9+S/uIxUqeNs6JWcP/8QAGxAAAgMBAQEAAAAAAAAAAAAAAREAITFBEKH/2gAIAQEAAT8hPQcNfJchxsXWDbsREi7b2IQQr5FMPMdBImPB+p//2gAMAwEAAgADAAAAEPjnQv/EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCoqIiI/8QAFxEAAwEAAAAAAAAAAAAAAAAAABFRYf/aAAgBAgEBPxBoNBqaH//EABsQAQEBAQEBAQEAAAAAAAAAAAERACExcUFR/9oACAEBAAE/ELAk8BFOF+6Tc+QIHzJElVUdPwBID12zOsxxDxN+i/5NPxb0lB3Hqny1v//Z","aspectRatio":1,"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/58fe7/foldersCover.jpg","srcSet":"/static/ca172036b2d78c49ceae0cdeb5723e5b/e0f30/foldersCover.jpg 236w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/86afd/foldersCover.jpg 472w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/58fe7/foldersCover.jpg 944w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/99fbb/foldersCover.webp","srcSetWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/77392/foldersCover.webp 236w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/1f177/foldersCover.webp 472w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/99fbb/foldersCover.webp 944w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/9000d/foldersCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M12%202c7%203%207%203%200%203H8l8%202c2%200%202%201%202%202v2l3%201%201-1v-1c2-1%205%201%205%203l4%201%203-1%201-1%201-1c-1-1%200-2%201-2%201-1%201%201-1%207-1%203-1%203%201%203h1v-2l2-5%203-5-1%204v5h4l1%202%201%202-1%203v-1l-1-2-1-1c-1-2-4%200-4%203%200%202%200%202-4%201-3-1-3-2-1-2h-1l-7-1h-4c-1%202-2-1-1-3%201-3-7-7-9-4-1%201-2%202-1%200l-3-2c-3-1-4-1-3%201l-1%202-2%202c-1%202-1%202-1%200s-3-4-3-2l1%201v1l-1%208c0%205%200%206%201%204v16l1-2%201-5v1c0%201%201%202%203%202l3%202-2%201H5l1%201%202%201c1%200%202-1%202-3%201-1%201-2%202-1l2%201c1%201%201%201-1%201-3%200-3%203%200%203%202%201%202%200%203-1%200-2%200-2%202%200s2%203%200%203v1l-1%201-4%2011%205%201c7%201%209%203%204%203l-4-1-8-1c0%201%209%204%2013%204l3%201-2%201h-3l-1%201-1-1c1%200-6-3-7-2l-5-2c-7-2-7-2-7%206%200%205%200%206%202%207%202%200%203%204%201%204l-1-1c0-3-2-2-2%200s0%203%202%203c1-1%203%200%206%201l4%201-5-1H3c1%201%2018%205%2020%204l3%202c2%202-4%201-13-1-3-1-6-2-7-1H2c-6%200%200%203%208%203l1%201%202%201%201%201h-4c-3-1-3-1-3%201v2l-2-3c0-1-1-2-3-2-2-1-2-1-2%205l1%207v1L0%20253v147h289v-3l2-2v-1h-2c-2%202-1-1%201-6l2-5c-1-1%203-6%204-6l2%202c2%203%201%209-1%208-1-1-1%200-1%201l-1%202h-1v3c0%201%200%202%201%201l3-1c2%200%203%200%203-2%200-4%204-5%204-1%200%202%200%202%201%200l3-2c1%200%201%201-1%205l-1%204v1l-1%201h13c0%202%205%201%205-1h1c0%202%205%203%205%201h1l13%201h12v-3c0-5%200-5-4-12l-4-7-4%201c-5%200-8-4-6-11v-6l-10%201h-3l-1-1h-1l23-2c7%201%207%201%209%203%201%203%203%204%203%202l-1-1-1-3h1l4%201c3-1%204%200%204%205%200%202%200%202%201%201l1-4v-3h19c2%200%203%200%204%202s1%202%201%200c1-1%201-1%201%201l1%205c2%200%202-1%201-3-1-5-1-5%201-5l1%201v1l1-1%201-1v4l1%204%201%202c0%202-1%202-8%202-14%200-14%200-13%202h4c4-1%207%200%2011%206l3%207%201%201c1%200%202%202%202%205l1%205a11128%2011128%200%2000-1-292c0%202-1%203-4%202l-3-1%203-3%204-2%201-6c0-4%200-6-1-5%200%203-2%202-2-1l1-1c3%200%202-11-1-15s-2-5%201-1l2%202v-7l-1-6v4l-1%202v1l-3-1-3-3%202-2%201-2-2%201c-2%202-2%201-5-2l-3-5-1-1c-1%201-1%201%200%200l-2-3c-3-2-2-3%202-2%201%201%202%201%202-1l1-1c1%201%203-2%202-3h-1l-1%201h-1l-1%201h-1l-3%201c-2%201-2%200-2-1v-1h-2c-1-1%207-5%208-4l1-2c1-2%200-1-7%202-8%205-8%204-8-11l-1-10-1-10c0-11%201-12%201-1l1%207%206-7%201-1v3c2%200%203-3%202-4-2-1-2-1%200-5l2-3h-22l1%204-1%203-1-1h-1c-1%202%200%203%202%203s3%202%200%203v3c1%202%200%207-1%206v5c0%205%200%205-2%204-2-2-11-2-20%200h-4v-3l2-4-1-4c-2%200-3%203-2%207v5h-5l-3%201-4-1c0-2%203-3%204-2l1%201v-1l-1-3c0-2-3-4-4-3l1%202c3%201%202%202-1%202s-3%200-2%201%201%201-2%201c-2%200-3%200-3-2s1-2%204-1h3l-2-2c-2-2-2-3-2-5l-1%201h-3c0-2-1-2-3-1l-3%201c-2%200-3%201-4%205l-1%203-1%202c-1%203-1%203-1-2l-1-9c0-1%200-2%202-2%202-1%202-2%202-8l-1-8-8%208v1c-2%201-4-8-3-9l1%201h1c2-1%200-2-4-2-5%200-5%200-1%207a67%2067%200%20014%2010c1%202%201%202%201%200l1-3v-1l-1-1c0-2%204-1%205%202s1%203-2%203-3%203-1%2010%203%2011%201%2010l-2-7c-1-5-2-5-2-3v4l-1%203c-1%203-1%203-1-2%200-16-1-22-3-18h-3l-2-1h2l2-1h1l-2-6-3-5-46-1a553%20553%200%2000-49%201l-49-1C95%200%2089%200%2089%202v1l-1-1c0-2-1-2-5-2-5%200-6%200-7%203%200%202-2%203-2%203-2%200-2%200%200-2%203-3%202-4-8-4l-9%201%203%202h9l1-1%201%202-1%201-2%205-5%204h-1l-5%201c-4-1-4-1-2-4%201-1%202-2%204-1h4l-4-1c-4-2-5-2-7%200%200%202-1%202-2%200l-2-2h4c0-1-4-2-5-1V3c1-4%200-4-2-1l-1%203V2c1-2%200-2-4-2l-5%201h-1L20%200H7l5%202m292%205l1%208%209%201c2%200%203%200%203-2l-1-1c-2%201-1-2%202-5l1-4V3l2-1h1l-5-2-4%201v1l-2-1c0-1-2%200-2%202l2%201c1-1%202%200%202%201%201%202-1%204-3%203V7l1-2-2%201-1-2V1c1-1%200-1-1-1h-3v7m40-1l-2%202c-3%200-3%202%200%208%204%207%204%207%205%206h3c3%202%2010%201%207-1v-3l-1-1c-1%201-3-1-5-5-2-3-2-3%200-3l1-1h-4c-2%200-3%200-3-2h-1M159%2041v3c-1%202-1%202%202%203%204%201%205%201%202%201s-3%200-1%201h8l5-1%206-1c6%201%204%200-6-3-12-4-16-5-16-3M4%2047l-1%202v-1l-1-1c-1%200-2%203-2%209s0%206%203%206l2-1v-2h5c1%202%202%201%203-4l1-7-2%202-1%201v-2l-1-1-1%201H6l-1-1v-1H4m140%203l-1%201h-1l-2%203v2c2%200%201%202-7%209l-10%2010-1%2011v12l13-9%2012-9V67c0-12%200-13%202-14l2-2h-1l-1%201-4%202c-3%202-4%202-2-1l2-3h-1m0%2035a117%20117%200%2001-21%2015l2%204c1%203%201%203%201%201v-3l1-1v15l-2%203-4%202c-2%202-3%202-4%201l-1-1-1%201c1%201%200%202-2%203-3%202-3%202-5%201l-1-1v2c2%201%201%201-8%207l-8%204h-2c-2-1-5%201-3%203l-1-1-1%201c1%201%200%203-2%204l-9%207-5%204v-13c0-14%200-14%202-15s2-1%200-1c-4%200-8%207-8%2014l1%206%201%207v7l-7%207-7%207v-6c1-6%200-6-3-3-3%202-3%204-3%209s0%206-4%2012c-9%2014-16%2031-18%2045%200%205-1%206-3%207-3%202-3%202-1%202h3c0%202-1%202-3%202-3%200-4%200-4%202l3%201%203%201h-2l-3%201h2l1%203c0%202%200%203%201%202%200-3%203-2%203%200%202%205%201%206-3%206l-3%201h4c4%200%205%201%203%202-1%201%203%207%2010%2017l6%207h91l-1-4c0-4%200-5%202-5v-1l-2-1-1-1-4-8c0-2%200-2%202%200l2%204%204%202-2-2-1-5c1-2%201-2%203%202%203%206%204%209%202%207-3-2-2-1%202%206l3%206h16c14%200%2015%200%2015-2l-13-31h-11a806%20806%200%2001-18%204c-3%203-4%203-4-4v-5l-1%205-1%206-1-4-2-5-8-1c-4%200-4%200%202-1%205-1%205-2%203-2l-3-1-2-3c-2-2-1-14%202-14v1c-2%202-1%203%201%202%203-3%207-2%2010%204%202%204%202%208%200%206l-1%201%201%202%201%201-1%201h-1l1%202%201-1%201-1c1%201%202-8%202-13-1-2-1-3%201-4%204-1%206%200%208%203%201%202%201%202%201%200l-3-5c-2-3-3-3-3-2%200%202%200%203-4%203-4%201-4%201-5-2l-2-3v-2h-2v-1l-1-1v-2c-1%200-1-1%201-2l2-1%201-1c0-1%201-1%201%201%202%202%202%201%201-2-1-2-1-2%201-2s3%200%203-2l1-3%201-1-1-1c-1%201-1-1-1-4v-6l-1%208c0%203%200%204-2%205-3%201-3%201-3-1l2-2v-2l-1-1c-1%201-1%200-1-2l1-3%201-2-1-2-1-4c0-5%201-5%202%200%201%202%201%201%201-1%200-5-2-8-3-7l-1%202-2%208c-2%205-2%205%200%205%203%201%202%208%200%2011-2%201-2%201-2-1%200-1%200-2-1-1l-1-5c0-6-3-13-3-8l-3%203c-6%203-6%203-3-13l1-7%207-3c5-3%206-3%205-6l1-3c2-2%203-1%203%201l-2%207-1%201c-2-2-6%201-7%204-2%203-2%203-2%201s0-2-1%201c-1%204%200%206%201%203%201-1%201-1%201%201s1%203%203%201c3-3%209-6%2010-5l1-1%2010-6-2%204c-3%203-2%203%202%201%204-1%209-3%207-1l1%203c2%202%203%203%203%201%200-3%205-8%2010-10l5-4-4%201-6%202c-2-1-5%201-4%203v1l-2-2-2-2v1l-2%201c-4%200-4-1%200-3l8-5-4%201c-5%203-8%204-8%203l7-4%207-3v-20a32260%2032260%200%2001-2-34l-2%201h-1v-1l-1-1h-1l-2%203v1c3-1%203%203%200%205-2%202-2%202-3%200l-1-2-2-1c-2%200-5%204-3%204l1%203v3l1-3c2-3%202-3%203-2%201%200%201%201-1%202l-2%206-1%203-1%201h3l-1%202v2l-1%202-1%201%201%201v8c0%202-1%203-2%202h-1l1%202c2-1%202%201%202%205-1%202-1%203-2%202h-1c0%202-6%206-6%205h-2l-4%201%202-6v-9c-1-3-1-3%202-5l2-3%201-1%201%204c-1%203%200%205%201%206h1l1-2v-1c-2-2-2-3%200-5v-2l-1%201c-1%201-1-1-1-3%200-4%201-6%203-10%202-3%202-4%201-4-3%200-4-3-2-4l2-2-2%201c-1%201-2%200-2-6v-7l1-1%201%201v1l1-1c-1-1%200-2%201-1v-1c-2-1-2-1%202-1%202-1%202%200%202%204l1%204v-7c0-4%200-5%201-4l1-1c-1%200%200-2%202-3l3-1-2%202-2%202%202-1c3%200%203%205%200%208-3%202-2%203%201%201s8-7%207-8l-3%202-2%202v-4l2-7c2-3%200-3-4-1m54%202c-4%202-6%203-4%203s0%202-3%202v-2c-3%200-5%202-2%202v1h-8l3%201v3c1%201%200%202-1%203-4%202-1%201%205-1%202-1%205-2%206-1%202%200%202%200%201-1h1c2%200%202%200%201-1-2-1%202-3%204-1l1-1v-1l4%204%203%206c3%202%205%205%205%206h-2v2l-1%201%203-1c3%200%203-2%202-3s0-1%201-2h3c-3%202-3%202-1%202h2c1-1%201%200%201%202l1%203V99h4c5%201%2012-1%2012-2%200-2-4-6-8-8-1-1-4%200-13%203-10%203-11%203-13%202v-2l5-2c2-1%202-1%200-1l-4%202c-2%200-2-1-2-4v-3l-6%203m-41%205l-3%202v8l1%203c0%202%200%202%203%202l2%201v1l3-1c1-2%202-1%202%201l-2%204c-3%201-4%206-2%206l1-1h3c2%201%203%201%204-1%202-2%203-9%201-9l-1%203-1%202-2-1h1l1-2c0-3-2-4-5-4-3-1-3-2-1-2%203-1%203-13%201-13l-2%201c-2%202-3%201-2-1%200-3%200-3-2%201m50%2015l-2%201h-2l-10%204c-7%202-10%204-9%204%201%201%201%201-1%201h-1c1%201%201%201-1%201-2%201-3%204-1%204l1-1h2c2%200%202%200%201-1l-1-1h2l2%201v-1c-1%200%200-2%202-2v1h4l3-2%201-1c2%202%2013-2%2013-4l-3-1h-2l4-2c3-1%203-1%201-1h-3m15%2020l-1%205a77%2077%200%2000-14%205h2l2%201c3-1%203-1%203%204%200%207%201%208%205%207l4-1v-7c0-4%200-6%202-6l1-4c0-3%200-4-1-3-1%200-2-1-2-3-1-3-1-2-1%202m-29%2084c-2%202-3%203-5%203-3%200-3%200-3%203l3%204v2l-1%202h16l-8%201-10%202h7l6%201-5%201-7%201%2022-1c16-1%2016-1%2016-4h-1c-1%202-23%204-23%202l9-1%2011-2c4-1%205-4%202-4-2%200-2%200-1%201l1%202-2-1h-1l-7%201%203-1c2-1%201-1-2-1-4%200-4%200-3%202v1c-1%200-2%200-1-1l-9-1h-8l2-1c0-3-1-6-3-6l1-1h4v-5c0-3%200-3-3%201m-33%207l-5%202v7c0%207%200%207%202%207h12v-9c0-9%201-9-9-7m78%2014a153%20153%200%2000-18%202c-2%200-1%202%201%203h1c0-1%202%200%203%202%203%203%204%204%206%203h3l-3%201c-2%202-2%202%207%202a354%20354%200%200126-2c1-1%202-2%203-1l-4-7c-4-6-3-6-25-3m33%2046c2%201%200%202-4%201-3%200-2%201%203%204%206%203%206%203%2018%203h13l-6-4-7-4h-5l-2%201c-3-2-12-2-10-1M57%20317c0%202%200%202-3%202-2%200-3%201-4%203-2%205%201%208%206%207h3v-8l-1-7-1%203m170%200l-2%202c-2%200-3%202-4%204l-1%204-1-4c-2-4-2-4-6-4h-4v6l1%205%201-5c0-4%203-6%205-4%203%204%203%209%202%2010-2%202-2%203-1%203%202%200%204-4%206-10%202-5%203-5%204%201l1%204h4l-1-1c-3%200-2-6%200-8v-1l-2-1-1-2-1%201m36%203l-1%207c1%207%201%208%207%207%204-1%203-5-2-6-3%200-4-2-1-2%202%200%203-2%204-5%201-2%200-2-3-2l-4%201m49%2044l-1%203h-2c-5-1-5-1-6%203%200%203%200%203%202%203s2%200%202%204c-1%204%200%205%203%203%202-2%201-1-1%203l-1%204c1%200%203-1%203-3l3-2%201-1c1-1%204%200%203%202l2%201v-2c2%201%202%200%202-1%200-2%201-2%203-2%203%200%204%201%203%205%200%201%201%201%202-1s2-2%202-1h1l2-1c2%200%203%200%202-2l-1-2h-4l-4-1h-11a145%20145%200%20000-6l5-6-2-1-1%201c1%201-3%202-4%201l1-1%203-2c1-1%201-1-2-1-2%200-3%201-5%203m56%2011c0%2011%200%2011%204%2018l4%207-1-3-1-4%203%203c1%204%204%206%202%202l1-1c2%202%200-3-2-5l-2-2-3-8-4-12c-1-6-1-5-1%205'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB8c9HPKICPZZpCX//xAAaEAEBAQEAAwAAAAAAAAAAAAABAgADEhQh/9oACAEBAAEFAoHovzR3qQrn6ziTeToVsiU//8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EABwQAAICAwEBAAAAAAAAAAAAAAABAhEQITESQf/aAAgBAQAGPwK9+S/uIxUqeNs6JWcP/8QAGxAAAgMBAQEAAAAAAAAAAAAAAREAITFBEKH/2gAIAQEAAT8hPQcNfJchxsXWDbsREi7b2IQQr5FMPMdBImPB+p//2gAMAwEAAgADAAAAEPjnQv/EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCoqIiI/8QAFxEAAwEAAAAAAAAAAAAAAAAAABFRYf/aAAgBAgEBPxBoNBqaH//EABsQAQEBAQEBAQEAAAAAAAAAAAERACExcUFR/9oACAEBAAE/ELAk8BFOF+6Tc+QIHzJElVUdPwBID12zOsxxDxN+i/5NPxb0lB3Hqny1v//Z","aspectRatio":1,"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/1dc0b/foldersCover.jpg","srcSet":"/static/ca172036b2d78c49ceae0cdeb5723e5b/3a5ce/foldersCover.jpg 163w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/05730/foldersCover.jpg 327w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/1dc0b/foldersCover.jpg 653w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/f72c7/foldersCover.jpg 980w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/0acdf/foldersCover.webp","srcSetWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/ac59e/foldersCover.webp 163w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/7660b/foldersCover.webp 327w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0acdf/foldersCover.webp 653w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/75470/foldersCover.webp 980w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/9000d/foldersCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M12%202c7%203%207%203%200%203H8l8%202c2%200%202%201%202%202v2l3%201%201-1v-1c2-1%205%201%205%203l4%201%203-1%201-1%201-1c-1-1%200-2%201-2%201-1%201%201-1%207-1%203-1%203%201%203h1v-2l2-5%203-5-1%204v5h4l1%202%201%202-1%203v-1l-1-2-1-1c-1-2-4%200-4%203%200%202%200%202-4%201-3-1-3-2-1-2h-1l-7-1h-4c-1%202-2-1-1-3%201-3-7-7-9-4-1%201-2%202-1%200l-3-2c-3-1-4-1-3%201l-1%202-2%202c-1%202-1%202-1%200s-3-4-3-2l1%201v1l-1%208c0%205%200%206%201%204v16l1-2%201-5v1c0%201%201%202%203%202l3%202-2%201H5l1%201%202%201c1%200%202-1%202-3%201-1%201-2%202-1l2%201c1%201%201%201-1%201-3%200-3%203%200%203%202%201%202%200%203-1%200-2%200-2%202%200s2%203%200%203v1l-1%201-4%2011%205%201c7%201%209%203%204%203l-4-1-8-1c0%201%209%204%2013%204l3%201-2%201h-3l-1%201-1-1c1%200-6-3-7-2l-5-2c-7-2-7-2-7%206%200%205%200%206%202%207%202%200%203%204%201%204l-1-1c0-3-2-2-2%200s0%203%202%203c1-1%203%200%206%201l4%201-5-1H3c1%201%2018%205%2020%204l3%202c2%202-4%201-13-1-3-1-6-2-7-1H2c-6%200%200%203%208%203l1%201%202%201%201%201h-4c-3-1-3-1-3%201v2l-2-3c0-1-1-2-3-2-2-1-2-1-2%205l1%207v1L0%20253v147h289v-3l2-2v-1h-2c-2%202-1-1%201-6l2-5c-1-1%203-6%204-6l2%202c2%203%201%209-1%208-1-1-1%200-1%201l-1%202h-1v3c0%201%200%202%201%201l3-1c2%200%203%200%203-2%200-4%204-5%204-1%200%202%200%202%201%200l3-2c1%200%201%201-1%205l-1%204v1l-1%201h13c0%202%205%201%205-1h1c0%202%205%203%205%201h1l13%201h12v-3c0-5%200-5-4-12l-4-7-4%201c-5%200-8-4-6-11v-6l-10%201h-3l-1-1h-1l23-2c7%201%207%201%209%203%201%203%203%204%203%202l-1-1-1-3h1l4%201c3-1%204%200%204%205%200%202%200%202%201%201l1-4v-3h19c2%200%203%200%204%202s1%202%201%200c1-1%201-1%201%201l1%205c2%200%202-1%201-3-1-5-1-5%201-5l1%201v1l1-1%201-1v4l1%204%201%202c0%202-1%202-8%202-14%200-14%200-13%202h4c4-1%207%200%2011%206l3%207%201%201c1%200%202%202%202%205l1%205a11128%2011128%200%2000-1-292c0%202-1%203-4%202l-3-1%203-3%204-2%201-6c0-4%200-6-1-5%200%203-2%202-2-1l1-1c3%200%202-11-1-15s-2-5%201-1l2%202v-7l-1-6v4l-1%202v1l-3-1-3-3%202-2%201-2-2%201c-2%202-2%201-5-2l-3-5-1-1c-1%201-1%201%200%200l-2-3c-3-2-2-3%202-2%201%201%202%201%202-1l1-1c1%201%203-2%202-3h-1l-1%201h-1l-1%201h-1l-3%201c-2%201-2%200-2-1v-1h-2c-1-1%207-5%208-4l1-2c1-2%200-1-7%202-8%205-8%204-8-11l-1-10-1-10c0-11%201-12%201-1l1%207%206-7%201-1v3c2%200%203-3%202-4-2-1-2-1%200-5l2-3h-22l1%204-1%203-1-1h-1c-1%202%200%203%202%203s3%202%200%203v3c1%202%200%207-1%206v5c0%205%200%205-2%204-2-2-11-2-20%200h-4v-3l2-4-1-4c-2%200-3%203-2%207v5h-5l-3%201-4-1c0-2%203-3%204-2l1%201v-1l-1-3c0-2-3-4-4-3l1%202c3%201%202%202-1%202s-3%200-2%201%201%201-2%201c-2%200-3%200-3-2s1-2%204-1h3l-2-2c-2-2-2-3-2-5l-1%201h-3c0-2-1-2-3-1l-3%201c-2%200-3%201-4%205l-1%203-1%202c-1%203-1%203-1-2l-1-9c0-1%200-2%202-2%202-1%202-2%202-8l-1-8-8%208v1c-2%201-4-8-3-9l1%201h1c2-1%200-2-4-2-5%200-5%200-1%207a67%2067%200%20014%2010c1%202%201%202%201%200l1-3v-1l-1-1c0-2%204-1%205%202s1%203-2%203-3%203-1%2010%203%2011%201%2010l-2-7c-1-5-2-5-2-3v4l-1%203c-1%203-1%203-1-2%200-16-1-22-3-18h-3l-2-1h2l2-1h1l-2-6-3-5-46-1a553%20553%200%2000-49%201l-49-1C95%200%2089%200%2089%202v1l-1-1c0-2-1-2-5-2-5%200-6%200-7%203%200%202-2%203-2%203-2%200-2%200%200-2%203-3%202-4-8-4l-9%201%203%202h9l1-1%201%202-1%201-2%205-5%204h-1l-5%201c-4-1-4-1-2-4%201-1%202-2%204-1h4l-4-1c-4-2-5-2-7%200%200%202-1%202-2%200l-2-2h4c0-1-4-2-5-1V3c1-4%200-4-2-1l-1%203V2c1-2%200-2-4-2l-5%201h-1L20%200H7l5%202m292%205l1%208%209%201c2%200%203%200%203-2l-1-1c-2%201-1-2%202-5l1-4V3l2-1h1l-5-2-4%201v1l-2-1c0-1-2%200-2%202l2%201c1-1%202%200%202%201%201%202-1%204-3%203V7l1-2-2%201-1-2V1c1-1%200-1-1-1h-3v7m40-1l-2%202c-3%200-3%202%200%208%204%207%204%207%205%206h3c3%202%2010%201%207-1v-3l-1-1c-1%201-3-1-5-5-2-3-2-3%200-3l1-1h-4c-2%200-3%200-3-2h-1M159%2041v3c-1%202-1%202%202%203%204%201%205%201%202%201s-3%200-1%201h8l5-1%206-1c6%201%204%200-6-3-12-4-16-5-16-3M4%2047l-1%202v-1l-1-1c-1%200-2%203-2%209s0%206%203%206l2-1v-2h5c1%202%202%201%203-4l1-7-2%202-1%201v-2l-1-1-1%201H6l-1-1v-1H4m140%203l-1%201h-1l-2%203v2c2%200%201%202-7%209l-10%2010-1%2011v12l13-9%2012-9V67c0-12%200-13%202-14l2-2h-1l-1%201-4%202c-3%202-4%202-2-1l2-3h-1m0%2035a117%20117%200%2001-21%2015l2%204c1%203%201%203%201%201v-3l1-1v15l-2%203-4%202c-2%202-3%202-4%201l-1-1-1%201c1%201%200%202-2%203-3%202-3%202-5%201l-1-1v2c2%201%201%201-8%207l-8%204h-2c-2-1-5%201-3%203l-1-1-1%201c1%201%200%203-2%204l-9%207-5%204v-13c0-14%200-14%202-15s2-1%200-1c-4%200-8%207-8%2014l1%206%201%207v7l-7%207-7%207v-6c1-6%200-6-3-3-3%202-3%204-3%209s0%206-4%2012c-9%2014-16%2031-18%2045%200%205-1%206-3%207-3%202-3%202-1%202h3c0%202-1%202-3%202-3%200-4%200-4%202l3%201%203%201h-2l-3%201h2l1%203c0%202%200%203%201%202%200-3%203-2%203%200%202%205%201%206-3%206l-3%201h4c4%200%205%201%203%202-1%201%203%207%2010%2017l6%207h91l-1-4c0-4%200-5%202-5v-1l-2-1-1-1-4-8c0-2%200-2%202%200l2%204%204%202-2-2-1-5c1-2%201-2%203%202%203%206%204%209%202%207-3-2-2-1%202%206l3%206h16c14%200%2015%200%2015-2l-13-31h-11a806%20806%200%2001-18%204c-3%203-4%203-4-4v-5l-1%205-1%206-1-4-2-5-8-1c-4%200-4%200%202-1%205-1%205-2%203-2l-3-1-2-3c-2-2-1-14%202-14v1c-2%202-1%203%201%202%203-3%207-2%2010%204%202%204%202%208%200%206l-1%201%201%202%201%201-1%201h-1l1%202%201-1%201-1c1%201%202-8%202-13-1-2-1-3%201-4%204-1%206%200%208%203%201%202%201%202%201%200l-3-5c-2-3-3-3-3-2%200%202%200%203-4%203-4%201-4%201-5-2l-2-3v-2h-2v-1l-1-1v-2c-1%200-1-1%201-2l2-1%201-1c0-1%201-1%201%201%202%202%202%201%201-2-1-2-1-2%201-2s3%200%203-2l1-3%201-1-1-1c-1%201-1-1-1-4v-6l-1%208c0%203%200%204-2%205-3%201-3%201-3-1l2-2v-2l-1-1c-1%201-1%200-1-2l1-3%201-2-1-2-1-4c0-5%201-5%202%200%201%202%201%201%201-1%200-5-2-8-3-7l-1%202-2%208c-2%205-2%205%200%205%203%201%202%208%200%2011-2%201-2%201-2-1%200-1%200-2-1-1l-1-5c0-6-3-13-3-8l-3%203c-6%203-6%203-3-13l1-7%207-3c5-3%206-3%205-6l1-3c2-2%203-1%203%201l-2%207-1%201c-2-2-6%201-7%204-2%203-2%203-2%201s0-2-1%201c-1%204%200%206%201%203%201-1%201-1%201%201s1%203%203%201c3-3%209-6%2010-5l1-1%2010-6-2%204c-3%203-2%203%202%201%204-1%209-3%207-1l1%203c2%202%203%203%203%201%200-3%205-8%2010-10l5-4-4%201-6%202c-2-1-5%201-4%203v1l-2-2-2-2v1l-2%201c-4%200-4-1%200-3l8-5-4%201c-5%203-8%204-8%203l7-4%207-3v-20a32260%2032260%200%2001-2-34l-2%201h-1v-1l-1-1h-1l-2%203v1c3-1%203%203%200%205-2%202-2%202-3%200l-1-2-2-1c-2%200-5%204-3%204l1%203v3l1-3c2-3%202-3%203-2%201%200%201%201-1%202l-2%206-1%203-1%201h3l-1%202v2l-1%202-1%201%201%201v8c0%202-1%203-2%202h-1l1%202c2-1%202%201%202%205-1%202-1%203-2%202h-1c0%202-6%206-6%205h-2l-4%201%202-6v-9c-1-3-1-3%202-5l2-3%201-1%201%204c-1%203%200%205%201%206h1l1-2v-1c-2-2-2-3%200-5v-2l-1%201c-1%201-1-1-1-3%200-4%201-6%203-10%202-3%202-4%201-4-3%200-4-3-2-4l2-2-2%201c-1%201-2%200-2-6v-7l1-1%201%201v1l1-1c-1-1%200-2%201-1v-1c-2-1-2-1%202-1%202-1%202%200%202%204l1%204v-7c0-4%200-5%201-4l1-1c-1%200%200-2%202-3l3-1-2%202-2%202%202-1c3%200%203%205%200%208-3%202-2%203%201%201s8-7%207-8l-3%202-2%202v-4l2-7c2-3%200-3-4-1m54%202c-4%202-6%203-4%203s0%202-3%202v-2c-3%200-5%202-2%202v1h-8l3%201v3c1%201%200%202-1%203-4%202-1%201%205-1%202-1%205-2%206-1%202%200%202%200%201-1h1c2%200%202%200%201-1-2-1%202-3%204-1l1-1v-1l4%204%203%206c3%202%205%205%205%206h-2v2l-1%201%203-1c3%200%203-2%202-3s0-1%201-2h3c-3%202-3%202-1%202h2c1-1%201%200%201%202l1%203V99h4c5%201%2012-1%2012-2%200-2-4-6-8-8-1-1-4%200-13%203-10%203-11%203-13%202v-2l5-2c2-1%202-1%200-1l-4%202c-2%200-2-1-2-4v-3l-6%203m-41%205l-3%202v8l1%203c0%202%200%202%203%202l2%201v1l3-1c1-2%202-1%202%201l-2%204c-3%201-4%206-2%206l1-1h3c2%201%203%201%204-1%202-2%203-9%201-9l-1%203-1%202-2-1h1l1-2c0-3-2-4-5-4-3-1-3-2-1-2%203-1%203-13%201-13l-2%201c-2%202-3%201-2-1%200-3%200-3-2%201m50%2015l-2%201h-2l-10%204c-7%202-10%204-9%204%201%201%201%201-1%201h-1c1%201%201%201-1%201-2%201-3%204-1%204l1-1h2c2%200%202%200%201-1l-1-1h2l2%201v-1c-1%200%200-2%202-2v1h4l3-2%201-1c2%202%2013-2%2013-4l-3-1h-2l4-2c3-1%203-1%201-1h-3m15%2020l-1%205a77%2077%200%2000-14%205h2l2%201c3-1%203-1%203%204%200%207%201%208%205%207l4-1v-7c0-4%200-6%202-6l1-4c0-3%200-4-1-3-1%200-2-1-2-3-1-3-1-2-1%202m-29%2084c-2%202-3%203-5%203-3%200-3%200-3%203l3%204v2l-1%202h16l-8%201-10%202h7l6%201-5%201-7%201%2022-1c16-1%2016-1%2016-4h-1c-1%202-23%204-23%202l9-1%2011-2c4-1%205-4%202-4-2%200-2%200-1%201l1%202-2-1h-1l-7%201%203-1c2-1%201-1-2-1-4%200-4%200-3%202v1c-1%200-2%200-1-1l-9-1h-8l2-1c0-3-1-6-3-6l1-1h4v-5c0-3%200-3-3%201m-33%207l-5%202v7c0%207%200%207%202%207h12v-9c0-9%201-9-9-7m78%2014a153%20153%200%2000-18%202c-2%200-1%202%201%203h1c0-1%202%200%203%202%203%203%204%204%206%203h3l-3%201c-2%202-2%202%207%202a354%20354%200%200126-2c1-1%202-2%203-1l-4-7c-4-6-3-6-25-3m33%2046c2%201%200%202-4%201-3%200-2%201%203%204%206%203%206%203%2018%203h13l-6-4-7-4h-5l-2%201c-3-2-12-2-10-1M57%20317c0%202%200%202-3%202-2%200-3%201-4%203-2%205%201%208%206%207h3v-8l-1-7-1%203m170%200l-2%202c-2%200-3%202-4%204l-1%204-1-4c-2-4-2-4-6-4h-4v6l1%205%201-5c0-4%203-6%205-4%203%204%203%209%202%2010-2%202-2%203-1%203%202%200%204-4%206-10%202-5%203-5%204%201l1%204h4l-1-1c-3%200-2-6%200-8v-1l-2-1-1-2-1%201m36%203l-1%207c1%207%201%208%207%207%204-1%203-5-2-6-3%200-4-2-1-2%202%200%203-2%204-5%201-2%200-2-3-2l-4%201m49%2044l-1%203h-2c-5-1-5-1-6%203%200%203%200%203%202%203s2%200%202%204c-1%204%200%205%203%203%202-2%201-1-1%203l-1%204c1%200%203-1%203-3l3-2%201-1c1-1%204%200%203%202l2%201v-2c2%201%202%200%202-1%200-2%201-2%203-2%203%200%204%201%203%205%200%201%201%201%202-1s2-2%202-1h1l2-1c2%200%203%200%202-2l-1-2h-4l-4-1h-11a145%20145%200%20000-6l5-6-2-1-1%201c1%201-3%202-4%201l1-1%203-2c1-1%201-1-2-1-2%200-3%201-5%203m56%2011c0%2011%200%2011%204%2018l4%207-1-3-1-4%203%203c1%204%204%206%202%202l1-1c2%202%200-3-2-5l-2-2-3-8-4-12c-1-6-1-5-1%205'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB8c9HPKICPZZpCX//xAAaEAEBAQEAAwAAAAAAAAAAAAABAgADEhQh/9oACAEBAAEFAoHovzR3qQrn6ziTeToVsiU//8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EABwQAAICAwEBAAAAAAAAAAAAAAABAhEQITESQf/aAAgBAQAGPwK9+S/uIxUqeNs6JWcP/8QAGxAAAgMBAQEAAAAAAAAAAAAAAREAITFBEKH/2gAIAQEAAT8hPQcNfJchxsXWDbsREi7b2IQQr5FMPMdBImPB+p//2gAMAwEAAgADAAAAEPjnQv/EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCoqIiI/8QAFxEAAwEAAAAAAAAAAAAAAAAAABFRYf/aAAgBAgEBPxBoNBqaH//EABsQAQEBAQEBAQEAAAAAAAAAAAERACExcUFR/9oACAEBAAE/ELAk8BFOF+6Tc+QIHzJElVUdPwBID12zOsxxDxN+i/5NPxb0lB3Hqny1v//Z","aspectRatio":1,"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/eaa58/foldersCover.jpg","srcSet":"/static/ca172036b2d78c49ceae0cdeb5723e5b/5a3ee/foldersCover.jpg 114w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/41f8f/foldersCover.jpg 229w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/eaa58/foldersCover.jpg 457w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/c309b/foldersCover.jpg 686w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/e3008/foldersCover.jpg 914w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/15384/foldersCover.webp","srcSetWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/31fce/foldersCover.webp 114w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/e3e25/foldersCover.webp 229w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/15384/foldersCover.webp 457w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0258d/foldersCover.webp 686w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/64ea2/foldersCover.webp 914w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/9000d/foldersCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M12%202c7%203%207%203%200%203H8l8%202c2%200%202%201%202%202v2l3%201%201-1v-1c2-1%205%201%205%203l4%201%203-1%201-1%201-1c-1-1%200-2%201-2%201-1%201%201-1%207-1%203-1%203%201%203h1v-2l2-5%203-5-1%204v5h4l1%202%201%202-1%203v-1l-1-2-1-1c-1-2-4%200-4%203%200%202%200%202-4%201-3-1-3-2-1-2h-1l-7-1h-4c-1%202-2-1-1-3%201-3-7-7-9-4-1%201-2%202-1%200l-3-2c-3-1-4-1-3%201l-1%202-2%202c-1%202-1%202-1%200s-3-4-3-2l1%201v1l-1%208c0%205%200%206%201%204v16l1-2%201-5v1c0%201%201%202%203%202l3%202-2%201H5l1%201%202%201c1%200%202-1%202-3%201-1%201-2%202-1l2%201c1%201%201%201-1%201-3%200-3%203%200%203%202%201%202%200%203-1%200-2%200-2%202%200s2%203%200%203v1l-1%201-4%2011%205%201c7%201%209%203%204%203l-4-1-8-1c0%201%209%204%2013%204l3%201-2%201h-3l-1%201-1-1c1%200-6-3-7-2l-5-2c-7-2-7-2-7%206%200%205%200%206%202%207%202%200%203%204%201%204l-1-1c0-3-2-2-2%200s0%203%202%203c1-1%203%200%206%201l4%201-5-1H3c1%201%2018%205%2020%204l3%202c2%202-4%201-13-1-3-1-6-2-7-1H2c-6%200%200%203%208%203l1%201%202%201%201%201h-4c-3-1-3-1-3%201v2l-2-3c0-1-1-2-3-2-2-1-2-1-2%205l1%207v1L0%20253v147h289v-3l2-2v-1h-2c-2%202-1-1%201-6l2-5c-1-1%203-6%204-6l2%202c2%203%201%209-1%208-1-1-1%200-1%201l-1%202h-1v3c0%201%200%202%201%201l3-1c2%200%203%200%203-2%200-4%204-5%204-1%200%202%200%202%201%200l3-2c1%200%201%201-1%205l-1%204v1l-1%201h13c0%202%205%201%205-1h1c0%202%205%203%205%201h1l13%201h12v-3c0-5%200-5-4-12l-4-7-4%201c-5%200-8-4-6-11v-6l-10%201h-3l-1-1h-1l23-2c7%201%207%201%209%203%201%203%203%204%203%202l-1-1-1-3h1l4%201c3-1%204%200%204%205%200%202%200%202%201%201l1-4v-3h19c2%200%203%200%204%202s1%202%201%200c1-1%201-1%201%201l1%205c2%200%202-1%201-3-1-5-1-5%201-5l1%201v1l1-1%201-1v4l1%204%201%202c0%202-1%202-8%202-14%200-14%200-13%202h4c4-1%207%200%2011%206l3%207%201%201c1%200%202%202%202%205l1%205a11128%2011128%200%2000-1-292c0%202-1%203-4%202l-3-1%203-3%204-2%201-6c0-4%200-6-1-5%200%203-2%202-2-1l1-1c3%200%202-11-1-15s-2-5%201-1l2%202v-7l-1-6v4l-1%202v1l-3-1-3-3%202-2%201-2-2%201c-2%202-2%201-5-2l-3-5-1-1c-1%201-1%201%200%200l-2-3c-3-2-2-3%202-2%201%201%202%201%202-1l1-1c1%201%203-2%202-3h-1l-1%201h-1l-1%201h-1l-3%201c-2%201-2%200-2-1v-1h-2c-1-1%207-5%208-4l1-2c1-2%200-1-7%202-8%205-8%204-8-11l-1-10-1-10c0-11%201-12%201-1l1%207%206-7%201-1v3c2%200%203-3%202-4-2-1-2-1%200-5l2-3h-22l1%204-1%203-1-1h-1c-1%202%200%203%202%203s3%202%200%203v3c1%202%200%207-1%206v5c0%205%200%205-2%204-2-2-11-2-20%200h-4v-3l2-4-1-4c-2%200-3%203-2%207v5h-5l-3%201-4-1c0-2%203-3%204-2l1%201v-1l-1-3c0-2-3-4-4-3l1%202c3%201%202%202-1%202s-3%200-2%201%201%201-2%201c-2%200-3%200-3-2s1-2%204-1h3l-2-2c-2-2-2-3-2-5l-1%201h-3c0-2-1-2-3-1l-3%201c-2%200-3%201-4%205l-1%203-1%202c-1%203-1%203-1-2l-1-9c0-1%200-2%202-2%202-1%202-2%202-8l-1-8-8%208v1c-2%201-4-8-3-9l1%201h1c2-1%200-2-4-2-5%200-5%200-1%207a67%2067%200%20014%2010c1%202%201%202%201%200l1-3v-1l-1-1c0-2%204-1%205%202s1%203-2%203-3%203-1%2010%203%2011%201%2010l-2-7c-1-5-2-5-2-3v4l-1%203c-1%203-1%203-1-2%200-16-1-22-3-18h-3l-2-1h2l2-1h1l-2-6-3-5-46-1a553%20553%200%2000-49%201l-49-1C95%200%2089%200%2089%202v1l-1-1c0-2-1-2-5-2-5%200-6%200-7%203%200%202-2%203-2%203-2%200-2%200%200-2%203-3%202-4-8-4l-9%201%203%202h9l1-1%201%202-1%201-2%205-5%204h-1l-5%201c-4-1-4-1-2-4%201-1%202-2%204-1h4l-4-1c-4-2-5-2-7%200%200%202-1%202-2%200l-2-2h4c0-1-4-2-5-1V3c1-4%200-4-2-1l-1%203V2c1-2%200-2-4-2l-5%201h-1L20%200H7l5%202m292%205l1%208%209%201c2%200%203%200%203-2l-1-1c-2%201-1-2%202-5l1-4V3l2-1h1l-5-2-4%201v1l-2-1c0-1-2%200-2%202l2%201c1-1%202%200%202%201%201%202-1%204-3%203V7l1-2-2%201-1-2V1c1-1%200-1-1-1h-3v7m40-1l-2%202c-3%200-3%202%200%208%204%207%204%207%205%206h3c3%202%2010%201%207-1v-3l-1-1c-1%201-3-1-5-5-2-3-2-3%200-3l1-1h-4c-2%200-3%200-3-2h-1M159%2041v3c-1%202-1%202%202%203%204%201%205%201%202%201s-3%200-1%201h8l5-1%206-1c6%201%204%200-6-3-12-4-16-5-16-3M4%2047l-1%202v-1l-1-1c-1%200-2%203-2%209s0%206%203%206l2-1v-2h5c1%202%202%201%203-4l1-7-2%202-1%201v-2l-1-1-1%201H6l-1-1v-1H4m140%203l-1%201h-1l-2%203v2c2%200%201%202-7%209l-10%2010-1%2011v12l13-9%2012-9V67c0-12%200-13%202-14l2-2h-1l-1%201-4%202c-3%202-4%202-2-1l2-3h-1m0%2035a117%20117%200%2001-21%2015l2%204c1%203%201%203%201%201v-3l1-1v15l-2%203-4%202c-2%202-3%202-4%201l-1-1-1%201c1%201%200%202-2%203-3%202-3%202-5%201l-1-1v2c2%201%201%201-8%207l-8%204h-2c-2-1-5%201-3%203l-1-1-1%201c1%201%200%203-2%204l-9%207-5%204v-13c0-14%200-14%202-15s2-1%200-1c-4%200-8%207-8%2014l1%206%201%207v7l-7%207-7%207v-6c1-6%200-6-3-3-3%202-3%204-3%209s0%206-4%2012c-9%2014-16%2031-18%2045%200%205-1%206-3%207-3%202-3%202-1%202h3c0%202-1%202-3%202-3%200-4%200-4%202l3%201%203%201h-2l-3%201h2l1%203c0%202%200%203%201%202%200-3%203-2%203%200%202%205%201%206-3%206l-3%201h4c4%200%205%201%203%202-1%201%203%207%2010%2017l6%207h91l-1-4c0-4%200-5%202-5v-1l-2-1-1-1-4-8c0-2%200-2%202%200l2%204%204%202-2-2-1-5c1-2%201-2%203%202%203%206%204%209%202%207-3-2-2-1%202%206l3%206h16c14%200%2015%200%2015-2l-13-31h-11a806%20806%200%2001-18%204c-3%203-4%203-4-4v-5l-1%205-1%206-1-4-2-5-8-1c-4%200-4%200%202-1%205-1%205-2%203-2l-3-1-2-3c-2-2-1-14%202-14v1c-2%202-1%203%201%202%203-3%207-2%2010%204%202%204%202%208%200%206l-1%201%201%202%201%201-1%201h-1l1%202%201-1%201-1c1%201%202-8%202-13-1-2-1-3%201-4%204-1%206%200%208%203%201%202%201%202%201%200l-3-5c-2-3-3-3-3-2%200%202%200%203-4%203-4%201-4%201-5-2l-2-3v-2h-2v-1l-1-1v-2c-1%200-1-1%201-2l2-1%201-1c0-1%201-1%201%201%202%202%202%201%201-2-1-2-1-2%201-2s3%200%203-2l1-3%201-1-1-1c-1%201-1-1-1-4v-6l-1%208c0%203%200%204-2%205-3%201-3%201-3-1l2-2v-2l-1-1c-1%201-1%200-1-2l1-3%201-2-1-2-1-4c0-5%201-5%202%200%201%202%201%201%201-1%200-5-2-8-3-7l-1%202-2%208c-2%205-2%205%200%205%203%201%202%208%200%2011-2%201-2%201-2-1%200-1%200-2-1-1l-1-5c0-6-3-13-3-8l-3%203c-6%203-6%203-3-13l1-7%207-3c5-3%206-3%205-6l1-3c2-2%203-1%203%201l-2%207-1%201c-2-2-6%201-7%204-2%203-2%203-2%201s0-2-1%201c-1%204%200%206%201%203%201-1%201-1%201%201s1%203%203%201c3-3%209-6%2010-5l1-1%2010-6-2%204c-3%203-2%203%202%201%204-1%209-3%207-1l1%203c2%202%203%203%203%201%200-3%205-8%2010-10l5-4-4%201-6%202c-2-1-5%201-4%203v1l-2-2-2-2v1l-2%201c-4%200-4-1%200-3l8-5-4%201c-5%203-8%204-8%203l7-4%207-3v-20a32260%2032260%200%2001-2-34l-2%201h-1v-1l-1-1h-1l-2%203v1c3-1%203%203%200%205-2%202-2%202-3%200l-1-2-2-1c-2%200-5%204-3%204l1%203v3l1-3c2-3%202-3%203-2%201%200%201%201-1%202l-2%206-1%203-1%201h3l-1%202v2l-1%202-1%201%201%201v8c0%202-1%203-2%202h-1l1%202c2-1%202%201%202%205-1%202-1%203-2%202h-1c0%202-6%206-6%205h-2l-4%201%202-6v-9c-1-3-1-3%202-5l2-3%201-1%201%204c-1%203%200%205%201%206h1l1-2v-1c-2-2-2-3%200-5v-2l-1%201c-1%201-1-1-1-3%200-4%201-6%203-10%202-3%202-4%201-4-3%200-4-3-2-4l2-2-2%201c-1%201-2%200-2-6v-7l1-1%201%201v1l1-1c-1-1%200-2%201-1v-1c-2-1-2-1%202-1%202-1%202%200%202%204l1%204v-7c0-4%200-5%201-4l1-1c-1%200%200-2%202-3l3-1-2%202-2%202%202-1c3%200%203%205%200%208-3%202-2%203%201%201s8-7%207-8l-3%202-2%202v-4l2-7c2-3%200-3-4-1m54%202c-4%202-6%203-4%203s0%202-3%202v-2c-3%200-5%202-2%202v1h-8l3%201v3c1%201%200%202-1%203-4%202-1%201%205-1%202-1%205-2%206-1%202%200%202%200%201-1h1c2%200%202%200%201-1-2-1%202-3%204-1l1-1v-1l4%204%203%206c3%202%205%205%205%206h-2v2l-1%201%203-1c3%200%203-2%202-3s0-1%201-2h3c-3%202-3%202-1%202h2c1-1%201%200%201%202l1%203V99h4c5%201%2012-1%2012-2%200-2-4-6-8-8-1-1-4%200-13%203-10%203-11%203-13%202v-2l5-2c2-1%202-1%200-1l-4%202c-2%200-2-1-2-4v-3l-6%203m-41%205l-3%202v8l1%203c0%202%200%202%203%202l2%201v1l3-1c1-2%202-1%202%201l-2%204c-3%201-4%206-2%206l1-1h3c2%201%203%201%204-1%202-2%203-9%201-9l-1%203-1%202-2-1h1l1-2c0-3-2-4-5-4-3-1-3-2-1-2%203-1%203-13%201-13l-2%201c-2%202-3%201-2-1%200-3%200-3-2%201m50%2015l-2%201h-2l-10%204c-7%202-10%204-9%204%201%201%201%201-1%201h-1c1%201%201%201-1%201-2%201-3%204-1%204l1-1h2c2%200%202%200%201-1l-1-1h2l2%201v-1c-1%200%200-2%202-2v1h4l3-2%201-1c2%202%2013-2%2013-4l-3-1h-2l4-2c3-1%203-1%201-1h-3m15%2020l-1%205a77%2077%200%2000-14%205h2l2%201c3-1%203-1%203%204%200%207%201%208%205%207l4-1v-7c0-4%200-6%202-6l1-4c0-3%200-4-1-3-1%200-2-1-2-3-1-3-1-2-1%202m-29%2084c-2%202-3%203-5%203-3%200-3%200-3%203l3%204v2l-1%202h16l-8%201-10%202h7l6%201-5%201-7%201%2022-1c16-1%2016-1%2016-4h-1c-1%202-23%204-23%202l9-1%2011-2c4-1%205-4%202-4-2%200-2%200-1%201l1%202-2-1h-1l-7%201%203-1c2-1%201-1-2-1-4%200-4%200-3%202v1c-1%200-2%200-1-1l-9-1h-8l2-1c0-3-1-6-3-6l1-1h4v-5c0-3%200-3-3%201m-33%207l-5%202v7c0%207%200%207%202%207h12v-9c0-9%201-9-9-7m78%2014a153%20153%200%2000-18%202c-2%200-1%202%201%203h1c0-1%202%200%203%202%203%203%204%204%206%203h3l-3%201c-2%202-2%202%207%202a354%20354%200%200126-2c1-1%202-2%203-1l-4-7c-4-6-3-6-25-3m33%2046c2%201%200%202-4%201-3%200-2%201%203%204%206%203%206%203%2018%203h13l-6-4-7-4h-5l-2%201c-3-2-12-2-10-1M57%20317c0%202%200%202-3%202-2%200-3%201-4%203-2%205%201%208%206%207h3v-8l-1-7-1%203m170%200l-2%202c-2%200-3%202-4%204l-1%204-1-4c-2-4-2-4-6-4h-4v6l1%205%201-5c0-4%203-6%205-4%203%204%203%209%202%2010-2%202-2%203-1%203%202%200%204-4%206-10%202-5%203-5%204%201l1%204h4l-1-1c-3%200-2-6%200-8v-1l-2-1-1-2-1%201m36%203l-1%207c1%207%201%208%207%207%204-1%203-5-2-6-3%200-4-2-1-2%202%200%203-2%204-5%201-2%200-2-3-2l-4%201m49%2044l-1%203h-2c-5-1-5-1-6%203%200%203%200%203%202%203s2%200%202%204c-1%204%200%205%203%203%202-2%201-1-1%203l-1%204c1%200%203-1%203-3l3-2%201-1c1-1%204%200%203%202l2%201v-2c2%201%202%200%202-1%200-2%201-2%203-2%203%200%204%201%203%205%200%201%201%201%202-1s2-2%202-1h1l2-1c2%200%203%200%202-2l-1-2h-4l-4-1h-11a145%20145%200%20000-6l5-6-2-1-1%201c1%201-3%202-4%201l1-1%203-2c1-1%201-1-2-1-2%200-3%201-5%203m56%2011c0%2011%200%2011%204%2018l4%207-1-3-1-4%203%203c1%204%204%206%202%202l1-1c2%202%200-3-2-5l-2-2-3-8-4-12c-1-6-1-5-1%205'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg"}}}]}},"staticQueryHashes":["1609575157","2068910035","2361467917","2361467917","3838421970","500183989","5650841"]}