From 810544c8bab4874a5fc930661e1655ebeff16eb5 Mon Sep 17 00:00:00 2001 From: daawaan4U Date: Thu, 30 May 2024 01:19:10 +0800 Subject: [PATCH] Add weather icons for offline use --- .../java/edu/project/components/GeoMap.java | 8 +-- .../edu/project/components/GeoMapMarker.java | 15 +++-- .../edu/project/components/TimeForecast.java | 32 +++++------ .../components/WeatherForecastPanel.java | 31 +++++----- .../edu/project/components/WeatherIcons.java | 53 ++++++++++++++++++ src/main/resources/images/weather/01d@2x.png | Bin 0 -> 948 bytes src/main/resources/images/weather/01n@2x.png | Bin 0 -> 945 bytes src/main/resources/images/weather/02d@2x.png | Bin 0 -> 1628 bytes src/main/resources/images/weather/02n@2x.png | Bin 0 -> 1666 bytes src/main/resources/images/weather/03d@2x.png | Bin 0 -> 837 bytes src/main/resources/images/weather/03n@2x.png | Bin 0 -> 837 bytes src/main/resources/images/weather/04d@2x.png | Bin 0 -> 1869 bytes src/main/resources/images/weather/04n@2x.png | Bin 0 -> 1869 bytes src/main/resources/images/weather/09d@2x.png | Bin 0 -> 2697 bytes src/main/resources/images/weather/09n@2x.png | Bin 0 -> 2697 bytes src/main/resources/images/weather/10d@2x.png | Bin 0 -> 2584 bytes src/main/resources/images/weather/10n@2x.png | Bin 0 -> 2584 bytes src/main/resources/images/weather/11d@2x.png | Bin 0 -> 2844 bytes src/main/resources/images/weather/11n@2x.png | Bin 0 -> 2844 bytes src/main/resources/images/weather/13d@2x.png | Bin 0 -> 1703 bytes src/main/resources/images/weather/13n@2x.png | Bin 0 -> 1703 bytes src/main/resources/images/weather/50d@2x.png | Bin 0 -> 650 bytes src/main/resources/images/weather/50n@2x.png | Bin 0 -> 650 bytes 23 files changed, 94 insertions(+), 45 deletions(-) create mode 100644 src/main/java/edu/project/components/WeatherIcons.java create mode 100644 src/main/resources/images/weather/01d@2x.png create mode 100644 src/main/resources/images/weather/01n@2x.png create mode 100644 src/main/resources/images/weather/02d@2x.png create mode 100644 src/main/resources/images/weather/02n@2x.png create mode 100644 src/main/resources/images/weather/03d@2x.png create mode 100644 src/main/resources/images/weather/03n@2x.png create mode 100644 src/main/resources/images/weather/04d@2x.png create mode 100644 src/main/resources/images/weather/04n@2x.png create mode 100644 src/main/resources/images/weather/09d@2x.png create mode 100644 src/main/resources/images/weather/09n@2x.png create mode 100644 src/main/resources/images/weather/10d@2x.png create mode 100644 src/main/resources/images/weather/10n@2x.png create mode 100644 src/main/resources/images/weather/11d@2x.png create mode 100644 src/main/resources/images/weather/11n@2x.png create mode 100644 src/main/resources/images/weather/13d@2x.png create mode 100644 src/main/resources/images/weather/13n@2x.png create mode 100644 src/main/resources/images/weather/50d@2x.png create mode 100644 src/main/resources/images/weather/50n@2x.png diff --git a/src/main/java/edu/project/components/GeoMap.java b/src/main/java/edu/project/components/GeoMap.java index a3e6e55..301bd29 100644 --- a/src/main/java/edu/project/components/GeoMap.java +++ b/src/main/java/edu/project/components/GeoMap.java @@ -4,7 +4,6 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; -import java.io.IOException; import java.util.HashSet; import javax.swing.event.MouseInputListener; @@ -63,12 +62,7 @@ public void mouseClicked(MouseEvent e) { DefaultWaypoint waypoint = new DefaultWaypoint(); waypoints.add(waypoint); waypointPainter.setWaypoints(waypoints); - - try { - waypointPainter.setRenderer(new GeoMapMarker()); - } catch (IOException e) { - e.printStackTrace(); - } + waypointPainter.setRenderer(new GeoMapMarker()); // Display overlay marker setOverlayPainter(waypointPainter); diff --git a/src/main/java/edu/project/components/GeoMapMarker.java b/src/main/java/edu/project/components/GeoMapMarker.java index 8a64b88..73848db 100644 --- a/src/main/java/edu/project/components/GeoMapMarker.java +++ b/src/main/java/edu/project/components/GeoMapMarker.java @@ -3,7 +3,6 @@ import java.awt.Graphics2D; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; -import java.io.IOException; import javax.imageio.ImageIO; import org.jxmapviewer.JXMapViewer; import org.jxmapviewer.viewer.DefaultWaypoint; @@ -11,12 +10,16 @@ public class GeoMapMarker implements WaypointRenderer { - private BufferedImage markerIconImage; - private BufferedImage markerShadowImage; + private static BufferedImage markerIconImage; + private static BufferedImage markerShadowImage; - public GeoMapMarker() throws IOException { - markerIconImage = ImageIO.read(getClass().getResource("/images/marker-icon.png")); - markerShadowImage = ImageIO.read(getClass().getResource("/images/marker-shadow.png")); + static { + try { + markerIconImage = ImageIO.read(GeoMapMarker.class.getResource("/images/marker-icon.png")); + markerShadowImage = ImageIO.read(GeoMapMarker.class.getResource("/images/marker-shadow.png")); + } catch (Exception exception) { + exception.printStackTrace(); + } } @Override diff --git a/src/main/java/edu/project/components/TimeForecast.java b/src/main/java/edu/project/components/TimeForecast.java index 5f2566b..0c7e89f 100644 --- a/src/main/java/edu/project/components/TimeForecast.java +++ b/src/main/java/edu/project/components/TimeForecast.java @@ -3,22 +3,31 @@ import edu.project.Context; import edu.project.api.WeatherForecast5Data; -import javax.imageio.ImageIO; -import javax.swing.*; - import com.formdev.flatlaf.FlatClientProperties; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridLayout; +import java.awt.RenderingHints; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; -import java.io.IOException; -import java.net.URL; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.SwingConstants; + public class TimeForecast extends JPanel { private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h a") @@ -119,16 +128,7 @@ private void addForecastPanels() { } private JPanel createIconPanel(String iconId) { - String iconUrl = "https://openweathermap.org/img/wn/" + iconId + "@2x.png"; - BufferedImage image = null; - - try { - URL url = new URL(iconUrl); - image = ImageIO.read(url); - } catch (IOException e) { - e.printStackTrace(); - } - + BufferedImage image = WeatherIcons.getIcon(iconId); ImageIcon icon = new ImageIcon(image); JPanel iconPanel = new JPanel() { diff --git a/src/main/java/edu/project/components/WeatherForecastPanel.java b/src/main/java/edu/project/components/WeatherForecastPanel.java index ae8b2ec..a5c907f 100644 --- a/src/main/java/edu/project/components/WeatherForecastPanel.java +++ b/src/main/java/edu/project/components/WeatherForecastPanel.java @@ -3,16 +3,25 @@ import edu.project.Context; import edu.project.api.WeatherForecast5Data; -import javax.imageio.ImageIO; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.SwingConstants; import com.formdev.flatlaf.FlatClientProperties; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridLayout; +import java.awt.RenderingHints; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; -import java.io.IOException; -import java.net.URL; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; @@ -120,17 +129,7 @@ private void updateForecast(WeatherForecast5Data forecastData) { } private JPanel createiconPanel(String iconId) { - // Base URL for weather icons - String iconUrl = "http://openweathermap.org/img/wn/" + iconId + "@2x.png"; - BufferedImage image = null; - - try { - URL url = new URL(iconUrl); - image = ImageIO.read(url); - } catch (IOException e) { - e.printStackTrace(); - } - + BufferedImage image = WeatherIcons.getIcon(iconId); ImageIcon icon = new ImageIcon(image); JPanel iconPanel = new JPanel() { diff --git a/src/main/java/edu/project/components/WeatherIcons.java b/src/main/java/edu/project/components/WeatherIcons.java new file mode 100644 index 0000000..48075a7 --- /dev/null +++ b/src/main/java/edu/project/components/WeatherIcons.java @@ -0,0 +1,53 @@ +package edu.project.components; + +import java.awt.image.BufferedImage; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import javax.imageio.ImageIO; + +/** + * An image provider for OpenWeatherMap's icons + * + * @see https://openweathermap.org/weather-conditions + */ +public class WeatherIcons { + + /** + * Key-Value cache for the icons + */ + private static Map icons = new HashMap<>(); + + /** + * List of icon IDs + */ + private static String[] iconIds = new String[] { + // Day-time icons + "01d", "02d", "03d", "04d", "09d", "10d", "11d", "13d", "50d", + + // Night-time icons + "01n", "02n", "03n", "04n", "09n", "10n", "11n", "13n", "50n" + }; + + static { + // Load resource image for each icon ID + for (String id : iconIds) { + try { + String path = "/images/weather/" + id + "@2x.png"; + URL url = WeatherIcons.class.getResource(path); + BufferedImage image = ImageIO.read(url); + icons.put(id, image); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + } + + /** + * Gets the corresponding {@code BufferedImage} for the {@code iconId} + */ + public static BufferedImage getIcon(String iconId) { + return icons.get(iconId); + } +} diff --git a/src/main/resources/images/weather/01d@2x.png b/src/main/resources/images/weather/01d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ed42ad9e01a8ac5c6a724cce862c79efe64c5113 GIT binary patch literal 948 zcmV;l155mgP)9LMpmDT&B6hN8p^g$x<)gDLX^g`^~+JSjz#2gRE=JSbASFP@ZSmXLYOOdd>E zNt7WZ6s;_}#O=6eum6AT{62NMx9)BK);Yg(_PF*zL_|bHL_|bHL_|bHL_|bHL_|cy zOf##Xm&<1qwWu1P78nW)1bP4+Y2ZT6Pc-*J`T*;J1ywF*Y)Rk<~a@u=mOLM z4+<#bcjJJwz%gKW!ON~%j)lwv?!+QeZsWr0?;@}&Va7kpt&nZNuCV!DybIYLH?BG9 z4qO6Sd5p=kkXgVI$Na_&1~zyEdlk|i*y)sAsns5osB&#s%LZ(*mKRKFaH74sqrWofHWxmzH zqGciNtT&Jas)?uVld~*jY>BQ={)x$_+p>_6hFK{Lu?Vp&WPo8-3SBHhEDPyrn3X~$ z6Dz7_Sx5)NtQ1;Xgjg2x)iA5HEDOnXhD%l~U!?aXcs&~P#UjMAkY|QjDZH}?u`J}C zVO9#SEkY~{xont~!X1kc%R-JBW~Fe{BE+(g=W+IV8GVWq`I58V72R9XLUsdhErP5I zG5Odhu-_`kx{zyex@MVt1`b$_*W>7Uu|sAx!tDyLtin7Bxm}`N;19qi%RsO5ON*Rx z|J8EqK(9h>0c)JHE43%i$ui}626kh-*Dpum*6L**o$|wR#vscBz`x1q zvTE4p9~r;7!BSnkW9o+Q)Bi5F>)hcq#kx34@JiyW`gokN5O|U}t75rMJP3E@4g+Qb z_X}QjIBUBS=nHHqc-d9UeXi~9_?QVyh(CKZVL9*OfnL~PAIxm8?iXd5{JbYVRy6pU zrXg{9XP8yrCjMXeZj_I4d-O71c0C!dR%Tm*h=_=Yh=_=Yh=_=Yh=_=Yh=|Dl0r&=| WM07SpB(5j`0000?ZnwBHJP2x_#6c?paQ-fS~2He>>nLAap@S&IIG)Jdzrq(+*Om~TNa=LhO zq2e*?d(Z#;e}3|PaQ zEk!Qb$YrQo_AmCo)4FroBxgnT*K-*wU-QiQdZ)Hhe3PYIOz|br9SmDONK8&wyxiE@ z_mfwWW6f8NZ(2)qH=Nbn9i(kjwluCar*r9(bAS4eEuO%4z^DCAz2LbW%c9t-L^fSi z+$0Jt@Vq}#odp0>m6`eZSdMjE&PM6rB;s7^ZYg3D^1U7pUPR??RwhjR)o9) zcZhKQZT0lX6ElR)2K?(gx%>8}2@l&MHF-91Y}8pYKQWAJu8xxq_shH)Q=L?~wO6G@ zdRQM`BN7$W5+U~KsKM$jI@~8qTfM_{>OJ3kefXVmBE4JSw9`DPw51=eDIM7~!5V1R z9*|j276HxL4l>I!X~xt;iC|?%uRc%xVyO4T``oXP5`Rzbo2+{_a%|E&@+5cu0lU=- zubtK%c{(fg6Q{@j7a>myzwS8z^x(t7*6Cr1a;HnRuAxQVgbT$a^#4IYZIRqr2t9m&TNx;=eA*tfSBHUuAjb z)q->OHg!eKOW%I%T$#Pk{-62Iv&HSVMOHu7I_TZGS?>7jp2`D@k3@=|E`8`&VN}jx zz`P^+!?we*w^JSR6Pyp;UKjN)JGcDkb(4geKerysZ~JT(_o9{gTjQB?uj+!P9X-GM zadzh3{!A&6>E&&qU)MhR-g@5cr$E2E{-Z6gKUzf3%;i+V1pnC|X!Dtsm}T9n6#`~O N22WQ%mvv4FO#qL;wORlG literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/02d@2x.png b/src/main/resources/images/weather/02d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fabd9c3b31a1032119075253795e9b7ed4116bcd GIT binary patch literal 1628 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 E0C6^bEC2ui literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/03n@2x.png b/src/main/resources/images/weather/03n@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2e9f7f955fe1b8da7f30e9ae15b2f707387c48 GIT binary patch literal 837 zcmeAS@N?(olHy`uVBq!ia0vp^DIm>P?`AWc7~S-m-ejAoHrg_yf=SDPl?b_^@-?U)%;(kqaiJ3;*q@k2$SkU4Af3?c`uJQKgmd|Y;e_wg?%-r95&Rg!ce!l0q?QOP%hekm$Ah;>xlaY^4@g z&4Aq34Kw?`PQUUawzzBZtPrWFcQN$|TzfcnFqIr%{pb4u=Lbv%$9J~-xGlTDVsLwB z9jgV8%-WB)N)kjj$lj2dp2#)XOX2aH*V~WIuUdDM^FZYDI<~2&6klgE+45L0uhGf+ zpu{{gr1Z|eumt(7Ioeqd_K1rg-t<#1f!jd8PT^N${DF-AIH@nfGgxcZegC#ePp^;F z@0jyt!vx2xH+(x=1$!h@R=v^dpIo(LXUYDS)$4U#d0xqSa6A?@xLPU0|GrD&it&U3 z)jOe=4D60XA9;AsOaFt>yzo1fY@664W*m33n89Jw`CRDH-Q&>*Tpw(Fejsl1n!p3m z32p9wn_}0^6PunoZENX_Hpe^L^w!rt7xma3d^cnbgI~p$N1`5z#Xsh}?N+Z1j%(bq zYzMpSo9%itUnM)FPE2L3^w`7nGicS_TRSwbvF>GhS+;7n)aSp?MNh;o-?j4P=6A=n zC#*goz5JHu&y>5}&pr2E-dLt37y136LrJZa?O#b-2fG*)luK`cd=M%d6g* zf2sbGs8Eye|H$&BcSrOE|9(EJ^ZIGIAa*cuA;UkWQ;RcxC35Xd17;5fPgg&ebxsLQ E0C6^bEC2ui literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/04d@2x.png b/src/main/resources/images/weather/04d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9c64ea86b6a93c7fd61543c696956b0657454fe9 GIT binary patch literal 1869 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 D(B1}6 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/09n@2x.png b/src/main/resources/images/weather/09n@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f14cb61a53463cf6ca803561716b21a41cd3c36 GIT binary patch literal 2697 zcmV;43U>90P)U4DF_S2r1S7%mZ*7z+!h=I(8NED^y%*(I1(Nnk(ZN`onBwx z@bt*Yh<)hNf)T)Lllp|?php|BiVrLIx%h6H&1NgKSS*DbHf-p(T5TvUK7iEJRD_3z z(-5ZRK3{Vi`Ltmd)tu>Vny9 z*4k5y+?JdN@OJx(+O!rwOJhX9^;F&PsM zi84GqjIb~uBjZa@Rh4}_^uD(8IGfM$mmrIHgf-Jo_j8H8@uyCm3Zv2JjUZnTRY!ja zk~bOd@$vC!Z*Rwq z8#fRT5Qv0?__3jE0(@fkTp`-+E#+}4-9SSWE&tMxMQ(3bS2sTWv<`dszJ-eyFCr~1 zjX4Dqh*DfuR{A3m&m_{znyoi62%3Y0g@v(34+=6cd-CX`kD#PvKb9_i64$R^pQwmV z02@WsPvnrbPGH#{Lp{VEY8hpai8N(O6pD&|&D`cQXDTsmS_(Vw1YP)b0H2AfpU58K zbx6ct*w_FGggF#Peck5EwF5#Gdg?kLvnHowr}6M%xbkh z(AL&A(_k=U@Wrg3aACyOLtxoffn^JU^1b@|`;ediOyd6i@75WO#@fclrhgd>2ERRv zNI@nwS-=yhmyie6+iT99J$n|4i{E97UKGv`3JUU19R!wrLSWg#AfvCU>L9u8MXE>`5@p7W88~v}5Yp2hz=aE!*aBEvTbsBSLR7(gVz`Q@ z^|%d9$jG~)4@GY$i75NaWOs?Xx;n9AM-lq^dfB9M=guM_HS@;;)dv8caOWC&coM>7 z3csTq4+DUnLP5~=&h;Wu91&F~f2@Z*>8?Eq4i08wP#9y$k|$7Ab^Z=<{6ML*7~sa9 z7QCo;(3%Q)VxsWZ0@c%eVW(!ie;5sE7}46=g5A6KpuD^sd-wjHH3kVK7?rPaEVsUwq?=%9p-{+K07v-R{-mReEp618k&#pI;fG~dzy5_+@4x?x+sL4Yg@w)B zwd*&vl*;1_4IlKT(zW*SoraV1=c||qxw-Skk{u{4;=_za2Gv&tlbQzP{8oSR$z^KH zUl|OBPDN2ZYieq#wKrr%MFneY+EX}xel8X+TsT%vcXv0A9XpPbCr{zZmFk%QLT1gH zc_A+^4+RDJOt9WwGaGXJ>>y}nQhEpp5fT!DkPzAhWyQxIm*eo^qqutY8iIp^*xO8v zN4?~wmo}iWu@QUryv6c(M@Ce(^`NjYpXKwC7@If0#>9+`jm?RVk7GNk+S~v0@a@~T z&Qhkyjvc>5cJ^#0iiTCeyCSNG_*D>UyjBn8=JQ<@3_Ds;XX8RW%2r_NGWtlua~|qg2xa z2liv$ym>xzqwhIEXpFZL8XAItfYH&B@}b^;{{x&peHv%ZoJC-u0ZB(3u$xcv@Q50n{<)`t}yA?%QPi0Z#(t;Bg@vl6!h@kz4O*F(cH8o-S^y%2Q?~jOy ziFPL^YeMch8)7%8;6~MK?qxmU;K4(vtUQOv$VjB5q%fO6jj5_CWxyu`_yupw7P{79 zANuPK#Rt&PL&*u?J&*Gp{(qPFHaI3I-KW0(DypliL3YK5+tq!JFhMqM+%&c}-Q3)a zj*c!i$Dko8D=U-P0{V_OW)c?zS%gmf+~LpT_TJ&ZQitPm8WFYDXLJqSKOuB)5GF`cQj*K_ zF1(yjr*Oq~7nhylv;BA;Mb?bPGBh^Ck+VQqjCyo|^^j~$afto=xO$u)0;m8mi~kzK zpS9kA>`-_(MQDGE%F0R>q9LQ~W)7BL(Ssnvd^arFh;O<0K86X!KKuCNuG&^J!Q5L);K|L;xG3Nx&!h+6 zyRmJ&n^5D^P*qn~$97m9J$i`ku<~SXBFgR6`%h~;#>D{N0^r< zWo2c-UEQG+|6jOGQP+S*%&}9NP{@Gk%FgB9TZW z5{X12kw_#Gi9{liNF)-8L?V$$Boc{4B9TZWq5$w;?BvCS0QD>{00000NkvXXu0mjf D(B1}6 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/10d@2x.png b/src/main/resources/images/weather/10d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..62304fded6be1c5cea4a6a353cf336a98bec4c3f GIT binary patch literal 2584 zcmaKuXFL=R1IN!6iDbs*jL@IUR%e~losm5f*_7>MCmC0fGrMdK;bd=4*(+y-dt_zD zW!xb<`|0_7p105Q;`jT$`@a67jSRF{m~Juw000&pZMex_KK;)a>Hq%opDAVlz?B6Z zILzz?b`u-&+-w|3fUeGmLfJI{eCn}yBe#lwVM@ki-7AcUT)GugvQ9)Lyg7gDR3O&8 z!n`8<<9DVu7Zl!J_4DOjo@EPrwquf6(|rzu;ljecA6eTsJl`LITEs|O-Bz->+GpJ(UyMg3DKPgY}y5vw$I5>>+VVH(i0gORp0^Q@Xex**{b=E^+ z`a^NW_ythU&GWtGG~UhZZqKsY)&aK^iok6~@vr$ATIjHl(W_m32KY}lr*Hb`7C`N- zSMr*}EL{K#e$AsMW(6Q$`H7Sy*i*T_0JwEybVq+~_tZEgQoKE&xx>UP3v@)iJTP47 z<~o;+FJZD(Vvxw{9^gYZdTBuF0;|oEK(%0~z$+vRIIWZa9(r`ePdc!X|B3F3VbDZM z*{nDYTG~JOL3yJJYZ&#atYlz^KZ%II@qjC7Mi3}jYuVH z4&tt%9f~sW_eAw*_Rgkh#X^B~Zr+gBFWRiCR<0hi|JJux0X?1@`D{{3u^#Nfn-(fP z8DpEi3l~8L_Hxvc6_e{e3-}ktpBr6)t;FY-p|;IFZc%GY;R#AU)F)S1-uJ7E$iBzU zv>-DVM9Hijdz_pFjF{pF-&u~Qz_$Q~!E>Tem%dl_m5B!jv0lW?1+k-Dt`G}%;2pSZ zRB=T^qRqn>whY*2bk5H-&{zaHwA8~sJ!%t!2$R1d(?V4iEY`aP18c1|^OYczM|mCyM_#)Hb~;?zX`K+xh}+ zN=b4}p;wn*we+&W=66f@<_NML(!0jWzsio5Wx^PDKj((7$ugYfEQK-FGQF65_p(Ku z-a0+Zd~MQlVw~h$Ey=7u#u%x=7_?kI;DBD>Jh`py1aXl6!Dd}OL!giidXo0FJoVNlDzeolz+KMUa_1Zlf_(q{m z`3$?=*t9_Hj%Cy5<>5}%3XzrJsUJy*E7VOpSK?=ikJBoMWK|83EM_Fvgnb=v^GbEZ-?{*;!;nf0M$g|BwKjy|>)=PFr>-bg-U zyLL%$9?z+Iw~6Db_Idx49(1laPB}?14ZQClc}wggnd0W|xYHf0Q)sHEc4YlYPj$q= zu+Rh_&FRmcp#2D*J>~ol*KHn2m9_fg@oy`>$E25_YF*bSrJqHeV!d=vL}XG>j( zG*qJcnLYLE-0T6!c4t{$F6eJIiQM3*RxhujH`AIi99^l24 zi!)42P5u0VzO?@cMa%P{pTeRK@rvfEtugHtb|cDGjqF$6>4>r)de&gsZs|`#Mu{-B z+#=D8tMqR=tqL1tcaKR7N~TscvT(B)m(1@2(#C>Z4wg{A(h&2p`t|H}`P0Mg)hP0+ zESZp&WKcwZU_Bxur9Ce`>ysq3mU*#LJlpOqpnEI)HTPusvmo8rP0R7|i2!s(~=WRn_b^a9QP;k_^E5* zD)@98HLnK7>g(`TK?>$%p+3kUKjL=Kec_h$48%y{J*7lw8XClZEhMN@3%&ZfC!Z#U zkwW^AzmS%qohB$?=a++Mcaz?%dHSl#oQI9*`u6TR@e#2N_XE45oSj`;e|mWbb0PTq zLCBI6|HT0*dQuqpZd~dtvd~Zx!+Lirw%$3!wN1b_759S{Gf&(Joxs>eQP-VhjPKIP zDWk$6JKeX@1Sfx-$&g+3`&g-_bOIMtLj?okU`kbq*~xOBt$f&6UNjOUJOagkTHSIE(TVQYnI;TqWRiF2IQ`^d`mo zyX-qWOV6XNyqmLal!J_|tgMWU6F6akG&iyzBg-W*7nytc>8%LmeJVla@Tt+fdVHgt r%Wyz_1O7*d$p6Wv|0WfZ=8V;WO01z+^n~=c_y9Tx19+u|{p)`Nw}AnJ literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/10n@2x.png b/src/main/resources/images/weather/10n@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e5d101266c3a54b4893e8e38e3c0014f3fdfa2 GIT binary patch literal 2584 zcmaKuc{me}AIGO5b8v_l*R z1Wy{2KE~S!f3P#jEW0VnBCCoQOUhum{DyLYVgS+S;FmX8<+HSmm%fk@7#|p+P8fF? zgsDf4$OPudM>833L-kZmQ|~d0VyCs3FJjl4mUKB-Puzz~@c(bD`xy=Yo}QSP2+Iz( z7xncI^O#E#z~f_PtCys;80P`10BvqpwM6~HX&t~H;H)Cx*NMF)#>C|DwC?RSsdNYX z<@|R-q+LMYs(#i5Kr0Em!=-K_o7kxOrm3(jHN2C3RsnF*T1ZM*mE|WZoGPJr=5c}u zk4iqF7n6cwb@4 z@`dK7W-!>J1xSi4ag}NGwGfTkyQD-G#rgT~l&Oh>8mhOA+SnWr5Dj|iE3Ym)zEZnJ z%N$&l#prXdaj+*8L&*0z>75M!jVKUuY#}FIWM|VGr>_f~l}{`q!W^DTKQJh!E#?0C zxti5E{p1`LtCVl*xTzyzvs>|pLM-=a*Pho@81hx^|^NqSe>1;=*a$FLWlxr{pcM%MO7l=NDx?YTP`#Y!X! z*Llx<;-t?8`3>0-%wLQld?m*{Gnl_na1D@qg3mxfk2@W1eDa#}$GHf4jE9t}z>yK1 zw?vC9f?a!`-YE6FeLDCTDzUE%n~7Vy7OTY3QS3VWy+%kkP9rp+zCQe8*aBB2fhwf! z%WqoCjY5t1Nmf;9PNxT|bQ2vptVV@erlBCSqQ_5t1l_*=c-{eps<|E&ghvrt3fTaH zbuclUuTED}N+9`{bvbRz5ih*P;YOJquzfbeG{*3)Kb8Mf7G_S%J&qA3&*&u{-uGh* zdvU~MoO_j$u9Ioz(JiC!fHE0WxAclg9du5;X@GyzX)B0LkviS7H>`qb3pQ;|PJo{h zv&lr}hU*QU!4~I=kbLU-O@I;hPp+$k)cN+!q_?!(0)fGE+r|kN#w{-YhB=cd69`U= za35BOoL2@N^CvG!B~aiG+TCs{#)^YsRuhq$9cmZ$@0 z2Ut20B}K69%w4xmydOl=@!>>)Lq0d`nR!Dh?43}nd(^Dox5Svnv}A&RHYMfxaa=Q?Tri0!O22Hh?V++ zZDF<@0ToQ|!fU0YrZ3)EX3+XC9La~d_LyxgX{7%%uQE&25I6`{MJ-Ba%z)E`Xm9p69?3q ziB999p9e_WFARBPgTZO*^CK2+^QD=8e}BbS+p%{ht%II;ZpaXk;!ZiJUk#c6VYN32 zG*z~%epTK_)rNX#Ub)?xWRsx9^Rlg|sY3KUk5nq(=QCT2wX~I;sylG%&Z-(awkNdd z&$T-b+UIgb3JP*yV!VC%I_JnhTS+aT!k@`~C6Ld|JHB%||W z8XtWsriSU548~$0^xoG(& zmh$Ed^+w~Ih4DMO;spiIYqrN_@_r{@n%&C$ZE_rcK-8BU8UU-SBq5>U#O!`EGst8u zm?>TXH@l~Uu3%rRG3np19A$3FjP%}xakeJtCaUibf-_2JzS8Y6-2J!rY~oo+T=Beb zjtA@TF|k^c2Mu#iR+ZvuQG0RA_B%iB@Kd`oQqS=e@#OcdM-x9r&7Bx1ge8}sxpcSb zZO(KQx19V>OrECrqBr0Si?(<|-bWbYsGfD>>~cXRkLJsk&9=GT&Tq7Db#i(`{uS2Z|LH;)F@};v$14EW@=?R|F#LfTG>y(Z~iiy4=3$ zejMM7Sn+5VbKNWtg-oCM6%PsdP6*a(xTBEF^@wL!1x?|$aK0!r$!#z+v>rsiE_&eF zHw7Zb2qnq^bj?uToX(Ef=WxdSo5m(}uvnP^kdu>UsUz(#YAE5Oih`0iu2WKzAbkhiGH1TJfD_G0N zn}v^o(C6UZoHopR`$|bgMMa#^vLbugoXdU_IzhKg>m5Lpwkj-Vjcyi>*~7EoKQTIK q9eQ4|{C?@u|3{hrt5X4hL-Ds+h8Bvjpyz*$4}iR8ZdhsHn)DxmH|971 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/11d@2x.png b/src/main/resources/images/weather/11d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4a885cfa9e79bc113e3d2dc7c7ad7d425e97e1fc GIT binary patch literal 2844 zcmV+%3*+>OP)n5 z+o=j#Q99aKYSoGwt&TccS`-GY1qB64AS8i+B%6@u-rM=^o=sL*0-HU%n=t1$lS%gO z?%8wif6wfEU46dC>-FBz+}w=MmvCHilb)&TVJHc*K-u*bz)YYL7zGrm-<6hS z&Ft#xeDaJl&e(R>U3X6H?d_$pu`y9mz5`@NJuU`H5<`$sLqkJDBBF@k1;E+Bt7D^WZiB!+%Lh0d2KpXFC8^iCDUeNX2}4|sm5`kE_qlk7Q)cUENHq2jwThBXIt7^nR1fyea^Y>;c14*! zeL9O4Ep$y+68U2?2ak|0K?;H8i4GDGMY!UM%c-cSprs{gb+yZZlae)fgmejVi_{8r z3?!n+D#^{weYXB zSIL0`Uy+fKf#2`Pacos?@ljS*>PBRd_r%F|o%4=Gx&%2>=U@@jRarS6pD%+02ljLG z%{MWA{ApxmWx3C_wgy?ZZXIjZyh>(fCS_%1NFEahVhcyBDC|r1SUc(150Q$icJC`8 zuL!epfmOVmK(_Y4o9UG4*9Z@-n6w+Q-xzl_7V<)~Jk`6)6 z0zT34xzUJ^kd;taSmYiJ23y@@5q~1j1p)y#XK89`WX_yxX=yp=t`zYz2_SnbKSh%u z>2T^hfP}6$=lbJsKyX@V&SI0;HMy>pWNwy%;Q|E!R@FAd<Y&z)z-c?r~+9ux>m?F!%YlgG~ES*LHBV%K_N?) zJjlL%&1~4Pf%5Y5fwFn2y<9ED03CDEm52O5(>Q5GR*PixQc@8ffBaEOOH0|aXODY4 z2LA-Len_?#M+8=NJ&esTzsj|<>wbLZ{Cd?7A{=$QC3z~ps1+G6AFcT zRTIP}wHL1yU4rN_S5o$ns%`Gk_pY4wHjoN!>~E}A+S=N<^2#e4eZGvF7caiYjm%0) zO5!cs$AvDZ{&@l|o&9)y5Xi)S=SA$gFR^lzFfz;TE*v|A?~>~vzX-Y#E(#tK@h9Qr zF>}nPpMKgffBpj3;mcOBh;ukY>2`#z2@B%bSlQXw^*iZVem8V=LRL=rIgb~oejDBy zv$1k>b=97ZiTISRt}a;-Z0J0c_>7Me)pFD>KBcOviYK33L2+>r_4V~S z+E|Z3mmtzb-ZtoW%SKX84)&H$2)+3{)~J)*71Q_hS55e?_zBjiQk-BgCH^CdPRp`3 zi7>LyGHKEzYHFTyi;|l+f7X}F=t9?-^{P9Q28SoyaTt1k4IBzWK<$)@scP7XXUYtG zm(0PDvbm!r+>ZxY{aq-ZBBDqK{;E|^yP5vhtzS@Ax6AFE)Pc?|+<@Be7#Y`_#dqWv zVmH;(v-rC3i~`x=u(!Jtr@0aT-7E2&c{YyZ2dP~hs5aMEqYua?m?V!vP0jPX|NaMV zGsV)S4<-Czy7$z_s*R}QziM8e>&$x|T}s;)X12}C#cg0xZ)Ftd4Twhf@d~h@|P|2h0$6HqT_BvgWUotkR)~Z{Q zrB(F$0bi-Q)kE*T1Z^!)II7=Ah##>$^enprN1`g}KHR+x->nbetDcRc8X1y=^zqI; zo}onuorz+y+km9ba~^Q15-IFo{<#MC3ZP3#VK0ow!r*`ToB6V4o8x~q&NeV`M-Cy+c%flYu9%*K_{8_GJccUwR zW~}#~5Tr&BiK?>muyV2qZCa1L^<%93Bbpa)Q+LEhco_J7-=hpaPFssBN@{Y#^pM4~#!XLoO z44W2b*EV`qJ%qjfU98b3xvRwuW&4>D)$c2%my2VLEB>QtS5l@tRL~-bm6w0y!H`Yp z<9}j*_!gm$-gPr^tGqIt@Ez$tBEF+hwW7vGs=pm7T@bsK`pR$8(IQCi%TM<|kW#v1 zV}G_D`#=A3Gi__s7$`08D;gfgX~1Rb&}`M?6dN&BU21bGMZ1QnMvoxRKK%6qa8<`{eRXjvZAAzgE9RjDg!}{C;R|43|`-%6bBZzIsen*|?)WIj~uge=751;AvIr z9{6*za>npPUz6rU@#aA27|$1Fc=I5 ugTY`h7z_r3!C){L3OP)n5 z+o=j#Q99aKYSoGwt&TccS`-GY1qB64AS8i+B%6@u-rM=^o=sL*0-HU%n=t1$lS%gO z?%8wif6wfEU46dC>-FBz+}w=MmvCHilb)&TVJHc*K-u*bz)YYL7zGrm-<6hS z&Ft#xeDaJl&e(R>U3X6H?d_$pu`y9mz5`@NJuU`H5<`$sLqkJDBBF@k1;E+Bt7D^WZiB!+%Lh0d2KpXFC8^iCDUeNX2}4|sm5`kE_qlk7Q)cUENHq2jwThBXIt7^nR1fyea^Y>;c14*! zeL9O4Ep$y+68U2?2ak|0K?;H8i4GDGMY!UM%c-cSprs{gb+yZZlae)fgmejVi_{8r z3?!n+D#^{weYXB zSIL0`Uy+fKf#2`Pacos?@ljS*>PBRd_r%F|o%4=Gx&%2>=U@@jRarS6pD%+02ljLG z%{MWA{ApxmWx3C_wgy?ZZXIjZyh>(fCS_%1NFEahVhcyBDC|r1SUc(150Q$icJC`8 zuL!epfmOVmK(_Y4o9UG4*9Z@-n6w+Q-xzl_7V<)~Jk`6)6 z0zT34xzUJ^kd;taSmYiJ23y@@5q~1j1p)y#XK89`WX_yxX=yp=t`zYz2_SnbKSh%u z>2T^hfP}6$=lbJsKyX@V&SI0;HMy>pWNwy%;Q|E!R@FAd<Y&z)z-c?r~+9ux>m?F!%YlgG~ES*LHBV%K_N?) zJjlL%&1~4Pf%5Y5fwFn2y<9ED03CDEm52O5(>Q5GR*PixQc@8ffBaEOOH0|aXODY4 z2LA-Len_?#M+8=NJ&esTzsj|<>wbLZ{Cd?7A{=$QC3z~ps1+G6AFcT zRTIP}wHL1yU4rN_S5o$ns%`Gk_pY4wHjoN!>~E}A+S=N<^2#e4eZGvF7caiYjm%0) zO5!cs$AvDZ{&@l|o&9)y5Xi)S=SA$gFR^lzFfz;TE*v|A?~>~vzX-Y#E(#tK@h9Qr zF>}nPpMKgffBpj3;mcOBh;ukY>2`#z2@B%bSlQXw^*iZVem8V=LRL=rIgb~oejDBy zv$1k>b=97ZiTISRt}a;-Z0J0c_>7Me)pFD>KBcOviYK33L2+>r_4V~S z+E|Z3mmtzb-ZtoW%SKX84)&H$2)+3{)~J)*71Q_hS55e?_zBjiQk-BgCH^CdPRp`3 zi7>LyGHKEzYHFTyi;|l+f7X}F=t9?-^{P9Q28SoyaTt1k4IBzWK<$)@scP7XXUYtG zm(0PDvbm!r+>ZxY{aq-ZBBDqK{;E|^yP5vhtzS@Ax6AFE)Pc?|+<@Be7#Y`_#dqWv zVmH;(v-rC3i~`x=u(!Jtr@0aT-7E2&c{YyZ2dP~hs5aMEqYua?m?V!vP0jPX|NaMV zGsV)S4<-Czy7$z_s*R}QziM8e>&$x|T}s;)X12}C#cg0xZ)Ftd4Twhf@d~h@|P|2h0$6HqT_BvgWUotkR)~Z{Q zrB(F$0bi-Q)kE*T1Z^!)II7=Ah##>$^enprN1`g}KHR+x->nbetDcRc8X1y=^zqI; zo}onuorz+y+km9ba~^Q15-IFo{<#MC3ZP3#VK0ow!r*`ToB6V4o8x~q&NeV`M-Cy+c%flYu9%*K_{8_GJccUwR zW~}#~5Tr&BiK?>muyV2qZCa1L^<%93Bbpa)Q+LEhco_J7-=hpaPFssBN@{Y#^pM4~#!XLoO z44W2b*EV`qJ%qjfU98b3xvRwuW&4>D)$c2%my2VLEB>QtS5l@tRL~-bm6w0y!H`Yp z<9}j*_!gm$-gPr^tGqIt@Ez$tBEF+hwW7vGs=pm7T@bsK`pR$8(IQCi%TM<|kW#v1 zV}G_D`#=A3Gi__s7$`08D;gfgX~1Rb&}`M?6dN&BU21bGMZ1QnMvoxRKK%6qa8<`{eRXjvZAAzgE9RjDg!}{C;R|43|`-%6bBZzIsen*|?)WIj~uge=751;AvIr z9{6*za>npPUz6rU@#aA27|$1Fc=I5 ugTY`h7z_r3!C){L3wQiuOoSRvxy z3mevUck$V`cHQGwcf;eq$IqN7{WsON`qk-!UB1j3S#`mrjaN72t9a|V-Q8-G#gG7= z--l}IOi}=9s!{A#BW@vw@f%xMUFI3U--0$C<_O>$mYShdgcZ;Y=mv;oY%1bpIKe$Y zxZLyW-Z3BJMLcK$m@POgH+p)qO>%E=AtfR=ZZ*76W{jxPhU@CKEyILcA^aKTp`)J$qi419|C2ltig6tC=kAO_uY_aTJc6Nq-%T zF_}6Uy@X1bIX@na`b1bG^ciieZs4A4JdYzM{#m+a>Ck&^K+4x=sTeVk!$(H?{kW z(zv(D>0FeH`Z=YYI?p6W&ZBv`?4p?-52oFVZ+sV(A1C+i0Kru=bsk?^<;sd9MI1X% z3mR|Bvv9Ef?Su^~8c4K8LQ6$^tQ@tNet^V$Q@QV61`n2>xn9unhfL(#ADH9=bvd6Q z2U}ZT+ID$gUBQdSZ*T`RIVdo%;6HH(pi=kG=TjuHq<$?HVNy&?(zp>Z`UhxwGtK>+ zcE0-=+~SkTpSDHp+OeN1c-ohHe=p0e-EPW9yaa68mV)4{AW*-CV`KHfFulZ=plESB zX{t*daFkra>VI8^x8=qdelY9ssmuUaRT)Y_(p=Leq)O|VEI}RIPiLmb25W75aNavu zu*8iXcS1R&1adtSj$VWrO_XfSe_=N%$W|IqU_&*so;li0=df#?0w!B<#JV@{acHO& z2nYI1!&&QycA$i1BL{oy;qE6{>l`DAU$q(2eAvm@SS@>bBW}1i{!r=JrkbJS&2DEA zkYu2K#e{MtRErKk`;Z>tg!V8($ra1TpLisu!r^z%-)Mha(N7)31_?;Yg6yEtzG8gE zdn)OqRoooSs;IOLvxf$7I(#BFH(NZ=X4rrbO1xSoFR;UnBkKbC_e0F~*zRODlr5nX zh0~$F*Cez4{tv;L9YU)1C(>-*9h5}%>v`cjQd*RXhHa|MnLlQ`5aM&fnBE1yX&KsR zAWqB6$GX{HzW-!5#vrjk0k!~%u#`3v3WU|YfzGK8l;Q;JTT`29>hHCWH;;Vx8dAcr zLpndQ6($q^tO-TxFqvMIi}a<)<@Btjc*-#g++6HUx}@6I?pRiuM{=m2&3%4*`6%+f z8)Ju+DbZ{l)T$~QqAY+o{n+eUEdM0~aV=o3QUGCS-9lJTlsE};z6q~wKW98}_!MSx zGMLIruG(_>4O1FCm9M*&#$GAD1>3N(B<`c#CBzYEqx9Pw6s&EPI%U*^K+Sv=J*wvP z^j9H#2q_AdY)<3Op#59x#hAqyzoP9)Na%=~bJmS^TmZga)Kh=8a8NqJAg1YUS1aS| zxzoBP?R5Rw`f}xmje!PBw>992`&v`oy=~*P_qH=aIIip(!*W~&yWtv=j0b-CvwJbF rvX&B;oBPkRzMBmmxU?r41+b$gHHVs93caDScR&DduTw}iA|m%M@vA#( literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/13n@2x.png b/src/main/resources/images/weather/13n@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7867322e900068a96547ec05d5e1a7b841d4ab64 GIT binary patch literal 1703 zcmai#30D$`0);`%-O87m1~!R`3$EmnwQiuOoSRvxy z3mevUck$V`cHQGwcf;eq$IqN7{WsON`qk-!UB1j3S#`mrjaN72t9a|V-Q8-G#gG7= z--l}IOi}=9s!{A#BW@vw@f%xMUFI3U--0$C<_O>$mYShdgcZ;Y=mv;oY%1bpIKe$Y zxZLyW-Z3BJMLcK$m@POgH+p)qO>%E=AtfR=ZZ*76W{jxPhU@CKEyILcA^aKTp`)J$qi419|C2ltig6tC=kAO_uY_aTJc6Nq-%T zF_}6Uy@X1bIX@na`b1bG^ciieZs4A4JdYzM{#m+a>Ck&^K+4x=sTeVk!$(H?{kW z(zv(D>0FeH`Z=YYI?p6W&ZBv`?4p?-52oFVZ+sV(A1C+i0Kru=bsk?^<;sd9MI1X% z3mR|Bvv9Ef?Su^~8c4K8LQ6$^tQ@tNet^V$Q@QV61`n2>xn9unhfL(#ADH9=bvd6Q z2U}ZT+ID$gUBQdSZ*T`RIVdo%;6HH(pi=kG=TjuHq<$?HVNy&?(zp>Z`UhxwGtK>+ zcE0-=+~SkTpSDHp+OeN1c-ohHe=p0e-EPW9yaa68mV)4{AW*-CV`KHfFulZ=plESB zX{t*daFkra>VI8^x8=qdelY9ssmuUaRT)Y_(p=Leq)O|VEI}RIPiLmb25W75aNavu zu*8iXcS1R&1adtSj$VWrO_XfSe_=N%$W|IqU_&*so;li0=df#?0w!B<#JV@{acHO& z2nYI1!&&QycA$i1BL{oy;qE6{>l`DAU$q(2eAvm@SS@>bBW}1i{!r=JrkbJS&2DEA zkYu2K#e{MtRErKk`;Z>tg!V8($ra1TpLisu!r^z%-)Mha(N7)31_?;Yg6yEtzG8gE zdn)OqRoooSs;IOLvxf$7I(#BFH(NZ=X4rrbO1xSoFR;UnBkKbC_e0F~*zRODlr5nX zh0~$F*Cez4{tv;L9YU)1C(>-*9h5}%>v`cjQd*RXhHa|MnLlQ`5aM&fnBE1yX&KsR zAWqB6$GX{HzW-!5#vrjk0k!~%u#`3v3WU|YfzGK8l;Q;JTT`29>hHCWH;;Vx8dAcr zLpndQ6($q^tO-TxFqvMIi}a<)<@Btjc*-#g++6HUx}@6I?pRiuM{=m2&3%4*`6%+f z8)Ju+DbZ{l)T$~QqAY+o{n+eUEdM0~aV=o3QUGCS-9lJTlsE};z6q~wKW98}_!MSx zGMLIruG(_>4O1FCm9M*&#$GAD1>3N(B<`c#CBzYEqx9Pw6s&EPI%U*^K+Sv=J*wvP z^j9H#2q_AdY)<3Op#59x#hAqyzoP9)Na%=~bJmS^TmZga)Kh=8a8NqJAg1YUS1aS| zxzoBP?R5Rw`f}xmje!PBw>992`&v`oy=~*P_qH=aIIip(!*W~&yWtv=j0b-CvwJbF rvX&B;oBPkRzMBmmxU?r41+b$gHHVs93caDScR&DduTw}iA|m%M@vA#( literal 0 HcmV?d00001 diff --git a/src/main/resources/images/weather/50d@2x.png b/src/main/resources/images/weather/50d@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f04122b30fdcde958c90ca339bb990fb5508ffef GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^DIm$QvA~j=q9oJvF*6E|;Ry zv)sPl+a>>e&hb0{*XNago%g)*eewC7=WU<6PEzqiM`CNk&PmUnVPSIOsdZy!0`G^d z{jbBB=Qr*>u-Q@Q=k+H~?k4hWKX55WnLn>yi|ys%x5q1_(pRva)GTsb$F#dK_rP?! zb@BXX7_J*XndbYXsfN9e^~B;8s>&tn|Fd!n`J7bE7BArZ!TU$&kKr0G+3T7QoFCq> z)r_2Ae4w%E7bk1nvVj87j9JbLX5gt+=B4I=4Z_s&abqhZV+8 zj0&u`u38%X#BbK(F2e_<=M*NIi^sE^SZJ|(O+wN632zS^+%ol_`iZsMFC7futYXJM z;XKn$?jr6Rvn<{A^DSRHC!k0_()eOt#k}c>Ml;pF^H_4d@t9p5xNGT7{fC!NRc@KO zTVa2L`^;n=t+L32SN_Rw60_jV@t7OIvi8f53%(EPUe;uZKjA7^RKzz|hJ72udvCV2 zdsFtVlG#7|*^ckQFBfc0KjHd-Z-eBIK+EZtYp;mft+^=acH?x_q&Q{%-D@fqz5ABO z;$QvA~j=q9oJvF*6E|;Ry zv)sPl+a>>e&hb0{*XNago%g)*eewC7=WU<6PEzqiM`CNk&PmUnVPSIOsdZy!0`G^d z{jbBB=Qr*>u-Q@Q=k+H~?k4hWKX55WnLn>yi|ys%x5q1_(pRva)GTsb$F#dK_rP?! zb@BXX7_J*XndbYXsfN9e^~B;8s>&tn|Fd!n`J7bE7BArZ!TU$&kKr0G+3T7QoFCq> z)r_2Ae4w%E7bk1nvVj87j9JbLX5gt+=B4I=4Z_s&abqhZV+8 zj0&u`u38%X#BbK(F2e_<=M*NIi^sE^SZJ|(O+wN632zS^+%ol_`iZsMFC7futYXJM z;XKn$?jr6Rvn<{A^DSRHC!k0_()eOt#k}c>Ml;pF^H_4d@t9p5xNGT7{fC!NRc@KO zTVa2L`^;n=t+L32SN_Rw60_jV@t7OIvi8f53%(EPUe;uZKjA7^RKzz|hJ72udvCV2 zdsFtVlG#7|*^ckQFBfc0KjHd-Z-eBIK+EZtYp;mft+^=acH?x_q&Q{%-D@fqz5ABO z;