ghost 4.27.0 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/content/themes/casper/assets/built/screen.css +1 -1
  2. package/content/themes/casper/assets/built/screen.css.map +1 -1
  3. package/content/themes/casper/assets/css/screen.css +1 -17
  4. package/content/themes/casper/package.json +1 -1
  5. package/content/themes/casper/partials/post-card.hbs +1 -1
  6. package/core/built/assets/{ghost-dark-ae67fe157509b6e82c607ba560fc52e9.css → ghost-dark-b93e2e2dcc4c0e1efa981314f45f8cda.css} +1 -1
  7. package/core/built/assets/{ghost.min-b1e58e098721e467388682a85a7c187d.css → ghost.min-578a1b7e68d1f7ae0003ebe421b7c182.css} +1 -1
  8. package/core/built/assets/{ghost.min-2d534cce15c43c646814b26f4beefb78.js → ghost.min-ba8ef5d16b8a6f9072564a368154df72.js} +79 -79
  9. package/core/built/assets/icons/audio-file.svg +5 -0
  10. package/core/built/assets/icons/file-download.svg +1 -0
  11. package/core/built/assets/icons/file-upload.svg +1 -0
  12. package/core/built/assets/icons/film-camera.svg +4 -0
  13. package/core/built/assets/icons/mute.svg +3 -0
  14. package/core/built/assets/icons/pause.svg +4 -0
  15. package/core/built/assets/icons/play.svg +3 -0
  16. package/core/built/assets/icons/unmute.svg +3 -0
  17. package/core/built/assets/{vendor.min-e433aa7d5620e7837f30e170cd43f84e.js → vendor.min-c450359ad46217cd48c00b277ae54a09.js} +227 -128
  18. package/core/frontend/apps/amp/lib/views/amp.hbs +94 -2
  19. package/core/frontend/helpers/ghost_head.js +1 -1
  20. package/core/frontend/src/cards/css/audio.css +92 -29
  21. package/core/frontend/src/cards/css/before-after.css +47 -0
  22. package/core/frontend/src/cards/css/bookmark.css +3 -3
  23. package/core/frontend/src/cards/css/button.css +4 -4
  24. package/core/frontend/src/cards/css/file.css +73 -0
  25. package/core/frontend/src/cards/css/nft.css +8 -6
  26. package/core/frontend/src/cards/css/product.css +77 -49
  27. package/core/frontend/src/cards/css/video.css +281 -0
  28. package/core/frontend/src/cards/js/audio.js +127 -128
  29. package/core/frontend/src/cards/js/before-after.js +41 -0
  30. package/core/frontend/src/cards/js/gallery.js +10 -8
  31. package/core/frontend/src/cards/js/toggle.js +16 -14
  32. package/core/frontend/src/cards/js/video.js +164 -0
  33. package/core/server/services/mega/post-email-serializer.js +3 -1
  34. package/core/server/services/mega/template.js +15 -11
  35. package/core/server/web/admin/views/default-prod.html +4 -4
  36. package/core/server/web/admin/views/default.html +4 -4
  37. package/core/shared/labs.js +7 -6
  38. package/package.json +14 -10
  39. package/yarn.lock +2526 -1942
@@ -388,7 +388,7 @@
388
388
  background: rgba(255,255,255,0.6);
389
389
  font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;
390
390
  text-decoration: none;
391
- border-radius: 5px;
391
+ border-radius: 3px;
392
392
  box-shadow: 0 2px 6px -2px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.4);
393
393
  overflow: hidden;
394
394
  }
@@ -478,6 +478,44 @@
478
478
  margin-top: 0.8rem;
479
479
  }
480
480
 
481
+ .kg-product-card-container {
482
+ background: transparent;
483
+ padding: 20px;
484
+ width: 100%;
485
+ border-radius: 5px;
486
+ box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);
487
+ }
488
+
489
+ .kg-product-card-description p {
490
+ margin-top: 1.5em;
491
+ }
492
+
493
+ .kg-product-card-description ul {
494
+ margin-left: 24px;
495
+ }
496
+
497
+ .kg-product-card-title {
498
+ font-size: 1.9rem;
499
+ font-weight: 700;
500
+ }
501
+
502
+ .kg-product-card-rating-star {
503
+ height: 28px;
504
+ width: 20px;
505
+ margin-right: 2px;
506
+ }
507
+
508
+ .kg-product-card-rating-star svg {
509
+ width: 16px;
510
+ height: 16px;
511
+ fill: currentColor;
512
+ opacity: 0.15;
513
+ }
514
+
515
+ .kg-product-card-rating-active.kg-product-card-rating-star svg {
516
+ opacity: 1;
517
+ }
518
+
481
519
  .kg-nft-card-container {
482
520
  position: relative;
483
521
  display: flex;
@@ -494,7 +532,7 @@
494
532
  background: #fff;
495
533
  border-radius: 5px;
496
534
  transition: none;
497
- margin: 0 auto;
535
+ margin: 0 auto;
498
536
  }
499
537
 
500
538
  .kg-nft-metadata {
@@ -636,6 +674,60 @@
636
674
  font-size: 1.25em;
637
675
  }
638
676
 
677
+ .kg-audio-card {
678
+ display: flex;
679
+ width: 100%;
680
+ box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);
681
+ }
682
+
683
+ .kg-audio-thumbnail {
684
+ display: flex;
685
+ justify-content: center;
686
+ align-items: center;
687
+ width: 80px;
688
+ min-width: 80px;
689
+ height: 80px;
690
+ background: transparent;
691
+ object-fit: cover;
692
+ aspect-ratio: 1/1;
693
+ border-radius: 3px 0 0 3px;
694
+ }
695
+
696
+ .kg-audio-thumbnail.placeholder {
697
+ background: var(--ghost-accent-color);
698
+ }
699
+
700
+ .kg-audio-thumbnail.placeholder svg {
701
+ width: 24px;
702
+ height: 24px;
703
+ fill: white;
704
+ }
705
+
706
+ .kg-audio-player-container {
707
+ position: relative;
708
+ display: flex;
709
+ flex-direction: column;
710
+ justify-content: space-between;
711
+ width: 100%;
712
+ --seek-before-width: 0%;
713
+ --volume-before-width: 100%;
714
+ --buffered-width: 0%;
715
+ }
716
+
717
+ .kg-audio-title {
718
+ width: 100%;
719
+ padding: 8px 12px 0;
720
+ border: none;
721
+ font-family: inherit;
722
+ font-size: 1.1em;
723
+ font-weight: 700;
724
+ background: transparent;
725
+ }
726
+
727
+ .kg-audio-player {
728
+ display: none;
729
+ }
730
+
639
731
  .kg-width-full.kg-card-hascaption {
640
732
  display: grid;
641
733
  grid-template-columns: inherit;
@@ -199,7 +199,7 @@ module.exports = function ghost_head(options) { // eslint-disable-line camelcase
199
199
 
200
200
  // @TODO do this in a more "frameworky" way
201
201
  if (cardAssetService.hasFile('js')) {
202
- head.push(`<script async src="${getAssetUrl('public/cards.min.js')}"></script>`);
202
+ head.push(`<script defer src="${getAssetUrl('public/cards.min.js')}"></script>`);
203
203
  }
204
204
  if (cardAssetService.hasFile('css')) {
205
205
  head.push(`<link rel="stylesheet" type="text/css" href="${getAssetUrl('public/cards.min.css')}">`);
@@ -2,18 +2,38 @@
2
2
  display: flex;
3
3
  width: 100%;
4
4
  min-height: 96px;
5
+ border-radius: 3px;
5
6
  box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);
6
7
  }
7
8
 
9
+ .kg-audio-card+.kg-audio-card {
10
+ margin-top: 1em;
11
+ }
12
+
8
13
  .kg-audio-thumbnail {
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: center;
9
17
  width: 80px;
18
+ min-width: 80px;
10
19
  margin: 8px;
20
+ background: transparent;
11
21
  object-fit: cover;
12
22
  aspect-ratio: 1/1;
13
23
  border-radius: 3px;
14
24
  }
15
25
 
16
- .kg-player-container {
26
+ .kg-audio-thumbnail.placeholder {
27
+ background: var(--ghost-accent-color);
28
+ }
29
+
30
+ .kg-audio-thumbnail.placeholder svg {
31
+ width: 24px;
32
+ height: 24px;
33
+ fill: white;
34
+ }
35
+
36
+ .kg-audio-player-container {
17
37
  position: relative;
18
38
  display: flex;
19
39
  flex-direction: column;
@@ -27,15 +47,16 @@
27
47
  .kg-audio-title {
28
48
  width: 100%;
29
49
  margin: 8px 0 0 0;
30
- padding: 8px 12px 0;
50
+ padding: 8px 12px;
31
51
  border: none;
32
52
  font-family: inherit;
33
- font-size: 1em;
53
+ font-size: 1.1em;
34
54
  font-weight: 700;
55
+ line-height: 1.15em;
35
56
  background: transparent;
36
57
  }
37
58
 
38
- .kg-player {
59
+ .kg-audio-player {
39
60
  display: flex;
40
61
  flex-grow: 1;
41
62
  align-items: center;
@@ -49,6 +70,7 @@
49
70
  font-size: .85em;
50
71
  font-weight: 500;
51
72
  line-height: 1.4em;
73
+ white-space: nowrap;
52
74
  }
53
75
 
54
76
  .kg-audio-time {
@@ -57,6 +79,7 @@
57
79
  font-size: .85em;
58
80
  font-weight: 500;
59
81
  line-height: 1.4em;
82
+ white-space: nowrap;
60
83
  }
61
84
 
62
85
  .kg-audio-duration {
@@ -68,11 +91,12 @@
68
91
  position: relative;
69
92
  bottom: 1px;
70
93
  padding: 0px 4px 0 0;
94
+ font-size: 0;
71
95
  background: transparent;
72
96
  }
73
97
 
74
98
  .kg-audio-hide {
75
- display: none;
99
+ display: none !important;
76
100
  }
77
101
 
78
102
  .kg-audio-play-icon svg,
@@ -87,8 +111,14 @@
87
111
  margin: 0 4px;
88
112
  }
89
113
 
114
+ @media (max-width: 640px) {
115
+ .kg-audio-seek-slider {
116
+ display: none;
117
+ }
118
+ }
119
+
90
120
  .kg-audio-playback-rate {
91
- width: 37px;
121
+ min-width: 37px;
92
122
  padding: 0 4px;
93
123
  font-family: inherit;
94
124
  font-size: .85em;
@@ -96,16 +126,31 @@
96
126
  line-height: 1.4em;
97
127
  text-align: left;
98
128
  background: transparent;
129
+ white-space: nowrap;
130
+ }
131
+
132
+ @media (max-width: 640px) {
133
+ .kg-audio-playback-rate {
134
+ padding-left: 8px;
135
+ }
99
136
  }
100
137
 
101
138
  .kg-audio-mute-icon,
102
139
  .kg-audio-unmute-icon {
103
140
  position: relative;
104
- bottom: 1px;
141
+ bottom: -1px;
105
142
  padding: 0 4px;
143
+ font-size: 0;
106
144
  background: transparent;
107
145
  }
108
146
 
147
+ @media (max-width: 640px) {
148
+ .kg-audio-mute-icon,
149
+ .kg-audio-unmute-icon {
150
+ margin-left: auto;
151
+ }
152
+ }
153
+
109
154
  .kg-audio-mute-icon svg,
110
155
  .kg-audio-unmute-icon svg {
111
156
  width: 16px;
@@ -117,6 +162,12 @@
117
162
  width: 80px;
118
163
  }
119
164
 
165
+ @media (max-width: 400px) {
166
+ .kg-audio-volume-slider {
167
+ display: none;
168
+ }
169
+ }
170
+
120
171
  .kg-audio-seek-slider::before {
121
172
  content: "";
122
173
  position: absolute;
@@ -142,31 +193,43 @@
142
193
  /* Resetting browser styles
143
194
  /* --------------------------------------------------------------- */
144
195
 
145
- .kg-player-container input[type=range] {
196
+ .kg-audio-player-container input[type=range] {
146
197
  position: relative;
147
198
  -webkit-appearance: none;
148
199
  background: transparent;
149
200
  }
150
201
 
151
- .kg-player-container input[type=range]:focus {
202
+ .kg-audio-player-container input[type=range]:focus {
152
203
  outline: none;
153
204
  }
154
205
 
155
- .kg-player-container input[type=range]::-webkit-slider-thumb {
206
+ .kg-audio-player-container input[type=range]::-webkit-slider-thumb {
156
207
  -webkit-appearance: none;
157
208
  }
158
209
 
159
- .kg-player-container input[type=range]::-ms-track {
210
+ .kg-audio-player-container input[type=range]::-ms-track {
160
211
  cursor: pointer;
161
212
  border-color: transparent;
162
213
  color: transparent;
163
214
  background: transparent;
164
215
  }
165
216
 
217
+ .kg-audio-player-container button {
218
+ display: flex;
219
+ align-items: center;
220
+ border: 0;
221
+ }
222
+
223
+ .kg-audio-player-container input[type="range"] {
224
+ height: auto;
225
+ padding: 0;
226
+ border: 0;
227
+ }
228
+
166
229
  /* Chrome & Safari styles
167
230
  /* --------------------------------------------------------------- */
168
231
 
169
- .kg-player-container input[type="range"]::-webkit-slider-runnable-track {
232
+ .kg-audio-player-container input[type="range"]::-webkit-slider-runnable-track {
170
233
  width: 100%;
171
234
  height: 4px;
172
235
  cursor: pointer;
@@ -174,11 +237,11 @@
174
237
  border-radius: 2px;
175
238
  }
176
239
 
177
- .kg-player-container input[type="range"]::-webkit-slider-thumb {
240
+ .kg-audio-player-container input[type="range"]::-webkit-slider-thumb {
178
241
  position: relative;
179
242
  box-sizing: content-box;
180
- width: 12px;
181
- height: 12px;
243
+ width: 13px;
244
+ height: 13px;
182
245
  margin: -5px 0 0 0;
183
246
  border: 0;
184
247
  cursor: pointer;
@@ -187,14 +250,14 @@
187
250
  box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
188
251
  }
189
252
 
190
- .kg-player-container input[type="range"]:active::-webkit-slider-thumb {
253
+ .kg-audio-player-container input[type="range"]:active::-webkit-slider-thumb {
191
254
  transform: scale(1.2);
192
255
  }
193
256
 
194
257
  /* Firefox styles
195
258
  /* --------------------------------------------------------------- */
196
259
 
197
- .kg-player-container input[type="range"]::-moz-range-track {
260
+ .kg-audio-player-container input[type="range"]::-moz-range-track {
198
261
  width: 100%;
199
262
  height: 4px;
200
263
  cursor: pointer;
@@ -202,15 +265,15 @@
202
265
  border-radius: 2px;
203
266
  }
204
267
 
205
- .kg-player-container input[type="range"]::-moz-range-progress {
268
+ .kg-audio-player-container input[type="range"]::-moz-range-progress {
206
269
  background: currentColor;
207
270
  border-radius: 2px;
208
271
  }
209
272
 
210
- .kg-player-container input[type="range"]::-moz-range-thumb {
273
+ .kg-audio-player-container input[type="range"]::-moz-range-thumb {
211
274
  box-sizing: content-box;
212
- width: 12px;
213
- height: 12px;
275
+ width: 13px;
276
+ height: 13px;
214
277
  border: 0;
215
278
  cursor: pointer;
216
279
  background: #fff;
@@ -218,14 +281,14 @@
218
281
  box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
219
282
  }
220
283
 
221
- .kg-player-container input[type="range"]:active::-moz-range-thumb {
284
+ .kg-audio-player-container input[type="range"]:active::-moz-range-thumb {
222
285
  transform: scale(1.2);
223
286
  }
224
287
 
225
288
  /* Edge & IE styles
226
289
  /* --------------------------------------------------------------- */
227
290
 
228
- .kg-player-container input[type="range"]::-ms-track {
291
+ .kg-audio-player-container input[type="range"]::-ms-track {
229
292
  width: 100%;
230
293
  height: 3px;
231
294
  border: solid transparent;
@@ -234,18 +297,18 @@
234
297
  background: transparent;
235
298
  }
236
299
 
237
- .kg-player-container input[type="range"]::-ms-fill-lower {
300
+ .kg-audio-player-container input[type="range"]::-ms-fill-lower {
238
301
  background: #fff;
239
302
  }
240
303
 
241
- .kg-player-container input[type="range"]::-ms-fill-upper {
304
+ .kg-audio-player-container input[type="range"]::-ms-fill-upper {
242
305
  background: currentColor;
243
306
  }
244
307
 
245
- .kg-player-container input[type="range"]::-ms-thumb {
308
+ .kg-audio-player-container input[type="range"]::-ms-thumb {
246
309
  box-sizing: content-box;
247
- width: 12px;
248
- height: 12px;
310
+ width: 13px;
311
+ height: 13px;
249
312
  border: 0;
250
313
  cursor: pointer;
251
314
  background: #fff;
@@ -253,6 +316,6 @@
253
316
  box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
254
317
  }
255
318
 
256
- .kg-player-container input[type="range"]:active::-ms-thumb {
319
+ .kg-audio-player-container input[type="range"]:active::-ms-thumb {
257
320
  transform: scale(1.2);
258
321
  }
@@ -0,0 +1,47 @@
1
+ .kg-before-after-card > div {
2
+ position: relative;
3
+ margin: 0 auto;
4
+ }
5
+
6
+ .kg-before-after-card-image-before {
7
+ position: absolute;
8
+ overflow: hidden;
9
+ top: 0;
10
+ left: 0;
11
+ }
12
+
13
+ .kg-before-after-card img {
14
+ max-width: none;
15
+ width: unset;
16
+ }
17
+
18
+ .kg-before-after-card input {
19
+ top:0;
20
+ left: -25px;
21
+ position: absolute;
22
+ -webkit-appearance: none;
23
+ appearance: none;
24
+ width: calc(100% + 50px);
25
+ height: 100%;
26
+ background: rgba(0, 0, 0, 0);
27
+ outline: none;
28
+ margin: 0;
29
+ }
30
+
31
+ .kg-before-after-card input::-webkit-slider-thumb {
32
+ -webkit-appearance: none;
33
+ appearance: none;
34
+ width: 50px;
35
+ height: 50px;
36
+ background: white;
37
+ cursor: pointer;
38
+ border-radius: 25px;
39
+ }
40
+
41
+ .kg-before-after-card input::-moz-range-thumb {
42
+ width: 50px;
43
+ height: 50px;
44
+ background: white;
45
+ cursor: pointer;
46
+ border-radius: 25px;
47
+ }
@@ -8,8 +8,8 @@
8
8
  .kg-bookmark-container:hover {
9
9
  display: flex;
10
10
  text-decoration: none;
11
- border-radius: 4px;
12
- box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);
11
+ border-radius: 3px;
12
+ border: 1px solid rgb(124 139 154 / 25%);
13
13
  overflow: hidden;
14
14
  }
15
15
 
@@ -104,5 +104,5 @@
104
104
  position: absolute;
105
105
  top: 0;
106
106
  left: 0;
107
- border-radius: 0 4px 4px 0;
107
+ border-radius: 0 2px 2px 0;
108
108
  }
@@ -14,10 +14,10 @@ a.kg-btn {
14
14
  display: flex;
15
15
  position: static;
16
16
  align-items: center;
17
- padding: 0 2.0rem;
18
- height: 4.0rem;
19
- line-height: 4.0rem;
20
- font-size: 1.65rem;
17
+ padding: 0 1.2em;
18
+ height: 2.4em;
19
+ line-height: 1em;
20
+ font-size: 0.95em;
21
21
  font-weight: 600;
22
22
  text-decoration: none;
23
23
  border-radius: 5px;
@@ -0,0 +1,73 @@
1
+ .kg-file-card {
2
+ display: flex;
3
+ width: 100%;
4
+ min-height: 96px;
5
+ box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);
6
+ }
7
+
8
+ .kg-file-thumbnail {
9
+ display: flex;
10
+ justify-content: center;
11
+ align-items: center;
12
+ width: 80px;
13
+ min-width: 80px;
14
+ margin: 8px;
15
+ background: transparent;
16
+ object-fit: cover;
17
+ aspect-ratio: 1/1;
18
+ border-radius: 3px;
19
+ }
20
+
21
+ .kg-file-thumbnail.placeholder {
22
+ background: var(--ghost-accent-color);
23
+ }
24
+
25
+ .kg-file-hide {
26
+ display: none !important;
27
+ }
28
+
29
+ .kg-file-details {
30
+ display: flex;
31
+ flex-grow: 1;
32
+ align-items: center;
33
+ padding: 8px 12px;
34
+ }
35
+
36
+ .kg-file-thumbnail.placeholder svg {
37
+ width: 24px;
38
+ height: 24px;
39
+ fill: white;
40
+ }
41
+
42
+ .kg-file-card-container {
43
+ position: relative;
44
+ display: flex;
45
+ flex-direction: column;
46
+ justify-content: space-between;
47
+ width: 100%;
48
+ --seek-before-width: 0%;
49
+ --volume-before-width: 100%;
50
+ --buffered-width: 0%;
51
+ }
52
+
53
+ .kg-file-title {
54
+ width: 100%;
55
+ margin: 8px 0 0 0;
56
+ padding: 8px 12px 0;
57
+ border: none;
58
+ font-family: inherit;
59
+ font-size: 1.1em;
60
+ font-weight: 700;
61
+ background: transparent;
62
+ }
63
+
64
+ .kg-file-caption {
65
+ width: 100%;
66
+ margin: 8px 0 0 0;
67
+ padding: 8px 12px 0;
68
+ border: none;
69
+ font-family: inherit;
70
+ font-size: 1.1em;
71
+ font-weight: 700;
72
+ background: transparent;
73
+ }
@@ -3,6 +3,8 @@
3
3
  flex-direction: column;
4
4
  align-items: center;
5
5
  width: 100%;
6
+ margin-left: auto;
7
+ margin-right: auto;
6
8
  }
7
9
 
8
10
  .kg-nft-card-container {
@@ -18,7 +20,7 @@
18
20
  roboto, noto,
19
21
  'segoe ui', arial,
20
22
  sans-serif;
21
- font-size: 1.4rem;
23
+ font-size: 14px;
22
24
  font-weight: 400;
23
25
  box-shadow: 0 2px 6px -2px rgb(0 0 0 / 10%), 0 0 1px rgb(0 0 0 / 40%);
24
26
  width: 100%;
@@ -40,7 +42,7 @@
40
42
  }
41
43
 
42
44
  .kg-nft-metadata {
43
- padding: 2.0rem;
45
+ padding: 20px;
44
46
  width: 100%;
45
47
  }
46
48
 
@@ -58,7 +60,7 @@
58
60
 
59
61
  .kg-nft-header h4.kg-nft-title {
60
62
  font-family: inherit;
61
- font-size: 1.9rem;
63
+ font-size: 19px;
62
64
  font-weight: 700;
63
65
  line-height: 1.3em;
64
66
  min-width: unset;
@@ -76,7 +78,7 @@
76
78
  .kg-nft-creator {
77
79
  font-family: inherit;
78
80
  line-height: 1.4em;
79
- margin: 0.4rem 0 0;
81
+ margin: 4px 0 0;
80
82
  color: #ababab;
81
83
  }
82
84
 
@@ -87,8 +89,8 @@
87
89
 
88
90
  .kg-nft-card p.kg-nft-description {
89
91
  font-family: inherit;
90
- font-size: 1.4rem;
92
+ font-size: 14px;
91
93
  line-height: 1.4em;
92
- margin: 2.0rem 0 0;
94
+ margin: 20px 0 0;
93
95
  color: #222;
94
96
  }