mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-25 22:20:27 +00:00

* Add missed include * Another Warning fix * Add another HAS_SCREEN * Namespace fixes * Removed depricated destination types and re-factored destination screen * Get rid of Arduino Strings * Clean up after Copilot * SixthLine Def, Screen Rename Added Sixth Line Definition Screen Rename, and Automatic Line Adjustment * Consistency is hard - fixed "Sixth" * System Frame Updates Adjusted line construction to ensure we fit maximum content per screen. * Fix up notifications * Add a couple more ifdef HAS_SCREEN lines * Add screen->isOverlayBannerShowing() * Don't forget the invert! * Adjust Nodelist Center Divider Adjust Nodelist Center Divider * Fix variable casting * Fix entryText variable as empty before update to fix validation * Altitude is int32_t * Update PowerTelemetry to have correct data type * Fix cppcheck warnings (#6945) * Fix cppcheck warnings * Adjust logic in Power.cpp for power sensor --------- Co-authored-by: Jason P <applewiz@mac.com> * More pixel wrangling so things line up NodeList edition * Adjust NodeList alignments and plumb some background padding for a possible title fix * Better alignment for banner notifications * Move title into drawCommonHeader; initial screen tested * Fonts make spacing items difficult * Improved beeping booping and other buzzer based feedback (#6947) * Improved beeping booping and other buzzer based feedback * audible button feedback (#6949) * Refactor --------- Co-authored-by: todd-herbert <herbert.todd@gmail.com> * Sandpapered the corners of the notification popup * Finalize drawCommonHeader migration * Update Title of Favorite Node Screens * Update node metric alignment on LoRa screen * Update the border for popups to separate it from background * Update PaxcounterModule.cpp with CommonHeader * Update WiFi screen with CommonHeader and related data reflow * It was not, in fact, pointing up * Fix build on wismeshtap * T-deck trackball debounce * Fix uptime on Device Focused page to actually detail * Update Sys screen for new uptime, add label to Freq/Chan on LoRa * Don't display DOP any longer, make Uptime consistent * Revert Uptime change on Favorites, Apply to Device Focused * Label the satelite number to avoid confusion * Boop boop boop boop * Correct GPS positioning and string consistency across strings for GPS * Fix GPS text alignment * Enable canned messages by default * Don't wake screen on new nodes * Cannedmessage list emote support added * Fn+e emote picker for freetext screen * Actually block CannedInput actions while display is shown * Add selection menu to bannerOverlay * Off by one * Move to unified text layouts and spacing * Still my Fav without an "e" * Fully remove EVENT_NODEDB_UPDATED * Simply LoRa screen * Make some char pointers const to fix compilation on native targets * Update drawCompassNorth to include radius * Fix warning * button thread cleanup * Pull OneButton handling from PowerFSM and add MUI switch (#6973) * Trunk * Onebutton Menu Support * Add temporary clock icon * Add gps location to fsi * Banner message state reset * Cast to char to satisfy compiler * Better fast handling of input during banner * Fix warning * Derp * oops * Update ref * Wire buzzer_mode * remove legacy string->print() * Only init screen if one found * Unsigned Char * More buttonThread cleaning * screen.cpp button handling cleanup * The Great Event Rename of 2025 * Fix the Radiomaster * Missed trackball type change * Remove unused function * Make ButtonThread an InputBroker * Coffee hadn't kicked in yet * Add clock icon for Navigation Bar * Restore clock screen definition code - whoops * ExternalNotifications now observe inputBroker * Clock rework (#6992) * Move Clock bits into ClockRenderer space * Rework clock into all device navigation * T-Watch Actually Builds Different * Compile fix --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> * Add AM/PM to Digital Clock * Flip Seconds and AM/PM on Clock Display * Tik-tok pixels are hard * Fix builds on Thinknode M1 * Check for GPS and don't crash * Don't endif til the end * Rework the OneButton thread to be much less of a mess. (#6997) * Rework the OneButton thread to be much less of a mess. And break lots of targets temporarily * Update src/input/ButtonThread.h Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix GPS toggle * Send the shutdown event, not just the kbchar * Honor the back button in a notificaiton popup * Draw the right size box for popup with options * Try to un-break all the things --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * 24-hour Clock Should have leading zero, but not 12-hour * Fixup some compile errors * Add intRoutine to ButtonThread init, to get more responsive user button back * Add Timezone picker * Fix Warning * Optionally set the initial selection for the chooser popup * Make back buttons work in canned messages * Drop the wrapper classes * LonPressTime now configurable * Clock Frame can not longer be blank; just add valid time * Back buttons everywhere! * Key Verification confirm banner * Make Elecrow M* top button a back button * Add settings saves * EInk responsiveness fixes * Linux Input Fixes * Add Native Trackball/Joystick support, and move UserButton to Input * No Flight Stick Mode * Send input event * Add Channel Utilization to Device Focused frame * Don't shift screens when we draw new ones * Add showOverlayBanner arguments to no-op * trunk * Default Native trackball to NC * Fix crash in simulator mode * Add longLong button press * Get the args right * Adjust Bluetooth Pairing Screen to account for bottom navigation. * Trackball everywhere, and unPhone buttons * Remap visionmaster secondary button to TB_UP * Kill ScanAndSelect * trunk * No longer need the canned messages input filter * All Canned All the time * Fix stm32 compile error regarding inputBroker * Unify tft lineheights (#7033) * Create variable line heights based upon SCREEN_HEIGHT * Refactor textPositions into method -> getTextPositions * Update SharedUIDisplay.h --------- Co-authored-by: Jason P <applewiz@mac.com> * Adjust top distance for larger displays * Adjust icon sizes for larger displays * Fix Paxcounter compile errors after code updates * Pixel wrangling to make larger screens fit better * Alert frame has precedence over banner -- for now * Unify on ALT_BUTTON * Align AM/PM to the digit, not the segment on larger displays * Move some global pin defines into configuration.h * Scaffolding for BMM150 9-axis gyro * Alt button behavior * Don't add the blank GPS frames without HAS_GPS * EVENT_NODEDB_UPDATED has been retired * Clean out LOG_WARN messages from debugging * Add dismiss message function * Minor buttonThread cleanup * Add BMM150 support * Clean up last warning from dev * Simplify bmm150 init return logic * Add option to reply to messages * Add minimal menu upon selecting home screen * Move Messages to slot 2, rename GPS to Position, move variables nearer functional usage in Screen.cpp * Properly dismiss message * T-Deck Trackball press is not user button * Add select on favorite frame to launch cannedMessage DM * Minor wording change * Less capital letters * Fix empty message check, time isn't reliable * drop dead code * Make UIRenderer a static class instead of namespace * Fix the select on favorite * Check if message is empty early and then 'return' * Add kb_found, and show the option to launch freetype if appropriate * Ignore impossible touchscreen touches * Auto scroll fix * Move linebreak after "from" for banners to maximize screen usage. * Center "No messages to show" on Message frame * Start consolidating buzzer behavior * Fixed signed / unsigned warning * Cast second parameter of max() to make some targets happy * Cast kbchar to (char) to make arduino string happy * Shorten the notice of "No messages" * Add buzzer mode chooser * Add regionPicker to Lora icon * Reduce line spacing and reorder Position screen to resolve overlapping issues * Update message titles, fix GPS icons, add Back options * Leftover boops * Remove chirp * Make the region selection dismissable when a region is already set * Add read-aloud functionality on messages w/ esp8266sam * "Last Heard" is a better label * tweak the beep * 5 options * properly tear down freetext upon cancel * de-convelute canned messages just a bit * Correct height of Mail icon in navigation bar * Remove unused warning * Consolidate time methods into TimeFormatters * Oops * Change LoRa Picker Cancel to Back * Tweak selection characters on Banner * Message render not scrolling on 5th line * More fixes for message scrolling * Remove the safety next on text overflow - we found that root cause * Add pin definitions to fix compilation for obscure target * Don't let the touchscreen send unitialized kbchar values * Make virtual KB just a bit quicker * No more double tap, swipe! * Left is left, and Right is right * Update horizontal lightning bolt design * Move from solid to dashed separator for Message Frame * Single emote feature fix * Manually sort overlapping elements for now * Freetext and clearer choices * Fix ESP32 InkHUD builds on the unify-tft branch (#7087) * Remove BaseUI branding * Capitalization is fun * Revert Meshtastic Boot Frame Changes * Add ANZ_433 LoRa region to picker * Update settings.json --------- Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Jason P <applewiz@mac.com> Co-authored-by: todd-herbert <herbert.todd@gmail.com> Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
197 lines
11 KiB
INI
197 lines
11 KiB
INI
; PlatformIO Project Configuration File
|
|
; https://docs.platformio.org/page/projectconf.html
|
|
|
|
[platformio]
|
|
default_envs = tbeam
|
|
|
|
extra_configs =
|
|
arch/*/*.ini
|
|
variants/*/platformio.ini
|
|
src/graphics/niche/InkHUD/PlatformioConfig.ini
|
|
|
|
description = Meshtastic
|
|
|
|
[env]
|
|
test_build_src = true
|
|
extra_scripts = bin/platformio-custom.py
|
|
; note: we add src to our include search path so that lmic_project_config can override
|
|
; note: TINYGPS_OPTION_NO_CUSTOM_FIELDS is VERY important. We don't use custom fields and somewhere in that pile
|
|
; of code is a heap corruption bug!
|
|
; FIXME: fix lib/BluetoothOTA dependency back on src/ so we can remove -Isrc
|
|
; The Radiolib stuff will speed up building considerably. Exclud all the stuff we dont need.
|
|
build_flags = -Wno-missing-field-initializers
|
|
|
|
-Wno-format
|
|
-Isrc -Isrc/mesh -Isrc/mesh/generated -Isrc/gps -Isrc/buzz -Wl,-Map,"${platformio.build_dir}"/output.map
|
|
-DUSE_THREAD_NAMES
|
|
-DTINYGPS_OPTION_NO_CUSTOM_FIELDS
|
|
-DPB_ENABLE_MALLOC=1
|
|
-DRADIOLIB_EXCLUDE_CC1101=1
|
|
-DRADIOLIB_EXCLUDE_NRF24=1
|
|
-DRADIOLIB_EXCLUDE_RF69=1
|
|
-DRADIOLIB_EXCLUDE_SX1231=1
|
|
-DRADIOLIB_EXCLUDE_SX1233=1
|
|
-DRADIOLIB_EXCLUDE_SI443X=1
|
|
-DRADIOLIB_EXCLUDE_RFM2X=1
|
|
-DRADIOLIB_EXCLUDE_AFSK=1
|
|
-DRADIOLIB_EXCLUDE_BELL=1
|
|
-DRADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-DRADIOLIB_EXCLUDE_MORSE=1
|
|
-DRADIOLIB_EXCLUDE_RTTY=1
|
|
-DRADIOLIB_EXCLUDE_SSTV=1
|
|
-DRADIOLIB_EXCLUDE_AX25=1
|
|
-DRADIOLIB_EXCLUDE_DIRECT_RECEIVE=1
|
|
-DRADIOLIB_EXCLUDE_BELL=1
|
|
-DRADIOLIB_EXCLUDE_PAGER=1
|
|
-DRADIOLIB_EXCLUDE_FSK4=1
|
|
-DRADIOLIB_EXCLUDE_APRS=1
|
|
-DRADIOLIB_EXCLUDE_LORAWAN=1
|
|
-DMESHTASTIC_EXCLUDE_DROPZONE=1
|
|
-DMESHTASTIC_EXCLUDE_REMOTEHARDWARE=1
|
|
-DMESHTASTIC_EXCLUDE_HEALTH_TELEMETRY=1
|
|
-DMESHTASTIC_EXCLUDE_POWERSTRESS=1 ; exclude power stress test module from main firmware
|
|
-DMESHTASTIC_EXCLUDE_GENERIC_THREAD_MODULE=1
|
|
#-DBUILD_EPOCH=$UNIX_TIME
|
|
#-D OLED_PL=1
|
|
|
|
monitor_speed = 115200
|
|
monitor_filters = direct
|
|
lib_deps =
|
|
# renovate: datasource=git-refs depName=meshtastic-esp8266-oled-ssd1306 packageName=https://github.com/meshtastic/esp8266-oled-ssd1306 gitBranch=master
|
|
https://github.com/meshtastic/esp8266-oled-ssd1306/archive/0119501e9983bd894830b02f545c377ee08d66fe.zip
|
|
# renovate: datasource=custom.pio depName=OneButton packageName=mathertel/library/OneButton
|
|
mathertel/OneButton@2.6.1
|
|
# renovate: datasource=git-refs depName=meshtastic-arduino-fsm packageName=https://github.com/meshtastic/arduino-fsm gitBranch=master
|
|
https://github.com/meshtastic/arduino-fsm/archive/7db3702bf0cfe97b783d6c72595e3f38e0b19159.zip
|
|
# renovate: datasource=git-refs depName=meshtastic-TinyGPSPlus packageName=https://github.com/meshtastic/TinyGPSPlus gitBranch=master
|
|
https://github.com/meshtastic/TinyGPSPlus/archive/71a82db35f3b973440044c476d4bcdc673b104f4.zip
|
|
# renovate: datasource=git-refs depName=meshtastic-ArduinoThread packageName=https://github.com/meshtastic/ArduinoThread gitBranch=master
|
|
https://github.com/meshtastic/ArduinoThread/archive/7c3ee9e1951551b949763b1f5280f8db1fa4068d.zip
|
|
# renovate: datasource=custom.pio depName=Nanopb packageName=nanopb/library/Nanopb
|
|
nanopb/Nanopb@0.4.91
|
|
# renovate: datasource=custom.pio depName=ErriezCRC32 packageName=erriez/library/ErriezCRC32
|
|
erriez/ErriezCRC32@1.0.1
|
|
|
|
; Used for the code analysis in PIO Home / Inspect
|
|
check_tool = cppcheck
|
|
check_skip_packages = yes
|
|
check_flags =
|
|
-DAPP_VERSION=1.0.0
|
|
--suppressions-list=suppressions.txt
|
|
--inline-suppr
|
|
|
|
; Common settings for conventional (non Portduino) Arduino targets
|
|
[arduino_base]
|
|
framework = arduino
|
|
lib_deps =
|
|
${env.lib_deps}
|
|
# renovate: datasource=custom.pio depName=NonBlockingRTTTL packageName=end2endzone/library/NonBlockingRTTTL
|
|
end2endzone/NonBlockingRTTTL@1.3.0
|
|
build_flags = ${env.build_flags} -Os
|
|
build_src_filter = ${env.build_src_filter} -<platform/portduino/> -<graphics/niche/>
|
|
|
|
; Common libs for communicating over TCP/IP networks such as MQTT
|
|
[networking_base]
|
|
lib_deps =
|
|
# renovate: datasource=custom.pio depName=TBPubSubClient packageName=thingsboard/library/TBPubSubClient
|
|
thingsboard/TBPubSubClient@2.12.1
|
|
# renovate: datasource=custom.pio depName=NTPClient packageName=arduino-libraries/library/NTPClient
|
|
arduino-libraries/NTPClient@3.2.1
|
|
# renovate: datasource=custom.pio depName=Syslog packageName=arcao/library/Syslog
|
|
arcao/Syslog@2.0.0
|
|
|
|
[radiolib_base]
|
|
lib_deps =
|
|
# renovate: datasource=custom.pio depName=RadioLib packageName=jgromes/library/RadioLib
|
|
jgromes/RadioLib@7.1.2
|
|
|
|
[device-ui_base]
|
|
lib_deps =
|
|
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
|
https://github.com/meshtastic/device-ui/archive/d99edaf43775c9b235aab20521b034c99e04e4a8.zip
|
|
|
|
; Common libs for environmental measurements in telemetry module
|
|
[environmental_base]
|
|
lib_deps =
|
|
# renovate: datasource=custom.pio depName=Adafruit BusIO packageName=adafruit/library/Adafruit BusIO
|
|
adafruit/Adafruit BusIO@1.17.1
|
|
# renovate: datasource=custom.pio depName=Adafruit Unified Sensor packageName=adafruit/library/Adafruit Unified Sensor
|
|
adafruit/Adafruit Unified Sensor@1.1.15
|
|
# renovate: datasource=custom.pio depName=Adafruit BMP280 packageName=adafruit/library/Adafruit BMP280 Library
|
|
adafruit/Adafruit BMP280 Library@2.6.8
|
|
# renovate: datasource=custom.pio depName=Adafruit BMP085 packageName=adafruit/library/Adafruit BMP085 Library
|
|
adafruit/Adafruit BMP085 Library@1.2.4
|
|
# renovate: datasource=custom.pio depName=Adafruit BME280 packageName=adafruit/library/Adafruit BME280 Library
|
|
adafruit/Adafruit BME280 Library@2.3.0
|
|
# renovate: datasource=custom.pio depName=Adafruit DPS310 packageName=adafruit/library/Adafruit DPS310
|
|
adafruit/Adafruit DPS310@1.1.5
|
|
# renovate: datasource=custom.pio depName=Adafruit MCP9808 packageName=adafruit/library/Adafruit MCP9808 Library
|
|
adafruit/Adafruit MCP9808 Library@2.0.2
|
|
# renovate: datasource=custom.pio depName=Adafruit INA260 packageName=adafruit/library/Adafruit INA260 Library
|
|
adafruit/Adafruit INA260 Library@1.5.2
|
|
# renovate: datasource=custom.pio depName=Adafruit INA219 packageName=adafruit/library/Adafruit INA219
|
|
adafruit/Adafruit INA219@1.2.3
|
|
# renovate: datasource=custom.pio depName=Adafruit PM25 AQI Sensor packageName=adafruit/library/Adafruit PM25 AQI Sensor
|
|
adafruit/Adafruit PM25 AQI Sensor@2.0.0
|
|
# renovate: datasource=custom.pio depName=Adafruit MPU6050 packageName=adafruit/library/Adafruit MPU6050
|
|
adafruit/Adafruit MPU6050@2.2.6
|
|
# renovate: datasource=custom.pio depName=Adafruit LIS3DH packageName=adafruit/library/Adafruit LIS3DH
|
|
adafruit/Adafruit LIS3DH@1.3.0
|
|
# renovate: datasource=custom.pio depName=Adafruit AHTX0 packageName=adafruit/library/Adafruit AHTX0
|
|
adafruit/Adafruit AHTX0@2.0.5
|
|
# renovate: datasource=custom.pio depName=Adafruit LSM6DS packageName=adafruit/library/Adafruit LSM6DS
|
|
adafruit/Adafruit LSM6DS@4.7.4
|
|
# renovate: datasource=custom.pio depName=Adafruit TSL2591 packageName=adafruit/library/Adafruit TSL2591 Library
|
|
adafruit/Adafruit TSL2591 Library@1.4.5
|
|
# renovate: datasource=custom.pio depName=EmotiBit MLX90632 packageName=emotibit/library/EmotiBit MLX90632
|
|
emotibit/EmotiBit MLX90632@1.0.8
|
|
# renovate: datasource=custom.pio depName=Adafruit MLX90614 packageName=adafruit/library/Adafruit MLX90614 Library
|
|
adafruit/Adafruit MLX90614 Library@2.1.5
|
|
# renovate: datasource=github-tags depName=INA3221 packageName=KodinLanewave/INA3221
|
|
https://github.com/KodinLanewave/INA3221/archive/1.0.1.zip
|
|
# renovate: datasource=custom.pio depName=QMC5883L Compass packageName=mprograms/library/QMC5883LCompass
|
|
mprograms/QMC5883LCompass@1.2.3
|
|
# renovate: datasource=custom.pio depName=DFRobot_RTU packageName=dfrobot/library/DFRobot_RTU
|
|
dfrobot/DFRobot_RTU@1.0.3
|
|
# renovate: datasource=git-refs depName=DFRobot_RainfallSensor packageName=https://github.com/DFRobot/DFRobot_RainfallSensor gitBranch=master
|
|
https://github.com/DFRobot/DFRobot_RainfallSensor/archive/38fea5e02b40a5430be6dab39a99a6f6347d667e.zip
|
|
# renovate: datasource=custom.pio depName=INA226 packageName=robtillaart/library/INA226
|
|
robtillaart/INA226@0.6.4
|
|
# renovate: datasource=custom.pio depName=SparkFun MAX3010x packageName=sparkfun/library/SparkFun MAX3010x Pulse and Proximity Sensor Library
|
|
sparkfun/SparkFun MAX3010x Pulse and Proximity Sensor Library@1.1.2
|
|
# renovate: datasource=custom.pio depName=SparkFun 9DoF IMU Breakout ICM 20948 packageName=sparkfun/library/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library
|
|
sparkfun/SparkFun 9DoF IMU Breakout - ICM 20948 - Arduino Library@1.3.2
|
|
# renovate: datasource=custom.pio depName=Adafruit LTR390 Library packageName=adafruit/library/Adafruit LTR390 Library
|
|
adafruit/Adafruit LTR390 Library@1.1.2
|
|
# renovate: datasource=custom.pio depName=Adafruit PCT2075 packageName=adafruit/library/Adafruit PCT2075
|
|
adafruit/Adafruit PCT2075@1.0.5
|
|
# renovate: datasource=custom.pio depName=DFRobot_BMM150 packageName=dfrobot/library/DFRobot_BMM150
|
|
dfrobot/DFRobot_BMM150@1.0.0
|
|
|
|
; (not included in native / portduino)
|
|
[environmental_extra]
|
|
lib_deps =
|
|
# renovate: datasource=custom.pio depName=Adafruit BMP3XX packageName=adafruit/library/Adafruit BMP3XX Library
|
|
adafruit/Adafruit BMP3XX Library@2.1.6
|
|
# renovate: datasource=custom.pio depName=Adafruit MAX1704X packageName=adafruit/library/Adafruit MAX1704X
|
|
adafruit/Adafruit MAX1704X@1.0.3
|
|
# renovate: datasource=custom.pio depName=Adafruit SHTC3 packageName=adafruit/library/Adafruit SHTC3 Library
|
|
adafruit/Adafruit SHTC3 Library@1.0.1
|
|
# renovate: datasource=custom.pio depName=Adafruit LPS2X packageName=adafruit/library/Adafruit LPS2X
|
|
adafruit/Adafruit LPS2X@2.0.6
|
|
# renovate: datasource=custom.pio depName=Adafruit SHT31 packageName=adafruit/library/Adafruit SHT31 Library
|
|
adafruit/Adafruit SHT31 Library@2.2.2
|
|
# renovate: datasource=custom.pio depName=Adafruit VEML7700 packageName=adafruit/library/Adafruit VEML7700 Library
|
|
adafruit/Adafruit VEML7700 Library@2.1.6
|
|
# renovate: datasource=custom.pio depName=Adafruit SHT4x packageName=adafruit/library/Adafruit SHT4x Library
|
|
adafruit/Adafruit SHT4x Library@1.0.5
|
|
# renovate: datasource=custom.pio depName=SparkFun Qwiic Scale NAU7802 packageName=sparkfun/library/SparkFun Qwiic Scale NAU7802 Arduino Library
|
|
sparkfun/SparkFun Qwiic Scale NAU7802 Arduino Library@1.0.6
|
|
# renovate: datasource=custom.pio depName=ClosedCube OPT3001 packageName=closedcube/library/ClosedCube OPT3001
|
|
ClosedCube OPT3001@1.1.2
|
|
# renovate: datasource=custom.pio depName=Bosch BSEC2 packageName=boschsensortec/library/bsec2
|
|
boschsensortec/bsec2@1.10.2610
|
|
# renovate: datasource=custom.pio depName=Bosch BME68x packageName=boschsensortec/library/BME68x Sensor Library
|
|
boschsensortec/BME68x Sensor Library@1.3.40408
|
|
# renovate: datasource=git-refs depName=meshtastic-DFRobot_LarkWeatherStation packageName=https://github.com/meshtastic/DFRobot_LarkWeatherStation gitBranch=master
|
|
https://github.com/meshtastic/DFRobot_LarkWeatherStation/archive/4de3a9cadef0f6a5220a8a906cf9775b02b0040d.zip |