Skip to content

Commit 5aecc16

Browse files
authoredFeb 21, 2025··
Merge branch 'master' into fixes_issue_264
2 parents f9e8096 + 36de05f commit 5aecc16

14 files changed

+2166
-34
lines changed
 

‎README.md

+21-7
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,17 @@ The following prefixes are currently available to use:
5151

5252
- [**FontAwesome**](https://fontawesome.com):
5353

54+
- FA 6.7.2 features 2,060 free icons in different styles:
55+
56+
- `fa6` prefix has [163 icons in the "**regular**" style.](https://fontawesome.com/v6/search?o=r&ic=free&s=regular)
57+
- `fa6s` prefix has [1402 icons in the "**solid**" style.](https://fontawesome.com/v6/search?o=r&ic=free&s=solid)
58+
- `fa6b` prefix has [495 icons of various **brands**.](https://fontawesome.com/v6/search?o=r&ic=free&ip=brands)
59+
5460
- FA 5.15.4 features 1,608 free icons in different styles:
5561

56-
- `fa5` prefix has [151 icons in the "**regular**" style.](https://fontawesome.com/v5/search?o=r&m=free&s=regular)
57-
- `fa5s` prefix has [1001 icons in the "**solid**" style.](https://fontawesome.com/v5/search?o=r&m=free&s=solid)
58-
- `fa5b` prefix has [456 icons of various **brands**.](https://fontawesome.com/v5/search?o=r&m=free&f=brands)
62+
- `fa5` prefix has [151 icons in the "**regular**" style.](https://fontawesome.com/v5/search?o=r&ic=free&s=regular)
63+
- `fa5s` prefix has [1001 icons in the "**solid**" style.](https://fontawesome.com/v5/search?o=r&ic=free&s=solid)
64+
- `fa5b` prefix has [456 icons of various **brands**.](https://fontawesome.com/v5/search?ic=brands)
5965

6066
- `ei` prefix holds [**Elusive Icons** 2.0 with its 304 icons](http://elusiveicons.com/icons/).
6167

@@ -80,13 +86,21 @@ import qtawesome as qta
8086
- Use Font Awesome, Elusive Icons, Material Design Icons, Phosphor, Remix Icon or Microsoft's Codicons.
8187

8288
```python
83-
# Get FontAwesome 5.x icons by name in various styles:
89+
# Get FontAwesome 6.x icons by name in various styles:
90+
fa6_icon = qta.icon('fa6.flag')
91+
fa6_button = QtWidgets.QPushButton(fa6_icon, 'Font Awesome 6! (regular)')
92+
fa6s_icon = qta.icon('fa6s.flag')
93+
fa6s_button = QtWidgets.QPushButton(fa6s_icon, 'Font Awesome 6! (solid)')
94+
fa6b_icon = qta.icon('fa6b.github')
95+
fa6b_button = QtWidgets.QPushButton(fa6b_icon, 'Font Awesome 6! (brands)')
96+
97+
# or FontAwesome 5.x icons by name in various styles:
8498
fa5_icon = qta.icon('fa5.flag')
85-
fa5_button = QtWidgets.QPushButton(fa5_icon, 'Font Awesome! (regular)')
99+
fa5_button = QtWidgets.QPushButton(fa5_icon, 'Font Awesome 5! (regular)')
86100
fa5s_icon = qta.icon('fa5s.flag')
87-
fa5s_button = QtWidgets.QPushButton(fa5s_icon, 'Font Awesome! (solid)')
101+
fa5s_button = QtWidgets.QPushButton(fa5s_icon, 'Font Awesome 5! (solid)')
88102
fa5b_icon = qta.icon('fa5b.github')
89-
fa5b_button = QtWidgets.QPushButton(fa5b_icon, 'Font Awesome! (brands)')
103+
fa5b_button = QtWidgets.QPushButton(fa5b_icon, 'Font Awesome 5! (brands)')
90104

91105
# or Elusive Icons:
92106
asl_icon = qta.icon('ei.asl')

‎UPDATE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ To update _FontAwesome_ icons, one must:
77
- check what is the latest released version here: https://github.com/FortAwesome/Font-Awesome/releases/
88
- update font version in \_\_init__.py
99
- remove outdated files in the fonts dir
10-
- run: `python setup.py update_fa5 --fa-version X.X.X`
10+
- run: `python setup.py update_fa6 --fa-version X.X.X`
1111
- update FA version number, icon counts and URLs inside:
1212
- README.md
1313
- qtawesome/docs/source/usage.rst

‎docs/source/usage.rst

+26-7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ The following prefixes are currently available to use:
1010

1111
- `FontAwesome`_:
1212

13+
- FA 6.7.2 features 2,060 free icons in different styles:
14+
15+
- ``fa6`` prefix has `163 icons in the "regular" style.`_
16+
- ``fa6s`` prefix has `1402 icons in the "solid" style.`_
17+
- ``fa6b`` prefix has `495 icons of various brands.`_
18+
1319
- FA 5.15.4 features 1,608 free icons in different styles:
1420

1521
- ``fa5`` prefix has `151 icons in the "regular" style.`_
@@ -31,9 +37,12 @@ The following prefixes are currently available to use:
3137
- ``msc`` prefix holds Microsoft's `Codicons 0.0.35 with its 540 icons.`_
3238

3339
.. _FontAwesome: https://fontawesome.com
34-
.. _151 icons in the "regular" style.: https://fontawesome.com/v5/search?o=r&m=free&s=regular
35-
.. _1001 icons in the "solid" style.: https://fontawesome.com/v5/search?o=r&m=free&s=solid
36-
.. _456 icons of various brands.: https://fontawesome.com/v5/search?o=r&m=free&f=brands
40+
.. _163 icons in the "regular" style.: https://fontawesome.com/v6/search?o=r&ic=free&s=regular
41+
.. _1402 icons in the "solid" style.: https://fontawesome.com/v6/search?o=r&ic=free&s=solid
42+
.. _495 icons of various brands.: https://fontawesome.com/v6/search?o=r&ic=free&ip=brands
43+
.. _151 icons in the "regular" style.: https://fontawesome.com/v5/search?o=r&ic=free&s=regular
44+
.. _1001 icons in the "solid" style.: https://fontawesome.com/v5/search?o=r&ic=free&s=solid
45+
.. _456 icons of various brands.: https://fontawesome.com/v5/search?ic=brands
3746
.. _Elusive Icons 2.0 with its 304 icons: http://elusiveicons.com/icons/
3847
.. _Material Design Icons: https://pictogrammers.com/library/mdi/
3948
.. _Material Design Icons 6.9.96 with its 6997 icons.: https://cdn.materialdesignicons.com/6.9.96/
@@ -53,15 +62,25 @@ Examples
5362

5463
.. code:: python
5564
56-
# Get FontAwesome 5.x icons by name in various styles by name
65+
# Get FontAwesome 6.x icons by name in various styles:
66+
fa6_icon = qta.icon('fa6.flag')
67+
fa6_button = QtWidgets.QPushButton(fa6_icon, 'Font Awesome 6! (regular)')
68+
69+
fa6s_icon = qta.icon('fa6s.flag')
70+
fa6s_button = QtWidgets.QPushButton(fa6s_icon, 'Font Awesome 6! (solid)')
71+
72+
fa6b_icon = qta.icon('fa6b.github')
73+
fa6b_button = QtWidgets.QPushButton(fa6b_icon, 'Font Awesome 6! (brands)')
74+
75+
# Get FontAwesome 5.x icons by name in various styles:
5776
fa5_icon = qta.icon('fa5.flag')
58-
fa5_button = QtWidgets.QPushButton(fa5_icon, 'Font Awesome! (regular)')
77+
fa5_button = QtWidgets.QPushButton(fa5_icon, 'Font Awesome 5! (regular)')
5978
6079
fa5s_icon = qta.icon('fa5s.flag')
61-
fa5s_button = QtWidgets.QPushButton(fa5s_icon, 'Font Awesome! (solid)')
80+
fa5s_button = QtWidgets.QPushButton(fa5s_icon, 'Font Awesome 5! (solid)')
6281
6382
fa5b_icon = qta.icon('fa5b.github')
64-
fa5b_button = QtWidgets.QPushButton(fa5b_icon, 'Font Awesome! (brands)')
83+
fa5b_button = QtWidgets.QPushButton(fa5b_icon, 'Font Awesome 5! (brands)')
6584
6685
# Get Elusive icons by name
6786
asl_icon = qta.icon('ei.asl')

‎example.py

+18-4
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,31 @@
1313
class AwesomeExample(QtWidgets.QDialog):
1414
def __init__(self):
1515
super().__init__()
16+
self.setWindowIcon(qta.icon("fa5s.icons"))
1617

1718
# Label for supported fonts
1819
supported_fonts_label = QtWidgets.QLabel("Supported fonts (prefix)")
1920
supported_fonts_label.setAlignment(QtCore.Qt.AlignCenter)
2021

21-
# Get FontAwesome 5.x icons by name in various styles by name
22+
# Get FontAwesome 6.x icons by name in various styles:
23+
fa6_icon = qta.icon("fa6.flag")
24+
fa6_button = QtWidgets.QPushButton(fa6_icon, "Font Awesome 6! (regular)")
25+
26+
fa6s_icon = qta.icon("fa6s.flag")
27+
fa6s_button = QtWidgets.QPushButton(fa6s_icon, "Font Awesome 6! (solid)")
28+
29+
fa6b_icon = qta.icon("fa6b.github")
30+
fa6b_button = QtWidgets.QPushButton(fa6b_icon, "Font Awesome 6! (brands)")
31+
32+
# Get FontAwesome 5.x icons by name in various styles:
2233
fa5_icon = qta.icon("fa5.flag")
23-
fa5_button = QtWidgets.QPushButton(fa5_icon, "Font Awesome regular (fa5)")
34+
fa5_button = QtWidgets.QPushButton(fa5_icon, "Font Awesome 5! (regular)")
2435

2536
fa5s_icon = qta.icon("fa5s.flag")
26-
fa5s_button = QtWidgets.QPushButton(fa5s_icon, "Font Awesome solid (fa5s)")
37+
fa5s_button = QtWidgets.QPushButton(fa5s_icon, "Font Awesome 5! (solid)")
2738

2839
fa5b_icon = qta.icon("fa5b.github")
29-
fa5b_button = QtWidgets.QPushButton(fa5b_icon, "Font Awesome brands (fa5b)")
40+
fa5b_button = QtWidgets.QPushButton(fa5b_icon, "Font Awesome 5! (brands)")
3041

3142
# Get Elusive icons by name
3243
asl_icon = qta.icon("ei.asl")
@@ -168,6 +179,9 @@ def __init__(self):
168179
grid = QtWidgets.QGridLayout()
169180
fonts_widgets = [
170181
supported_fonts_label,
182+
fa6_button,
183+
fa6s_button,
184+
fa6b_button,
171185
fa5_button,
172186
fa5s_button,
173187
fa5b_button,

‎qtawesome-screenshot.gif

21.1 KB
Loading

‎qtawesome/__init__.py

+24-4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,21 @@
5050
"fontawesome5-brands-webfont-5.15.4.ttf",
5151
"fontawesome5-brands-webfont-charmap-5.15.4.json",
5252
),
53+
(
54+
"fa6",
55+
"fontawesome6-regular-webfont-6.7.2.ttf",
56+
"fontawesome6-regular-webfont-charmap-6.7.2.json",
57+
),
58+
(
59+
"fa6s",
60+
"fontawesome6-solid-webfont-6.7.2.ttf",
61+
"fontawesome6-solid-webfont-charmap-6.7.2.json",
62+
),
63+
(
64+
"fa6b",
65+
"fontawesome6-brands-webfont-6.7.2.ttf",
66+
"fontawesome6-brands-webfont-charmap-6.7.2.json",
67+
),
5368
("ei", "elusiveicons-webfont-2.0.ttf", "elusiveicons-webfont-charmap-2.0.json"),
5469
(
5570
"mdi",
@@ -72,6 +87,9 @@
7287
"fontawesome5-regular-webfont-5.15.4.ttf": "dc47e4089f5bcb25f241bdeb2de0fb58",
7388
"fontawesome5-solid-webfont-5.15.4.ttf": "5de19800fc9ae73438c2e5c61d041b48",
7489
"fontawesome5-brands-webfont-5.15.4.ttf": "513aa607d398efaccc559916c3431403",
90+
"fontawesome6-regular-webfont-6.7.2.ttf": "2b9e6cb53822f6a9b42f15229a36811a",
91+
"fontawesome6-solid-webfont-6.7.2.ttf": "07312c769a05b2c17133da1a09db4ccf",
92+
"fontawesome6-brands-webfont-6.7.2.ttf": "15d54d142da2f2d6f2e90ed1d55121af",
7593
"elusiveicons-webfont-2.0.ttf": "207966b04c032d5b873fd595a211582e",
7694
"materialdesignicons5-webfont-5.9.55.ttf": "b7d40e7ef80c1d4af6d94902af66e524",
7795
"materialdesignicons6-webfont-6.9.96.ttf": "ecaabfbb23fdac4ddbaf897b97257a92",
@@ -165,10 +183,12 @@ def icon(*names, **kwargs):
165183
The ``prefix`` corresponds to the font to be used and ``name`` is the
166184
name of the icon.
167185
168-
- The prefix corresponding to Font-Awesome 4.x is 'fa'
169-
- The prefix corresponding to Font-Awesome 5.x (regular) is 'fa5'
170-
- The prefix corresponding to Font-Awesome 5.x (solid) is 'fa5s'
171-
- The prefix corresponding to Font-Awesome 5.x (brands) is 'fa5b'
186+
- The prefix corresponding to Font-Awesome 6.x (regular) is 'fa6'
187+
- The prefix corresponding to Font-Awesome 6.x (solid) is 'fa6s'
188+
- The prefix corresponding to Font-Awesome 6.x (brands) is 'fa6b'
189+
- The prefix corresponding to Font-Awesome 5 (regular) is 'fa5'
190+
- The prefix corresponding to Font-Awesome 5 (solid) is 'fa5s'
191+
- The prefix corresponding to Font-Awesome 5 (brands) is 'fa5b'
172192
- The prefix corresponding to Elusive-Icons is 'ei'
173193
- The prefix corresponding to Material-Design-Icons 5.x is 'mdi'
174194
- The prefix corresponding to Material-Design-Icons 6.x is 'mdi6'
Binary file not shown.

‎qtawesome/fonts/fontawesome6-brands-webfont-charmap-6.7.2.json

+497
Large diffs are not rendered by default.
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
{
2+
"address-book": "f2b9",
3+
"address-card": "f2bb",
4+
"bell": "f0f3",
5+
"bell-slash": "f1f6",
6+
"bookmark": "f02e",
7+
"building": "f1ad",
8+
"calendar": "f133",
9+
"calendar-check": "f274",
10+
"calendar-days": "f073",
11+
"calendar-minus": "f272",
12+
"calendar-plus": "f271",
13+
"calendar-xmark": "f273",
14+
"chart-bar": "f080",
15+
"chess-bishop": "f43a",
16+
"chess-king": "f43f",
17+
"chess-knight": "f441",
18+
"chess-pawn": "f443",
19+
"chess-queen": "f445",
20+
"chess-rook": "f447",
21+
"circle": "f111",
22+
"circle-check": "f058",
23+
"circle-dot": "f192",
24+
"circle-down": "f358",
25+
"circle-left": "f359",
26+
"circle-pause": "f28b",
27+
"circle-play": "f144",
28+
"circle-question": "f059",
29+
"circle-right": "f35a",
30+
"circle-stop": "f28d",
31+
"circle-up": "f35b",
32+
"circle-user": "f2bd",
33+
"circle-xmark": "f057",
34+
"clipboard": "f328",
35+
"clock": "f017",
36+
"clone": "f24d",
37+
"closed-captioning": "f20a",
38+
"comment": "f075",
39+
"comment-dots": "f4ad",
40+
"comments": "f086",
41+
"compass": "f14e",
42+
"copy": "f0c5",
43+
"copyright": "f1f9",
44+
"credit-card": "f09d",
45+
"envelope": "f0e0",
46+
"envelope-open": "f2b6",
47+
"eye": "f06e",
48+
"eye-slash": "f070",
49+
"face-angry": "f556",
50+
"face-dizzy": "f567",
51+
"face-flushed": "f579",
52+
"face-frown": "f119",
53+
"face-frown-open": "f57a",
54+
"face-grimace": "f57f",
55+
"face-grin": "f580",
56+
"face-grin-beam": "f582",
57+
"face-grin-beam-sweat": "f583",
58+
"face-grin-hearts": "f584",
59+
"face-grin-squint": "f585",
60+
"face-grin-squint-tears": "f586",
61+
"face-grin-stars": "f587",
62+
"face-grin-tears": "f588",
63+
"face-grin-tongue": "f589",
64+
"face-grin-tongue-squint": "f58a",
65+
"face-grin-tongue-wink": "f58b",
66+
"face-grin-wide": "f581",
67+
"face-grin-wink": "f58c",
68+
"face-kiss": "f596",
69+
"face-kiss-beam": "f597",
70+
"face-kiss-wink-heart": "f598",
71+
"face-laugh": "f599",
72+
"face-laugh-beam": "f59a",
73+
"face-laugh-squint": "f59b",
74+
"face-laugh-wink": "f59c",
75+
"face-meh": "f11a",
76+
"face-meh-blank": "f5a4",
77+
"face-rolling-eyes": "f5a5",
78+
"face-sad-cry": "f5b3",
79+
"face-sad-tear": "f5b4",
80+
"face-smile": "f118",
81+
"face-smile-beam": "f5b8",
82+
"face-smile-wink": "f4da",
83+
"face-surprise": "f5c2",
84+
"face-tired": "f5c8",
85+
"file": "f15b",
86+
"file-audio": "f1c7",
87+
"file-code": "f1c9",
88+
"file-excel": "f1c3",
89+
"file-image": "f1c5",
90+
"file-lines": "f15c",
91+
"file-pdf": "f1c1",
92+
"file-powerpoint": "f1c4",
93+
"file-video": "f1c8",
94+
"file-word": "f1c2",
95+
"file-zipper": "f1c6",
96+
"flag": "f024",
97+
"floppy-disk": "f0c7",
98+
"folder": "f07b",
99+
"folder-closed": "e185",
100+
"folder-open": "f07c",
101+
"font-awesome": "f2b4",
102+
"futbol": "f1e3",
103+
"gem": "f3a5",
104+
"hand": "f256",
105+
"hand-back-fist": "f255",
106+
"hand-lizard": "f258",
107+
"hand-peace": "f25b",
108+
"hand-point-down": "f0a7",
109+
"hand-point-left": "f0a5",
110+
"hand-point-right": "f0a4",
111+
"hand-point-up": "f0a6",
112+
"hand-pointer": "f25a",
113+
"hand-scissors": "f257",
114+
"hand-spock": "f259",
115+
"handshake": "f2b5",
116+
"hard-drive": "f0a0",
117+
"heart": "f004",
118+
"hospital": "f0f8",
119+
"hourglass": "f254",
120+
"hourglass-half": "f252",
121+
"id-badge": "f2c1",
122+
"id-card": "f2c2",
123+
"image": "f03e",
124+
"images": "f302",
125+
"keyboard": "f11c",
126+
"lemon": "f094",
127+
"life-ring": "f1cd",
128+
"lightbulb": "f0eb",
129+
"map": "f279",
130+
"message": "f27a",
131+
"money-bill-1": "f3d1",
132+
"moon": "f186",
133+
"newspaper": "f1ea",
134+
"note-sticky": "f249",
135+
"object-group": "f247",
136+
"object-ungroup": "f248",
137+
"paper-plane": "f1d8",
138+
"paste": "f0ea",
139+
"pen-to-square": "f044",
140+
"rectangle-list": "f022",
141+
"rectangle-xmark": "f410",
142+
"registered": "f25d",
143+
"share-from-square": "f14d",
144+
"snowflake": "f2dc",
145+
"square": "f0c8",
146+
"square-caret-down": "f150",
147+
"square-caret-left": "f191",
148+
"square-caret-right": "f152",
149+
"square-caret-up": "f151",
150+
"square-check": "f14a",
151+
"square-full": "f45c",
152+
"square-minus": "f146",
153+
"square-plus": "f0fe",
154+
"star": "f005",
155+
"star-half": "f089",
156+
"star-half-stroke": "f5c0",
157+
"sun": "f185",
158+
"thumbs-down": "f165",
159+
"thumbs-up": "f164",
160+
"trash-can": "f2ed",
161+
"user": "f007",
162+
"window-maximize": "f2d0",
163+
"window-minimize": "f2d1",
164+
"window-restore": "f2d2"
165+
}
Binary file not shown.

‎qtawesome/fonts/fontawesome6-solid-webfont-charmap-6.7.2.json

+1,404
Large diffs are not rendered by default.

‎setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"Programming Language :: Python :: 3.10",
4848
],
4949
cmdclass={
50-
"update_fa5": setupbase.UpdateFA5Command,
50+
"update_fa6": setupbase.UpdateFA6Command,
5151
"update_msc": setupbase.UpdateCodiconCommand,
5252
},
5353
entry_points={

‎setupbase.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import setuptools
1818

19-
LOG_INFO = 2
19+
LOG_INFO = 20
2020

2121
HERE = os.path.abspath(os.path.dirname(__file__))
2222
INIT_PY_PATH = os.path.join(HERE, "qtawesome", "__init__.py")
@@ -77,10 +77,10 @@ def rename_font(font_path, font_name):
7777
)
7878

7979

80-
class UpdateFA5Command(setuptools.Command):
81-
"""A custom command to make updating FontAwesome 5.x easy!"""
80+
class UpdateFA6Command(setuptools.Command):
81+
"""A custom command to make updating FontAwesome 6.x easy!"""
8282

83-
description = "Try to update the FontAwesome 5.x data in the project."
83+
description = "Try to update the FontAwesome 6.x data in the project."
8484
user_options = [
8585
("fa-version=", None, "FA version."),
8686
("zip-path=", None, "Read from local zip file path."),
@@ -92,10 +92,10 @@ class UpdateFA5Command(setuptools.Command):
9292
HERE,
9393
"qtawesome",
9494
"fonts",
95-
"fontawesome5-{style}-webfont-charmap-{version}.json",
95+
"fontawesome6-{style}-webfont-charmap-{version}.json",
9696
)
9797
TTF_PATH_TEMPLATE = os.path.join(
98-
HERE, "qtawesome", "fonts", "fontawesome5-{style}-webfont-{version}.ttf"
98+
HERE, "qtawesome", "fonts", "fontawesome6-{style}-webfont-{version}.ttf"
9999
)
100100
URL_TEMPLATE = (
101101
"https://github.com/FortAwesome/Font-Awesome/"
@@ -207,7 +207,7 @@ def run(self):
207207

208208
# Fix to prevent repeated font names:
209209
if style in ("regular", "solid"):
210-
new_name = str("Font Awesome 5 Free %s") % style.title()
210+
new_name = str("Font Awesome 6 Free %s") % style.title()
211211
self.__print('Renaming font to "%s" in: %s' % (new_name, font_path))
212212
if ttLib is not None:
213213
rename_font(font_path, new_name)
@@ -221,7 +221,6 @@ def run(self):
221221
with open(font_path, "rb") as f:
222222
data = f.read()
223223
files[style] = data
224-
225224
# Store hashes for later:
226225
hashes[style] = hashlib.md5(data).hexdigest()
227226

@@ -233,11 +232,11 @@ def run(self):
233232
# We read it in full, then use regex substitution:
234233
for style, md5 in hashes.items():
235234
self.__print('New "%s" hash is: %s' % (style, md5))
236-
regex = r"('fontawesome5-%s-webfont-%s.ttf':\s+)'(\w+)'" % (
235+
regex = r'("fontawesome6-%s-webfont-%s.ttf":\s+)"(\w+)"' % (
237236
style,
238237
self.fa_version,
239238
)
240-
subst = r"\g<1>'" + md5 + "'"
239+
subst = r'\g<1>"' + md5 + '"'
241240
contents = re.sub(regex, subst, contents, 1)
242241
# and finally overwrite with the modified file:
243242
self.__print("Dumping updated file: %s" % init_path)

0 commit comments

Comments
 (0)
Please sign in to comment.