dash-button-web 0.0.21 → 0.0.23-beta.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 (72) hide show
  1. package/dist/cjs/app-globals-cd54EKuF.js +15 -0
  2. package/dist/cjs/dash-button.cjs.entry.js +2189 -2074
  3. package/dist/cjs/index-BfwSK14n.js +1507 -0
  4. package/dist/cjs/index.cjs.js +0 -2
  5. package/dist/cjs/loader.cjs.js +5 -7
  6. package/dist/cjs/web-compnont.cjs.js +15 -15
  7. package/dist/collection/collection-manifest.json +5 -3
  8. package/dist/collection/components/my-component/dash-button.js +134 -38
  9. package/dist/collection/global/app.js +7 -0
  10. package/dist/collection/index.js +0 -1
  11. package/dist/collection/services/config.js +2 -1
  12. package/dist/collection/services/menu.js +18 -5
  13. package/dist/components/dash-button.js +1 -4233
  14. package/dist/components/index.d.ts +2 -0
  15. package/dist/components/index.js +1 -3
  16. package/dist/esm/app-globals-B2hgy9FG.js +13 -0
  17. package/dist/esm/dash-button.entry.js +2189 -2072
  18. package/dist/esm/index-6_Ga3Eox.js +1499 -0
  19. package/dist/esm/index.js +0 -2
  20. package/dist/esm/loader.js +6 -6
  21. package/dist/esm/web-compnont.js +15 -14
  22. package/dist/types/components/my-component/dash-button.d.ts +3 -0
  23. package/dist/types/components.d.ts +75 -3
  24. package/dist/types/global/app.d.ts +2 -0
  25. package/dist/types/services/config.d.ts +2 -0
  26. package/dist/types/stencil-public-runtime.d.ts +268 -70
  27. package/dist/web-compnont/index.esm.js +0 -2
  28. package/dist/web-compnont/p-39949e8a.entry.js +1 -0
  29. package/dist/web-compnont/p-6_Ga3Eox.js +3 -0
  30. package/dist/web-compnont/p-DiU1T8CW.js +1 -0
  31. package/dist/web-compnont/web-compnont.esm.js +1 -2
  32. package/loader/cdn.js +1 -3
  33. package/loader/index.cjs.js +1 -3
  34. package/loader/index.d.ts +4 -1
  35. package/loader/index.es2017.js +1 -3
  36. package/loader/index.js +1 -3
  37. package/package.json +3 -2
  38. package/readme.md +43 -19
  39. package/dist/cjs/dash-button.cjs.entry.js.map +0 -1
  40. package/dist/cjs/index-87d4993d.js +0 -1793
  41. package/dist/cjs/index-87d4993d.js.map +0 -1
  42. package/dist/cjs/index.cjs.js.map +0 -1
  43. package/dist/cjs/loader.cjs.js.map +0 -1
  44. package/dist/cjs/web-compnont.cjs.js.map +0 -1
  45. package/dist/collection/components/my-component/dash-button.e2e.js +0 -26
  46. package/dist/collection/components/my-component/dash-button.e2e.js.map +0 -1
  47. package/dist/collection/components/my-component/dash-button.js.map +0 -1
  48. package/dist/collection/components/my-component/dash-button.spec.js +0 -35
  49. package/dist/collection/components/my-component/dash-button.spec.js.map +0 -1
  50. package/dist/collection/index.js.map +0 -1
  51. package/dist/collection/services/config.js.map +0 -1
  52. package/dist/collection/services/menu.js.map +0 -1
  53. package/dist/components/dash-button.js.map +0 -1
  54. package/dist/components/index.js.map +0 -1
  55. package/dist/esm/dash-button.entry.js.map +0 -1
  56. package/dist/esm/index-e3df5eaf.js +0 -1766
  57. package/dist/esm/index-e3df5eaf.js.map +0 -1
  58. package/dist/esm/index.js.map +0 -1
  59. package/dist/esm/loader.js.map +0 -1
  60. package/dist/esm/polyfills/core-js.js +0 -11
  61. package/dist/esm/polyfills/dom.js +0 -79
  62. package/dist/esm/polyfills/es5-html-element.js +0 -1
  63. package/dist/esm/polyfills/index.js +0 -34
  64. package/dist/esm/polyfills/system.js +0 -6
  65. package/dist/esm/web-compnont.js.map +0 -1
  66. package/dist/web-compnont/index.esm.js.map +0 -1
  67. package/dist/web-compnont/p-c1ec12fe.js +0 -3
  68. package/dist/web-compnont/p-c1ec12fe.js.map +0 -1
  69. package/dist/web-compnont/p-fc02a292.entry.js +0 -10
  70. package/dist/web-compnont/p-fc02a292.entry.js.map +0 -1
  71. package/dist/web-compnont/web-compnont.esm.js.map +0 -1
  72. package/loader/package.json +0 -11
@@ -1,14 +1,26 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const index = require('./index-87d4993d.js');
3
+ var index = require('./index-BfwSK14n.js');
6
4
 
7
5
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
8
6
 
7
+ function getDefaultExportFromCjs (x) {
8
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
9
+ }
10
+
9
11
  function getAugmentedNamespace(n) {
10
- if (n.__esModule) return n;
11
- var a = Object.defineProperty({}, '__esModule', {value: true});
12
+ if (n.__esModule) return n;
13
+ var f = n.default;
14
+ if (typeof f == "function") {
15
+ var a = function a () {
16
+ if (this instanceof a) {
17
+ return Reflect.construct(f, arguments, this.constructor);
18
+ }
19
+ return f.apply(this, arguments);
20
+ };
21
+ a.prototype = f.prototype;
22
+ } else a = {};
23
+ Object.defineProperty(a, '__esModule', {value: true});
12
24
  Object.keys(n).forEach(function (k) {
13
25
  var d = Object.getOwnPropertyDescriptor(n, k);
14
26
  Object.defineProperty(a, k, d.get ? d : {
@@ -23,165 +35,176 @@ function getAugmentedNamespace(n) {
23
35
 
24
36
  var base64Js = {};
25
37
 
26
- base64Js.byteLength = byteLength;
27
- base64Js.toByteArray = toByteArray;
28
- base64Js.fromByteArray = fromByteArray;
29
-
30
- var lookup = [];
31
- var revLookup = [];
32
- var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
33
-
34
- var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
35
- for (var i = 0, len = code.length; i < len; ++i) {
36
- lookup[i] = code[i];
37
- revLookup[code.charCodeAt(i)] = i;
38
- }
39
-
40
- // Support decoding URL-safe base64 strings, as Node.js does.
41
- // See: https://en.wikipedia.org/wiki/Base64#URL_applications
42
- revLookup['-'.charCodeAt(0)] = 62;
43
- revLookup['_'.charCodeAt(0)] = 63;
44
-
45
- function getLens (b64) {
46
- var len = b64.length;
47
-
48
- if (len % 4 > 0) {
49
- throw new Error('Invalid string. Length must be a multiple of 4')
50
- }
51
-
52
- // Trim off extra bytes after placeholder bytes are found
53
- // See: https://github.com/beatgammit/base64-js/issues/42
54
- var validLen = b64.indexOf('=');
55
- if (validLen === -1) validLen = len;
56
-
57
- var placeHoldersLen = validLen === len
58
- ? 0
59
- : 4 - (validLen % 4);
60
-
61
- return [validLen, placeHoldersLen]
62
- }
63
-
64
- // base64 is 4/3 + up to two characters of the original data
65
- function byteLength (b64) {
66
- var lens = getLens(b64);
67
- var validLen = lens[0];
68
- var placeHoldersLen = lens[1];
69
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
70
- }
71
-
72
- function _byteLength (b64, validLen, placeHoldersLen) {
73
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
74
- }
75
-
76
- function toByteArray (b64) {
77
- var tmp;
78
- var lens = getLens(b64);
79
- var validLen = lens[0];
80
- var placeHoldersLen = lens[1];
81
-
82
- var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
83
-
84
- var curByte = 0;
85
-
86
- // if there are placeholders, only get up to the last complete 4 chars
87
- var len = placeHoldersLen > 0
88
- ? validLen - 4
89
- : validLen;
90
-
91
- var i;
92
- for (i = 0; i < len; i += 4) {
93
- tmp =
94
- (revLookup[b64.charCodeAt(i)] << 18) |
95
- (revLookup[b64.charCodeAt(i + 1)] << 12) |
96
- (revLookup[b64.charCodeAt(i + 2)] << 6) |
97
- revLookup[b64.charCodeAt(i + 3)];
98
- arr[curByte++] = (tmp >> 16) & 0xFF;
99
- arr[curByte++] = (tmp >> 8) & 0xFF;
100
- arr[curByte++] = tmp & 0xFF;
101
- }
102
-
103
- if (placeHoldersLen === 2) {
104
- tmp =
105
- (revLookup[b64.charCodeAt(i)] << 2) |
106
- (revLookup[b64.charCodeAt(i + 1)] >> 4);
107
- arr[curByte++] = tmp & 0xFF;
108
- }
109
-
110
- if (placeHoldersLen === 1) {
111
- tmp =
112
- (revLookup[b64.charCodeAt(i)] << 10) |
113
- (revLookup[b64.charCodeAt(i + 1)] << 4) |
114
- (revLookup[b64.charCodeAt(i + 2)] >> 2);
115
- arr[curByte++] = (tmp >> 8) & 0xFF;
116
- arr[curByte++] = tmp & 0xFF;
117
- }
118
-
119
- return arr
120
- }
121
-
122
- function tripletToBase64 (num) {
123
- return lookup[num >> 18 & 0x3F] +
124
- lookup[num >> 12 & 0x3F] +
125
- lookup[num >> 6 & 0x3F] +
126
- lookup[num & 0x3F]
127
- }
128
-
129
- function encodeChunk (uint8, start, end) {
130
- var tmp;
131
- var output = [];
132
- for (var i = start; i < end; i += 3) {
133
- tmp =
134
- ((uint8[i] << 16) & 0xFF0000) +
135
- ((uint8[i + 1] << 8) & 0xFF00) +
136
- (uint8[i + 2] & 0xFF);
137
- output.push(tripletToBase64(tmp));
138
- }
139
- return output.join('')
38
+ var hasRequiredBase64Js;
39
+
40
+ function requireBase64Js () {
41
+ if (hasRequiredBase64Js) return base64Js;
42
+ hasRequiredBase64Js = 1;
43
+
44
+ base64Js.byteLength = byteLength;
45
+ base64Js.toByteArray = toByteArray;
46
+ base64Js.fromByteArray = fromByteArray;
47
+
48
+ var lookup = [];
49
+ var revLookup = [];
50
+ var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
51
+
52
+ var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
53
+ for (var i = 0, len = code.length; i < len; ++i) {
54
+ lookup[i] = code[i];
55
+ revLookup[code.charCodeAt(i)] = i;
56
+ }
57
+
58
+ // Support decoding URL-safe base64 strings, as Node.js does.
59
+ // See: https://en.wikipedia.org/wiki/Base64#URL_applications
60
+ revLookup['-'.charCodeAt(0)] = 62;
61
+ revLookup['_'.charCodeAt(0)] = 63;
62
+
63
+ function getLens (b64) {
64
+ var len = b64.length;
65
+
66
+ if (len % 4 > 0) {
67
+ throw new Error('Invalid string. Length must be a multiple of 4')
68
+ }
69
+
70
+ // Trim off extra bytes after placeholder bytes are found
71
+ // See: https://github.com/beatgammit/base64-js/issues/42
72
+ var validLen = b64.indexOf('=');
73
+ if (validLen === -1) validLen = len;
74
+
75
+ var placeHoldersLen = validLen === len
76
+ ? 0
77
+ : 4 - (validLen % 4);
78
+
79
+ return [validLen, placeHoldersLen]
80
+ }
81
+
82
+ // base64 is 4/3 + up to two characters of the original data
83
+ function byteLength (b64) {
84
+ var lens = getLens(b64);
85
+ var validLen = lens[0];
86
+ var placeHoldersLen = lens[1];
87
+ return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
88
+ }
89
+
90
+ function _byteLength (b64, validLen, placeHoldersLen) {
91
+ return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
92
+ }
93
+
94
+ function toByteArray (b64) {
95
+ var tmp;
96
+ var lens = getLens(b64);
97
+ var validLen = lens[0];
98
+ var placeHoldersLen = lens[1];
99
+
100
+ var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
101
+
102
+ var curByte = 0;
103
+
104
+ // if there are placeholders, only get up to the last complete 4 chars
105
+ var len = placeHoldersLen > 0
106
+ ? validLen - 4
107
+ : validLen;
108
+
109
+ var i;
110
+ for (i = 0; i < len; i += 4) {
111
+ tmp =
112
+ (revLookup[b64.charCodeAt(i)] << 18) |
113
+ (revLookup[b64.charCodeAt(i + 1)] << 12) |
114
+ (revLookup[b64.charCodeAt(i + 2)] << 6) |
115
+ revLookup[b64.charCodeAt(i + 3)];
116
+ arr[curByte++] = (tmp >> 16) & 0xFF;
117
+ arr[curByte++] = (tmp >> 8) & 0xFF;
118
+ arr[curByte++] = tmp & 0xFF;
119
+ }
120
+
121
+ if (placeHoldersLen === 2) {
122
+ tmp =
123
+ (revLookup[b64.charCodeAt(i)] << 2) |
124
+ (revLookup[b64.charCodeAt(i + 1)] >> 4);
125
+ arr[curByte++] = tmp & 0xFF;
126
+ }
127
+
128
+ if (placeHoldersLen === 1) {
129
+ tmp =
130
+ (revLookup[b64.charCodeAt(i)] << 10) |
131
+ (revLookup[b64.charCodeAt(i + 1)] << 4) |
132
+ (revLookup[b64.charCodeAt(i + 2)] >> 2);
133
+ arr[curByte++] = (tmp >> 8) & 0xFF;
134
+ arr[curByte++] = tmp & 0xFF;
135
+ }
136
+
137
+ return arr
138
+ }
139
+
140
+ function tripletToBase64 (num) {
141
+ return lookup[num >> 18 & 0x3F] +
142
+ lookup[num >> 12 & 0x3F] +
143
+ lookup[num >> 6 & 0x3F] +
144
+ lookup[num & 0x3F]
145
+ }
146
+
147
+ function encodeChunk (uint8, start, end) {
148
+ var tmp;
149
+ var output = [];
150
+ for (var i = start; i < end; i += 3) {
151
+ tmp =
152
+ ((uint8[i] << 16) & 0xFF0000) +
153
+ ((uint8[i + 1] << 8) & 0xFF00) +
154
+ (uint8[i + 2] & 0xFF);
155
+ output.push(tripletToBase64(tmp));
156
+ }
157
+ return output.join('')
158
+ }
159
+
160
+ function fromByteArray (uint8) {
161
+ var tmp;
162
+ var len = uint8.length;
163
+ var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
164
+ var parts = [];
165
+ var maxChunkLength = 16383; // must be multiple of 3
166
+
167
+ // go through the array every three bytes, we'll deal with trailing stuff later
168
+ for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
169
+ parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));
170
+ }
171
+
172
+ // pad the end with zeros, but make sure to not forget the extra bytes
173
+ if (extraBytes === 1) {
174
+ tmp = uint8[len - 1];
175
+ parts.push(
176
+ lookup[tmp >> 2] +
177
+ lookup[(tmp << 4) & 0x3F] +
178
+ '=='
179
+ );
180
+ } else if (extraBytes === 2) {
181
+ tmp = (uint8[len - 2] << 8) + uint8[len - 1];
182
+ parts.push(
183
+ lookup[tmp >> 10] +
184
+ lookup[(tmp >> 4) & 0x3F] +
185
+ lookup[(tmp << 2) & 0x3F] +
186
+ '='
187
+ );
188
+ }
189
+
190
+ return parts.join('')
191
+ }
192
+ return base64Js;
140
193
  }
141
194
 
142
- function fromByteArray (uint8) {
143
- var tmp;
144
- var len = uint8.length;
145
- var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
146
- var parts = [];
147
- var maxChunkLength = 16383; // must be multiple of 3
148
-
149
- // go through the array every three bytes, we'll deal with trailing stuff later
150
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
151
- parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));
152
- }
153
-
154
- // pad the end with zeros, but make sure to not forget the extra bytes
155
- if (extraBytes === 1) {
156
- tmp = uint8[len - 1];
157
- parts.push(
158
- lookup[tmp >> 2] +
159
- lookup[(tmp << 4) & 0x3F] +
160
- '=='
161
- );
162
- } else if (extraBytes === 2) {
163
- tmp = (uint8[len - 2] << 8) + uint8[len - 1];
164
- parts.push(
165
- lookup[tmp >> 10] +
166
- lookup[(tmp >> 4) & 0x3F] +
167
- lookup[(tmp << 2) & 0x3F] +
168
- '='
169
- );
170
- }
171
-
172
- return parts.join('')
173
- }
195
+ var base64JsExports = requireBase64Js();
196
+ var base64 = /*@__PURE__*/getDefaultExportFromCjs(base64JsExports);
174
197
 
175
198
  var sha256$1 = {exports: {}};
176
199
 
177
- const _nodeResolve_empty = {};
200
+ var _nodeResolve_empty = {};
178
201
 
179
- const _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({
202
+ var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({
180
203
  __proto__: null,
181
- 'default': _nodeResolve_empty
204
+ default: _nodeResolve_empty
182
205
  });
183
206
 
184
- const require$$1 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);
207
+ var require$$1 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);
185
208
 
186
209
  /**
187
210
  * [js-sha256]{@link https://github.com/emn178/js-sha256}
@@ -192,522 +215,530 @@ const require$$1 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);
192
215
  * @license MIT
193
216
  */
194
217
 
195
- (function (module) {
196
- /*jslint bitwise: true */
197
- (function () {
198
-
199
- var ERROR = 'input is invalid type';
200
- var WINDOW = typeof window === 'object';
201
- var root = WINDOW ? window : {};
202
- if (root.JS_SHA256_NO_WINDOW) {
203
- WINDOW = false;
204
- }
205
- var WEB_WORKER = !WINDOW && typeof self === 'object';
206
- var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
207
- if (NODE_JS) {
208
- root = commonjsGlobal;
209
- } else if (WEB_WORKER) {
210
- root = self;
211
- }
212
- var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && 'object' === 'object' && module.exports;
213
- var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
214
- var HEX_CHARS = '0123456789abcdef'.split('');
215
- var EXTRA = [-2147483648, 8388608, 32768, 128];
216
- var SHIFT = [24, 16, 8, 0];
217
- var K = [
218
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
219
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
220
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
221
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
222
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
223
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
224
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
225
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
226
- ];
227
- var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
228
-
229
- var blocks = [];
230
-
231
- if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {
232
- Array.isArray = function (obj) {
233
- return Object.prototype.toString.call(obj) === '[object Array]';
234
- };
235
- }
236
-
237
- if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
238
- ArrayBuffer.isView = function (obj) {
239
- return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
240
- };
241
- }
242
-
243
- var createOutputMethod = function (outputType, is224) {
244
- return function (message) {
245
- return new Sha256(is224, true).update(message)[outputType]();
246
- };
247
- };
248
-
249
- var createMethod = function (is224) {
250
- var method = createOutputMethod('hex', is224);
251
- if (NODE_JS) {
252
- method = nodeWrap(method, is224);
253
- }
254
- method.create = function () {
255
- return new Sha256(is224);
256
- };
257
- method.update = function (message) {
258
- return method.create().update(message);
259
- };
260
- for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
261
- var type = OUTPUT_TYPES[i];
262
- method[type] = createOutputMethod(type, is224);
263
- }
264
- return method;
265
- };
266
-
267
- var nodeWrap = function (method, is224) {
268
- var crypto = require$$1;
269
- var Buffer = require$$1.Buffer;
270
- var algorithm = is224 ? 'sha224' : 'sha256';
271
- var bufferFrom;
272
- if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {
273
- bufferFrom = Buffer.from;
274
- } else {
275
- bufferFrom = function (message) {
276
- return new Buffer(message);
277
- };
278
- }
279
- var nodeMethod = function (message) {
280
- if (typeof message === 'string') {
281
- return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');
282
- } else {
283
- if (message === null || message === undefined) {
284
- throw new Error(ERROR);
285
- } else if (message.constructor === ArrayBuffer) {
286
- message = new Uint8Array(message);
287
- }
288
- }
289
- if (Array.isArray(message) || ArrayBuffer.isView(message) ||
290
- message.constructor === Buffer) {
291
- return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');
292
- } else {
293
- return method(message);
294
- }
295
- };
296
- return nodeMethod;
297
- };
298
-
299
- var createHmacOutputMethod = function (outputType, is224) {
300
- return function (key, message) {
301
- return new HmacSha256(key, is224, true).update(message)[outputType]();
302
- };
303
- };
304
-
305
- var createHmacMethod = function (is224) {
306
- var method = createHmacOutputMethod('hex', is224);
307
- method.create = function (key) {
308
- return new HmacSha256(key, is224);
309
- };
310
- method.update = function (key, message) {
311
- return method.create(key).update(message);
312
- };
313
- for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
314
- var type = OUTPUT_TYPES[i];
315
- method[type] = createHmacOutputMethod(type, is224);
316
- }
317
- return method;
318
- };
319
-
320
- function Sha256(is224, sharedMemory) {
321
- if (sharedMemory) {
322
- blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
323
- blocks[4] = blocks[5] = blocks[6] = blocks[7] =
324
- blocks[8] = blocks[9] = blocks[10] = blocks[11] =
325
- blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
326
- this.blocks = blocks;
327
- } else {
328
- this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
329
- }
330
-
331
- if (is224) {
332
- this.h0 = 0xc1059ed8;
333
- this.h1 = 0x367cd507;
334
- this.h2 = 0x3070dd17;
335
- this.h3 = 0xf70e5939;
336
- this.h4 = 0xffc00b31;
337
- this.h5 = 0x68581511;
338
- this.h6 = 0x64f98fa7;
339
- this.h7 = 0xbefa4fa4;
340
- } else { // 256
341
- this.h0 = 0x6a09e667;
342
- this.h1 = 0xbb67ae85;
343
- this.h2 = 0x3c6ef372;
344
- this.h3 = 0xa54ff53a;
345
- this.h4 = 0x510e527f;
346
- this.h5 = 0x9b05688c;
347
- this.h6 = 0x1f83d9ab;
348
- this.h7 = 0x5be0cd19;
349
- }
350
-
351
- this.block = this.start = this.bytes = this.hBytes = 0;
352
- this.finalized = this.hashed = false;
353
- this.first = true;
354
- this.is224 = is224;
355
- }
356
-
357
- Sha256.prototype.update = function (message) {
358
- if (this.finalized) {
359
- return;
360
- }
361
- var notString, type = typeof message;
362
- if (type !== 'string') {
363
- if (type === 'object') {
364
- if (message === null) {
365
- throw new Error(ERROR);
366
- } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
367
- message = new Uint8Array(message);
368
- } else if (!Array.isArray(message)) {
369
- if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
370
- throw new Error(ERROR);
371
- }
372
- }
373
- } else {
374
- throw new Error(ERROR);
375
- }
376
- notString = true;
377
- }
378
- var code, index = 0, i, length = message.length, blocks = this.blocks;
379
-
380
- while (index < length) {
381
- if (this.hashed) {
382
- this.hashed = false;
383
- blocks[0] = this.block;
384
- blocks[16] = blocks[1] = blocks[2] = blocks[3] =
385
- blocks[4] = blocks[5] = blocks[6] = blocks[7] =
386
- blocks[8] = blocks[9] = blocks[10] = blocks[11] =
387
- blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
388
- }
389
-
390
- if (notString) {
391
- for (i = this.start; index < length && i < 64; ++index) {
392
- blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
393
- }
394
- } else {
395
- for (i = this.start; index < length && i < 64; ++index) {
396
- code = message.charCodeAt(index);
397
- if (code < 0x80) {
398
- blocks[i >> 2] |= code << SHIFT[i++ & 3];
399
- } else if (code < 0x800) {
400
- blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
401
- blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
402
- } else if (code < 0xd800 || code >= 0xe000) {
403
- blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
404
- blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
405
- blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
406
- } else {
407
- code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
408
- blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
409
- blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
410
- blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
411
- blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
412
- }
413
- }
414
- }
415
-
416
- this.lastByteIndex = i;
417
- this.bytes += i - this.start;
418
- if (i >= 64) {
419
- this.block = blocks[16];
420
- this.start = i - 64;
421
- this.hash();
422
- this.hashed = true;
423
- } else {
424
- this.start = i;
425
- }
426
- }
427
- if (this.bytes > 4294967295) {
428
- this.hBytes += this.bytes / 4294967296 << 0;
429
- this.bytes = this.bytes % 4294967296;
430
- }
431
- return this;
432
- };
433
-
434
- Sha256.prototype.finalize = function () {
435
- if (this.finalized) {
436
- return;
437
- }
438
- this.finalized = true;
439
- var blocks = this.blocks, i = this.lastByteIndex;
440
- blocks[16] = this.block;
441
- blocks[i >> 2] |= EXTRA[i & 3];
442
- this.block = blocks[16];
443
- if (i >= 56) {
444
- if (!this.hashed) {
445
- this.hash();
446
- }
447
- blocks[0] = this.block;
448
- blocks[16] = blocks[1] = blocks[2] = blocks[3] =
449
- blocks[4] = blocks[5] = blocks[6] = blocks[7] =
450
- blocks[8] = blocks[9] = blocks[10] = blocks[11] =
451
- blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
452
- }
453
- blocks[14] = this.hBytes << 3 | this.bytes >>> 29;
454
- blocks[15] = this.bytes << 3;
455
- this.hash();
456
- };
457
-
458
- Sha256.prototype.hash = function () {
459
- var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,
460
- h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;
461
-
462
- for (j = 16; j < 64; ++j) {
463
- // rightrotate
464
- t1 = blocks[j - 15];
465
- s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);
466
- t1 = blocks[j - 2];
467
- s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);
468
- blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;
469
- }
470
-
471
- bc = b & c;
472
- for (j = 0; j < 64; j += 4) {
473
- if (this.first) {
474
- if (this.is224) {
475
- ab = 300032;
476
- t1 = blocks[0] - 1413257819;
477
- h = t1 - 150054599 << 0;
478
- d = t1 + 24177077 << 0;
479
- } else {
480
- ab = 704751109;
481
- t1 = blocks[0] - 210244248;
482
- h = t1 - 1521486534 << 0;
483
- d = t1 + 143694565 << 0;
484
- }
485
- this.first = false;
486
- } else {
487
- s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
488
- s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
489
- ab = a & b;
490
- maj = ab ^ (a & c) ^ bc;
491
- ch = (e & f) ^ (~e & g);
492
- t1 = h + s1 + ch + K[j] + blocks[j];
493
- t2 = s0 + maj;
494
- h = d + t1 << 0;
495
- d = t1 + t2 << 0;
496
- }
497
- s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));
498
- s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));
499
- da = d & a;
500
- maj = da ^ (d & b) ^ ab;
501
- ch = (h & e) ^ (~h & f);
502
- t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];
503
- t2 = s0 + maj;
504
- g = c + t1 << 0;
505
- c = t1 + t2 << 0;
506
- s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));
507
- s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));
508
- cd = c & d;
509
- maj = cd ^ (c & a) ^ da;
510
- ch = (g & h) ^ (~g & e);
511
- t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];
512
- t2 = s0 + maj;
513
- f = b + t1 << 0;
514
- b = t1 + t2 << 0;
515
- s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));
516
- s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));
517
- bc = b & c;
518
- maj = bc ^ (b & d) ^ cd;
519
- ch = (f & g) ^ (~f & h);
520
- t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];
521
- t2 = s0 + maj;
522
- e = a + t1 << 0;
523
- a = t1 + t2 << 0;
524
- this.chromeBugWorkAround = true;
525
- }
526
-
527
- this.h0 = this.h0 + a << 0;
528
- this.h1 = this.h1 + b << 0;
529
- this.h2 = this.h2 + c << 0;
530
- this.h3 = this.h3 + d << 0;
531
- this.h4 = this.h4 + e << 0;
532
- this.h5 = this.h5 + f << 0;
533
- this.h6 = this.h6 + g << 0;
534
- this.h7 = this.h7 + h << 0;
535
- };
536
-
537
- Sha256.prototype.hex = function () {
538
- this.finalize();
539
-
540
- var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
541
- h6 = this.h6, h7 = this.h7;
542
-
543
- var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
544
- HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
545
- HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
546
- HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
547
- HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
548
- HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
549
- HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
550
- HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
551
- HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
552
- HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
553
- HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
554
- HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
555
- HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +
556
- HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
557
- HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
558
- HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
559
- HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +
560
- HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +
561
- HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +
562
- HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +
563
- HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +
564
- HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +
565
- HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +
566
- HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +
567
- HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +
568
- HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +
569
- HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +
570
- HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];
571
- if (!this.is224) {
572
- hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +
573
- HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +
574
- HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +
575
- HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];
576
- }
577
- return hex;
578
- };
579
-
580
- Sha256.prototype.toString = Sha256.prototype.hex;
581
-
582
- Sha256.prototype.digest = function () {
583
- this.finalize();
584
-
585
- var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
586
- h6 = this.h6, h7 = this.h7;
587
-
588
- var arr = [
589
- (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,
590
- (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,
591
- (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,
592
- (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,
593
- (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,
594
- (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,
595
- (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF
596
- ];
597
- if (!this.is224) {
598
- arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);
599
- }
600
- return arr;
601
- };
602
-
603
- Sha256.prototype.array = Sha256.prototype.digest;
604
-
605
- Sha256.prototype.arrayBuffer = function () {
606
- this.finalize();
607
-
608
- var buffer = new ArrayBuffer(this.is224 ? 28 : 32);
609
- var dataView = new DataView(buffer);
610
- dataView.setUint32(0, this.h0);
611
- dataView.setUint32(4, this.h1);
612
- dataView.setUint32(8, this.h2);
613
- dataView.setUint32(12, this.h3);
614
- dataView.setUint32(16, this.h4);
615
- dataView.setUint32(20, this.h5);
616
- dataView.setUint32(24, this.h6);
617
- if (!this.is224) {
618
- dataView.setUint32(28, this.h7);
619
- }
620
- return buffer;
621
- };
622
-
623
- function HmacSha256(key, is224, sharedMemory) {
624
- var i, type = typeof key;
625
- if (type === 'string') {
626
- var bytes = [], length = key.length, index = 0, code;
627
- for (i = 0; i < length; ++i) {
628
- code = key.charCodeAt(i);
629
- if (code < 0x80) {
630
- bytes[index++] = code;
631
- } else if (code < 0x800) {
632
- bytes[index++] = (0xc0 | (code >> 6));
633
- bytes[index++] = (0x80 | (code & 0x3f));
634
- } else if (code < 0xd800 || code >= 0xe000) {
635
- bytes[index++] = (0xe0 | (code >> 12));
636
- bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
637
- bytes[index++] = (0x80 | (code & 0x3f));
638
- } else {
639
- code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
640
- bytes[index++] = (0xf0 | (code >> 18));
641
- bytes[index++] = (0x80 | ((code >> 12) & 0x3f));
642
- bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
643
- bytes[index++] = (0x80 | (code & 0x3f));
644
- }
645
- }
646
- key = bytes;
647
- } else {
648
- if (type === 'object') {
649
- if (key === null) {
650
- throw new Error(ERROR);
651
- } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {
652
- key = new Uint8Array(key);
653
- } else if (!Array.isArray(key)) {
654
- if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {
655
- throw new Error(ERROR);
656
- }
657
- }
658
- } else {
659
- throw new Error(ERROR);
660
- }
661
- }
662
-
663
- if (key.length > 64) {
664
- key = (new Sha256(is224, true)).update(key).array();
665
- }
666
-
667
- var oKeyPad = [], iKeyPad = [];
668
- for (i = 0; i < 64; ++i) {
669
- var b = key[i] || 0;
670
- oKeyPad[i] = 0x5c ^ b;
671
- iKeyPad[i] = 0x36 ^ b;
672
- }
673
-
674
- Sha256.call(this, is224, sharedMemory);
675
-
676
- this.update(iKeyPad);
677
- this.oKeyPad = oKeyPad;
678
- this.inner = true;
679
- this.sharedMemory = sharedMemory;
680
- }
681
- HmacSha256.prototype = new Sha256();
682
-
683
- HmacSha256.prototype.finalize = function () {
684
- Sha256.prototype.finalize.call(this);
685
- if (this.inner) {
686
- this.inner = false;
687
- var innerHash = this.array();
688
- Sha256.call(this, this.is224, this.sharedMemory);
689
- this.update(this.oKeyPad);
690
- this.update(innerHash);
691
- Sha256.prototype.finalize.call(this);
692
- }
693
- };
694
-
695
- var exports = createMethod();
696
- exports.sha256 = exports;
697
- exports.sha224 = createMethod(true);
698
- exports.sha256.hmac = createHmacMethod();
699
- exports.sha224.hmac = createHmacMethod(true);
700
-
701
- if (COMMON_JS) {
702
- module.exports = exports;
703
- } else {
704
- root.sha256 = exports.sha256;
705
- root.sha224 = exports.sha224;
706
- }
707
- })();
708
- }(sha256$1));
218
+ var hasRequiredSha256;
219
+
220
+ function requireSha256 () {
221
+ if (hasRequiredSha256) return sha256$1.exports;
222
+ hasRequiredSha256 = 1;
223
+ (function (module) {
224
+ /*jslint bitwise: true */
225
+ (function () {
226
+
227
+ var ERROR = 'input is invalid type';
228
+ var WINDOW = typeof window === 'object';
229
+ var root = WINDOW ? window : {};
230
+ if (root.JS_SHA256_NO_WINDOW) {
231
+ WINDOW = false;
232
+ }
233
+ var WEB_WORKER = !WINDOW && typeof self === 'object';
234
+ var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
235
+ if (NODE_JS) {
236
+ root = commonjsGlobal;
237
+ } else if (WEB_WORKER) {
238
+ root = self;
239
+ }
240
+ var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && 'object' === 'object' && module.exports;
241
+ var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
242
+ var HEX_CHARS = '0123456789abcdef'.split('');
243
+ var EXTRA = [-2147483648, 8388608, 32768, 128];
244
+ var SHIFT = [24, 16, 8, 0];
245
+ var K = [
246
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
247
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
248
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
249
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
250
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
251
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
252
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
253
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
254
+ ];
255
+ var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
256
+
257
+ var blocks = [];
258
+
259
+ if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {
260
+ Array.isArray = function (obj) {
261
+ return Object.prototype.toString.call(obj) === '[object Array]';
262
+ };
263
+ }
264
+
265
+ if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
266
+ ArrayBuffer.isView = function (obj) {
267
+ return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
268
+ };
269
+ }
270
+
271
+ var createOutputMethod = function (outputType, is224) {
272
+ return function (message) {
273
+ return new Sha256(is224, true).update(message)[outputType]();
274
+ };
275
+ };
276
+
277
+ var createMethod = function (is224) {
278
+ var method = createOutputMethod('hex', is224);
279
+ if (NODE_JS) {
280
+ method = nodeWrap(method, is224);
281
+ }
282
+ method.create = function () {
283
+ return new Sha256(is224);
284
+ };
285
+ method.update = function (message) {
286
+ return method.create().update(message);
287
+ };
288
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
289
+ var type = OUTPUT_TYPES[i];
290
+ method[type] = createOutputMethod(type, is224);
291
+ }
292
+ return method;
293
+ };
294
+
295
+ var nodeWrap = function (method, is224) {
296
+ var crypto = require$$1;
297
+ var Buffer = require$$1.Buffer;
298
+ var algorithm = is224 ? 'sha224' : 'sha256';
299
+ var bufferFrom;
300
+ if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {
301
+ bufferFrom = Buffer.from;
302
+ } else {
303
+ bufferFrom = function (message) {
304
+ return new Buffer(message);
305
+ };
306
+ }
307
+ var nodeMethod = function (message) {
308
+ if (typeof message === 'string') {
309
+ return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');
310
+ } else {
311
+ if (message === null || message === undefined) {
312
+ throw new Error(ERROR);
313
+ } else if (message.constructor === ArrayBuffer) {
314
+ message = new Uint8Array(message);
315
+ }
316
+ }
317
+ if (Array.isArray(message) || ArrayBuffer.isView(message) ||
318
+ message.constructor === Buffer) {
319
+ return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');
320
+ } else {
321
+ return method(message);
322
+ }
323
+ };
324
+ return nodeMethod;
325
+ };
326
+
327
+ var createHmacOutputMethod = function (outputType, is224) {
328
+ return function (key, message) {
329
+ return new HmacSha256(key, is224, true).update(message)[outputType]();
330
+ };
331
+ };
332
+
333
+ var createHmacMethod = function (is224) {
334
+ var method = createHmacOutputMethod('hex', is224);
335
+ method.create = function (key) {
336
+ return new HmacSha256(key, is224);
337
+ };
338
+ method.update = function (key, message) {
339
+ return method.create(key).update(message);
340
+ };
341
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
342
+ var type = OUTPUT_TYPES[i];
343
+ method[type] = createHmacOutputMethod(type, is224);
344
+ }
345
+ return method;
346
+ };
347
+
348
+ function Sha256(is224, sharedMemory) {
349
+ if (sharedMemory) {
350
+ blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
351
+ blocks[4] = blocks[5] = blocks[6] = blocks[7] =
352
+ blocks[8] = blocks[9] = blocks[10] = blocks[11] =
353
+ blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
354
+ this.blocks = blocks;
355
+ } else {
356
+ this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
357
+ }
358
+
359
+ if (is224) {
360
+ this.h0 = 0xc1059ed8;
361
+ this.h1 = 0x367cd507;
362
+ this.h2 = 0x3070dd17;
363
+ this.h3 = 0xf70e5939;
364
+ this.h4 = 0xffc00b31;
365
+ this.h5 = 0x68581511;
366
+ this.h6 = 0x64f98fa7;
367
+ this.h7 = 0xbefa4fa4;
368
+ } else { // 256
369
+ this.h0 = 0x6a09e667;
370
+ this.h1 = 0xbb67ae85;
371
+ this.h2 = 0x3c6ef372;
372
+ this.h3 = 0xa54ff53a;
373
+ this.h4 = 0x510e527f;
374
+ this.h5 = 0x9b05688c;
375
+ this.h6 = 0x1f83d9ab;
376
+ this.h7 = 0x5be0cd19;
377
+ }
378
+
379
+ this.block = this.start = this.bytes = this.hBytes = 0;
380
+ this.finalized = this.hashed = false;
381
+ this.first = true;
382
+ this.is224 = is224;
383
+ }
384
+
385
+ Sha256.prototype.update = function (message) {
386
+ if (this.finalized) {
387
+ return;
388
+ }
389
+ var notString, type = typeof message;
390
+ if (type !== 'string') {
391
+ if (type === 'object') {
392
+ if (message === null) {
393
+ throw new Error(ERROR);
394
+ } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
395
+ message = new Uint8Array(message);
396
+ } else if (!Array.isArray(message)) {
397
+ if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
398
+ throw new Error(ERROR);
399
+ }
400
+ }
401
+ } else {
402
+ throw new Error(ERROR);
403
+ }
404
+ notString = true;
405
+ }
406
+ var code, index = 0, i, length = message.length, blocks = this.blocks;
407
+
408
+ while (index < length) {
409
+ if (this.hashed) {
410
+ this.hashed = false;
411
+ blocks[0] = this.block;
412
+ blocks[16] = blocks[1] = blocks[2] = blocks[3] =
413
+ blocks[4] = blocks[5] = blocks[6] = blocks[7] =
414
+ blocks[8] = blocks[9] = blocks[10] = blocks[11] =
415
+ blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
416
+ }
417
+
418
+ if (notString) {
419
+ for (i = this.start; index < length && i < 64; ++index) {
420
+ blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
421
+ }
422
+ } else {
423
+ for (i = this.start; index < length && i < 64; ++index) {
424
+ code = message.charCodeAt(index);
425
+ if (code < 0x80) {
426
+ blocks[i >> 2] |= code << SHIFT[i++ & 3];
427
+ } else if (code < 0x800) {
428
+ blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
429
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
430
+ } else if (code < 0xd800 || code >= 0xe000) {
431
+ blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
432
+ blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
433
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
434
+ } else {
435
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
436
+ blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
437
+ blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
438
+ blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
439
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
440
+ }
441
+ }
442
+ }
443
+
444
+ this.lastByteIndex = i;
445
+ this.bytes += i - this.start;
446
+ if (i >= 64) {
447
+ this.block = blocks[16];
448
+ this.start = i - 64;
449
+ this.hash();
450
+ this.hashed = true;
451
+ } else {
452
+ this.start = i;
453
+ }
454
+ }
455
+ if (this.bytes > 4294967295) {
456
+ this.hBytes += this.bytes / 4294967296 << 0;
457
+ this.bytes = this.bytes % 4294967296;
458
+ }
459
+ return this;
460
+ };
461
+
462
+ Sha256.prototype.finalize = function () {
463
+ if (this.finalized) {
464
+ return;
465
+ }
466
+ this.finalized = true;
467
+ var blocks = this.blocks, i = this.lastByteIndex;
468
+ blocks[16] = this.block;
469
+ blocks[i >> 2] |= EXTRA[i & 3];
470
+ this.block = blocks[16];
471
+ if (i >= 56) {
472
+ if (!this.hashed) {
473
+ this.hash();
474
+ }
475
+ blocks[0] = this.block;
476
+ blocks[16] = blocks[1] = blocks[2] = blocks[3] =
477
+ blocks[4] = blocks[5] = blocks[6] = blocks[7] =
478
+ blocks[8] = blocks[9] = blocks[10] = blocks[11] =
479
+ blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
480
+ }
481
+ blocks[14] = this.hBytes << 3 | this.bytes >>> 29;
482
+ blocks[15] = this.bytes << 3;
483
+ this.hash();
484
+ };
485
+
486
+ Sha256.prototype.hash = function () {
487
+ var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,
488
+ h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;
489
+
490
+ for (j = 16; j < 64; ++j) {
491
+ // rightrotate
492
+ t1 = blocks[j - 15];
493
+ s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);
494
+ t1 = blocks[j - 2];
495
+ s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);
496
+ blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;
497
+ }
498
+
499
+ bc = b & c;
500
+ for (j = 0; j < 64; j += 4) {
501
+ if (this.first) {
502
+ if (this.is224) {
503
+ ab = 300032;
504
+ t1 = blocks[0] - 1413257819;
505
+ h = t1 - 150054599 << 0;
506
+ d = t1 + 24177077 << 0;
507
+ } else {
508
+ ab = 704751109;
509
+ t1 = blocks[0] - 210244248;
510
+ h = t1 - 1521486534 << 0;
511
+ d = t1 + 143694565 << 0;
512
+ }
513
+ this.first = false;
514
+ } else {
515
+ s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
516
+ s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
517
+ ab = a & b;
518
+ maj = ab ^ (a & c) ^ bc;
519
+ ch = (e & f) ^ (~e & g);
520
+ t1 = h + s1 + ch + K[j] + blocks[j];
521
+ t2 = s0 + maj;
522
+ h = d + t1 << 0;
523
+ d = t1 + t2 << 0;
524
+ }
525
+ s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));
526
+ s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));
527
+ da = d & a;
528
+ maj = da ^ (d & b) ^ ab;
529
+ ch = (h & e) ^ (~h & f);
530
+ t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];
531
+ t2 = s0 + maj;
532
+ g = c + t1 << 0;
533
+ c = t1 + t2 << 0;
534
+ s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));
535
+ s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));
536
+ cd = c & d;
537
+ maj = cd ^ (c & a) ^ da;
538
+ ch = (g & h) ^ (~g & e);
539
+ t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];
540
+ t2 = s0 + maj;
541
+ f = b + t1 << 0;
542
+ b = t1 + t2 << 0;
543
+ s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));
544
+ s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));
545
+ bc = b & c;
546
+ maj = bc ^ (b & d) ^ cd;
547
+ ch = (f & g) ^ (~f & h);
548
+ t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];
549
+ t2 = s0 + maj;
550
+ e = a + t1 << 0;
551
+ a = t1 + t2 << 0;
552
+ this.chromeBugWorkAround = true;
553
+ }
554
+
555
+ this.h0 = this.h0 + a << 0;
556
+ this.h1 = this.h1 + b << 0;
557
+ this.h2 = this.h2 + c << 0;
558
+ this.h3 = this.h3 + d << 0;
559
+ this.h4 = this.h4 + e << 0;
560
+ this.h5 = this.h5 + f << 0;
561
+ this.h6 = this.h6 + g << 0;
562
+ this.h7 = this.h7 + h << 0;
563
+ };
564
+
565
+ Sha256.prototype.hex = function () {
566
+ this.finalize();
567
+
568
+ var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
569
+ h6 = this.h6, h7 = this.h7;
570
+
571
+ var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
572
+ HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
573
+ HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
574
+ HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
575
+ HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
576
+ HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
577
+ HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
578
+ HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
579
+ HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
580
+ HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
581
+ HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
582
+ HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
583
+ HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +
584
+ HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
585
+ HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
586
+ HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
587
+ HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +
588
+ HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +
589
+ HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +
590
+ HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +
591
+ HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +
592
+ HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +
593
+ HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +
594
+ HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +
595
+ HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +
596
+ HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +
597
+ HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +
598
+ HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];
599
+ if (!this.is224) {
600
+ hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +
601
+ HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +
602
+ HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +
603
+ HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];
604
+ }
605
+ return hex;
606
+ };
607
+
608
+ Sha256.prototype.toString = Sha256.prototype.hex;
609
+
610
+ Sha256.prototype.digest = function () {
611
+ this.finalize();
612
+
613
+ var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
614
+ h6 = this.h6, h7 = this.h7;
615
+
616
+ var arr = [
617
+ (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,
618
+ (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,
619
+ (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,
620
+ (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,
621
+ (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,
622
+ (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,
623
+ (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF
624
+ ];
625
+ if (!this.is224) {
626
+ arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);
627
+ }
628
+ return arr;
629
+ };
630
+
631
+ Sha256.prototype.array = Sha256.prototype.digest;
632
+
633
+ Sha256.prototype.arrayBuffer = function () {
634
+ this.finalize();
635
+
636
+ var buffer = new ArrayBuffer(this.is224 ? 28 : 32);
637
+ var dataView = new DataView(buffer);
638
+ dataView.setUint32(0, this.h0);
639
+ dataView.setUint32(4, this.h1);
640
+ dataView.setUint32(8, this.h2);
641
+ dataView.setUint32(12, this.h3);
642
+ dataView.setUint32(16, this.h4);
643
+ dataView.setUint32(20, this.h5);
644
+ dataView.setUint32(24, this.h6);
645
+ if (!this.is224) {
646
+ dataView.setUint32(28, this.h7);
647
+ }
648
+ return buffer;
649
+ };
650
+
651
+ function HmacSha256(key, is224, sharedMemory) {
652
+ var i, type = typeof key;
653
+ if (type === 'string') {
654
+ var bytes = [], length = key.length, index = 0, code;
655
+ for (i = 0; i < length; ++i) {
656
+ code = key.charCodeAt(i);
657
+ if (code < 0x80) {
658
+ bytes[index++] = code;
659
+ } else if (code < 0x800) {
660
+ bytes[index++] = (0xc0 | (code >> 6));
661
+ bytes[index++] = (0x80 | (code & 0x3f));
662
+ } else if (code < 0xd800 || code >= 0xe000) {
663
+ bytes[index++] = (0xe0 | (code >> 12));
664
+ bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
665
+ bytes[index++] = (0x80 | (code & 0x3f));
666
+ } else {
667
+ code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
668
+ bytes[index++] = (0xf0 | (code >> 18));
669
+ bytes[index++] = (0x80 | ((code >> 12) & 0x3f));
670
+ bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
671
+ bytes[index++] = (0x80 | (code & 0x3f));
672
+ }
673
+ }
674
+ key = bytes;
675
+ } else {
676
+ if (type === 'object') {
677
+ if (key === null) {
678
+ throw new Error(ERROR);
679
+ } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {
680
+ key = new Uint8Array(key);
681
+ } else if (!Array.isArray(key)) {
682
+ if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {
683
+ throw new Error(ERROR);
684
+ }
685
+ }
686
+ } else {
687
+ throw new Error(ERROR);
688
+ }
689
+ }
690
+
691
+ if (key.length > 64) {
692
+ key = (new Sha256(is224, true)).update(key).array();
693
+ }
694
+
695
+ var oKeyPad = [], iKeyPad = [];
696
+ for (i = 0; i < 64; ++i) {
697
+ var b = key[i] || 0;
698
+ oKeyPad[i] = 0x5c ^ b;
699
+ iKeyPad[i] = 0x36 ^ b;
700
+ }
701
+
702
+ Sha256.call(this, is224, sharedMemory);
703
+
704
+ this.update(iKeyPad);
705
+ this.oKeyPad = oKeyPad;
706
+ this.inner = true;
707
+ this.sharedMemory = sharedMemory;
708
+ }
709
+ HmacSha256.prototype = new Sha256();
710
+
711
+ HmacSha256.prototype.finalize = function () {
712
+ Sha256.prototype.finalize.call(this);
713
+ if (this.inner) {
714
+ this.inner = false;
715
+ var innerHash = this.array();
716
+ Sha256.call(this, this.is224, this.sharedMemory);
717
+ this.update(this.oKeyPad);
718
+ this.update(innerHash);
719
+ Sha256.prototype.finalize.call(this);
720
+ }
721
+ };
722
+
723
+ var exports = createMethod();
724
+ exports.sha256 = exports;
725
+ exports.sha224 = createMethod(true);
726
+ exports.sha256.hmac = createHmacMethod();
727
+ exports.sha224.hmac = createHmacMethod(true);
728
+
729
+ if (COMMON_JS) {
730
+ module.exports = exports;
731
+ } else {
732
+ root.sha256 = exports.sha256;
733
+ root.sha224 = exports.sha224;
734
+ }
735
+ })();
736
+ } (sha256$1));
737
+ return sha256$1.exports;
738
+ }
709
739
 
710
- const sha256 = sha256$1.exports;
740
+ var sha256Exports = requireSha256();
741
+ var sha256 = /*@__PURE__*/getDefaultExportFromCjs(sha256Exports);
711
742
 
712
743
  class InvalidTokenError extends Error {
713
744
  }
@@ -1140,7 +1171,7 @@ function Keycloak (config) {
1140
1171
  case "S256":
1141
1172
  // hash codeVerifier, then encode as url-safe base64 without padding
1142
1173
  var hashBytes = new Uint8Array(sha256.arrayBuffer(codeVerifier));
1143
- var encodedHash = base64Js.fromByteArray(hashBytes)
1174
+ var encodedHash = base64.fromByteArray(hashBytes)
1144
1175
  .replace(/\+/g, '-')
1145
1176
  .replace(/\//g, '_')
1146
1177
  .replace(/\=/g, '');
@@ -1926,7 +1957,7 @@ function Keycloak (config) {
1926
1957
  var timeoutHandle = null;
1927
1958
  var timeoutPromise = new Promise(function (resolve, reject) {
1928
1959
  timeoutHandle = setTimeout(function () {
1929
- reject({ "error": errorMessage || "Promise is not settled within timeout of " + timeout + "ms" });
1960
+ reject({ "error": errorMessage });
1930
1961
  }, timeout);
1931
1962
  });
1932
1963
 
@@ -2506,1374 +2537,1386 @@ function Keycloak (config) {
2506
2537
  * SOFTWARE.
2507
2538
  */
2508
2539
 
2509
- /**
2510
- * Parses a substring of the hash as a number.
2511
- * @param {number} startPosition
2512
- * @param {number=} octets
2513
- */
2514
- function parseHex(hash, startPosition, octets) {
2515
- return parseInt(hash.substr(startPosition, octets), 16);
2516
- }
2517
-
2518
- function decToHex(v) {
2519
- v |= 0; // Ensure integer value
2520
- return v < 0 ? "00" :
2521
- v < 16 ? "0" + v.toString(16) :
2522
- v < 256 ? v.toString(16) :
2523
- "ff";
2524
- }
2525
-
2526
- function hueToRgb(m1, m2, h) {
2527
- h = h < 0 ? h + 6 : h > 6 ? h - 6 : h;
2528
- return decToHex(255 * (
2529
- h < 1 ? m1 + (m2 - m1) * h :
2530
- h < 3 ? m2 :
2531
- h < 4 ? m1 + (m2 - m1) * (4 - h) :
2532
- m1));
2533
- }
2534
-
2535
- /**
2536
- * @param {string} color Color value to parse. Currently hexadecimal strings on the format #rgb[a] and #rrggbb[aa] are supported.
2537
- * @returns {string}
2538
- */
2539
- function parseColor(color) {
2540
- if (/^#[0-9a-f]{3,8}$/i.test(color)) {
2541
- var result;
2542
- var colorLength = color.length;
2543
-
2544
- if (colorLength < 6) {
2545
- var r = color[1],
2546
- g = color[2],
2547
- b = color[3],
2548
- a = color[4] || "";
2549
- result = "#" + r + r + g + g + b + b + a + a;
2550
- }
2551
- if (colorLength == 7 || colorLength > 8) {
2552
- result = color;
2553
- }
2554
-
2555
- return result;
2556
- }
2557
- }
2558
-
2559
- /**
2560
- * Converts a hexadecimal color to a CSS3 compatible color.
2561
- * @param {string} hexColor Color on the format "#RRGGBB" or "#RRGGBBAA"
2562
- * @returns {string}
2563
- */
2564
- function toCss3Color(hexColor) {
2565
- var a = parseHex(hexColor, 7, 2);
2566
- var result;
2567
-
2568
- if (isNaN(a)) {
2569
- result = hexColor;
2570
- } else {
2571
- var r = parseHex(hexColor, 1, 2),
2572
- g = parseHex(hexColor, 3, 2),
2573
- b = parseHex(hexColor, 5, 2);
2574
- result = "rgba(" + r + "," + g + "," + b + "," + (a / 255).toFixed(2) + ")";
2575
- }
2576
-
2577
- return result;
2578
- }
2579
-
2580
- /**
2581
- * Converts an HSL color to a hexadecimal RGB color.
2582
- * @param {number} hue Hue in range [0, 1]
2583
- * @param {number} saturation Saturation in range [0, 1]
2584
- * @param {number} lightness Lightness in range [0, 1]
2585
- * @returns {string}
2586
- */
2587
- function hsl(hue, saturation, lightness) {
2588
- // Based on http://www.w3.org/TR/2011/REC-css3-color-20110607/#hsl-color
2589
- var result;
2590
-
2591
- if (saturation == 0) {
2592
- var partialHex = decToHex(lightness * 255);
2593
- result = partialHex + partialHex + partialHex;
2594
- }
2595
- else {
2596
- var m2 = lightness <= 0.5 ? lightness * (saturation + 1) : lightness + saturation - lightness * saturation,
2597
- m1 = lightness * 2 - m2;
2598
- result =
2599
- hueToRgb(m1, m2, hue * 6 + 2) +
2600
- hueToRgb(m1, m2, hue * 6) +
2601
- hueToRgb(m1, m2, hue * 6 - 2);
2602
- }
2603
-
2604
- return "#" + result;
2605
- }
2606
-
2607
- /**
2608
- * Converts an HSL color to a hexadecimal RGB color. This function will correct the lightness for the "dark" hues
2609
- * @param {number} hue Hue in range [0, 1]
2610
- * @param {number} saturation Saturation in range [0, 1]
2611
- * @param {number} lightness Lightness in range [0, 1]
2612
- * @returns {string}
2613
- */
2614
- function correctedHsl(hue, saturation, lightness) {
2615
- // The corrector specifies the perceived middle lightness for each hue
2616
- var correctors = [ 0.55, 0.5, 0.5, 0.46, 0.6, 0.55, 0.55 ],
2617
- corrector = correctors[(hue * 6 + 0.5) | 0];
2618
-
2619
- // Adjust the input lightness relative to the corrector
2620
- lightness = lightness < 0.5 ? lightness * corrector * 2 : corrector + (lightness - 0.5) * (1 - corrector) * 2;
2621
-
2622
- return hsl(hue, saturation, lightness);
2623
- }
2624
-
2625
- // In the future we can replace `GLOBAL` with `globalThis`, but for now use the old school global detection for
2626
- // backward compatibility.
2627
-
2628
- var GLOBAL =
2629
- typeof window !== "undefined" ? window :
2630
- typeof self !== "undefined" ? self :
2631
- typeof commonjsGlobal !== "undefined" ? commonjsGlobal :
2632
- {};
2633
-
2634
- /**
2635
- * @typedef {Object} ParsedConfiguration
2636
- * @property {number} colorSaturation
2637
- * @property {number} grayscaleSaturation
2638
- * @property {string} backColor
2639
- * @property {number} iconPadding
2640
- * @property {function(number):number} hue
2641
- * @property {function(number):number} colorLightness
2642
- * @property {function(number):number} grayscaleLightness
2643
- */
2644
-
2645
- var CONFIG_PROPERTIES = {
2646
- W/*GLOBAL*/: "jdenticon_config",
2647
- n/*MODULE*/: "config",
2648
- };
2649
-
2650
- var rootConfigurationHolder = {};
2651
-
2652
- /**
2653
- * Defines the deprecated `config` property on the root Jdenticon object without printing a warning in the console
2654
- * when it is being used.
2655
- * @param {!Object} rootObject
2656
- */
2657
- function defineConfigProperty(rootObject) {
2658
- rootConfigurationHolder = rootObject;
2659
- }
2660
-
2661
- /**
2662
- * Sets a new icon style configuration. The new configuration is not merged with the previous one. *
2663
- * @param {Object} newConfiguration - New configuration object.
2664
- */
2665
- function configure(newConfiguration) {
2666
- if (arguments.length) {
2667
- rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/] = newConfiguration;
2668
- }
2669
- return rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/];
2670
- }
2671
-
2672
- /**
2673
- * Gets the normalized current Jdenticon color configuration. Missing fields have default values.
2674
- * @param {Object|number|undefined} paddingOrLocalConfig - Configuration passed to the called API method. A
2675
- * local configuration overrides the global configuration in it entirety. This parameter can for backward
2676
- * compatibility also contain a padding value. A padding value only overrides the global padding, not the
2677
- * entire global configuration.
2678
- * @param {number} defaultPadding - Padding used if no padding is specified in neither the configuration nor
2679
- * explicitly to the API method.
2680
- * @returns {ParsedConfiguration}
2681
- */
2682
- function getConfiguration(paddingOrLocalConfig, defaultPadding) {
2683
- var configObject =
2684
- typeof paddingOrLocalConfig == "object" && paddingOrLocalConfig ||
2685
- rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/] ||
2686
- GLOBAL[CONFIG_PROPERTIES.W/*GLOBAL*/] ||
2687
- { },
2688
-
2689
- lightnessConfig = configObject["lightness"] || { },
2690
-
2691
- // In versions < 2.1.0 there was no grayscale saturation -
2692
- // saturation was the color saturation.
2693
- saturation = configObject["saturation"] || { },
2694
- colorSaturation = "color" in saturation ? saturation["color"] : saturation,
2695
- grayscaleSaturation = saturation["grayscale"],
2696
-
2697
- backColor = configObject["backColor"],
2698
- padding = configObject["padding"];
2699
-
2700
- /**
2701
- * Creates a lightness range.
2702
- */
2703
- function lightness(configName, defaultRange) {
2704
- var range = lightnessConfig[configName];
2705
-
2706
- // Check if the lightness range is an array-like object. This way we ensure the
2707
- // array contain two values at the same time.
2708
- if (!(range && range.length > 1)) {
2709
- range = defaultRange;
2710
- }
2711
-
2712
- /**
2713
- * Gets a lightness relative the specified value in the specified lightness range.
2714
- */
2715
- return function (value) {
2716
- value = range[0] + value * (range[1] - range[0]);
2717
- return value < 0 ? 0 : value > 1 ? 1 : value;
2718
- };
2719
- }
2720
-
2721
- /**
2722
- * Gets a hue allowed by the configured hue restriction,
2723
- * provided the originally computed hue.
2724
- */
2725
- function hueFunction(originalHue) {
2726
- var hueConfig = configObject["hues"];
2727
- var hue;
2728
-
2729
- // Check if 'hues' is an array-like object. This way we also ensure that
2730
- // the array is not empty, which would mean no hue restriction.
2731
- if (hueConfig && hueConfig.length > 0) {
2732
- // originalHue is in the range [0, 1]
2733
- // Multiply with 0.999 to change the range to [0, 1) and then truncate the index.
2734
- hue = hueConfig[0 | (0.999 * originalHue * hueConfig.length)];
2735
- }
2736
-
2737
- return typeof hue == "number" ?
2738
-
2739
- // A hue was specified. We need to convert the hue from
2740
- // degrees on any turn - e.g. 746° is a perfectly valid hue -
2741
- // to turns in the range [0, 1).
2742
- ((((hue / 360) % 1) + 1) % 1) :
2743
-
2744
- // No hue configured => use original hue
2745
- originalHue;
2746
- }
2747
-
2748
- return {
2749
- X/*hue*/: hueFunction,
2750
- o/*colorSaturation*/: typeof colorSaturation == "number" ? colorSaturation : 0.5,
2751
- F/*grayscaleSaturation*/: typeof grayscaleSaturation == "number" ? grayscaleSaturation : 0,
2752
- p/*colorLightness*/: lightness("color", [0.4, 0.8]),
2753
- G/*grayscaleLightness*/: lightness("grayscale", [0.3, 0.9]),
2754
- H/*backColor*/: parseColor(backColor),
2755
- Y/*iconPadding*/:
2756
- typeof paddingOrLocalConfig == "number" ? paddingOrLocalConfig :
2757
- typeof padding == "number" ? padding :
2758
- defaultPadding
2759
- }
2760
- }
2761
-
2762
- /**
2763
- * Represents a point.
2764
- */
2765
- function Point(x, y) {
2766
- this.x = x;
2767
- this.y = y;
2768
- }
2769
-
2770
- /**
2771
- * Translates and rotates a point before being passed on to the canvas context. This was previously done by the canvas context itself,
2772
- * but this caused a rendering issue in Chrome on sizes > 256 where the rotation transformation of inverted paths was not done properly.
2773
- */
2774
- function Transform(x, y, size, rotation) {
2775
- this.q/*_x*/ = x;
2776
- this.t/*_y*/ = y;
2777
- this.I/*_size*/ = size;
2778
- this.Z/*_rotation*/ = rotation;
2779
- }
2780
-
2781
- /**
2782
- * Transforms the specified point based on the translation and rotation specification for this Transform.
2783
- * @param {number} x x-coordinate
2784
- * @param {number} y y-coordinate
2785
- * @param {number=} w The width of the transformed rectangle. If greater than 0, this will ensure the returned point is of the upper left corner of the transformed rectangle.
2786
- * @param {number=} h The height of the transformed rectangle. If greater than 0, this will ensure the returned point is of the upper left corner of the transformed rectangle.
2787
- */
2788
- Transform.prototype.J/*transformIconPoint*/ = function transformIconPoint (x, y, w, h) {
2789
- var right = this.q/*_x*/ + this.I/*_size*/,
2790
- bottom = this.t/*_y*/ + this.I/*_size*/,
2791
- rotation = this.Z/*_rotation*/;
2792
- return rotation === 1 ? new Point(right - y - (h || 0), this.t/*_y*/ + x) :
2793
- rotation === 2 ? new Point(right - x - (w || 0), bottom - y - (h || 0)) :
2794
- rotation === 3 ? new Point(this.q/*_x*/ + y, bottom - x - (w || 0)) :
2795
- new Point(this.q/*_x*/ + x, this.t/*_y*/ + y);
2796
- };
2797
-
2798
- var NO_TRANSFORM = new Transform(0, 0, 0, 0);
2799
-
2800
-
2801
-
2802
- /**
2803
- * Provides helper functions for rendering common basic shapes.
2804
- */
2805
- function Graphics(renderer) {
2806
- /**
2807
- * @type {Renderer}
2808
- * @private
2809
- */
2810
- this.K/*_renderer*/ = renderer;
2811
-
2812
- /**
2813
- * @type {Transform}
2814
- */
2815
- this.u/*currentTransform*/ = NO_TRANSFORM;
2816
- }
2817
- var Graphics__prototype = Graphics.prototype;
2818
-
2819
- /**
2820
- * Adds a polygon to the underlying renderer.
2821
- * @param {Array<number>} points The points of the polygon clockwise on the format [ x0, y0, x1, y1, ..., xn, yn ]
2822
- * @param {boolean=} invert Specifies if the polygon will be inverted.
2823
- */
2824
- Graphics__prototype.g/*addPolygon*/ = function addPolygon (points, invert) {
2825
- var this$1$1 = this;
2826
-
2827
- var di = invert ? -2 : 2,
2828
- transformedPoints = [];
2829
-
2830
- for (var i = invert ? points.length - 2 : 0; i < points.length && i >= 0; i += di) {
2831
- transformedPoints.push(this$1$1.u/*currentTransform*/.J/*transformIconPoint*/(points[i], points[i + 1]));
2832
- }
2833
-
2834
- this.K/*_renderer*/.g/*addPolygon*/(transformedPoints);
2835
- };
2836
-
2837
- /**
2838
- * Adds a polygon to the underlying renderer.
2839
- * Source: http://stackoverflow.com/a/2173084
2840
- * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the entire ellipse.
2841
- * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the entire ellipse.
2842
- * @param {number} size The size of the ellipse.
2843
- * @param {boolean=} invert Specifies if the ellipse will be inverted.
2844
- */
2845
- Graphics__prototype.h/*addCircle*/ = function addCircle (x, y, size, invert) {
2846
- var p = this.u/*currentTransform*/.J/*transformIconPoint*/(x, y, size, size);
2847
- this.K/*_renderer*/.h/*addCircle*/(p, size, invert);
2848
- };
2849
-
2850
- /**
2851
- * Adds a rectangle to the underlying renderer.
2852
- * @param {number} x The x-coordinate of the upper left corner of the rectangle.
2853
- * @param {number} y The y-coordinate of the upper left corner of the rectangle.
2854
- * @param {number} w The width of the rectangle.
2855
- * @param {number} h The height of the rectangle.
2856
- * @param {boolean=} invert Specifies if the rectangle will be inverted.
2857
- */
2858
- Graphics__prototype.i/*addRectangle*/ = function addRectangle (x, y, w, h, invert) {
2859
- this.g/*addPolygon*/([
2860
- x, y,
2861
- x + w, y,
2862
- x + w, y + h,
2863
- x, y + h
2864
- ], invert);
2865
- };
2866
-
2867
- /**
2868
- * Adds a right triangle to the underlying renderer.
2869
- * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the triangle.
2870
- * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the triangle.
2871
- * @param {number} w The width of the triangle.
2872
- * @param {number} h The height of the triangle.
2873
- * @param {number} r The rotation of the triangle (clockwise). 0 = right corner of the triangle in the lower left corner of the bounding rectangle.
2874
- * @param {boolean=} invert Specifies if the triangle will be inverted.
2875
- */
2876
- Graphics__prototype.j/*addTriangle*/ = function addTriangle (x, y, w, h, r, invert) {
2877
- var points = [
2878
- x + w, y,
2879
- x + w, y + h,
2880
- x, y + h,
2881
- x, y
2882
- ];
2883
- points.splice(((r || 0) % 4) * 2, 2);
2884
- this.g/*addPolygon*/(points, invert);
2885
- };
2886
-
2887
- /**
2888
- * Adds a rhombus to the underlying renderer.
2889
- * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the rhombus.
2890
- * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the rhombus.
2891
- * @param {number} w The width of the rhombus.
2892
- * @param {number} h The height of the rhombus.
2893
- * @param {boolean=} invert Specifies if the rhombus will be inverted.
2894
- */
2895
- Graphics__prototype.L/*addRhombus*/ = function addRhombus (x, y, w, h, invert) {
2896
- this.g/*addPolygon*/([
2897
- x + w / 2, y,
2898
- x + w, y + h / 2,
2899
- x + w / 2, y + h,
2900
- x, y + h / 2
2901
- ], invert);
2902
- };
2903
-
2904
- /**
2905
- * @param {number} index
2906
- * @param {Graphics} g
2907
- * @param {number} cell
2908
- * @param {number} positionIndex
2909
- */
2910
- function centerShape(index, g, cell, positionIndex) {
2911
- index = index % 14;
2912
-
2913
- var k, m, w, h, inner, outer;
2914
-
2915
- !index ? (
2916
- k = cell * 0.42,
2917
- g.g/*addPolygon*/([
2918
- 0, 0,
2919
- cell, 0,
2920
- cell, cell - k * 2,
2921
- cell - k, cell,
2922
- 0, cell
2923
- ])) :
2924
-
2925
- index == 1 ? (
2926
- w = 0 | (cell * 0.5),
2927
- h = 0 | (cell * 0.8),
2928
-
2929
- g.j/*addTriangle*/(cell - w, 0, w, h, 2)) :
2930
-
2931
- index == 2 ? (
2932
- w = 0 | (cell / 3),
2933
- g.i/*addRectangle*/(w, w, cell - w, cell - w)) :
2934
-
2935
- index == 3 ? (
2936
- inner = cell * 0.1,
2937
- // Use fixed outer border widths in small icons to ensure the border is drawn
2938
- outer =
2939
- cell < 6 ? 1 :
2940
- cell < 8 ? 2 :
2941
- (0 | (cell * 0.25)),
2942
-
2943
- inner =
2944
- inner > 1 ? (0 | inner) : // large icon => truncate decimals
2945
- inner > 0.5 ? 1 : // medium size icon => fixed width
2946
- inner, // small icon => anti-aliased border
2947
-
2948
- g.i/*addRectangle*/(outer, outer, cell - inner - outer, cell - inner - outer)) :
2949
-
2950
- index == 4 ? (
2951
- m = 0 | (cell * 0.15),
2952
- w = 0 | (cell * 0.5),
2953
- g.h/*addCircle*/(cell - w - m, cell - w - m, w)) :
2954
-
2955
- index == 5 ? (
2956
- inner = cell * 0.1,
2957
- outer = inner * 4,
2958
-
2959
- // Align edge to nearest pixel in large icons
2960
- outer > 3 && (outer = 0 | outer),
2961
-
2962
- g.i/*addRectangle*/(0, 0, cell, cell),
2963
- g.g/*addPolygon*/([
2964
- outer, outer,
2965
- cell - inner, outer,
2966
- outer + (cell - outer - inner) / 2, cell - inner
2967
- ], true)) :
2968
-
2969
- index == 6 ?
2970
- g.g/*addPolygon*/([
2971
- 0, 0,
2972
- cell, 0,
2973
- cell, cell * 0.7,
2974
- cell * 0.4, cell * 0.4,
2975
- cell * 0.7, cell,
2976
- 0, cell
2977
- ]) :
2978
-
2979
- index == 7 ?
2980
- g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 3) :
2981
-
2982
- index == 8 ? (
2983
- g.i/*addRectangle*/(0, 0, cell, cell / 2),
2984
- g.i/*addRectangle*/(0, cell / 2, cell / 2, cell / 2),
2985
- g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 1)) :
2986
-
2987
- index == 9 ? (
2988
- inner = cell * 0.14,
2989
- // Use fixed outer border widths in small icons to ensure the border is drawn
2990
- outer =
2991
- cell < 4 ? 1 :
2992
- cell < 6 ? 2 :
2993
- (0 | (cell * 0.35)),
2994
-
2995
- inner =
2996
- cell < 8 ? inner : // small icon => anti-aliased border
2997
- (0 | inner), // large icon => truncate decimals
2998
-
2999
- g.i/*addRectangle*/(0, 0, cell, cell),
3000
- g.i/*addRectangle*/(outer, outer, cell - outer - inner, cell - outer - inner, true)) :
3001
-
3002
- index == 10 ? (
3003
- inner = cell * 0.12,
3004
- outer = inner * 3,
3005
-
3006
- g.i/*addRectangle*/(0, 0, cell, cell),
3007
- g.h/*addCircle*/(outer, outer, cell - inner - outer, true)) :
3008
-
3009
- index == 11 ?
3010
- g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 3) :
3011
-
3012
- index == 12 ? (
3013
- m = cell * 0.25,
3014
- g.i/*addRectangle*/(0, 0, cell, cell),
3015
- g.L/*addRhombus*/(m, m, cell - m, cell - m, true)) :
3016
-
3017
- // 13
3018
- (
3019
- !positionIndex && (
3020
- m = cell * 0.4, w = cell * 1.2,
3021
- g.h/*addCircle*/(m, m, w)
3022
- )
3023
- );
3024
- }
3025
-
3026
- /**
3027
- * @param {number} index
3028
- * @param {Graphics} g
3029
- * @param {number} cell
3030
- */
3031
- function outerShape(index, g, cell) {
3032
- index = index % 4;
3033
-
3034
- var m;
3035
-
3036
- !index ?
3037
- g.j/*addTriangle*/(0, 0, cell, cell, 0) :
3038
-
3039
- index == 1 ?
3040
- g.j/*addTriangle*/(0, cell / 2, cell, cell / 2, 0) :
3041
-
3042
- index == 2 ?
3043
- g.L/*addRhombus*/(0, 0, cell, cell) :
3044
-
3045
- // 3
3046
- (
3047
- m = cell / 6,
3048
- g.h/*addCircle*/(m, m, cell - 2 * m)
3049
- );
3050
- }
3051
-
3052
- /**
3053
- * Gets a set of identicon color candidates for a specified hue and config.
3054
- * @param {number} hue
3055
- * @param {ParsedConfiguration} config
3056
- */
3057
- function colorTheme(hue, config) {
3058
- hue = config.X/*hue*/(hue);
3059
- return [
3060
- // Dark gray
3061
- correctedHsl(hue, config.F/*grayscaleSaturation*/, config.G/*grayscaleLightness*/(0)),
3062
- // Mid color
3063
- correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(0.5)),
3064
- // Light gray
3065
- correctedHsl(hue, config.F/*grayscaleSaturation*/, config.G/*grayscaleLightness*/(1)),
3066
- // Light color
3067
- correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(1)),
3068
- // Dark color
3069
- correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(0))
3070
- ];
3071
- }
3072
-
3073
- /**
3074
- * Draws an identicon to a specified renderer.
3075
- * @param {Renderer} renderer
3076
- * @param {string} hash
3077
- * @param {Object|number=} config
3078
- */
3079
- function iconGenerator(renderer, hash, config) {
3080
- var parsedConfig = getConfiguration(config, 0.08);
3081
-
3082
- // Set background color
3083
- if (parsedConfig.H/*backColor*/) {
3084
- renderer.m/*setBackground*/(parsedConfig.H/*backColor*/);
3085
- }
3086
-
3087
- // Calculate padding and round to nearest integer
3088
- var size = renderer.k/*iconSize*/;
3089
- var padding = (0.5 + size * parsedConfig.Y/*iconPadding*/) | 0;
3090
- size -= padding * 2;
3091
-
3092
- var graphics = new Graphics(renderer);
3093
-
3094
- // Calculate cell size and ensure it is an integer
3095
- var cell = 0 | (size / 4);
3096
-
3097
- // Since the cell size is integer based, the actual icon will be slightly smaller than specified => center icon
3098
- var x = 0 | (padding + size / 2 - cell * 2);
3099
- var y = 0 | (padding + size / 2 - cell * 2);
3100
-
3101
- function renderShape(colorIndex, shapes, index, rotationIndex, positions) {
3102
- var shapeIndex = parseHex(hash, index, 1);
3103
- var r = rotationIndex ? parseHex(hash, rotationIndex, 1) : 0;
3104
-
3105
- renderer.M/*beginShape*/(availableColors[selectedColorIndexes[colorIndex]]);
3106
-
3107
- for (var i = 0; i < positions.length; i++) {
3108
- graphics.u/*currentTransform*/ = new Transform(x + positions[i][0] * cell, y + positions[i][1] * cell, cell, r++ % 4);
3109
- shapes(shapeIndex, graphics, cell, i);
3110
- }
3111
-
3112
- renderer.N/*endShape*/();
3113
- }
3114
-
3115
- // AVAILABLE COLORS
3116
- var hue = parseHex(hash, -7) / 0xfffffff,
3117
-
3118
- // Available colors for this icon
3119
- availableColors = colorTheme(hue, parsedConfig),
3120
-
3121
- // The index of the selected colors
3122
- selectedColorIndexes = [];
3123
-
3124
- var index;
3125
-
3126
- function isDuplicate(values) {
3127
- if (values.indexOf(index) >= 0) {
3128
- for (var i = 0; i < values.length; i++) {
3129
- if (selectedColorIndexes.indexOf(values[i]) >= 0) {
3130
- return true;
3131
- }
3132
- }
3133
- }
3134
- }
3135
-
3136
- for (var i = 0; i < 3; i++) {
3137
- index = parseHex(hash, 8 + i, 1) % availableColors.length;
3138
- if (isDuplicate([0, 4]) || // Disallow dark gray and dark color combo
3139
- isDuplicate([2, 3])) { // Disallow light gray and light color combo
3140
- index = 1;
3141
- }
3142
- selectedColorIndexes.push(index);
3143
- }
3144
-
3145
- // ACTUAL RENDERING
3146
- // Sides
3147
- renderShape(0, outerShape, 2, 3, [[1, 0], [2, 0], [2, 3], [1, 3], [0, 1], [3, 1], [3, 2], [0, 2]]);
3148
- // Corners
3149
- renderShape(1, outerShape, 4, 5, [[0, 0], [3, 0], [3, 3], [0, 3]]);
3150
- // Center
3151
- renderShape(2, centerShape, 1, null, [[1, 1], [2, 1], [2, 2], [1, 2]]);
3152
-
3153
- renderer.finish();
3154
- }
3155
-
3156
- /**
3157
- * Computes a SHA1 hash for any value and returns it as a hexadecimal string.
3158
- *
3159
- * This function is optimized for minimal code size and rather short messages.
3160
- *
3161
- * @param {string} message
3162
- */
3163
- function sha1(message) {
3164
- var HASH_SIZE_HALF_BYTES = 40;
3165
- var BLOCK_SIZE_WORDS = 16;
3166
-
3167
- // Variables
3168
- // `var` is used to be able to minimize the number of `var` keywords.
3169
- var i = 0,
3170
- f = 0,
3171
-
3172
- // Use `encodeURI` to UTF8 encode the message without any additional libraries
3173
- // We could use `unescape` + `encodeURI` to minimize the code, but that would be slightly risky
3174
- // since `unescape` is deprecated.
3175
- urlEncodedMessage = encodeURI(message) + "%80", // trailing '1' bit padding
3176
-
3177
- // This can be changed to a preallocated Uint32Array array for greater performance and larger code size
3178
- data = [],
3179
- dataSize,
3180
-
3181
- hashBuffer = [],
3182
-
3183
- a = 0x67452301,
3184
- b = 0xefcdab89,
3185
- c = ~a,
3186
- d = ~b,
3187
- e = 0xc3d2e1f0,
3188
- hash = [a, b, c, d, e],
3189
-
3190
- blockStartIndex = 0,
3191
- hexHash = "";
3192
-
3193
- /**
3194
- * Rotates the value a specified number of bits to the left.
3195
- * @param {number} value Value to rotate
3196
- * @param {number} shift Bit count to shift.
3197
- */
3198
- function rotl(value, shift) {
3199
- return (value << shift) | (value >>> (32 - shift));
3200
- }
3201
-
3202
- // Message data
3203
- for ( ; i < urlEncodedMessage.length; f++) {
3204
- data[f >> 2] = data[f >> 2] |
3205
- (
3206
- (
3207
- urlEncodedMessage[i] == "%"
3208
- // Percent encoded byte
3209
- ? parseInt(urlEncodedMessage.substring(i + 1, i += 3), 16)
3210
- // Unencoded byte
3211
- : urlEncodedMessage.charCodeAt(i++)
3212
- )
3213
-
3214
- // Read bytes in reverse order (big endian words)
3215
- << ((3 - (f & 3)) * 8)
3216
- );
3217
- }
3218
-
3219
- // f is now the length of the utf8 encoded message
3220
- // 7 = 8 bytes (64 bit) for message size, -1 to round down
3221
- // >> 6 = integer division with block size
3222
- dataSize = (((f + 7) >> 6) + 1) * BLOCK_SIZE_WORDS;
3223
-
3224
- // Message size in bits.
3225
- // SHA1 uses a 64 bit integer to represent the size, but since we only support short messages only the least
3226
- // significant 32 bits are set. -8 is for the '1' bit padding byte.
3227
- data[dataSize - 1] = f * 8 - 8;
3228
-
3229
- // Compute hash
3230
- for ( ; blockStartIndex < dataSize; blockStartIndex += BLOCK_SIZE_WORDS) {
3231
- for (i = 0; i < 80; i++) {
3232
- f = rotl(a, 5) + e + (
3233
- // Ch
3234
- i < 20 ? ((b & c) ^ ((~b) & d)) + 0x5a827999 :
3235
-
3236
- // Parity
3237
- i < 40 ? (b ^ c ^ d) + 0x6ed9eba1 :
3238
-
3239
- // Maj
3240
- i < 60 ? ((b & c) ^ (b & d) ^ (c & d)) + 0x8f1bbcdc :
3241
-
3242
- // Parity
3243
- (b ^ c ^ d) + 0xca62c1d6
3244
- ) + (
3245
- hashBuffer[i] = i < BLOCK_SIZE_WORDS
3246
- // Bitwise OR is used to coerse `undefined` to 0
3247
- ? (data[blockStartIndex + i] | 0)
3248
- : rotl(hashBuffer[i - 3] ^ hashBuffer[i - 8] ^ hashBuffer[i - 14] ^ hashBuffer[i - 16], 1)
3249
- );
3250
-
3251
- e = d;
3252
- d = c;
3253
- c = rotl(b, 30);
3254
- b = a;
3255
- a = f;
3256
- }
3257
-
3258
- hash[0] = a = ((hash[0] + a) | 0);
3259
- hash[1] = b = ((hash[1] + b) | 0);
3260
- hash[2] = c = ((hash[2] + c) | 0);
3261
- hash[3] = d = ((hash[3] + d) | 0);
3262
- hash[4] = e = ((hash[4] + e) | 0);
3263
- }
3264
-
3265
- // Format hex hash
3266
- for (i = 0; i < HASH_SIZE_HALF_BYTES; i++) {
3267
- hexHash += (
3268
- (
3269
- // Get word (2^3 half-bytes per word)
3270
- hash[i >> 3] >>>
3271
-
3272
- // Append half-bytes in reverse order
3273
- ((7 - (i & 7)) * 4)
3274
- )
3275
- // Clamp to half-byte
3276
- & 0xf
3277
- ).toString(16);
3278
- }
3279
-
3280
- return hexHash;
3281
- }
3282
-
3283
- /**
3284
- * Inputs a value that might be a valid hash string for Jdenticon and returns it
3285
- * if it is determined valid, otherwise a falsy value is returned.
3286
- */
3287
- function isValidHash(hashCandidate) {
3288
- return /^[0-9a-f]{11,}$/i.test(hashCandidate) && hashCandidate;
3289
- }
3290
-
3291
- /**
3292
- * Computes a hash for the specified value. Currently SHA1 is used. This function
3293
- * always returns a valid hash.
3294
- */
3295
- function computeHash(value) {
3296
- return sha1(value == null ? "" : "" + value);
3297
- }
3298
-
3299
-
3300
-
3301
- /**
3302
- * Renderer redirecting drawing commands to a canvas context.
3303
- * @implements {Renderer}
3304
- */
3305
- function CanvasRenderer(ctx, iconSize) {
3306
- var canvas = ctx.canvas;
3307
- var width = canvas.width;
3308
- var height = canvas.height;
3309
-
3310
- ctx.save();
3311
-
3312
- if (!iconSize) {
3313
- iconSize = Math.min(width, height);
3314
-
3315
- ctx.translate(
3316
- ((width - iconSize) / 2) | 0,
3317
- ((height - iconSize) / 2) | 0);
3318
- }
3319
-
3320
- /**
3321
- * @private
3322
- */
3323
- this.l/*_ctx*/ = ctx;
3324
- this.k/*iconSize*/ = iconSize;
3325
-
3326
- ctx.clearRect(0, 0, iconSize, iconSize);
3327
- }
3328
- var CanvasRenderer__prototype = CanvasRenderer.prototype;
3329
-
3330
- /**
3331
- * Fills the background with the specified color.
3332
- * @param {string} fillColor Fill color on the format #rrggbb[aa].
3333
- */
3334
- CanvasRenderer__prototype.m/*setBackground*/ = function setBackground (fillColor) {
3335
- var ctx = this.l/*_ctx*/;
3336
- var iconSize = this.k/*iconSize*/;
3337
-
3338
- ctx.fillStyle = toCss3Color(fillColor);
3339
- ctx.fillRect(0, 0, iconSize, iconSize);
3340
- };
3341
-
3342
- /**
3343
- * Marks the beginning of a new shape of the specified color. Should be ended with a call to endShape.
3344
- * @param {string} fillColor Fill color on format #rrggbb[aa].
3345
- */
3346
- CanvasRenderer__prototype.M/*beginShape*/ = function beginShape (fillColor) {
3347
- var ctx = this.l/*_ctx*/;
3348
- ctx.fillStyle = toCss3Color(fillColor);
3349
- ctx.beginPath();
3350
- };
3351
-
3352
- /**
3353
- * Marks the end of the currently drawn shape. This causes the queued paths to be rendered on the canvas.
3354
- */
3355
- CanvasRenderer__prototype.N/*endShape*/ = function endShape () {
3356
- this.l/*_ctx*/.fill();
3357
- };
3358
-
3359
- /**
3360
- * Adds a polygon to the rendering queue.
3361
- * @param points An array of Point objects.
3362
- */
3363
- CanvasRenderer__prototype.g/*addPolygon*/ = function addPolygon (points) {
3364
- var ctx = this.l/*_ctx*/;
3365
- ctx.moveTo(points[0].x, points[0].y);
3366
- for (var i = 1; i < points.length; i++) {
3367
- ctx.lineTo(points[i].x, points[i].y);
3368
- }
3369
- ctx.closePath();
3370
- };
3371
-
3372
- /**
3373
- * Adds a circle to the rendering queue.
3374
- * @param {Point} point The upper left corner of the circle bounding box.
3375
- * @param {number} diameter The diameter of the circle.
3376
- * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3377
- */
3378
- CanvasRenderer__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3379
- var ctx = this.l/*_ctx*/,
3380
- radius = diameter / 2;
3381
- ctx.moveTo(point.x + radius, point.y + radius);
3382
- ctx.arc(point.x + radius, point.y + radius, radius, 0, Math.PI * 2, counterClockwise);
3383
- ctx.closePath();
3384
- };
3385
-
3386
- /**
3387
- * Called when the icon has been completely drawn.
3388
- */
3389
- CanvasRenderer__prototype.finish = function finish () {
3390
- this.l/*_ctx*/.restore();
3391
- };
3392
-
3393
- var ICON_TYPE_SVG = 1;
3394
-
3395
- var ICON_TYPE_CANVAS = 2;
3396
-
3397
- var ATTRIBUTES = {
3398
- O/*HASH*/: "data-jdenticon-hash",
3399
- v/*VALUE*/: "data-jdenticon-value"
3400
- };
3401
-
3402
- var IS_RENDERED_PROPERTY = "jdenticonRendered";
3403
-
3404
- var ICON_SELECTOR = "[" + ATTRIBUTES.O/*HASH*/ +"],[" + ATTRIBUTES.v/*VALUE*/ +"]";
3405
-
3406
- var documentQuerySelectorAll = /** @type {!Function} */ (
3407
- typeof document !== "undefined" && document.querySelectorAll.bind(document));
3408
-
3409
- function getIdenticonType(el) {
3410
- if (el) {
3411
- var tagName = el["tagName"];
3412
-
3413
- if (/^svg$/i.test(tagName)) {
3414
- return ICON_TYPE_SVG;
3415
- }
3416
-
3417
- if (/^canvas$/i.test(tagName) && "getContext" in el) {
3418
- return ICON_TYPE_CANVAS;
3419
- }
3420
- }
3421
- }
3422
-
3423
- /**
3424
- * Draws an identicon to a context.
3425
- * @param {CanvasRenderingContext2D} ctx - Canvas context on which the icon will be drawn at location (0, 0).
3426
- * @param {*} hashOrValue - A hexadecimal hash string or any value that will be hashed by Jdenticon.
3427
- * @param {number} size - Icon size in pixels.
3428
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3429
- * global configuration in its entirety. For backward compatibility a padding value in the range [0.0, 0.5) can be
3430
- * specified in place of a configuration object.
3431
- */
3432
- function drawIcon(ctx, hashOrValue, size, config) {
3433
- if (!ctx) {
3434
- throw new Error("No canvas specified.");
3435
- }
3436
-
3437
- iconGenerator(new CanvasRenderer(ctx, size),
3438
- isValidHash(hashOrValue) || computeHash(hashOrValue),
3439
- config);
3440
-
3441
- var canvas = ctx.canvas;
3442
- if (canvas) {
3443
- canvas[IS_RENDERED_PROPERTY] = true;
3444
- }
3445
- }
3446
-
3447
- /**
3448
- * Prepares a measure to be used as a measure in an SVG path, by
3449
- * rounding the measure to a single decimal. This reduces the file
3450
- * size of the generated SVG with more than 50% in some cases.
3451
- */
3452
- function svgValue(value) {
3453
- return ((value * 10 + 0.5) | 0) / 10;
3454
- }
3455
-
3456
- /**
3457
- * Represents an SVG path element.
3458
- */
3459
- function SvgPath() {
3460
- /**
3461
- * This property holds the data string (path.d) of the SVG path.
3462
- * @type {string}
3463
- */
3464
- this.A/*dataString*/ = "";
3465
- }
3466
- var SvgPath__prototype = SvgPath.prototype;
3467
-
3468
- /**
3469
- * Adds a polygon with the current fill color to the SVG path.
3470
- * @param points An array of Point objects.
3471
- */
3472
- SvgPath__prototype.g/*addPolygon*/ = function addPolygon (points) {
3473
- var dataString = "";
3474
- for (var i = 0; i < points.length; i++) {
3475
- dataString += (i ? "L" : "M") + svgValue(points[i].x) + " " + svgValue(points[i].y);
3476
- }
3477
- this.A/*dataString*/ += dataString + "Z";
3478
- };
3479
-
3480
- /**
3481
- * Adds a circle with the current fill color to the SVG path.
3482
- * @param {Point} point The upper left corner of the circle bounding box.
3483
- * @param {number} diameter The diameter of the circle.
3484
- * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3485
- */
3486
- SvgPath__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3487
- var sweepFlag = counterClockwise ? 0 : 1,
3488
- svgRadius = svgValue(diameter / 2),
3489
- svgDiameter = svgValue(diameter),
3490
- svgArc = "a" + svgRadius + "," + svgRadius + " 0 1," + sweepFlag + " ";
3491
-
3492
- this.A/*dataString*/ +=
3493
- "M" + svgValue(point.x) + " " + svgValue(point.y + diameter / 2) +
3494
- svgArc + svgDiameter + ",0" +
3495
- svgArc + (-svgDiameter) + ",0";
3496
- };
3497
-
3498
-
3499
-
3500
- /**
3501
- * Renderer producing SVG output.
3502
- * @implements {Renderer}
3503
- */
3504
- function SvgRenderer(target) {
3505
-
3506
- /**
3507
- * @type {Object.<string,SvgPath>}
3508
- * @private
3509
- */
3510
- this.C/*_pathsByColor*/ = { };
3511
-
3512
- /**
3513
- * @type {SvgElement|SvgWriter}
3514
- * @private
3515
- */
3516
- this.P/*_target*/ = target;
3517
-
3518
- /**
3519
- * @type {number}
3520
- */
3521
- this.k/*iconSize*/ = target.k/*iconSize*/;
3522
- }
3523
- var SvgRenderer__prototype = SvgRenderer.prototype;
3524
-
3525
- /**
3526
- * Fills the background with the specified color.
3527
- * @param {string} fillColor Fill color on the format #rrggbb[aa].
3528
- */
3529
- SvgRenderer__prototype.m/*setBackground*/ = function setBackground (fillColor) {
3530
- var match = /^(#......)(..)?/.exec(fillColor),
3531
- opacity = match[2] ? parseHex(match[2], 0) / 255 : 1;
3532
- this.P/*_target*/.m/*setBackground*/(match[1], opacity);
3533
- };
3534
-
3535
- /**
3536
- * Marks the beginning of a new shape of the specified color. Should be ended with a call to endShape.
3537
- * @param {string} color Fill color on format #xxxxxx.
3538
- */
3539
- SvgRenderer__prototype.M/*beginShape*/ = function beginShape (color) {
3540
- this.B/*_path*/ = this.C/*_pathsByColor*/[color] || (this.C/*_pathsByColor*/[color] = new SvgPath());
3541
- };
3542
-
3543
- /**
3544
- * Marks the end of the currently drawn shape.
3545
- */
3546
- SvgRenderer__prototype.N/*endShape*/ = function endShape () { };
3547
-
3548
- /**
3549
- * Adds a polygon with the current fill color to the SVG.
3550
- * @param points An array of Point objects.
3551
- */
3552
- SvgRenderer__prototype.g/*addPolygon*/ = function addPolygon (points) {
3553
- this.B/*_path*/.g/*addPolygon*/(points);
3554
- };
3555
-
3556
- /**
3557
- * Adds a circle with the current fill color to the SVG.
3558
- * @param {Point} point The upper left corner of the circle bounding box.
3559
- * @param {number} diameter The diameter of the circle.
3560
- * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3561
- */
3562
- SvgRenderer__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3563
- this.B/*_path*/.h/*addCircle*/(point, diameter, counterClockwise);
3564
- };
3565
-
3566
- /**
3567
- * Called when the icon has been completely drawn.
3568
- */
3569
- SvgRenderer__prototype.finish = function finish () {
3570
- var this$1$1 = this;
3571
-
3572
- var pathsByColor = this.C/*_pathsByColor*/;
3573
- for (var color in pathsByColor) {
3574
- // hasOwnProperty cannot be shadowed in pathsByColor
3575
- // eslint-disable-next-line no-prototype-builtins
3576
- if (pathsByColor.hasOwnProperty(color)) {
3577
- this$1$1.P/*_target*/.R/*appendPath*/(color, pathsByColor[color].A/*dataString*/);
3578
- }
3579
- }
3580
- };
3581
-
3582
- var SVG_CONSTANTS = {
3583
- S/*XMLNS*/: "http://www.w3.org/2000/svg",
3584
- T/*WIDTH*/: "width",
3585
- U/*HEIGHT*/: "height",
3586
- };
3587
-
3588
- /**
3589
- * Renderer producing SVG output.
3590
- */
3591
- function SvgWriter(iconSize) {
3592
- /**
3593
- * @type {number}
3594
- */
3595
- this.k/*iconSize*/ = iconSize;
3596
-
3597
- /**
3598
- * @type {string}
3599
- * @private
3600
- */
3601
- this.D/*_s*/ =
3602
- '<svg xmlns="' + SVG_CONSTANTS.S/*XMLNS*/ + '" width="' +
3603
- iconSize + '" height="' + iconSize + '" viewBox="0 0 ' +
3604
- iconSize + ' ' + iconSize + '">';
3605
- }
3606
- var SvgWriter__prototype = SvgWriter.prototype;
3607
-
3608
- /**
3609
- * Fills the background with the specified color.
3610
- * @param {string} fillColor Fill color on the format #rrggbb.
3611
- * @param {number} opacity Opacity in the range [0.0, 1.0].
3612
- */
3613
- SvgWriter__prototype.m/*setBackground*/ = function setBackground (fillColor, opacity) {
3614
- if (opacity) {
3615
- this.D/*_s*/ += '<rect width="100%" height="100%" fill="' +
3616
- fillColor + '" opacity="' + opacity.toFixed(2) + '"/>';
3617
- }
3618
- };
3619
-
3620
- /**
3621
- * Writes a path to the SVG string.
3622
- * @param {string} color Fill color on format #rrggbb.
3623
- * @param {string} dataString The SVG path data string.
3624
- */
3625
- SvgWriter__prototype.R/*appendPath*/ = function appendPath (color, dataString) {
3626
- this.D/*_s*/ += '<path fill="' + color + '" d="' + dataString + '"/>';
3627
- };
3628
-
3629
- /**
3630
- * Gets the rendered image as an SVG string.
3631
- */
3632
- SvgWriter__prototype.toString = function toString () {
3633
- return this.D/*_s*/ + "</svg>";
3634
- };
3635
-
3636
- /**
3637
- * Draws an identicon as an SVG string.
3638
- * @param {*} hashOrValue - A hexadecimal hash string or any value that will be hashed by Jdenticon.
3639
- * @param {number} size - Icon size in pixels.
3640
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3641
- * global configuration in its entirety. For backward compatibility a padding value in the range [0.0, 0.5) can be
3642
- * specified in place of a configuration object.
3643
- * @returns {string} SVG string
3644
- */
3645
- function toSvg(hashOrValue, size, config) {
3646
- var writer = new SvgWriter(size);
3647
- iconGenerator(new SvgRenderer(writer),
3648
- isValidHash(hashOrValue) || computeHash(hashOrValue),
3649
- config);
3650
- return writer.toString();
3651
- }
3652
-
3653
- /**
3654
- * Creates a new element and adds it to the specified parent.
3655
- * @param {Element} parentNode
3656
- * @param {string} name
3657
- * @param {...(string|number)} keyValuePairs
3658
- */
3659
- function SvgElement_append(parentNode, name) {
3660
- var keyValuePairs = [], len = arguments.length - 2;
3661
- while ( len-- > 0 ) keyValuePairs[ len ] = arguments[ len + 2 ];
3662
-
3663
- var el = document.createElementNS(SVG_CONSTANTS.S/*XMLNS*/, name);
3664
-
3665
- for (var i = 0; i + 1 < keyValuePairs.length; i += 2) {
3666
- el.setAttribute(
3667
- /** @type {string} */(keyValuePairs[i]),
3668
- /** @type {string} */(keyValuePairs[i + 1])
3669
- );
3670
- }
3671
-
3672
- parentNode.appendChild(el);
3673
- }
3674
-
3675
-
3676
- /**
3677
- * Renderer producing SVG output.
3678
- */
3679
- function SvgElement(element) {
3680
- // Don't use the clientWidth and clientHeight properties on SVG elements
3681
- // since Firefox won't serve a proper value of these properties on SVG
3682
- // elements (https://bugzilla.mozilla.org/show_bug.cgi?id=874811)
3683
- // Instead use 100px as a hardcoded size (the svg viewBox will rescale
3684
- // the icon to the correct dimensions)
3685
- var iconSize = this.k/*iconSize*/ = Math.min(
3686
- (Number(element.getAttribute(SVG_CONSTANTS.T/*WIDTH*/)) || 100),
3687
- (Number(element.getAttribute(SVG_CONSTANTS.U/*HEIGHT*/)) || 100)
3688
- );
3689
-
3690
- /**
3691
- * @type {Element}
3692
- * @private
3693
- */
3694
- this.V/*_el*/ = element;
3695
-
3696
- // Clear current SVG child elements
3697
- while (element.firstChild) {
3698
- element.removeChild(element.firstChild);
3699
- }
3700
-
3701
- // Set viewBox attribute to ensure the svg scales nicely.
3702
- element.setAttribute("viewBox", "0 0 " + iconSize + " " + iconSize);
3703
- element.setAttribute("preserveAspectRatio", "xMidYMid meet");
3704
- }
3705
- var SvgElement__prototype = SvgElement.prototype;
3706
-
3707
- /**
3708
- * Fills the background with the specified color.
3709
- * @param {string} fillColor Fill color on the format #rrggbb.
3710
- * @param {number} opacity Opacity in the range [0.0, 1.0].
3711
- */
3712
- SvgElement__prototype.m/*setBackground*/ = function setBackground (fillColor, opacity) {
3713
- if (opacity) {
3714
- SvgElement_append(this.V/*_el*/, "rect",
3715
- SVG_CONSTANTS.T/*WIDTH*/, "100%",
3716
- SVG_CONSTANTS.U/*HEIGHT*/, "100%",
3717
- "fill", fillColor,
3718
- "opacity", opacity);
3719
- }
3720
- };
3721
-
3722
- /**
3723
- * Appends a path to the SVG element.
3724
- * @param {string} color Fill color on format #xxxxxx.
3725
- * @param {string} dataString The SVG path data string.
3726
- */
3727
- SvgElement__prototype.R/*appendPath*/ = function appendPath (color, dataString) {
3728
- SvgElement_append(this.V/*_el*/, "path",
3729
- "fill", color,
3730
- "d", dataString);
3731
- };
3732
-
3733
- /**
3734
- * Updates all canvas elements with the `data-jdenticon-hash` or `data-jdenticon-value` attribute.
3735
- */
3736
- function updateAll() {
3737
- if (documentQuerySelectorAll) {
3738
- update(ICON_SELECTOR);
3739
- }
3740
- }
3741
-
3742
- /**
3743
- * Updates the identicon in the specified `<canvas>` or `<svg>` elements.
3744
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3745
- * `<svg>` or `<canvas>`, or a CSS selector to such an element.
3746
- * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3747
- * `data-jdenticon-value` attribute will be evaluated.
3748
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3749
- * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3750
- * specified in place of a configuration object.
3751
- */
3752
- function update(el, hashOrValue, config) {
3753
- renderDomElement(el, hashOrValue, config, function (el, iconType) {
3754
- if (iconType) {
3755
- return iconType == ICON_TYPE_SVG ?
3756
- new SvgRenderer(new SvgElement(el)) :
3757
- new CanvasRenderer(/** @type {HTMLCanvasElement} */(el).getContext("2d"));
3758
- }
3759
- });
3760
- }
3761
-
3762
- /**
3763
- * Updates the identicon in the specified `<canvas>` elements.
3764
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3765
- * `<canvas>`, or a CSS selector to such an element.
3766
- * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3767
- * `data-jdenticon-value` attribute will be evaluated.
3768
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3769
- * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3770
- * specified in place of a configuration object.
3771
- */
3772
- function updateCanvas(el, hashOrValue, config) {
3773
- renderDomElement(el, hashOrValue, config, function (el, iconType) {
3774
- if (iconType == ICON_TYPE_CANVAS) {
3775
- return new CanvasRenderer(/** @type {HTMLCanvasElement} */(el).getContext("2d"));
3776
- }
3777
- });
3778
- }
3779
-
3780
- /**
3781
- * Updates the identicon in the specified `<svg>` elements.
3782
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3783
- * `<svg>`, or a CSS selector to such an element.
3784
- * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3785
- * `data-jdenticon-value` attribute will be evaluated.
3786
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3787
- * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3788
- * specified in place of a configuration object.
3789
- */
3790
- function updateSvg(el, hashOrValue, config) {
3791
- renderDomElement(el, hashOrValue, config, function (el, iconType) {
3792
- if (iconType == ICON_TYPE_SVG) {
3793
- return new SvgRenderer(new SvgElement(el));
3794
- }
3795
- });
3796
- }
3797
-
3798
- /**
3799
- * Updates the identicon in the specified canvas or svg elements.
3800
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3801
- * `<svg>` or `<canvas>`, or a CSS selector to such an element.
3802
- * @param {*} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3803
- * `data-jdenticon-value` attribute will be evaluated.
3804
- * @param {Object|number|undefined} config
3805
- * @param {function(Element,number):Renderer} rendererFactory - Factory function for creating an icon renderer.
3806
- */
3807
- function renderDomElement(el, hashOrValue, config, rendererFactory) {
3808
- if (typeof el === "string") {
3809
- if (documentQuerySelectorAll) {
3810
- var elements = documentQuerySelectorAll(el);
3811
- for (var i = 0; i < elements.length; i++) {
3812
- renderDomElement(elements[i], hashOrValue, config, rendererFactory);
3813
- }
3814
- }
3815
- return;
3816
- }
3817
-
3818
- // Hash selection. The result from getValidHash or computeHash is
3819
- // accepted as a valid hash.
3820
- var hash =
3821
- // 1. Explicit valid hash
3822
- isValidHash(hashOrValue) ||
3823
-
3824
- // 2. Explicit value (`!= null` catches both null and undefined)
3825
- hashOrValue != null && computeHash(hashOrValue) ||
3826
-
3827
- // 3. `data-jdenticon-hash` attribute
3828
- isValidHash(el.getAttribute(ATTRIBUTES.O/*HASH*/)) ||
3829
-
3830
- // 4. `data-jdenticon-value` attribute.
3831
- // We want to treat an empty attribute as an empty value.
3832
- // Some browsers return empty string even if the attribute
3833
- // is not specified, so use hasAttribute to determine if
3834
- // the attribute is specified.
3835
- el.hasAttribute(ATTRIBUTES.v/*VALUE*/) && computeHash(el.getAttribute(ATTRIBUTES.v/*VALUE*/));
3836
-
3837
- if (!hash) {
3838
- // No hash specified. Don't render an icon.
3839
- return;
3840
- }
3841
-
3842
- var renderer = rendererFactory(el, getIdenticonType(el));
3843
- if (renderer) {
3844
- // Draw icon
3845
- iconGenerator(renderer, hash, config);
3846
- el[IS_RENDERED_PROPERTY] = true;
3847
- }
2540
+ var jdenticonModule;
2541
+ var hasRequiredJdenticonModule;
2542
+
2543
+ function requireJdenticonModule () {
2544
+ if (hasRequiredJdenticonModule) return jdenticonModule;
2545
+ hasRequiredJdenticonModule = 1;
2546
+
2547
+ /**
2548
+ * Parses a substring of the hash as a number.
2549
+ * @param {number} startPosition
2550
+ * @param {number=} octets
2551
+ */
2552
+ function parseHex(hash, startPosition, octets) {
2553
+ return parseInt(hash.substr(startPosition, octets), 16);
2554
+ }
2555
+
2556
+ function decToHex(v) {
2557
+ v |= 0; // Ensure integer value
2558
+ return v < 0 ? "00" :
2559
+ v < 16 ? "0" + v.toString(16) :
2560
+ v < 256 ? v.toString(16) :
2561
+ "ff";
2562
+ }
2563
+
2564
+ function hueToRgb(m1, m2, h) {
2565
+ h = h < 0 ? h + 6 : h > 6 ? h - 6 : h;
2566
+ return decToHex(255 * (
2567
+ h < 1 ? m1 + (m2 - m1) * h :
2568
+ h < 3 ? m2 :
2569
+ h < 4 ? m1 + (m2 - m1) * (4 - h) :
2570
+ m1));
2571
+ }
2572
+
2573
+ /**
2574
+ * @param {string} color Color value to parse. Currently hexadecimal strings on the format #rgb[a] and #rrggbb[aa] are supported.
2575
+ * @returns {string}
2576
+ */
2577
+ function parseColor(color) {
2578
+ if (/^#[0-9a-f]{3,8}$/i.test(color)) {
2579
+ var result;
2580
+ var colorLength = color.length;
2581
+
2582
+ if (colorLength < 6) {
2583
+ var r = color[1],
2584
+ g = color[2],
2585
+ b = color[3],
2586
+ a = color[4] || "";
2587
+ result = "#" + r + r + g + g + b + b + a + a;
2588
+ }
2589
+ if (colorLength == 7 || colorLength > 8) {
2590
+ result = color;
2591
+ }
2592
+
2593
+ return result;
2594
+ }
2595
+ }
2596
+
2597
+ /**
2598
+ * Converts a hexadecimal color to a CSS3 compatible color.
2599
+ * @param {string} hexColor Color on the format "#RRGGBB" or "#RRGGBBAA"
2600
+ * @returns {string}
2601
+ */
2602
+ function toCss3Color(hexColor) {
2603
+ var a = parseHex(hexColor, 7, 2);
2604
+ var result;
2605
+
2606
+ if (isNaN(a)) {
2607
+ result = hexColor;
2608
+ } else {
2609
+ var r = parseHex(hexColor, 1, 2),
2610
+ g = parseHex(hexColor, 3, 2),
2611
+ b = parseHex(hexColor, 5, 2);
2612
+ result = "rgba(" + r + "," + g + "," + b + "," + (a / 255).toFixed(2) + ")";
2613
+ }
2614
+
2615
+ return result;
2616
+ }
2617
+
2618
+ /**
2619
+ * Converts an HSL color to a hexadecimal RGB color.
2620
+ * @param {number} hue Hue in range [0, 1]
2621
+ * @param {number} saturation Saturation in range [0, 1]
2622
+ * @param {number} lightness Lightness in range [0, 1]
2623
+ * @returns {string}
2624
+ */
2625
+ function hsl(hue, saturation, lightness) {
2626
+ // Based on http://www.w3.org/TR/2011/REC-css3-color-20110607/#hsl-color
2627
+ var result;
2628
+
2629
+ if (saturation == 0) {
2630
+ var partialHex = decToHex(lightness * 255);
2631
+ result = partialHex + partialHex + partialHex;
2632
+ }
2633
+ else {
2634
+ var m2 = lightness <= 0.5 ? lightness * (saturation + 1) : lightness + saturation - lightness * saturation,
2635
+ m1 = lightness * 2 - m2;
2636
+ result =
2637
+ hueToRgb(m1, m2, hue * 6 + 2) +
2638
+ hueToRgb(m1, m2, hue * 6) +
2639
+ hueToRgb(m1, m2, hue * 6 - 2);
2640
+ }
2641
+
2642
+ return "#" + result;
2643
+ }
2644
+
2645
+ /**
2646
+ * Converts an HSL color to a hexadecimal RGB color. This function will correct the lightness for the "dark" hues
2647
+ * @param {number} hue Hue in range [0, 1]
2648
+ * @param {number} saturation Saturation in range [0, 1]
2649
+ * @param {number} lightness Lightness in range [0, 1]
2650
+ * @returns {string}
2651
+ */
2652
+ function correctedHsl(hue, saturation, lightness) {
2653
+ // The corrector specifies the perceived middle lightness for each hue
2654
+ var correctors = [ 0.55, 0.5, 0.5, 0.46, 0.6, 0.55, 0.55 ],
2655
+ corrector = correctors[(hue * 6 + 0.5) | 0];
2656
+
2657
+ // Adjust the input lightness relative to the corrector
2658
+ lightness = lightness < 0.5 ? lightness * corrector * 2 : corrector + (lightness - 0.5) * (1 - corrector) * 2;
2659
+
2660
+ return hsl(hue, saturation, lightness);
2661
+ }
2662
+
2663
+ // In the future we can replace `GLOBAL` with `globalThis`, but for now use the old school global detection for
2664
+ // backward compatibility.
2665
+
2666
+ var GLOBAL =
2667
+ typeof window !== "undefined" ? window :
2668
+ typeof self !== "undefined" ? self :
2669
+ typeof commonjsGlobal !== "undefined" ? commonjsGlobal :
2670
+ {};
2671
+
2672
+ /**
2673
+ * @typedef {Object} ParsedConfiguration
2674
+ * @property {number} colorSaturation
2675
+ * @property {number} grayscaleSaturation
2676
+ * @property {string} backColor
2677
+ * @property {number} iconPadding
2678
+ * @property {function(number):number} hue
2679
+ * @property {function(number):number} colorLightness
2680
+ * @property {function(number):number} grayscaleLightness
2681
+ */
2682
+
2683
+ var CONFIG_PROPERTIES = {
2684
+ W/*GLOBAL*/: "jdenticon_config",
2685
+ n/*MODULE*/: "config",
2686
+ };
2687
+
2688
+ var rootConfigurationHolder = {};
2689
+
2690
+ /**
2691
+ * Defines the deprecated `config` property on the root Jdenticon object without printing a warning in the console
2692
+ * when it is being used.
2693
+ * @param {!Object} rootObject
2694
+ */
2695
+ function defineConfigProperty(rootObject) {
2696
+ rootConfigurationHolder = rootObject;
2697
+ }
2698
+
2699
+ /**
2700
+ * Sets a new icon style configuration. The new configuration is not merged with the previous one. *
2701
+ * @param {Object} newConfiguration - New configuration object.
2702
+ */
2703
+ function configure(newConfiguration) {
2704
+ if (arguments.length) {
2705
+ rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/] = newConfiguration;
2706
+ }
2707
+ return rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/];
2708
+ }
2709
+
2710
+ /**
2711
+ * Gets the normalized current Jdenticon color configuration. Missing fields have default values.
2712
+ * @param {Object|number|undefined} paddingOrLocalConfig - Configuration passed to the called API method. A
2713
+ * local configuration overrides the global configuration in it entirety. This parameter can for backward
2714
+ * compatibility also contain a padding value. A padding value only overrides the global padding, not the
2715
+ * entire global configuration.
2716
+ * @param {number} defaultPadding - Padding used if no padding is specified in neither the configuration nor
2717
+ * explicitly to the API method.
2718
+ * @returns {ParsedConfiguration}
2719
+ */
2720
+ function getConfiguration(paddingOrLocalConfig, defaultPadding) {
2721
+ var configObject =
2722
+ typeof paddingOrLocalConfig == "object" && paddingOrLocalConfig ||
2723
+ rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/] ||
2724
+ GLOBAL[CONFIG_PROPERTIES.W/*GLOBAL*/] ||
2725
+ { },
2726
+
2727
+ lightnessConfig = configObject["lightness"] || { },
2728
+
2729
+ // In versions < 2.1.0 there was no grayscale saturation -
2730
+ // saturation was the color saturation.
2731
+ saturation = configObject["saturation"] || { },
2732
+ colorSaturation = "color" in saturation ? saturation["color"] : saturation,
2733
+ grayscaleSaturation = saturation["grayscale"],
2734
+
2735
+ backColor = configObject["backColor"],
2736
+ padding = configObject["padding"];
2737
+
2738
+ /**
2739
+ * Creates a lightness range.
2740
+ */
2741
+ function lightness(configName, defaultRange) {
2742
+ var range = lightnessConfig[configName];
2743
+
2744
+ // Check if the lightness range is an array-like object. This way we ensure the
2745
+ // array contain two values at the same time.
2746
+ if (!(range && range.length > 1)) {
2747
+ range = defaultRange;
2748
+ }
2749
+
2750
+ /**
2751
+ * Gets a lightness relative the specified value in the specified lightness range.
2752
+ */
2753
+ return function (value) {
2754
+ value = range[0] + value * (range[1] - range[0]);
2755
+ return value < 0 ? 0 : value > 1 ? 1 : value;
2756
+ };
2757
+ }
2758
+
2759
+ /**
2760
+ * Gets a hue allowed by the configured hue restriction,
2761
+ * provided the originally computed hue.
2762
+ */
2763
+ function hueFunction(originalHue) {
2764
+ var hueConfig = configObject["hues"];
2765
+ var hue;
2766
+
2767
+ // Check if 'hues' is an array-like object. This way we also ensure that
2768
+ // the array is not empty, which would mean no hue restriction.
2769
+ if (hueConfig && hueConfig.length > 0) {
2770
+ // originalHue is in the range [0, 1]
2771
+ // Multiply with 0.999 to change the range to [0, 1) and then truncate the index.
2772
+ hue = hueConfig[0 | (0.999 * originalHue * hueConfig.length)];
2773
+ }
2774
+
2775
+ return typeof hue == "number" ?
2776
+
2777
+ // A hue was specified. We need to convert the hue from
2778
+ // degrees on any turn - e.g. 746° is a perfectly valid hue -
2779
+ // to turns in the range [0, 1).
2780
+ ((((hue / 360) % 1) + 1) % 1) :
2781
+
2782
+ // No hue configured => use original hue
2783
+ originalHue;
2784
+ }
2785
+
2786
+ return {
2787
+ X/*hue*/: hueFunction,
2788
+ o/*colorSaturation*/: typeof colorSaturation == "number" ? colorSaturation : 0.5,
2789
+ F/*grayscaleSaturation*/: typeof grayscaleSaturation == "number" ? grayscaleSaturation : 0,
2790
+ p/*colorLightness*/: lightness("color", [0.4, 0.8]),
2791
+ G/*grayscaleLightness*/: lightness("grayscale", [0.3, 0.9]),
2792
+ H/*backColor*/: parseColor(backColor),
2793
+ Y/*iconPadding*/:
2794
+ typeof paddingOrLocalConfig == "number" ? paddingOrLocalConfig :
2795
+ typeof padding == "number" ? padding :
2796
+ defaultPadding
2797
+ }
2798
+ }
2799
+
2800
+ /**
2801
+ * Represents a point.
2802
+ */
2803
+ function Point(x, y) {
2804
+ this.x = x;
2805
+ this.y = y;
2806
+ }
2807
+
2808
+ /**
2809
+ * Translates and rotates a point before being passed on to the canvas context. This was previously done by the canvas context itself,
2810
+ * but this caused a rendering issue in Chrome on sizes > 256 where the rotation transformation of inverted paths was not done properly.
2811
+ */
2812
+ function Transform(x, y, size, rotation) {
2813
+ this.q/*_x*/ = x;
2814
+ this.t/*_y*/ = y;
2815
+ this.I/*_size*/ = size;
2816
+ this.Z/*_rotation*/ = rotation;
2817
+ }
2818
+
2819
+ /**
2820
+ * Transforms the specified point based on the translation and rotation specification for this Transform.
2821
+ * @param {number} x x-coordinate
2822
+ * @param {number} y y-coordinate
2823
+ * @param {number=} w The width of the transformed rectangle. If greater than 0, this will ensure the returned point is of the upper left corner of the transformed rectangle.
2824
+ * @param {number=} h The height of the transformed rectangle. If greater than 0, this will ensure the returned point is of the upper left corner of the transformed rectangle.
2825
+ */
2826
+ Transform.prototype.J/*transformIconPoint*/ = function transformIconPoint (x, y, w, h) {
2827
+ var right = this.q/*_x*/ + this.I/*_size*/,
2828
+ bottom = this.t/*_y*/ + this.I/*_size*/,
2829
+ rotation = this.Z/*_rotation*/;
2830
+ return rotation === 1 ? new Point(right - y - (h || 0), this.t/*_y*/ + x) :
2831
+ rotation === 2 ? new Point(right - x - (w || 0), bottom - y - (h || 0)) :
2832
+ rotation === 3 ? new Point(this.q/*_x*/ + y, bottom - x - (w || 0)) :
2833
+ new Point(this.q/*_x*/ + x, this.t/*_y*/ + y);
2834
+ };
2835
+
2836
+ var NO_TRANSFORM = new Transform(0, 0, 0, 0);
2837
+
2838
+
2839
+
2840
+ /**
2841
+ * Provides helper functions for rendering common basic shapes.
2842
+ */
2843
+ function Graphics(renderer) {
2844
+ /**
2845
+ * @type {Renderer}
2846
+ * @private
2847
+ */
2848
+ this.K/*_renderer*/ = renderer;
2849
+
2850
+ /**
2851
+ * @type {Transform}
2852
+ */
2853
+ this.u/*currentTransform*/ = NO_TRANSFORM;
2854
+ }
2855
+ var Graphics__prototype = Graphics.prototype;
2856
+
2857
+ /**
2858
+ * Adds a polygon to the underlying renderer.
2859
+ * @param {Array<number>} points The points of the polygon clockwise on the format [ x0, y0, x1, y1, ..., xn, yn ]
2860
+ * @param {boolean=} invert Specifies if the polygon will be inverted.
2861
+ */
2862
+ Graphics__prototype.g/*addPolygon*/ = function addPolygon (points, invert) {
2863
+ var this$1$1 = this;
2864
+
2865
+ var di = invert ? -2 : 2,
2866
+ transformedPoints = [];
2867
+
2868
+ for (var i = invert ? points.length - 2 : 0; i < points.length && i >= 0; i += di) {
2869
+ transformedPoints.push(this$1$1.u/*currentTransform*/.J/*transformIconPoint*/(points[i], points[i + 1]));
2870
+ }
2871
+
2872
+ this.K/*_renderer*/.g/*addPolygon*/(transformedPoints);
2873
+ };
2874
+
2875
+ /**
2876
+ * Adds a polygon to the underlying renderer.
2877
+ * Source: http://stackoverflow.com/a/2173084
2878
+ * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the entire ellipse.
2879
+ * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the entire ellipse.
2880
+ * @param {number} size The size of the ellipse.
2881
+ * @param {boolean=} invert Specifies if the ellipse will be inverted.
2882
+ */
2883
+ Graphics__prototype.h/*addCircle*/ = function addCircle (x, y, size, invert) {
2884
+ var p = this.u/*currentTransform*/.J/*transformIconPoint*/(x, y, size, size);
2885
+ this.K/*_renderer*/.h/*addCircle*/(p, size, invert);
2886
+ };
2887
+
2888
+ /**
2889
+ * Adds a rectangle to the underlying renderer.
2890
+ * @param {number} x The x-coordinate of the upper left corner of the rectangle.
2891
+ * @param {number} y The y-coordinate of the upper left corner of the rectangle.
2892
+ * @param {number} w The width of the rectangle.
2893
+ * @param {number} h The height of the rectangle.
2894
+ * @param {boolean=} invert Specifies if the rectangle will be inverted.
2895
+ */
2896
+ Graphics__prototype.i/*addRectangle*/ = function addRectangle (x, y, w, h, invert) {
2897
+ this.g/*addPolygon*/([
2898
+ x, y,
2899
+ x + w, y,
2900
+ x + w, y + h,
2901
+ x, y + h
2902
+ ], invert);
2903
+ };
2904
+
2905
+ /**
2906
+ * Adds a right triangle to the underlying renderer.
2907
+ * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the triangle.
2908
+ * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the triangle.
2909
+ * @param {number} w The width of the triangle.
2910
+ * @param {number} h The height of the triangle.
2911
+ * @param {number} r The rotation of the triangle (clockwise). 0 = right corner of the triangle in the lower left corner of the bounding rectangle.
2912
+ * @param {boolean=} invert Specifies if the triangle will be inverted.
2913
+ */
2914
+ Graphics__prototype.j/*addTriangle*/ = function addTriangle (x, y, w, h, r, invert) {
2915
+ var points = [
2916
+ x + w, y,
2917
+ x + w, y + h,
2918
+ x, y + h,
2919
+ x, y
2920
+ ];
2921
+ points.splice(((r || 0) % 4) * 2, 2);
2922
+ this.g/*addPolygon*/(points, invert);
2923
+ };
2924
+
2925
+ /**
2926
+ * Adds a rhombus to the underlying renderer.
2927
+ * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the rhombus.
2928
+ * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the rhombus.
2929
+ * @param {number} w The width of the rhombus.
2930
+ * @param {number} h The height of the rhombus.
2931
+ * @param {boolean=} invert Specifies if the rhombus will be inverted.
2932
+ */
2933
+ Graphics__prototype.L/*addRhombus*/ = function addRhombus (x, y, w, h, invert) {
2934
+ this.g/*addPolygon*/([
2935
+ x + w / 2, y,
2936
+ x + w, y + h / 2,
2937
+ x + w / 2, y + h,
2938
+ x, y + h / 2
2939
+ ], invert);
2940
+ };
2941
+
2942
+ /**
2943
+ * @param {number} index
2944
+ * @param {Graphics} g
2945
+ * @param {number} cell
2946
+ * @param {number} positionIndex
2947
+ */
2948
+ function centerShape(index, g, cell, positionIndex) {
2949
+ index = index % 14;
2950
+
2951
+ var k, m, w, h, inner, outer;
2952
+
2953
+ !index ? (
2954
+ k = cell * 0.42,
2955
+ g.g/*addPolygon*/([
2956
+ 0, 0,
2957
+ cell, 0,
2958
+ cell, cell - k * 2,
2959
+ cell - k, cell,
2960
+ 0, cell
2961
+ ])) :
2962
+
2963
+ index == 1 ? (
2964
+ w = 0 | (cell * 0.5),
2965
+ h = 0 | (cell * 0.8),
2966
+
2967
+ g.j/*addTriangle*/(cell - w, 0, w, h, 2)) :
2968
+
2969
+ index == 2 ? (
2970
+ w = 0 | (cell / 3),
2971
+ g.i/*addRectangle*/(w, w, cell - w, cell - w)) :
2972
+
2973
+ index == 3 ? (
2974
+ inner = cell * 0.1,
2975
+ // Use fixed outer border widths in small icons to ensure the border is drawn
2976
+ outer =
2977
+ cell < 6 ? 1 :
2978
+ cell < 8 ? 2 :
2979
+ (0 | (cell * 0.25)),
2980
+
2981
+ inner =
2982
+ inner > 1 ? (0 | inner) : // large icon => truncate decimals
2983
+ inner > 0.5 ? 1 : // medium size icon => fixed width
2984
+ inner, // small icon => anti-aliased border
2985
+
2986
+ g.i/*addRectangle*/(outer, outer, cell - inner - outer, cell - inner - outer)) :
2987
+
2988
+ index == 4 ? (
2989
+ m = 0 | (cell * 0.15),
2990
+ w = 0 | (cell * 0.5),
2991
+ g.h/*addCircle*/(cell - w - m, cell - w - m, w)) :
2992
+
2993
+ index == 5 ? (
2994
+ inner = cell * 0.1,
2995
+ outer = inner * 4,
2996
+
2997
+ // Align edge to nearest pixel in large icons
2998
+ outer > 3 && (outer = 0 | outer),
2999
+
3000
+ g.i/*addRectangle*/(0, 0, cell, cell),
3001
+ g.g/*addPolygon*/([
3002
+ outer, outer,
3003
+ cell - inner, outer,
3004
+ outer + (cell - outer - inner) / 2, cell - inner
3005
+ ], true)) :
3006
+
3007
+ index == 6 ?
3008
+ g.g/*addPolygon*/([
3009
+ 0, 0,
3010
+ cell, 0,
3011
+ cell, cell * 0.7,
3012
+ cell * 0.4, cell * 0.4,
3013
+ cell * 0.7, cell,
3014
+ 0, cell
3015
+ ]) :
3016
+
3017
+ index == 7 ?
3018
+ g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 3) :
3019
+
3020
+ index == 8 ? (
3021
+ g.i/*addRectangle*/(0, 0, cell, cell / 2),
3022
+ g.i/*addRectangle*/(0, cell / 2, cell / 2, cell / 2),
3023
+ g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 1)) :
3024
+
3025
+ index == 9 ? (
3026
+ inner = cell * 0.14,
3027
+ // Use fixed outer border widths in small icons to ensure the border is drawn
3028
+ outer =
3029
+ cell < 4 ? 1 :
3030
+ cell < 6 ? 2 :
3031
+ (0 | (cell * 0.35)),
3032
+
3033
+ inner =
3034
+ cell < 8 ? inner : // small icon => anti-aliased border
3035
+ (0 | inner), // large icon => truncate decimals
3036
+
3037
+ g.i/*addRectangle*/(0, 0, cell, cell),
3038
+ g.i/*addRectangle*/(outer, outer, cell - outer - inner, cell - outer - inner, true)) :
3039
+
3040
+ index == 10 ? (
3041
+ inner = cell * 0.12,
3042
+ outer = inner * 3,
3043
+
3044
+ g.i/*addRectangle*/(0, 0, cell, cell),
3045
+ g.h/*addCircle*/(outer, outer, cell - inner - outer, true)) :
3046
+
3047
+ index == 11 ?
3048
+ g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 3) :
3049
+
3050
+ index == 12 ? (
3051
+ m = cell * 0.25,
3052
+ g.i/*addRectangle*/(0, 0, cell, cell),
3053
+ g.L/*addRhombus*/(m, m, cell - m, cell - m, true)) :
3054
+
3055
+ // 13
3056
+ (
3057
+ !positionIndex && (
3058
+ m = cell * 0.4, w = cell * 1.2,
3059
+ g.h/*addCircle*/(m, m, w)
3060
+ )
3061
+ );
3062
+ }
3063
+
3064
+ /**
3065
+ * @param {number} index
3066
+ * @param {Graphics} g
3067
+ * @param {number} cell
3068
+ */
3069
+ function outerShape(index, g, cell) {
3070
+ index = index % 4;
3071
+
3072
+ var m;
3073
+
3074
+ !index ?
3075
+ g.j/*addTriangle*/(0, 0, cell, cell, 0) :
3076
+
3077
+ index == 1 ?
3078
+ g.j/*addTriangle*/(0, cell / 2, cell, cell / 2, 0) :
3079
+
3080
+ index == 2 ?
3081
+ g.L/*addRhombus*/(0, 0, cell, cell) :
3082
+
3083
+ // 3
3084
+ (
3085
+ m = cell / 6,
3086
+ g.h/*addCircle*/(m, m, cell - 2 * m)
3087
+ );
3088
+ }
3089
+
3090
+ /**
3091
+ * Gets a set of identicon color candidates for a specified hue and config.
3092
+ * @param {number} hue
3093
+ * @param {ParsedConfiguration} config
3094
+ */
3095
+ function colorTheme(hue, config) {
3096
+ hue = config.X/*hue*/(hue);
3097
+ return [
3098
+ // Dark gray
3099
+ correctedHsl(hue, config.F/*grayscaleSaturation*/, config.G/*grayscaleLightness*/(0)),
3100
+ // Mid color
3101
+ correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(0.5)),
3102
+ // Light gray
3103
+ correctedHsl(hue, config.F/*grayscaleSaturation*/, config.G/*grayscaleLightness*/(1)),
3104
+ // Light color
3105
+ correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(1)),
3106
+ // Dark color
3107
+ correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(0))
3108
+ ];
3109
+ }
3110
+
3111
+ /**
3112
+ * Draws an identicon to a specified renderer.
3113
+ * @param {Renderer} renderer
3114
+ * @param {string} hash
3115
+ * @param {Object|number=} config
3116
+ */
3117
+ function iconGenerator(renderer, hash, config) {
3118
+ var parsedConfig = getConfiguration(config, 0.08);
3119
+
3120
+ // Set background color
3121
+ if (parsedConfig.H/*backColor*/) {
3122
+ renderer.m/*setBackground*/(parsedConfig.H/*backColor*/);
3123
+ }
3124
+
3125
+ // Calculate padding and round to nearest integer
3126
+ var size = renderer.k/*iconSize*/;
3127
+ var padding = (0.5 + size * parsedConfig.Y/*iconPadding*/) | 0;
3128
+ size -= padding * 2;
3129
+
3130
+ var graphics = new Graphics(renderer);
3131
+
3132
+ // Calculate cell size and ensure it is an integer
3133
+ var cell = 0 | (size / 4);
3134
+
3135
+ // Since the cell size is integer based, the actual icon will be slightly smaller than specified => center icon
3136
+ var x = 0 | (padding + size / 2 - cell * 2);
3137
+ var y = 0 | (padding + size / 2 - cell * 2);
3138
+
3139
+ function renderShape(colorIndex, shapes, index, rotationIndex, positions) {
3140
+ var shapeIndex = parseHex(hash, index, 1);
3141
+ var r = rotationIndex ? parseHex(hash, rotationIndex, 1) : 0;
3142
+
3143
+ renderer.M/*beginShape*/(availableColors[selectedColorIndexes[colorIndex]]);
3144
+
3145
+ for (var i = 0; i < positions.length; i++) {
3146
+ graphics.u/*currentTransform*/ = new Transform(x + positions[i][0] * cell, y + positions[i][1] * cell, cell, r++ % 4);
3147
+ shapes(shapeIndex, graphics, cell, i);
3148
+ }
3149
+
3150
+ renderer.N/*endShape*/();
3151
+ }
3152
+
3153
+ // AVAILABLE COLORS
3154
+ var hue = parseHex(hash, -7) / 0xfffffff,
3155
+
3156
+ // Available colors for this icon
3157
+ availableColors = colorTheme(hue, parsedConfig),
3158
+
3159
+ // The index of the selected colors
3160
+ selectedColorIndexes = [];
3161
+
3162
+ var index;
3163
+
3164
+ function isDuplicate(values) {
3165
+ if (values.indexOf(index) >= 0) {
3166
+ for (var i = 0; i < values.length; i++) {
3167
+ if (selectedColorIndexes.indexOf(values[i]) >= 0) {
3168
+ return true;
3169
+ }
3170
+ }
3171
+ }
3172
+ }
3173
+
3174
+ for (var i = 0; i < 3; i++) {
3175
+ index = parseHex(hash, 8 + i, 1) % availableColors.length;
3176
+ if (isDuplicate([0, 4]) || // Disallow dark gray and dark color combo
3177
+ isDuplicate([2, 3])) { // Disallow light gray and light color combo
3178
+ index = 1;
3179
+ }
3180
+ selectedColorIndexes.push(index);
3181
+ }
3182
+
3183
+ // ACTUAL RENDERING
3184
+ // Sides
3185
+ renderShape(0, outerShape, 2, 3, [[1, 0], [2, 0], [2, 3], [1, 3], [0, 1], [3, 1], [3, 2], [0, 2]]);
3186
+ // Corners
3187
+ renderShape(1, outerShape, 4, 5, [[0, 0], [3, 0], [3, 3], [0, 3]]);
3188
+ // Center
3189
+ renderShape(2, centerShape, 1, null, [[1, 1], [2, 1], [2, 2], [1, 2]]);
3190
+
3191
+ renderer.finish();
3192
+ }
3193
+
3194
+ /**
3195
+ * Computes a SHA1 hash for any value and returns it as a hexadecimal string.
3196
+ *
3197
+ * This function is optimized for minimal code size and rather short messages.
3198
+ *
3199
+ * @param {string} message
3200
+ */
3201
+ function sha1(message) {
3202
+ var HASH_SIZE_HALF_BYTES = 40;
3203
+ var BLOCK_SIZE_WORDS = 16;
3204
+
3205
+ // Variables
3206
+ // `var` is used to be able to minimize the number of `var` keywords.
3207
+ var i = 0,
3208
+ f = 0,
3209
+
3210
+ // Use `encodeURI` to UTF8 encode the message without any additional libraries
3211
+ // We could use `unescape` + `encodeURI` to minimize the code, but that would be slightly risky
3212
+ // since `unescape` is deprecated.
3213
+ urlEncodedMessage = encodeURI(message) + "%80", // trailing '1' bit padding
3214
+
3215
+ // This can be changed to a preallocated Uint32Array array for greater performance and larger code size
3216
+ data = [],
3217
+ dataSize,
3218
+
3219
+ hashBuffer = [],
3220
+
3221
+ a = 0x67452301,
3222
+ b = 0xefcdab89,
3223
+ c = ~a,
3224
+ d = ~b,
3225
+ e = 0xc3d2e1f0,
3226
+ hash = [a, b, c, d, e],
3227
+
3228
+ blockStartIndex = 0,
3229
+ hexHash = "";
3230
+
3231
+ /**
3232
+ * Rotates the value a specified number of bits to the left.
3233
+ * @param {number} value Value to rotate
3234
+ * @param {number} shift Bit count to shift.
3235
+ */
3236
+ function rotl(value, shift) {
3237
+ return (value << shift) | (value >>> (32 - shift));
3238
+ }
3239
+
3240
+ // Message data
3241
+ for ( ; i < urlEncodedMessage.length; f++) {
3242
+ data[f >> 2] = data[f >> 2] |
3243
+ (
3244
+ (
3245
+ urlEncodedMessage[i] == "%"
3246
+ // Percent encoded byte
3247
+ ? parseInt(urlEncodedMessage.substring(i + 1, i += 3), 16)
3248
+ // Unencoded byte
3249
+ : urlEncodedMessage.charCodeAt(i++)
3250
+ )
3251
+
3252
+ // Read bytes in reverse order (big endian words)
3253
+ << ((3 - (f & 3)) * 8)
3254
+ );
3255
+ }
3256
+
3257
+ // f is now the length of the utf8 encoded message
3258
+ // 7 = 8 bytes (64 bit) for message size, -1 to round down
3259
+ // >> 6 = integer division with block size
3260
+ dataSize = (((f + 7) >> 6) + 1) * BLOCK_SIZE_WORDS;
3261
+
3262
+ // Message size in bits.
3263
+ // SHA1 uses a 64 bit integer to represent the size, but since we only support short messages only the least
3264
+ // significant 32 bits are set. -8 is for the '1' bit padding byte.
3265
+ data[dataSize - 1] = f * 8 - 8;
3266
+
3267
+ // Compute hash
3268
+ for ( ; blockStartIndex < dataSize; blockStartIndex += BLOCK_SIZE_WORDS) {
3269
+ for (i = 0; i < 80; i++) {
3270
+ f = rotl(a, 5) + e + (
3271
+ // Ch
3272
+ i < 20 ? ((b & c) ^ ((~b) & d)) + 0x5a827999 :
3273
+
3274
+ // Parity
3275
+ i < 40 ? (b ^ c ^ d) + 0x6ed9eba1 :
3276
+
3277
+ // Maj
3278
+ i < 60 ? ((b & c) ^ (b & d) ^ (c & d)) + 0x8f1bbcdc :
3279
+
3280
+ // Parity
3281
+ (b ^ c ^ d) + 0xca62c1d6
3282
+ ) + (
3283
+ hashBuffer[i] = i < BLOCK_SIZE_WORDS
3284
+ // Bitwise OR is used to coerse `undefined` to 0
3285
+ ? (data[blockStartIndex + i] | 0)
3286
+ : rotl(hashBuffer[i - 3] ^ hashBuffer[i - 8] ^ hashBuffer[i - 14] ^ hashBuffer[i - 16], 1)
3287
+ );
3288
+
3289
+ e = d;
3290
+ d = c;
3291
+ c = rotl(b, 30);
3292
+ b = a;
3293
+ a = f;
3294
+ }
3295
+
3296
+ hash[0] = a = ((hash[0] + a) | 0);
3297
+ hash[1] = b = ((hash[1] + b) | 0);
3298
+ hash[2] = c = ((hash[2] + c) | 0);
3299
+ hash[3] = d = ((hash[3] + d) | 0);
3300
+ hash[4] = e = ((hash[4] + e) | 0);
3301
+ }
3302
+
3303
+ // Format hex hash
3304
+ for (i = 0; i < HASH_SIZE_HALF_BYTES; i++) {
3305
+ hexHash += (
3306
+ (
3307
+ // Get word (2^3 half-bytes per word)
3308
+ hash[i >> 3] >>>
3309
+
3310
+ // Append half-bytes in reverse order
3311
+ ((7 - (i & 7)) * 4)
3312
+ )
3313
+ // Clamp to half-byte
3314
+ & 0xf
3315
+ ).toString(16);
3316
+ }
3317
+
3318
+ return hexHash;
3319
+ }
3320
+
3321
+ /**
3322
+ * Inputs a value that might be a valid hash string for Jdenticon and returns it
3323
+ * if it is determined valid, otherwise a falsy value is returned.
3324
+ */
3325
+ function isValidHash(hashCandidate) {
3326
+ return /^[0-9a-f]{11,}$/i.test(hashCandidate) && hashCandidate;
3327
+ }
3328
+
3329
+ /**
3330
+ * Computes a hash for the specified value. Currently SHA1 is used. This function
3331
+ * always returns a valid hash.
3332
+ */
3333
+ function computeHash(value) {
3334
+ return sha1(value == null ? "" : "" + value);
3335
+ }
3336
+
3337
+
3338
+
3339
+ /**
3340
+ * Renderer redirecting drawing commands to a canvas context.
3341
+ * @implements {Renderer}
3342
+ */
3343
+ function CanvasRenderer(ctx, iconSize) {
3344
+ var canvas = ctx.canvas;
3345
+ var width = canvas.width;
3346
+ var height = canvas.height;
3347
+
3348
+ ctx.save();
3349
+
3350
+ if (!iconSize) {
3351
+ iconSize = Math.min(width, height);
3352
+
3353
+ ctx.translate(
3354
+ ((width - iconSize) / 2) | 0,
3355
+ ((height - iconSize) / 2) | 0);
3356
+ }
3357
+
3358
+ /**
3359
+ * @private
3360
+ */
3361
+ this.l/*_ctx*/ = ctx;
3362
+ this.k/*iconSize*/ = iconSize;
3363
+
3364
+ ctx.clearRect(0, 0, iconSize, iconSize);
3365
+ }
3366
+ var CanvasRenderer__prototype = CanvasRenderer.prototype;
3367
+
3368
+ /**
3369
+ * Fills the background with the specified color.
3370
+ * @param {string} fillColor Fill color on the format #rrggbb[aa].
3371
+ */
3372
+ CanvasRenderer__prototype.m/*setBackground*/ = function setBackground (fillColor) {
3373
+ var ctx = this.l/*_ctx*/;
3374
+ var iconSize = this.k/*iconSize*/;
3375
+
3376
+ ctx.fillStyle = toCss3Color(fillColor);
3377
+ ctx.fillRect(0, 0, iconSize, iconSize);
3378
+ };
3379
+
3380
+ /**
3381
+ * Marks the beginning of a new shape of the specified color. Should be ended with a call to endShape.
3382
+ * @param {string} fillColor Fill color on format #rrggbb[aa].
3383
+ */
3384
+ CanvasRenderer__prototype.M/*beginShape*/ = function beginShape (fillColor) {
3385
+ var ctx = this.l/*_ctx*/;
3386
+ ctx.fillStyle = toCss3Color(fillColor);
3387
+ ctx.beginPath();
3388
+ };
3389
+
3390
+ /**
3391
+ * Marks the end of the currently drawn shape. This causes the queued paths to be rendered on the canvas.
3392
+ */
3393
+ CanvasRenderer__prototype.N/*endShape*/ = function endShape () {
3394
+ this.l/*_ctx*/.fill();
3395
+ };
3396
+
3397
+ /**
3398
+ * Adds a polygon to the rendering queue.
3399
+ * @param points An array of Point objects.
3400
+ */
3401
+ CanvasRenderer__prototype.g/*addPolygon*/ = function addPolygon (points) {
3402
+ var ctx = this.l/*_ctx*/;
3403
+ ctx.moveTo(points[0].x, points[0].y);
3404
+ for (var i = 1; i < points.length; i++) {
3405
+ ctx.lineTo(points[i].x, points[i].y);
3406
+ }
3407
+ ctx.closePath();
3408
+ };
3409
+
3410
+ /**
3411
+ * Adds a circle to the rendering queue.
3412
+ * @param {Point} point The upper left corner of the circle bounding box.
3413
+ * @param {number} diameter The diameter of the circle.
3414
+ * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3415
+ */
3416
+ CanvasRenderer__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3417
+ var ctx = this.l/*_ctx*/,
3418
+ radius = diameter / 2;
3419
+ ctx.moveTo(point.x + radius, point.y + radius);
3420
+ ctx.arc(point.x + radius, point.y + radius, radius, 0, Math.PI * 2, counterClockwise);
3421
+ ctx.closePath();
3422
+ };
3423
+
3424
+ /**
3425
+ * Called when the icon has been completely drawn.
3426
+ */
3427
+ CanvasRenderer__prototype.finish = function finish () {
3428
+ this.l/*_ctx*/.restore();
3429
+ };
3430
+
3431
+ var ICON_TYPE_SVG = 1;
3432
+
3433
+ var ICON_TYPE_CANVAS = 2;
3434
+
3435
+ var ATTRIBUTES = {
3436
+ O/*HASH*/: "data-jdenticon-hash",
3437
+ v/*VALUE*/: "data-jdenticon-value"
3438
+ };
3439
+
3440
+ var IS_RENDERED_PROPERTY = "jdenticonRendered";
3441
+
3442
+ var ICON_SELECTOR = "[" + ATTRIBUTES.O/*HASH*/ +"],[" + ATTRIBUTES.v/*VALUE*/ +"]";
3443
+
3444
+ var documentQuerySelectorAll = /** @type {!Function} */ (
3445
+ typeof document !== "undefined" && document.querySelectorAll.bind(document));
3446
+
3447
+ function getIdenticonType(el) {
3448
+ if (el) {
3449
+ var tagName = el["tagName"];
3450
+
3451
+ if (/^svg$/i.test(tagName)) {
3452
+ return ICON_TYPE_SVG;
3453
+ }
3454
+
3455
+ if (/^canvas$/i.test(tagName) && "getContext" in el) {
3456
+ return ICON_TYPE_CANVAS;
3457
+ }
3458
+ }
3459
+ }
3460
+
3461
+ /**
3462
+ * Draws an identicon to a context.
3463
+ * @param {CanvasRenderingContext2D} ctx - Canvas context on which the icon will be drawn at location (0, 0).
3464
+ * @param {*} hashOrValue - A hexadecimal hash string or any value that will be hashed by Jdenticon.
3465
+ * @param {number} size - Icon size in pixels.
3466
+ * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3467
+ * global configuration in its entirety. For backward compatibility a padding value in the range [0.0, 0.5) can be
3468
+ * specified in place of a configuration object.
3469
+ */
3470
+ function drawIcon(ctx, hashOrValue, size, config) {
3471
+ if (!ctx) {
3472
+ throw new Error("No canvas specified.");
3473
+ }
3474
+
3475
+ iconGenerator(new CanvasRenderer(ctx, size),
3476
+ isValidHash(hashOrValue) || computeHash(hashOrValue),
3477
+ config);
3478
+
3479
+ var canvas = ctx.canvas;
3480
+ if (canvas) {
3481
+ canvas[IS_RENDERED_PROPERTY] = true;
3482
+ }
3483
+ }
3484
+
3485
+ /**
3486
+ * Prepares a measure to be used as a measure in an SVG path, by
3487
+ * rounding the measure to a single decimal. This reduces the file
3488
+ * size of the generated SVG with more than 50% in some cases.
3489
+ */
3490
+ function svgValue(value) {
3491
+ return ((value * 10 + 0.5) | 0) / 10;
3492
+ }
3493
+
3494
+ /**
3495
+ * Represents an SVG path element.
3496
+ */
3497
+ function SvgPath() {
3498
+ /**
3499
+ * This property holds the data string (path.d) of the SVG path.
3500
+ * @type {string}
3501
+ */
3502
+ this.A/*dataString*/ = "";
3503
+ }
3504
+ var SvgPath__prototype = SvgPath.prototype;
3505
+
3506
+ /**
3507
+ * Adds a polygon with the current fill color to the SVG path.
3508
+ * @param points An array of Point objects.
3509
+ */
3510
+ SvgPath__prototype.g/*addPolygon*/ = function addPolygon (points) {
3511
+ var dataString = "";
3512
+ for (var i = 0; i < points.length; i++) {
3513
+ dataString += (i ? "L" : "M") + svgValue(points[i].x) + " " + svgValue(points[i].y);
3514
+ }
3515
+ this.A/*dataString*/ += dataString + "Z";
3516
+ };
3517
+
3518
+ /**
3519
+ * Adds a circle with the current fill color to the SVG path.
3520
+ * @param {Point} point The upper left corner of the circle bounding box.
3521
+ * @param {number} diameter The diameter of the circle.
3522
+ * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3523
+ */
3524
+ SvgPath__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3525
+ var sweepFlag = counterClockwise ? 0 : 1,
3526
+ svgRadius = svgValue(diameter / 2),
3527
+ svgDiameter = svgValue(diameter),
3528
+ svgArc = "a" + svgRadius + "," + svgRadius + " 0 1," + sweepFlag + " ";
3529
+
3530
+ this.A/*dataString*/ +=
3531
+ "M" + svgValue(point.x) + " " + svgValue(point.y + diameter / 2) +
3532
+ svgArc + svgDiameter + ",0" +
3533
+ svgArc + (-svgDiameter) + ",0";
3534
+ };
3535
+
3536
+
3537
+
3538
+ /**
3539
+ * Renderer producing SVG output.
3540
+ * @implements {Renderer}
3541
+ */
3542
+ function SvgRenderer(target) {
3543
+
3544
+ /**
3545
+ * @type {Object.<string,SvgPath>}
3546
+ * @private
3547
+ */
3548
+ this.C/*_pathsByColor*/ = { };
3549
+
3550
+ /**
3551
+ * @type {SvgElement|SvgWriter}
3552
+ * @private
3553
+ */
3554
+ this.P/*_target*/ = target;
3555
+
3556
+ /**
3557
+ * @type {number}
3558
+ */
3559
+ this.k/*iconSize*/ = target.k/*iconSize*/;
3560
+ }
3561
+ var SvgRenderer__prototype = SvgRenderer.prototype;
3562
+
3563
+ /**
3564
+ * Fills the background with the specified color.
3565
+ * @param {string} fillColor Fill color on the format #rrggbb[aa].
3566
+ */
3567
+ SvgRenderer__prototype.m/*setBackground*/ = function setBackground (fillColor) {
3568
+ var match = /^(#......)(..)?/.exec(fillColor),
3569
+ opacity = match[2] ? parseHex(match[2], 0) / 255 : 1;
3570
+ this.P/*_target*/.m/*setBackground*/(match[1], opacity);
3571
+ };
3572
+
3573
+ /**
3574
+ * Marks the beginning of a new shape of the specified color. Should be ended with a call to endShape.
3575
+ * @param {string} color Fill color on format #xxxxxx.
3576
+ */
3577
+ SvgRenderer__prototype.M/*beginShape*/ = function beginShape (color) {
3578
+ this.B/*_path*/ = this.C/*_pathsByColor*/[color] || (this.C/*_pathsByColor*/[color] = new SvgPath());
3579
+ };
3580
+
3581
+ /**
3582
+ * Marks the end of the currently drawn shape.
3583
+ */
3584
+ SvgRenderer__prototype.N/*endShape*/ = function endShape () { };
3585
+
3586
+ /**
3587
+ * Adds a polygon with the current fill color to the SVG.
3588
+ * @param points An array of Point objects.
3589
+ */
3590
+ SvgRenderer__prototype.g/*addPolygon*/ = function addPolygon (points) {
3591
+ this.B/*_path*/.g/*addPolygon*/(points);
3592
+ };
3593
+
3594
+ /**
3595
+ * Adds a circle with the current fill color to the SVG.
3596
+ * @param {Point} point The upper left corner of the circle bounding box.
3597
+ * @param {number} diameter The diameter of the circle.
3598
+ * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3599
+ */
3600
+ SvgRenderer__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3601
+ this.B/*_path*/.h/*addCircle*/(point, diameter, counterClockwise);
3602
+ };
3603
+
3604
+ /**
3605
+ * Called when the icon has been completely drawn.
3606
+ */
3607
+ SvgRenderer__prototype.finish = function finish () {
3608
+ var this$1$1 = this;
3609
+
3610
+ var pathsByColor = this.C/*_pathsByColor*/;
3611
+ for (var color in pathsByColor) {
3612
+ // hasOwnProperty cannot be shadowed in pathsByColor
3613
+ // eslint-disable-next-line no-prototype-builtins
3614
+ if (pathsByColor.hasOwnProperty(color)) {
3615
+ this$1$1.P/*_target*/.R/*appendPath*/(color, pathsByColor[color].A/*dataString*/);
3616
+ }
3617
+ }
3618
+ };
3619
+
3620
+ var SVG_CONSTANTS = {
3621
+ S/*XMLNS*/: "http://www.w3.org/2000/svg",
3622
+ T/*WIDTH*/: "width",
3623
+ U/*HEIGHT*/: "height",
3624
+ };
3625
+
3626
+ /**
3627
+ * Renderer producing SVG output.
3628
+ */
3629
+ function SvgWriter(iconSize) {
3630
+ /**
3631
+ * @type {number}
3632
+ */
3633
+ this.k/*iconSize*/ = iconSize;
3634
+
3635
+ /**
3636
+ * @type {string}
3637
+ * @private
3638
+ */
3639
+ this.D/*_s*/ =
3640
+ '<svg xmlns="' + SVG_CONSTANTS.S/*XMLNS*/ + '" width="' +
3641
+ iconSize + '" height="' + iconSize + '" viewBox="0 0 ' +
3642
+ iconSize + ' ' + iconSize + '">';
3643
+ }
3644
+ var SvgWriter__prototype = SvgWriter.prototype;
3645
+
3646
+ /**
3647
+ * Fills the background with the specified color.
3648
+ * @param {string} fillColor Fill color on the format #rrggbb.
3649
+ * @param {number} opacity Opacity in the range [0.0, 1.0].
3650
+ */
3651
+ SvgWriter__prototype.m/*setBackground*/ = function setBackground (fillColor, opacity) {
3652
+ if (opacity) {
3653
+ this.D/*_s*/ += '<rect width="100%" height="100%" fill="' +
3654
+ fillColor + '" opacity="' + opacity.toFixed(2) + '"/>';
3655
+ }
3656
+ };
3657
+
3658
+ /**
3659
+ * Writes a path to the SVG string.
3660
+ * @param {string} color Fill color on format #rrggbb.
3661
+ * @param {string} dataString The SVG path data string.
3662
+ */
3663
+ SvgWriter__prototype.R/*appendPath*/ = function appendPath (color, dataString) {
3664
+ this.D/*_s*/ += '<path fill="' + color + '" d="' + dataString + '"/>';
3665
+ };
3666
+
3667
+ /**
3668
+ * Gets the rendered image as an SVG string.
3669
+ */
3670
+ SvgWriter__prototype.toString = function toString () {
3671
+ return this.D/*_s*/ + "</svg>";
3672
+ };
3673
+
3674
+ /**
3675
+ * Draws an identicon as an SVG string.
3676
+ * @param {*} hashOrValue - A hexadecimal hash string or any value that will be hashed by Jdenticon.
3677
+ * @param {number} size - Icon size in pixels.
3678
+ * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3679
+ * global configuration in its entirety. For backward compatibility a padding value in the range [0.0, 0.5) can be
3680
+ * specified in place of a configuration object.
3681
+ * @returns {string} SVG string
3682
+ */
3683
+ function toSvg(hashOrValue, size, config) {
3684
+ var writer = new SvgWriter(size);
3685
+ iconGenerator(new SvgRenderer(writer),
3686
+ isValidHash(hashOrValue) || computeHash(hashOrValue),
3687
+ config);
3688
+ return writer.toString();
3689
+ }
3690
+
3691
+ /**
3692
+ * Creates a new element and adds it to the specified parent.
3693
+ * @param {Element} parentNode
3694
+ * @param {string} name
3695
+ * @param {...(string|number)} keyValuePairs
3696
+ */
3697
+ function SvgElement_append(parentNode, name) {
3698
+ var keyValuePairs = [], len = arguments.length - 2;
3699
+ while ( len-- > 0 ) keyValuePairs[ len ] = arguments[ len + 2 ];
3700
+
3701
+ var el = document.createElementNS(SVG_CONSTANTS.S/*XMLNS*/, name);
3702
+
3703
+ for (var i = 0; i + 1 < keyValuePairs.length; i += 2) {
3704
+ el.setAttribute(
3705
+ /** @type {string} */(keyValuePairs[i]),
3706
+ /** @type {string} */(keyValuePairs[i + 1])
3707
+ );
3708
+ }
3709
+
3710
+ parentNode.appendChild(el);
3711
+ }
3712
+
3713
+
3714
+ /**
3715
+ * Renderer producing SVG output.
3716
+ */
3717
+ function SvgElement(element) {
3718
+ // Don't use the clientWidth and clientHeight properties on SVG elements
3719
+ // since Firefox won't serve a proper value of these properties on SVG
3720
+ // elements (https://bugzilla.mozilla.org/show_bug.cgi?id=874811)
3721
+ // Instead use 100px as a hardcoded size (the svg viewBox will rescale
3722
+ // the icon to the correct dimensions)
3723
+ var iconSize = this.k/*iconSize*/ = Math.min(
3724
+ (Number(element.getAttribute(SVG_CONSTANTS.T/*WIDTH*/)) || 100),
3725
+ (Number(element.getAttribute(SVG_CONSTANTS.U/*HEIGHT*/)) || 100)
3726
+ );
3727
+
3728
+ /**
3729
+ * @type {Element}
3730
+ * @private
3731
+ */
3732
+ this.V/*_el*/ = element;
3733
+
3734
+ // Clear current SVG child elements
3735
+ while (element.firstChild) {
3736
+ element.removeChild(element.firstChild);
3737
+ }
3738
+
3739
+ // Set viewBox attribute to ensure the svg scales nicely.
3740
+ element.setAttribute("viewBox", "0 0 " + iconSize + " " + iconSize);
3741
+ element.setAttribute("preserveAspectRatio", "xMidYMid meet");
3742
+ }
3743
+ var SvgElement__prototype = SvgElement.prototype;
3744
+
3745
+ /**
3746
+ * Fills the background with the specified color.
3747
+ * @param {string} fillColor Fill color on the format #rrggbb.
3748
+ * @param {number} opacity Opacity in the range [0.0, 1.0].
3749
+ */
3750
+ SvgElement__prototype.m/*setBackground*/ = function setBackground (fillColor, opacity) {
3751
+ if (opacity) {
3752
+ SvgElement_append(this.V/*_el*/, "rect",
3753
+ SVG_CONSTANTS.T/*WIDTH*/, "100%",
3754
+ SVG_CONSTANTS.U/*HEIGHT*/, "100%",
3755
+ "fill", fillColor,
3756
+ "opacity", opacity);
3757
+ }
3758
+ };
3759
+
3760
+ /**
3761
+ * Appends a path to the SVG element.
3762
+ * @param {string} color Fill color on format #xxxxxx.
3763
+ * @param {string} dataString The SVG path data string.
3764
+ */
3765
+ SvgElement__prototype.R/*appendPath*/ = function appendPath (color, dataString) {
3766
+ SvgElement_append(this.V/*_el*/, "path",
3767
+ "fill", color,
3768
+ "d", dataString);
3769
+ };
3770
+
3771
+ /**
3772
+ * Updates all canvas elements with the `data-jdenticon-hash` or `data-jdenticon-value` attribute.
3773
+ */
3774
+ function updateAll() {
3775
+ if (documentQuerySelectorAll) {
3776
+ update(ICON_SELECTOR);
3777
+ }
3778
+ }
3779
+
3780
+ /**
3781
+ * Updates the identicon in the specified `<canvas>` or `<svg>` elements.
3782
+ * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3783
+ * `<svg>` or `<canvas>`, or a CSS selector to such an element.
3784
+ * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3785
+ * `data-jdenticon-value` attribute will be evaluated.
3786
+ * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3787
+ * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3788
+ * specified in place of a configuration object.
3789
+ */
3790
+ function update(el, hashOrValue, config) {
3791
+ renderDomElement(el, hashOrValue, config, function (el, iconType) {
3792
+ if (iconType) {
3793
+ return iconType == ICON_TYPE_SVG ?
3794
+ new SvgRenderer(new SvgElement(el)) :
3795
+ new CanvasRenderer(/** @type {HTMLCanvasElement} */(el).getContext("2d"));
3796
+ }
3797
+ });
3798
+ }
3799
+
3800
+ /**
3801
+ * Updates the identicon in the specified `<canvas>` elements.
3802
+ * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3803
+ * `<canvas>`, or a CSS selector to such an element.
3804
+ * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3805
+ * `data-jdenticon-value` attribute will be evaluated.
3806
+ * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3807
+ * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3808
+ * specified in place of a configuration object.
3809
+ */
3810
+ function updateCanvas(el, hashOrValue, config) {
3811
+ renderDomElement(el, hashOrValue, config, function (el, iconType) {
3812
+ if (iconType == ICON_TYPE_CANVAS) {
3813
+ return new CanvasRenderer(/** @type {HTMLCanvasElement} */(el).getContext("2d"));
3814
+ }
3815
+ });
3816
+ }
3817
+
3818
+ /**
3819
+ * Updates the identicon in the specified `<svg>` elements.
3820
+ * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3821
+ * `<svg>`, or a CSS selector to such an element.
3822
+ * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3823
+ * `data-jdenticon-value` attribute will be evaluated.
3824
+ * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3825
+ * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3826
+ * specified in place of a configuration object.
3827
+ */
3828
+ function updateSvg(el, hashOrValue, config) {
3829
+ renderDomElement(el, hashOrValue, config, function (el, iconType) {
3830
+ if (iconType == ICON_TYPE_SVG) {
3831
+ return new SvgRenderer(new SvgElement(el));
3832
+ }
3833
+ });
3834
+ }
3835
+
3836
+ /**
3837
+ * Updates the identicon in the specified canvas or svg elements.
3838
+ * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3839
+ * `<svg>` or `<canvas>`, or a CSS selector to such an element.
3840
+ * @param {*} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3841
+ * `data-jdenticon-value` attribute will be evaluated.
3842
+ * @param {Object|number|undefined} config
3843
+ * @param {function(Element,number):Renderer} rendererFactory - Factory function for creating an icon renderer.
3844
+ */
3845
+ function renderDomElement(el, hashOrValue, config, rendererFactory) {
3846
+ if (typeof el === "string") {
3847
+ if (documentQuerySelectorAll) {
3848
+ var elements = documentQuerySelectorAll(el);
3849
+ for (var i = 0; i < elements.length; i++) {
3850
+ renderDomElement(elements[i], hashOrValue, config, rendererFactory);
3851
+ }
3852
+ }
3853
+ return;
3854
+ }
3855
+
3856
+ // Hash selection. The result from getValidHash or computeHash is
3857
+ // accepted as a valid hash.
3858
+ var hash =
3859
+ // 1. Explicit valid hash
3860
+ isValidHash(hashOrValue) ||
3861
+
3862
+ // 2. Explicit value (`!= null` catches both null and undefined)
3863
+ hashOrValue != null && computeHash(hashOrValue) ||
3864
+
3865
+ // 3. `data-jdenticon-hash` attribute
3866
+ isValidHash(el.getAttribute(ATTRIBUTES.O/*HASH*/)) ||
3867
+
3868
+ // 4. `data-jdenticon-value` attribute.
3869
+ // We want to treat an empty attribute as an empty value.
3870
+ // Some browsers return empty string even if the attribute
3871
+ // is not specified, so use hasAttribute to determine if
3872
+ // the attribute is specified.
3873
+ el.hasAttribute(ATTRIBUTES.v/*VALUE*/) && computeHash(el.getAttribute(ATTRIBUTES.v/*VALUE*/));
3874
+
3875
+ if (!hash) {
3876
+ // No hash specified. Don't render an icon.
3877
+ return;
3878
+ }
3879
+
3880
+ var renderer = rendererFactory(el, getIdenticonType(el));
3881
+ if (renderer) {
3882
+ // Draw icon
3883
+ iconGenerator(renderer, hash, config);
3884
+ el[IS_RENDERED_PROPERTY] = true;
3885
+ }
3886
+ }
3887
+
3888
+ // This file is compiled to dist/jdenticon-module.js
3889
+
3890
+ var jdenticon = updateAll;
3891
+
3892
+ defineConfigProperty(jdenticon);
3893
+
3894
+ // Export public API
3895
+ jdenticon["configure"] = configure;
3896
+ jdenticon["drawIcon"] = drawIcon;
3897
+ jdenticon["toSvg"] = toSvg;
3898
+ jdenticon["update"] = update;
3899
+ jdenticon["updateCanvas"] = updateCanvas;
3900
+ jdenticon["updateSvg"] = updateSvg;
3901
+
3902
+ /**
3903
+ * Specifies the version of the Jdenticon package in use.
3904
+ * @type {string}
3905
+ */
3906
+ jdenticon["version"] = "3.3.0";
3907
+
3908
+ /**
3909
+ * Specifies which bundle of Jdenticon that is used.
3910
+ * @type {string}
3911
+ */
3912
+ jdenticon["bundle"] = "browser-cjs";
3913
+
3914
+ jdenticonModule = jdenticon;
3915
+
3916
+ return jdenticonModule;
3848
3917
  }
3849
3918
 
3850
- // This file is compiled to dist/jdenticon-module.js
3851
-
3852
- var jdenticon = updateAll;
3853
-
3854
- defineConfigProperty(jdenticon);
3855
-
3856
- // Export public API
3857
- jdenticon["configure"] = configure;
3858
- jdenticon["drawIcon"] = drawIcon;
3859
- jdenticon["toSvg"] = toSvg;
3860
- jdenticon["update"] = update;
3861
- jdenticon["updateCanvas"] = updateCanvas;
3862
- jdenticon["updateSvg"] = updateSvg;
3863
-
3864
- /**
3865
- * Specifies the version of the Jdenticon package in use.
3866
- * @type {string}
3867
- */
3868
- jdenticon["version"] = "3.3.0";
3869
-
3870
- /**
3871
- * Specifies which bundle of Jdenticon that is used.
3872
- * @type {string}
3873
- */
3874
- jdenticon["bundle"] = "browser-cjs";
3875
-
3876
- var jdenticonModule = jdenticon;
3919
+ var jdenticonModuleExports = requireJdenticonModule();
3877
3920
 
3878
3921
  const DEFAULT_CONFIG = {
3879
3922
  keycloak: {
@@ -3899,6 +3942,8 @@ const DEFAULT_CONFIG = {
3899
3942
  isLoading: true,
3900
3943
  duration: 800
3901
3944
  },
3945
+ allowedGlobalDomain: '',
3946
+ whitelistedUrls: ''
3902
3947
  };
3903
3948
  // Fetch config from API
3904
3949
  class ConfigService {
@@ -3934,9 +3979,23 @@ class ConfigService {
3934
3979
  }
3935
3980
  const configService = ConfigService.getInstance();
3936
3981
 
3982
+ // const getRootDomain = (hostOrUrl: string): string => {
3983
+ // // Ensure we can parse it with URL
3984
+ // const url = hostOrUrl.startsWith("http") ? new URL(hostOrUrl) : new URL(`https://${hostOrUrl}`);
3985
+ // const hostname = url.hostname;
3986
+ // const port = url.port ? `:${url.port}` : "";
3987
+ // const parts = hostname.split(".");
3988
+ // // localhost → return with port
3989
+ // if (hostname === "localhost") return hostname + port;
3990
+ // // sslip.io → keep last 3 parts
3991
+ // if (hostname.endsWith(".sslip.io")) return parts.slice(-5).join(".") + port;
3992
+ // // Normal domains → remove first label
3993
+ // return parts.slice(1).join(".") + port;
3994
+ // };
3937
3995
  const getRootDomain = (hostOrUrl) => {
3938
- // Ensure we can parse it with URL
3939
- const url = hostOrUrl.startsWith("http") ? new URL(hostOrUrl) : new URL(`https://${hostOrUrl}`);
3996
+ const url = hostOrUrl.startsWith("http")
3997
+ ? new URL(hostOrUrl)
3998
+ : new URL(`https://${hostOrUrl}`);
3940
3999
  const hostname = url.hostname;
3941
4000
  const port = url.port ? `:${url.port}` : "";
3942
4001
  const parts = hostname.split(".");
@@ -3946,8 +4005,8 @@ const getRootDomain = (hostOrUrl) => {
3946
4005
  // sslip.io → keep last 3 parts
3947
4006
  if (hostname.endsWith(".sslip.io"))
3948
4007
  return parts.slice(-5).join(".") + port;
3949
- // Normal domains → remove first label
3950
- return parts.slice(1).join(".") + port;
4008
+ // Keep full hostname
4009
+ return hostname + port;
3951
4010
  };
3952
4011
  const getUrlProtocol = (url, defaultProtocol = "https://") => {
3953
4012
  if (!url)
@@ -3999,33 +4058,61 @@ class MenuService {
3999
4058
  }
4000
4059
  const menuService = new MenuService();
4001
4060
 
4002
- const dashButtonCss = "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */.fa{font-family:var(--fa-style-family,\"Font Awesome 6 Free\");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:\"Font Awesome 6 Free\"}.fa-brands,.fab{font-family:\"Font Awesome 6 Brands\"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:\"\\30\"}.fa-1{--fa:\"\\31\"}.fa-2{--fa:\"\\32\"}.fa-3{--fa:\"\\33\"}.fa-4{--fa:\"\\34\"}.fa-5{--fa:\"\\35\"}.fa-6{--fa:\"\\36\"}.fa-7{--fa:\"\\37\"}.fa-8{--fa:\"\\38\"}.fa-9{--fa:\"\\39\"}.fa-fill-drip{--fa:\"\\f576\"}.fa-arrows-to-circle{--fa:\"\\e4bd\"}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:\"\\f138\"}.fa-at{--fa:\"\\40\"}.fa-trash-alt,.fa-trash-can{--fa:\"\\f2ed\"}.fa-text-height{--fa:\"\\f034\"}.fa-user-times,.fa-user-xmark{--fa:\"\\f235\"}.fa-stethoscope{--fa:\"\\f0f1\"}.fa-comment-alt,.fa-message{--fa:\"\\f27a\"}.fa-info{--fa:\"\\f129\"}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:\"\\f422\"}.fa-explosion{--fa:\"\\e4e9\"}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:\"\\f15c\"}.fa-wave-square{--fa:\"\\f83e\"}.fa-ring{--fa:\"\\f70b\"}.fa-building-un{--fa:\"\\e4d9\"}.fa-dice-three{--fa:\"\\f527\"}.fa-calendar-alt,.fa-calendar-days{--fa:\"\\f073\"}.fa-anchor-circle-check{--fa:\"\\e4aa\"}.fa-building-circle-arrow-right{--fa:\"\\e4d1\"}.fa-volleyball,.fa-volleyball-ball{--fa:\"\\f45f\"}.fa-arrows-up-to-line{--fa:\"\\e4c2\"}.fa-sort-desc,.fa-sort-down{--fa:\"\\f0dd\"}.fa-circle-minus,.fa-minus-circle{--fa:\"\\f056\"}.fa-door-open{--fa:\"\\f52b\"}.fa-right-from-bracket,.fa-sign-out-alt{--fa:\"\\f2f5\"}.fa-atom{--fa:\"\\f5d2\"}.fa-soap{--fa:\"\\e06e\"}.fa-heart-music-camera-bolt,.fa-icons{--fa:\"\\f86d\"}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:\"\\f539\"}.fa-bridge-circle-check{--fa:\"\\e4c9\"}.fa-pump-medical{--fa:\"\\e06a\"}.fa-fingerprint{--fa:\"\\f577\"}.fa-hand-point-right{--fa:\"\\f0a4\"}.fa-magnifying-glass-location,.fa-search-location{--fa:\"\\f689\"}.fa-forward-step,.fa-step-forward{--fa:\"\\f051\"}.fa-face-smile-beam,.fa-smile-beam{--fa:\"\\f5b8\"}.fa-flag-checkered{--fa:\"\\f11e\"}.fa-football,.fa-football-ball{--fa:\"\\f44e\"}.fa-school-circle-exclamation{--fa:\"\\e56c\"}.fa-crop{--fa:\"\\f125\"}.fa-angle-double-down,.fa-angles-down{--fa:\"\\f103\"}.fa-users-rectangle{--fa:\"\\e594\"}.fa-people-roof{--fa:\"\\e537\"}.fa-people-line{--fa:\"\\e534\"}.fa-beer,.fa-beer-mug-empty{--fa:\"\\f0fc\"}.fa-diagram-predecessor{--fa:\"\\e477\"}.fa-arrow-up-long,.fa-long-arrow-up{--fa:\"\\f176\"}.fa-burn,.fa-fire-flame-simple{--fa:\"\\f46a\"}.fa-male,.fa-person{--fa:\"\\f183\"}.fa-laptop{--fa:\"\\f109\"}.fa-file-csv{--fa:\"\\f6dd\"}.fa-menorah{--fa:\"\\f676\"}.fa-truck-plane{--fa:\"\\e58f\"}.fa-record-vinyl{--fa:\"\\f8d9\"}.fa-face-grin-stars,.fa-grin-stars{--fa:\"\\f587\"}.fa-bong{--fa:\"\\f55c\"}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:\"\\f67b\"}.fa-arrow-down-up-across-line{--fa:\"\\e4af\"}.fa-spoon,.fa-utensil-spoon{--fa:\"\\f2e5\"}.fa-jar-wheat{--fa:\"\\e517\"}.fa-envelopes-bulk,.fa-mail-bulk{--fa:\"\\f674\"}.fa-file-circle-exclamation{--fa:\"\\e4eb\"}.fa-circle-h,.fa-hospital-symbol{--fa:\"\\f47e\"}.fa-pager{--fa:\"\\f815\"}.fa-address-book,.fa-contact-book{--fa:\"\\f2b9\"}.fa-strikethrough{--fa:\"\\f0cc\"}.fa-k{--fa:\"\\4b\"}.fa-landmark-flag{--fa:\"\\e51c\"}.fa-pencil,.fa-pencil-alt{--fa:\"\\f303\"}.fa-backward{--fa:\"\\f04a\"}.fa-caret-right{--fa:\"\\f0da\"}.fa-comments{--fa:\"\\f086\"}.fa-file-clipboard,.fa-paste{--fa:\"\\f0ea\"}.fa-code-pull-request{--fa:\"\\e13c\"}.fa-clipboard-list{--fa:\"\\f46d\"}.fa-truck-loading,.fa-truck-ramp-box{--fa:\"\\f4de\"}.fa-user-check{--fa:\"\\f4fc\"}.fa-vial-virus{--fa:\"\\e597\"}.fa-sheet-plastic{--fa:\"\\e571\"}.fa-blog{--fa:\"\\f781\"}.fa-user-ninja{--fa:\"\\f504\"}.fa-person-arrow-up-from-line{--fa:\"\\e539\"}.fa-scroll-torah,.fa-torah{--fa:\"\\f6a0\"}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:\"\\f458\"}.fa-toggle-off{--fa:\"\\f204\"}.fa-archive,.fa-box-archive{--fa:\"\\f187\"}.fa-person-drowning{--fa:\"\\e545\"}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:\"\\f886\"}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:\"\\f58a\"}.fa-spray-can{--fa:\"\\f5bd\"}.fa-truck-monster{--fa:\"\\f63b\"}.fa-w{--fa:\"\\57\"}.fa-earth-africa,.fa-globe-africa{--fa:\"\\f57c\"}.fa-rainbow{--fa:\"\\f75b\"}.fa-circle-notch{--fa:\"\\f1ce\"}.fa-tablet-alt,.fa-tablet-screen-button{--fa:\"\\f3fa\"}.fa-paw{--fa:\"\\f1b0\"}.fa-cloud{--fa:\"\\f0c2\"}.fa-trowel-bricks{--fa:\"\\e58a\"}.fa-face-flushed,.fa-flushed{--fa:\"\\f579\"}.fa-hospital-user{--fa:\"\\f80d\"}.fa-tent-arrow-left-right{--fa:\"\\e57f\"}.fa-gavel,.fa-legal{--fa:\"\\f0e3\"}.fa-binoculars{--fa:\"\\f1e5\"}.fa-microphone-slash{--fa:\"\\f131\"}.fa-box-tissue{--fa:\"\\e05b\"}.fa-motorcycle{--fa:\"\\f21c\"}.fa-bell-concierge,.fa-concierge-bell{--fa:\"\\f562\"}.fa-pen-ruler,.fa-pencil-ruler{--fa:\"\\f5ae\"}.fa-people-arrows,.fa-people-arrows-left-right{--fa:\"\\e068\"}.fa-mars-and-venus-burst{--fa:\"\\e523\"}.fa-caret-square-right,.fa-square-caret-right{--fa:\"\\f152\"}.fa-cut,.fa-scissors{--fa:\"\\f0c4\"}.fa-sun-plant-wilt{--fa:\"\\e57a\"}.fa-toilets-portable{--fa:\"\\e584\"}.fa-hockey-puck{--fa:\"\\f453\"}.fa-table{--fa:\"\\f0ce\"}.fa-magnifying-glass-arrow-right{--fa:\"\\e521\"}.fa-digital-tachograph,.fa-tachograph-digital{--fa:\"\\f566\"}.fa-users-slash{--fa:\"\\e073\"}.fa-clover{--fa:\"\\e139\"}.fa-mail-reply,.fa-reply{--fa:\"\\f3e5\"}.fa-star-and-crescent{--fa:\"\\f699\"}.fa-house-fire{--fa:\"\\e50c\"}.fa-minus-square,.fa-square-minus{--fa:\"\\f146\"}.fa-helicopter{--fa:\"\\f533\"}.fa-compass{--fa:\"\\f14e\"}.fa-caret-square-down,.fa-square-caret-down{--fa:\"\\f150\"}.fa-file-circle-question{--fa:\"\\e4ef\"}.fa-laptop-code{--fa:\"\\f5fc\"}.fa-swatchbook{--fa:\"\\f5c3\"}.fa-prescription-bottle{--fa:\"\\f485\"}.fa-bars,.fa-navicon{--fa:\"\\f0c9\"}.fa-people-group{--fa:\"\\e533\"}.fa-hourglass-3,.fa-hourglass-end{--fa:\"\\f253\"}.fa-heart-broken,.fa-heart-crack{--fa:\"\\f7a9\"}.fa-external-link-square-alt,.fa-square-up-right{--fa:\"\\f360\"}.fa-face-kiss-beam,.fa-kiss-beam{--fa:\"\\f597\"}.fa-film{--fa:\"\\f008\"}.fa-ruler-horizontal{--fa:\"\\f547\"}.fa-people-robbery{--fa:\"\\e536\"}.fa-lightbulb{--fa:\"\\f0eb\"}.fa-caret-left{--fa:\"\\f0d9\"}.fa-circle-exclamation,.fa-exclamation-circle{--fa:\"\\f06a\"}.fa-school-circle-xmark{--fa:\"\\e56d\"}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:\"\\f08b\"}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:\"\\f13a\"}.fa-unlock-alt,.fa-unlock-keyhole{--fa:\"\\f13e\"}.fa-cloud-showers-heavy{--fa:\"\\f740\"}.fa-headphones-alt,.fa-headphones-simple{--fa:\"\\f58f\"}.fa-sitemap{--fa:\"\\f0e8\"}.fa-circle-dollar-to-slot,.fa-donate{--fa:\"\\f4b9\"}.fa-memory{--fa:\"\\f538\"}.fa-road-spikes{--fa:\"\\e568\"}.fa-fire-burner{--fa:\"\\e4f1\"}.fa-flag{--fa:\"\\f024\"}.fa-hanukiah{--fa:\"\\f6e6\"}.fa-feather{--fa:\"\\f52d\"}.fa-volume-down,.fa-volume-low{--fa:\"\\f027\"}.fa-comment-slash{--fa:\"\\f4b3\"}.fa-cloud-sun-rain{--fa:\"\\f743\"}.fa-compress{--fa:\"\\f066\"}.fa-wheat-alt,.fa-wheat-awn{--fa:\"\\e2cd\"}.fa-ankh{--fa:\"\\f644\"}.fa-hands-holding-child{--fa:\"\\e4fa\"}.fa-asterisk{--fa:\"\\2a\"}.fa-check-square,.fa-square-check{--fa:\"\\f14a\"}.fa-peseta-sign{--fa:\"\\e221\"}.fa-header,.fa-heading{--fa:\"\\f1dc\"}.fa-ghost{--fa:\"\\f6e2\"}.fa-list,.fa-list-squares{--fa:\"\\f03a\"}.fa-phone-square-alt,.fa-square-phone-flip{--fa:\"\\f87b\"}.fa-cart-plus{--fa:\"\\f217\"}.fa-gamepad{--fa:\"\\f11b\"}.fa-circle-dot,.fa-dot-circle{--fa:\"\\f192\"}.fa-dizzy,.fa-face-dizzy{--fa:\"\\f567\"}.fa-egg{--fa:\"\\f7fb\"}.fa-house-medical-circle-xmark{--fa:\"\\e513\"}.fa-campground{--fa:\"\\f6bb\"}.fa-folder-plus{--fa:\"\\f65e\"}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:\"\\f1e3\"}.fa-paint-brush,.fa-paintbrush{--fa:\"\\f1fc\"}.fa-lock{--fa:\"\\f023\"}.fa-gas-pump{--fa:\"\\f52f\"}.fa-hot-tub,.fa-hot-tub-person{--fa:\"\\f593\"}.fa-map-location,.fa-map-marked{--fa:\"\\f59f\"}.fa-house-flood-water{--fa:\"\\e50e\"}.fa-tree{--fa:\"\\f1bb\"}.fa-bridge-lock{--fa:\"\\e4cc\"}.fa-sack-dollar{--fa:\"\\f81d\"}.fa-edit,.fa-pen-to-square{--fa:\"\\f044\"}.fa-car-side{--fa:\"\\f5e4\"}.fa-share-alt,.fa-share-nodes{--fa:\"\\f1e0\"}.fa-heart-circle-minus{--fa:\"\\e4ff\"}.fa-hourglass-2,.fa-hourglass-half{--fa:\"\\f252\"}.fa-microscope{--fa:\"\\f610\"}.fa-sink{--fa:\"\\e06d\"}.fa-bag-shopping,.fa-shopping-bag{--fa:\"\\f290\"}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:\"\\f881\"}.fa-mitten{--fa:\"\\f7b5\"}.fa-person-rays{--fa:\"\\e54d\"}.fa-users{--fa:\"\\f0c0\"}.fa-eye-slash{--fa:\"\\f070\"}.fa-flask-vial{--fa:\"\\e4f3\"}.fa-hand,.fa-hand-paper{--fa:\"\\f256\"}.fa-om{--fa:\"\\f679\"}.fa-worm{--fa:\"\\e599\"}.fa-house-circle-xmark{--fa:\"\\e50b\"}.fa-plug{--fa:\"\\f1e6\"}.fa-chevron-up{--fa:\"\\f077\"}.fa-hand-spock{--fa:\"\\f259\"}.fa-stopwatch{--fa:\"\\f2f2\"}.fa-face-kiss,.fa-kiss{--fa:\"\\f596\"}.fa-bridge-circle-xmark{--fa:\"\\e4cb\"}.fa-face-grin-tongue,.fa-grin-tongue{--fa:\"\\f589\"}.fa-chess-bishop{--fa:\"\\f43a\"}.fa-face-grin-wink,.fa-grin-wink{--fa:\"\\f58c\"}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:\"\\f2a4\"}.fa-road-circle-check{--fa:\"\\e564\"}.fa-dice-five{--fa:\"\\f523\"}.fa-rss-square,.fa-square-rss{--fa:\"\\f143\"}.fa-land-mine-on{--fa:\"\\e51b\"}.fa-i-cursor{--fa:\"\\f246\"}.fa-stamp{--fa:\"\\f5bf\"}.fa-stairs{--fa:\"\\e289\"}.fa-i{--fa:\"\\49\"}.fa-hryvnia,.fa-hryvnia-sign{--fa:\"\\f6f2\"}.fa-pills{--fa:\"\\f484\"}.fa-face-grin-wide,.fa-grin-alt{--fa:\"\\f581\"}.fa-tooth{--fa:\"\\f5c9\"}.fa-v{--fa:\"\\56\"}.fa-bangladeshi-taka-sign{--fa:\"\\e2e6\"}.fa-bicycle{--fa:\"\\f206\"}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:\"\\e579\"}.fa-head-side-cough-slash{--fa:\"\\e062\"}.fa-ambulance,.fa-truck-medical{--fa:\"\\f0f9\"}.fa-wheat-awn-circle-exclamation{--fa:\"\\e598\"}.fa-snowman{--fa:\"\\f7d0\"}.fa-mortar-pestle{--fa:\"\\f5a7\"}.fa-road-barrier{--fa:\"\\e562\"}.fa-school{--fa:\"\\f549\"}.fa-igloo{--fa:\"\\f7ae\"}.fa-joint{--fa:\"\\f595\"}.fa-angle-right{--fa:\"\\f105\"}.fa-horse{--fa:\"\\f6f0\"}.fa-q{--fa:\"\\51\"}.fa-g{--fa:\"\\47\"}.fa-notes-medical{--fa:\"\\f481\"}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:\"\\f2c9\"}.fa-dong-sign{--fa:\"\\e169\"}.fa-capsules{--fa:\"\\f46b\"}.fa-poo-bolt,.fa-poo-storm{--fa:\"\\f75a\"}.fa-face-frown-open,.fa-frown-open{--fa:\"\\f57a\"}.fa-hand-point-up{--fa:\"\\f0a6\"}.fa-money-bill{--fa:\"\\f0d6\"}.fa-bookmark{--fa:\"\\f02e\"}.fa-align-justify{--fa:\"\\f039\"}.fa-umbrella-beach{--fa:\"\\f5ca\"}.fa-helmet-un{--fa:\"\\e503\"}.fa-bullseye{--fa:\"\\f140\"}.fa-bacon{--fa:\"\\f7e5\"}.fa-hand-point-down{--fa:\"\\f0a7\"}.fa-arrow-up-from-bracket{--fa:\"\\e09a\"}.fa-folder,.fa-folder-blank{--fa:\"\\f07b\"}.fa-file-medical-alt,.fa-file-waveform{--fa:\"\\f478\"}.fa-radiation{--fa:\"\\f7b9\"}.fa-chart-simple{--fa:\"\\e473\"}.fa-mars-stroke{--fa:\"\\f229\"}.fa-vial{--fa:\"\\f492\"}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:\"\\f624\"}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:\"\\e2ca\"}.fa-e{--fa:\"\\45\"}.fa-pen-alt,.fa-pen-clip{--fa:\"\\f305\"}.fa-bridge-circle-exclamation{--fa:\"\\e4ca\"}.fa-user{--fa:\"\\f007\"}.fa-school-circle-check{--fa:\"\\e56b\"}.fa-dumpster{--fa:\"\\f793\"}.fa-shuttle-van,.fa-van-shuttle{--fa:\"\\f5b6\"}.fa-building-user{--fa:\"\\e4da\"}.fa-caret-square-left,.fa-square-caret-left{--fa:\"\\f191\"}.fa-highlighter{--fa:\"\\f591\"}.fa-key{--fa:\"\\f084\"}.fa-bullhorn{--fa:\"\\f0a1\"}.fa-globe{--fa:\"\\f0ac\"}.fa-synagogue{--fa:\"\\f69b\"}.fa-person-half-dress{--fa:\"\\e548\"}.fa-road-bridge{--fa:\"\\e563\"}.fa-location-arrow{--fa:\"\\f124\"}.fa-c{--fa:\"\\43\"}.fa-tablet-button{--fa:\"\\f10a\"}.fa-building-lock{--fa:\"\\e4d6\"}.fa-pizza-slice{--fa:\"\\f818\"}.fa-money-bill-wave{--fa:\"\\f53a\"}.fa-area-chart,.fa-chart-area{--fa:\"\\f1fe\"}.fa-house-flag{--fa:\"\\e50d\"}.fa-person-circle-minus{--fa:\"\\e540\"}.fa-ban,.fa-cancel{--fa:\"\\f05e\"}.fa-camera-rotate{--fa:\"\\e0d8\"}.fa-air-freshener,.fa-spray-can-sparkles{--fa:\"\\f5d0\"}.fa-star{--fa:\"\\f005\"}.fa-repeat{--fa:\"\\f363\"}.fa-cross{--fa:\"\\f654\"}.fa-box{--fa:\"\\f466\"}.fa-venus-mars{--fa:\"\\f228\"}.fa-arrow-pointer,.fa-mouse-pointer{--fa:\"\\f245\"}.fa-expand-arrows-alt,.fa-maximize{--fa:\"\\f31e\"}.fa-charging-station{--fa:\"\\f5e7\"}.fa-shapes,.fa-triangle-circle-square{--fa:\"\\f61f\"}.fa-random,.fa-shuffle{--fa:\"\\f074\"}.fa-person-running,.fa-running{--fa:\"\\f70c\"}.fa-mobile-retro{--fa:\"\\e527\"}.fa-grip-lines-vertical{--fa:\"\\f7a5\"}.fa-spider{--fa:\"\\f717\"}.fa-hands-bound{--fa:\"\\e4f9\"}.fa-file-invoice-dollar{--fa:\"\\f571\"}.fa-plane-circle-exclamation{--fa:\"\\e556\"}.fa-x-ray{--fa:\"\\f497\"}.fa-spell-check{--fa:\"\\f891\"}.fa-slash{--fa:\"\\f715\"}.fa-computer-mouse,.fa-mouse{--fa:\"\\f8cc\"}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:\"\\f090\"}.fa-shop-slash,.fa-store-alt-slash{--fa:\"\\e070\"}.fa-server{--fa:\"\\f233\"}.fa-virus-covid-slash{--fa:\"\\e4a9\"}.fa-shop-lock{--fa:\"\\e4a5\"}.fa-hourglass-1,.fa-hourglass-start{--fa:\"\\f251\"}.fa-blender-phone{--fa:\"\\f6b6\"}.fa-building-wheat{--fa:\"\\e4db\"}.fa-person-breastfeeding{--fa:\"\\e53a\"}.fa-right-to-bracket,.fa-sign-in-alt{--fa:\"\\f2f6\"}.fa-venus{--fa:\"\\f221\"}.fa-passport{--fa:\"\\f5ab\"}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:\"\\e68f\"}.fa-heart-pulse,.fa-heartbeat{--fa:\"\\f21e\"}.fa-people-carry,.fa-people-carry-box{--fa:\"\\f4ce\"}.fa-temperature-high{--fa:\"\\f769\"}.fa-microchip{--fa:\"\\f2db\"}.fa-crown{--fa:\"\\f521\"}.fa-weight-hanging{--fa:\"\\f5cd\"}.fa-xmarks-lines{--fa:\"\\e59a\"}.fa-file-prescription{--fa:\"\\f572\"}.fa-weight,.fa-weight-scale{--fa:\"\\f496\"}.fa-user-friends,.fa-user-group{--fa:\"\\f500\"}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:\"\\f15e\"}.fa-chess-knight{--fa:\"\\f441\"}.fa-face-laugh-squint,.fa-laugh-squint{--fa:\"\\f59b\"}.fa-wheelchair{--fa:\"\\f193\"}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:\"\\f0aa\"}.fa-toggle-on{--fa:\"\\f205\"}.fa-person-walking,.fa-walking{--fa:\"\\f554\"}.fa-l{--fa:\"\\4c\"}.fa-fire{--fa:\"\\f06d\"}.fa-bed-pulse,.fa-procedures{--fa:\"\\f487\"}.fa-shuttle-space,.fa-space-shuttle{--fa:\"\\f197\"}.fa-face-laugh,.fa-laugh{--fa:\"\\f599\"}.fa-folder-open{--fa:\"\\f07c\"}.fa-heart-circle-plus{--fa:\"\\e500\"}.fa-code-fork{--fa:\"\\e13b\"}.fa-city{--fa:\"\\f64f\"}.fa-microphone-alt,.fa-microphone-lines{--fa:\"\\f3c9\"}.fa-pepper-hot{--fa:\"\\f816\"}.fa-unlock{--fa:\"\\f09c\"}.fa-colon-sign{--fa:\"\\e140\"}.fa-headset{--fa:\"\\f590\"}.fa-store-slash{--fa:\"\\e071\"}.fa-road-circle-xmark{--fa:\"\\e566\"}.fa-user-minus{--fa:\"\\f503\"}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:\"\\f22a\"}.fa-champagne-glasses,.fa-glass-cheers{--fa:\"\\f79f\"}.fa-clipboard{--fa:\"\\f328\"}.fa-house-circle-exclamation{--fa:\"\\e50a\"}.fa-file-arrow-up,.fa-file-upload{--fa:\"\\f574\"}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:\"\\f1eb\"}.fa-bath,.fa-bathtub{--fa:\"\\f2cd\"}.fa-underline{--fa:\"\\f0cd\"}.fa-user-edit,.fa-user-pen{--fa:\"\\f4ff\"}.fa-signature{--fa:\"\\f5b7\"}.fa-stroopwafel{--fa:\"\\f551\"}.fa-bold{--fa:\"\\f032\"}.fa-anchor-lock{--fa:\"\\e4ad\"}.fa-building-ngo{--fa:\"\\e4d7\"}.fa-manat-sign{--fa:\"\\e1d5\"}.fa-not-equal{--fa:\"\\f53e\"}.fa-border-style,.fa-border-top-left{--fa:\"\\f853\"}.fa-map-location-dot,.fa-map-marked-alt{--fa:\"\\f5a0\"}.fa-jedi{--fa:\"\\f669\"}.fa-poll,.fa-square-poll-vertical{--fa:\"\\f681\"}.fa-mug-hot{--fa:\"\\f7b6\"}.fa-battery-car,.fa-car-battery{--fa:\"\\f5df\"}.fa-gift{--fa:\"\\f06b\"}.fa-dice-two{--fa:\"\\f528\"}.fa-chess-queen{--fa:\"\\f445\"}.fa-glasses{--fa:\"\\f530\"}.fa-chess-board{--fa:\"\\f43c\"}.fa-building-circle-check{--fa:\"\\e4d2\"}.fa-person-chalkboard{--fa:\"\\e53d\"}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:\"\\f22b\"}.fa-hand-back-fist,.fa-hand-rock{--fa:\"\\f255\"}.fa-caret-square-up,.fa-square-caret-up{--fa:\"\\f151\"}.fa-cloud-showers-water{--fa:\"\\e4e4\"}.fa-bar-chart,.fa-chart-bar{--fa:\"\\f080\"}.fa-hands-bubbles,.fa-hands-wash{--fa:\"\\e05e\"}.fa-less-than-equal{--fa:\"\\f537\"}.fa-train{--fa:\"\\f238\"}.fa-eye-low-vision,.fa-low-vision{--fa:\"\\f2a8\"}.fa-crow{--fa:\"\\f520\"}.fa-sailboat{--fa:\"\\e445\"}.fa-window-restore{--fa:\"\\f2d2\"}.fa-plus-square,.fa-square-plus{--fa:\"\\f0fe\"}.fa-torii-gate{--fa:\"\\f6a1\"}.fa-frog{--fa:\"\\f52e\"}.fa-bucket{--fa:\"\\e4cf\"}.fa-image{--fa:\"\\f03e\"}.fa-microphone{--fa:\"\\f130\"}.fa-cow{--fa:\"\\f6c8\"}.fa-caret-up{--fa:\"\\f0d8\"}.fa-screwdriver{--fa:\"\\f54a\"}.fa-folder-closed{--fa:\"\\e185\"}.fa-house-tsunami{--fa:\"\\e515\"}.fa-square-nfi{--fa:\"\\e576\"}.fa-arrow-up-from-ground-water{--fa:\"\\e4b5\"}.fa-glass-martini-alt,.fa-martini-glass{--fa:\"\\f57b\"}.fa-square-binary{--fa:\"\\e69b\"}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:\"\\f2ea\"}.fa-columns,.fa-table-columns{--fa:\"\\f0db\"}.fa-lemon{--fa:\"\\f094\"}.fa-head-side-mask{--fa:\"\\e063\"}.fa-handshake{--fa:\"\\f2b5\"}.fa-gem{--fa:\"\\f3a5\"}.fa-dolly,.fa-dolly-box{--fa:\"\\f472\"}.fa-smoking{--fa:\"\\f48d\"}.fa-compress-arrows-alt,.fa-minimize{--fa:\"\\f78c\"}.fa-monument{--fa:\"\\f5a6\"}.fa-snowplow{--fa:\"\\f7d2\"}.fa-angle-double-right,.fa-angles-right{--fa:\"\\f101\"}.fa-cannabis{--fa:\"\\f55f\"}.fa-circle-play,.fa-play-circle{--fa:\"\\f144\"}.fa-tablets{--fa:\"\\f490\"}.fa-ethernet{--fa:\"\\f796\"}.fa-eur,.fa-euro,.fa-euro-sign{--fa:\"\\f153\"}.fa-chair{--fa:\"\\f6c0\"}.fa-check-circle,.fa-circle-check{--fa:\"\\f058\"}.fa-circle-stop,.fa-stop-circle{--fa:\"\\f28d\"}.fa-compass-drafting,.fa-drafting-compass{--fa:\"\\f568\"}.fa-plate-wheat{--fa:\"\\e55a\"}.fa-icicles{--fa:\"\\f7ad\"}.fa-person-shelter{--fa:\"\\e54f\"}.fa-neuter{--fa:\"\\f22c\"}.fa-id-badge{--fa:\"\\f2c1\"}.fa-marker{--fa:\"\\f5a1\"}.fa-face-laugh-beam,.fa-laugh-beam{--fa:\"\\f59a\"}.fa-helicopter-symbol{--fa:\"\\e502\"}.fa-universal-access{--fa:\"\\f29a\"}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:\"\\f139\"}.fa-lari-sign{--fa:\"\\e1c8\"}.fa-volcano{--fa:\"\\f770\"}.fa-person-walking-dashed-line-arrow-right{--fa:\"\\e553\"}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:\"\\f154\"}.fa-viruses{--fa:\"\\e076\"}.fa-square-person-confined{--fa:\"\\e577\"}.fa-user-tie{--fa:\"\\f508\"}.fa-arrow-down-long,.fa-long-arrow-down{--fa:\"\\f175\"}.fa-tent-arrow-down-to-line{--fa:\"\\e57e\"}.fa-certificate{--fa:\"\\f0a3\"}.fa-mail-reply-all,.fa-reply-all{--fa:\"\\f122\"}.fa-suitcase{--fa:\"\\f0f2\"}.fa-person-skating,.fa-skating{--fa:\"\\f7c5\"}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:\"\\f662\"}.fa-camera-retro{--fa:\"\\f083\"}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:\"\\f0ab\"}.fa-arrow-right-to-file,.fa-file-import{--fa:\"\\f56f\"}.fa-external-link-square,.fa-square-arrow-up-right{--fa:\"\\f14c\"}.fa-box-open{--fa:\"\\f49e\"}.fa-scroll{--fa:\"\\f70e\"}.fa-spa{--fa:\"\\f5bb\"}.fa-location-pin-lock{--fa:\"\\e51f\"}.fa-pause{--fa:\"\\f04c\"}.fa-hill-avalanche{--fa:\"\\e507\"}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:\"\\f2cb\"}.fa-bomb{--fa:\"\\f1e2\"}.fa-registered{--fa:\"\\f25d\"}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:\"\\f2bb\"}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:\"\\f516\"}.fa-subscript{--fa:\"\\f12c\"}.fa-diamond-turn-right,.fa-directions{--fa:\"\\f5eb\"}.fa-burst{--fa:\"\\e4dc\"}.fa-house-laptop,.fa-laptop-house{--fa:\"\\e066\"}.fa-face-tired,.fa-tired{--fa:\"\\f5c8\"}.fa-money-bills{--fa:\"\\e1f3\"}.fa-smog{--fa:\"\\f75f\"}.fa-crutch{--fa:\"\\f7f7\"}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:\"\\f0ee\"}.fa-palette{--fa:\"\\f53f\"}.fa-arrows-turn-right{--fa:\"\\e4c0\"}.fa-vest{--fa:\"\\e085\"}.fa-ferry{--fa:\"\\e4ea\"}.fa-arrows-down-to-people{--fa:\"\\e4b9\"}.fa-seedling,.fa-sprout{--fa:\"\\f4d8\"}.fa-arrows-alt-h,.fa-left-right{--fa:\"\\f337\"}.fa-boxes-packing{--fa:\"\\e4c7\"}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:\"\\f0a8\"}.fa-group-arrows-rotate{--fa:\"\\e4f6\"}.fa-bowl-food{--fa:\"\\e4c6\"}.fa-candy-cane{--fa:\"\\f786\"}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:\"\\f160\"}.fa-cloud-bolt,.fa-thunderstorm{--fa:\"\\f76c\"}.fa-remove-format,.fa-text-slash{--fa:\"\\f87d\"}.fa-face-smile-wink,.fa-smile-wink{--fa:\"\\f4da\"}.fa-file-word{--fa:\"\\f1c2\"}.fa-file-powerpoint{--fa:\"\\f1c4\"}.fa-arrows-h,.fa-arrows-left-right{--fa:\"\\f07e\"}.fa-house-lock{--fa:\"\\e510\"}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:\"\\f0ed\"}.fa-children{--fa:\"\\e4e1\"}.fa-blackboard,.fa-chalkboard{--fa:\"\\f51b\"}.fa-user-alt-slash,.fa-user-large-slash{--fa:\"\\f4fa\"}.fa-envelope-open{--fa:\"\\f2b6\"}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:\"\\e05f\"}.fa-mattress-pillow{--fa:\"\\e525\"}.fa-guarani-sign{--fa:\"\\e19a\"}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:\"\\f021\"}.fa-fire-extinguisher{--fa:\"\\f134\"}.fa-cruzeiro-sign{--fa:\"\\e152\"}.fa-greater-than-equal{--fa:\"\\f532\"}.fa-shield-alt,.fa-shield-halved{--fa:\"\\f3ed\"}.fa-atlas,.fa-book-atlas{--fa:\"\\f558\"}.fa-virus{--fa:\"\\e074\"}.fa-envelope-circle-check{--fa:\"\\e4e8\"}.fa-layer-group{--fa:\"\\f5fd\"}.fa-arrows-to-dot{--fa:\"\\e4be\"}.fa-archway{--fa:\"\\f557\"}.fa-heart-circle-check{--fa:\"\\e4fd\"}.fa-house-chimney-crack,.fa-house-damage{--fa:\"\\f6f1\"}.fa-file-archive,.fa-file-zipper{--fa:\"\\f1c6\"}.fa-square{--fa:\"\\f0c8\"}.fa-glass-martini,.fa-martini-glass-empty{--fa:\"\\f000\"}.fa-couch{--fa:\"\\f4b8\"}.fa-cedi-sign{--fa:\"\\e0df\"}.fa-italic{--fa:\"\\f033\"}.fa-table-cells-column-lock{--fa:\"\\e678\"}.fa-church{--fa:\"\\f51d\"}.fa-comments-dollar{--fa:\"\\f653\"}.fa-democrat{--fa:\"\\f747\"}.fa-z{--fa:\"\\5a\"}.fa-person-skiing,.fa-skiing{--fa:\"\\f7c9\"}.fa-road-lock{--fa:\"\\e567\"}.fa-a{--fa:\"\\41\"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:\"\\e03f\"}.fa-feather-alt,.fa-feather-pointed{--fa:\"\\f56b\"}.fa-p{--fa:\"\\50\"}.fa-snowflake{--fa:\"\\f2dc\"}.fa-newspaper{--fa:\"\\f1ea\"}.fa-ad,.fa-rectangle-ad{--fa:\"\\f641\"}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:\"\\f0a9\"}.fa-filter-circle-xmark{--fa:\"\\e17b\"}.fa-locust{--fa:\"\\e520\"}.fa-sort,.fa-unsorted{--fa:\"\\f0dc\"}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:\"\\f0cb\"}.fa-person-dress-burst{--fa:\"\\e544\"}.fa-money-check-alt,.fa-money-check-dollar{--fa:\"\\f53d\"}.fa-vector-square{--fa:\"\\f5cb\"}.fa-bread-slice{--fa:\"\\f7ec\"}.fa-language{--fa:\"\\f1ab\"}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:\"\\f598\"}.fa-filter{--fa:\"\\f0b0\"}.fa-question{--fa:\"\\3f\"}.fa-file-signature{--fa:\"\\f573\"}.fa-arrows-alt,.fa-up-down-left-right{--fa:\"\\f0b2\"}.fa-house-chimney-user{--fa:\"\\e065\"}.fa-hand-holding-heart{--fa:\"\\f4be\"}.fa-puzzle-piece{--fa:\"\\f12e\"}.fa-money-check{--fa:\"\\f53c\"}.fa-star-half-alt,.fa-star-half-stroke{--fa:\"\\f5c0\"}.fa-code{--fa:\"\\f121\"}.fa-glass-whiskey,.fa-whiskey-glass{--fa:\"\\f7a0\"}.fa-building-circle-exclamation{--fa:\"\\e4d3\"}.fa-magnifying-glass-chart{--fa:\"\\e522\"}.fa-arrow-up-right-from-square,.fa-external-link{--fa:\"\\f08e\"}.fa-cubes-stacked{--fa:\"\\e4e6\"}.fa-krw,.fa-won,.fa-won-sign{--fa:\"\\f159\"}.fa-virus-covid{--fa:\"\\e4a8\"}.fa-austral-sign{--fa:\"\\e0a9\"}.fa-f{--fa:\"\\46\"}.fa-leaf{--fa:\"\\f06c\"}.fa-road{--fa:\"\\f018\"}.fa-cab,.fa-taxi{--fa:\"\\f1ba\"}.fa-person-circle-plus{--fa:\"\\e541\"}.fa-chart-pie,.fa-pie-chart{--fa:\"\\f200\"}.fa-bolt-lightning{--fa:\"\\e0b7\"}.fa-sack-xmark{--fa:\"\\e56a\"}.fa-file-excel{--fa:\"\\f1c3\"}.fa-file-contract{--fa:\"\\f56c\"}.fa-fish-fins{--fa:\"\\e4f2\"}.fa-building-flag{--fa:\"\\e4d5\"}.fa-face-grin-beam,.fa-grin-beam{--fa:\"\\f582\"}.fa-object-ungroup{--fa:\"\\f248\"}.fa-poop{--fa:\"\\f619\"}.fa-location-pin,.fa-map-marker{--fa:\"\\f041\"}.fa-kaaba{--fa:\"\\f66b\"}.fa-toilet-paper{--fa:\"\\f71e\"}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:\"\\f807\"}.fa-eject{--fa:\"\\f052\"}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:\"\\f35a\"}.fa-plane-circle-check{--fa:\"\\e555\"}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:\"\\f5a5\"}.fa-object-group{--fa:\"\\f247\"}.fa-chart-line,.fa-line-chart{--fa:\"\\f201\"}.fa-mask-ventilator{--fa:\"\\e524\"}.fa-arrow-right{--fa:\"\\f061\"}.fa-map-signs,.fa-signs-post{--fa:\"\\f277\"}.fa-cash-register{--fa:\"\\f788\"}.fa-person-circle-question{--fa:\"\\e542\"}.fa-h{--fa:\"\\48\"}.fa-tarp{--fa:\"\\e57b\"}.fa-screwdriver-wrench,.fa-tools{--fa:\"\\f7d9\"}.fa-arrows-to-eye{--fa:\"\\e4bf\"}.fa-plug-circle-bolt{--fa:\"\\e55b\"}.fa-heart{--fa:\"\\f004\"}.fa-mars-and-venus{--fa:\"\\f224\"}.fa-home-user,.fa-house-user{--fa:\"\\e1b0\"}.fa-dumpster-fire{--fa:\"\\f794\"}.fa-house-crack{--fa:\"\\e3b1\"}.fa-cocktail,.fa-martini-glass-citrus{--fa:\"\\f561\"}.fa-face-surprise,.fa-surprise{--fa:\"\\f5c2\"}.fa-bottle-water{--fa:\"\\e4c5\"}.fa-circle-pause,.fa-pause-circle{--fa:\"\\f28b\"}.fa-toilet-paper-slash{--fa:\"\\e072\"}.fa-apple-alt,.fa-apple-whole{--fa:\"\\f5d1\"}.fa-kitchen-set{--fa:\"\\e51a\"}.fa-r{--fa:\"\\52\"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:\"\\f2ca\"}.fa-cube{--fa:\"\\f1b2\"}.fa-bitcoin-sign{--fa:\"\\e0b4\"}.fa-shield-dog{--fa:\"\\e573\"}.fa-solar-panel{--fa:\"\\f5ba\"}.fa-lock-open{--fa:\"\\f3c1\"}.fa-elevator{--fa:\"\\e16d\"}.fa-money-bill-transfer{--fa:\"\\e528\"}.fa-money-bill-trend-up{--fa:\"\\e529\"}.fa-house-flood-water-circle-arrow-right{--fa:\"\\e50f\"}.fa-poll-h,.fa-square-poll-horizontal{--fa:\"\\f682\"}.fa-circle{--fa:\"\\f111\"}.fa-backward-fast,.fa-fast-backward{--fa:\"\\f049\"}.fa-recycle{--fa:\"\\f1b8\"}.fa-user-astronaut{--fa:\"\\f4fb\"}.fa-plane-slash{--fa:\"\\e069\"}.fa-trademark{--fa:\"\\f25c\"}.fa-basketball,.fa-basketball-ball{--fa:\"\\f434\"}.fa-satellite-dish{--fa:\"\\f7c0\"}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:\"\\f35b\"}.fa-mobile-alt,.fa-mobile-screen-button{--fa:\"\\f3cd\"}.fa-volume-high,.fa-volume-up{--fa:\"\\f028\"}.fa-users-rays{--fa:\"\\e593\"}.fa-wallet{--fa:\"\\f555\"}.fa-clipboard-check{--fa:\"\\f46c\"}.fa-file-audio{--fa:\"\\f1c7\"}.fa-burger,.fa-hamburger{--fa:\"\\f805\"}.fa-wrench{--fa:\"\\f0ad\"}.fa-bugs{--fa:\"\\e4d0\"}.fa-rupee,.fa-rupee-sign{--fa:\"\\f156\"}.fa-file-image{--fa:\"\\f1c5\"}.fa-circle-question,.fa-question-circle{--fa:\"\\f059\"}.fa-plane-departure{--fa:\"\\f5b0\"}.fa-handshake-slash{--fa:\"\\e060\"}.fa-book-bookmark{--fa:\"\\e0bb\"}.fa-code-branch{--fa:\"\\f126\"}.fa-hat-cowboy{--fa:\"\\f8c0\"}.fa-bridge{--fa:\"\\e4c8\"}.fa-phone-alt,.fa-phone-flip{--fa:\"\\f879\"}.fa-truck-front{--fa:\"\\e2b7\"}.fa-cat{--fa:\"\\f6be\"}.fa-anchor-circle-exclamation{--fa:\"\\e4ab\"}.fa-truck-field{--fa:\"\\e58d\"}.fa-route{--fa:\"\\f4d7\"}.fa-clipboard-question{--fa:\"\\e4e3\"}.fa-panorama{--fa:\"\\e209\"}.fa-comment-medical{--fa:\"\\f7f5\"}.fa-teeth-open{--fa:\"\\f62f\"}.fa-file-circle-minus{--fa:\"\\e4ed\"}.fa-tags{--fa:\"\\f02c\"}.fa-wine-glass{--fa:\"\\f4e3\"}.fa-fast-forward,.fa-forward-fast{--fa:\"\\f050\"}.fa-face-meh-blank,.fa-meh-blank{--fa:\"\\f5a4\"}.fa-parking,.fa-square-parking{--fa:\"\\f540\"}.fa-house-signal{--fa:\"\\e012\"}.fa-bars-progress,.fa-tasks-alt{--fa:\"\\f828\"}.fa-faucet-drip{--fa:\"\\e006\"}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:\"\\f474\"}.fa-ban-smoking,.fa-smoking-ban{--fa:\"\\f54d\"}.fa-terminal{--fa:\"\\f120\"}.fa-mobile-button{--fa:\"\\f10b\"}.fa-house-medical-flag{--fa:\"\\e514\"}.fa-basket-shopping,.fa-shopping-basket{--fa:\"\\f291\"}.fa-tape{--fa:\"\\f4db\"}.fa-bus-alt,.fa-bus-simple{--fa:\"\\f55e\"}.fa-eye{--fa:\"\\f06e\"}.fa-face-sad-cry,.fa-sad-cry{--fa:\"\\f5b3\"}.fa-audio-description{--fa:\"\\f29e\"}.fa-person-military-to-person{--fa:\"\\e54c\"}.fa-file-shield{--fa:\"\\e4f0\"}.fa-user-slash{--fa:\"\\f506\"}.fa-pen{--fa:\"\\f304\"}.fa-tower-observation{--fa:\"\\e586\"}.fa-file-code{--fa:\"\\f1c9\"}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:\"\\f012\"}.fa-bus{--fa:\"\\f207\"}.fa-heart-circle-xmark{--fa:\"\\e501\"}.fa-home-lg,.fa-house-chimney{--fa:\"\\e3af\"}.fa-window-maximize{--fa:\"\\f2d0\"}.fa-face-frown,.fa-frown{--fa:\"\\f119\"}.fa-prescription{--fa:\"\\f5b1\"}.fa-shop,.fa-store-alt{--fa:\"\\f54f\"}.fa-floppy-disk,.fa-save{--fa:\"\\f0c7\"}.fa-vihara{--fa:\"\\f6a7\"}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:\"\\f515\"}.fa-sort-asc,.fa-sort-up{--fa:\"\\f0de\"}.fa-comment-dots,.fa-commenting{--fa:\"\\f4ad\"}.fa-plant-wilt{--fa:\"\\e5aa\"}.fa-diamond{--fa:\"\\f219\"}.fa-face-grin-squint,.fa-grin-squint{--fa:\"\\f585\"}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:\"\\f4c0\"}.fa-chart-diagram{--fa:\"\\e695\"}.fa-bacterium{--fa:\"\\e05a\"}.fa-hand-pointer{--fa:\"\\f25a\"}.fa-drum-steelpan{--fa:\"\\f56a\"}.fa-hand-scissors{--fa:\"\\f257\"}.fa-hands-praying,.fa-praying-hands{--fa:\"\\f684\"}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:\"\\f01e\"}.fa-biohazard{--fa:\"\\f780\"}.fa-location,.fa-location-crosshairs{--fa:\"\\f601\"}.fa-mars-double{--fa:\"\\f227\"}.fa-child-dress{--fa:\"\\e59c\"}.fa-users-between-lines{--fa:\"\\e591\"}.fa-lungs-virus{--fa:\"\\e067\"}.fa-face-grin-tears,.fa-grin-tears{--fa:\"\\f588\"}.fa-phone{--fa:\"\\f095\"}.fa-calendar-times,.fa-calendar-xmark{--fa:\"\\f273\"}.fa-child-reaching{--fa:\"\\e59d\"}.fa-head-side-virus{--fa:\"\\e064\"}.fa-user-cog,.fa-user-gear{--fa:\"\\f4fe\"}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:\"\\f163\"}.fa-door-closed{--fa:\"\\f52a\"}.fa-shield-virus{--fa:\"\\e06c\"}.fa-dice-six{--fa:\"\\f526\"}.fa-mosquito-net{--fa:\"\\e52c\"}.fa-file-fragment{--fa:\"\\e697\"}.fa-bridge-water{--fa:\"\\e4ce\"}.fa-person-booth{--fa:\"\\f756\"}.fa-text-width{--fa:\"\\f035\"}.fa-hat-wizard{--fa:\"\\f6e8\"}.fa-pen-fancy{--fa:\"\\f5ac\"}.fa-digging,.fa-person-digging{--fa:\"\\f85e\"}.fa-trash{--fa:\"\\f1f8\"}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:\"\\f629\"}.fa-book-medical{--fa:\"\\f7e6\"}.fa-poo{--fa:\"\\f2fe\"}.fa-quote-right,.fa-quote-right-alt{--fa:\"\\f10e\"}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:\"\\f553\"}.fa-cubes{--fa:\"\\f1b3\"}.fa-divide{--fa:\"\\f529\"}.fa-tenge,.fa-tenge-sign{--fa:\"\\f7d7\"}.fa-headphones{--fa:\"\\f025\"}.fa-hands-holding{--fa:\"\\f4c2\"}.fa-hands-clapping{--fa:\"\\e1a8\"}.fa-republican{--fa:\"\\f75e\"}.fa-arrow-left{--fa:\"\\f060\"}.fa-person-circle-xmark{--fa:\"\\e543\"}.fa-ruler{--fa:\"\\f545\"}.fa-align-left{--fa:\"\\f036\"}.fa-dice-d6{--fa:\"\\f6d1\"}.fa-restroom{--fa:\"\\f7bd\"}.fa-j{--fa:\"\\4a\"}.fa-users-viewfinder{--fa:\"\\e595\"}.fa-file-video{--fa:\"\\f1c8\"}.fa-external-link-alt,.fa-up-right-from-square{--fa:\"\\f35d\"}.fa-table-cells,.fa-th{--fa:\"\\f00a\"}.fa-file-pdf{--fa:\"\\f1c1\"}.fa-bible,.fa-book-bible{--fa:\"\\f647\"}.fa-o{--fa:\"\\4f\"}.fa-medkit,.fa-suitcase-medical{--fa:\"\\f0fa\"}.fa-user-secret{--fa:\"\\f21b\"}.fa-otter{--fa:\"\\f700\"}.fa-female,.fa-person-dress{--fa:\"\\f182\"}.fa-comment-dollar{--fa:\"\\f651\"}.fa-briefcase-clock,.fa-business-time{--fa:\"\\f64a\"}.fa-table-cells-large,.fa-th-large{--fa:\"\\f009\"}.fa-book-tanakh,.fa-tanakh{--fa:\"\\f827\"}.fa-phone-volume,.fa-volume-control-phone{--fa:\"\\f2a0\"}.fa-hat-cowboy-side{--fa:\"\\f8c1\"}.fa-clipboard-user{--fa:\"\\f7f3\"}.fa-child{--fa:\"\\f1ae\"}.fa-lira-sign{--fa:\"\\f195\"}.fa-satellite{--fa:\"\\f7bf\"}.fa-plane-lock{--fa:\"\\e558\"}.fa-tag{--fa:\"\\f02b\"}.fa-comment{--fa:\"\\f075\"}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:\"\\f1fd\"}.fa-envelope{--fa:\"\\f0e0\"}.fa-angle-double-up,.fa-angles-up{--fa:\"\\f102\"}.fa-paperclip{--fa:\"\\f0c6\"}.fa-arrow-right-to-city{--fa:\"\\e4b3\"}.fa-ribbon{--fa:\"\\f4d6\"}.fa-lungs{--fa:\"\\f604\"}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:\"\\f887\"}.fa-litecoin-sign{--fa:\"\\e1d3\"}.fa-border-none{--fa:\"\\f850\"}.fa-circle-nodes{--fa:\"\\e4e2\"}.fa-parachute-box{--fa:\"\\f4cd\"}.fa-indent{--fa:\"\\f03c\"}.fa-truck-field-un{--fa:\"\\e58e\"}.fa-hourglass,.fa-hourglass-empty{--fa:\"\\f254\"}.fa-mountain{--fa:\"\\f6fc\"}.fa-user-doctor,.fa-user-md{--fa:\"\\f0f0\"}.fa-circle-info,.fa-info-circle{--fa:\"\\f05a\"}.fa-cloud-meatball{--fa:\"\\f73b\"}.fa-camera,.fa-camera-alt{--fa:\"\\f030\"}.fa-square-virus{--fa:\"\\e578\"}.fa-meteor{--fa:\"\\f753\"}.fa-car-on{--fa:\"\\e4dd\"}.fa-sleigh{--fa:\"\\f7cc\"}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:\"\\f162\"}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:\"\\f4c1\"}.fa-water{--fa:\"\\f773\"}.fa-calendar-check{--fa:\"\\f274\"}.fa-braille{--fa:\"\\f2a1\"}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:\"\\f486\"}.fa-landmark{--fa:\"\\f66f\"}.fa-truck{--fa:\"\\f0d1\"}.fa-crosshairs{--fa:\"\\f05b\"}.fa-person-cane{--fa:\"\\e53c\"}.fa-tent{--fa:\"\\e57d\"}.fa-vest-patches{--fa:\"\\e086\"}.fa-check-double{--fa:\"\\f560\"}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:\"\\f15d\"}.fa-money-bill-wheat{--fa:\"\\e52a\"}.fa-cookie{--fa:\"\\f563\"}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:\"\\f0e2\"}.fa-hard-drive,.fa-hdd{--fa:\"\\f0a0\"}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:\"\\f586\"}.fa-dumbbell{--fa:\"\\f44b\"}.fa-list-alt,.fa-rectangle-list{--fa:\"\\f022\"}.fa-tarp-droplet{--fa:\"\\e57c\"}.fa-house-medical-circle-check{--fa:\"\\e511\"}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:\"\\f7ca\"}.fa-calendar-plus{--fa:\"\\f271\"}.fa-plane-arrival{--fa:\"\\f5af\"}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:\"\\f359\"}.fa-subway,.fa-train-subway{--fa:\"\\f239\"}.fa-chart-gantt{--fa:\"\\e0e4\"}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:\"\\e1bc\"}.fa-crop-alt,.fa-crop-simple{--fa:\"\\f565\"}.fa-money-bill-1,.fa-money-bill-alt{--fa:\"\\f3d1\"}.fa-left-long,.fa-long-arrow-alt-left{--fa:\"\\f30a\"}.fa-dna{--fa:\"\\f471\"}.fa-virus-slash{--fa:\"\\e075\"}.fa-minus,.fa-subtract{--fa:\"\\f068\"}.fa-chess{--fa:\"\\f439\"}.fa-arrow-left-long,.fa-long-arrow-left{--fa:\"\\f177\"}.fa-plug-circle-check{--fa:\"\\e55c\"}.fa-street-view{--fa:\"\\f21d\"}.fa-franc-sign{--fa:\"\\e18f\"}.fa-volume-off{--fa:\"\\f026\"}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:\"\\f2a3\"}.fa-cog,.fa-gear{--fa:\"\\f013\"}.fa-droplet-slash,.fa-tint-slash{--fa:\"\\f5c7\"}.fa-mosque{--fa:\"\\f678\"}.fa-mosquito{--fa:\"\\e52b\"}.fa-star-of-david{--fa:\"\\f69a\"}.fa-person-military-rifle{--fa:\"\\e54b\"}.fa-cart-shopping,.fa-shopping-cart{--fa:\"\\f07a\"}.fa-vials{--fa:\"\\f493\"}.fa-plug-circle-plus{--fa:\"\\e55f\"}.fa-place-of-worship{--fa:\"\\f67f\"}.fa-grip-vertical{--fa:\"\\f58e\"}.fa-hexagon-nodes{--fa:\"\\e699\"}.fa-arrow-turn-up,.fa-level-up{--fa:\"\\f148\"}.fa-u{--fa:\"\\55\"}.fa-square-root-alt,.fa-square-root-variable{--fa:\"\\f698\"}.fa-clock,.fa-clock-four{--fa:\"\\f017\"}.fa-backward-step,.fa-step-backward{--fa:\"\\f048\"}.fa-pallet{--fa:\"\\f482\"}.fa-faucet{--fa:\"\\e005\"}.fa-baseball-bat-ball{--fa:\"\\f432\"}.fa-s{--fa:\"\\53\"}.fa-timeline{--fa:\"\\e29c\"}.fa-keyboard{--fa:\"\\f11c\"}.fa-caret-down{--fa:\"\\f0d7\"}.fa-clinic-medical,.fa-house-chimney-medical{--fa:\"\\f7f2\"}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:\"\\f2c8\"}.fa-mobile-android-alt,.fa-mobile-screen{--fa:\"\\f3cf\"}.fa-plane-up{--fa:\"\\e22d\"}.fa-piggy-bank{--fa:\"\\f4d3\"}.fa-battery-3,.fa-battery-half{--fa:\"\\f242\"}.fa-mountain-city{--fa:\"\\e52e\"}.fa-coins{--fa:\"\\f51e\"}.fa-khanda{--fa:\"\\f66d\"}.fa-sliders,.fa-sliders-h{--fa:\"\\f1de\"}.fa-folder-tree{--fa:\"\\f802\"}.fa-network-wired{--fa:\"\\f6ff\"}.fa-map-pin{--fa:\"\\f276\"}.fa-hamsa{--fa:\"\\f665\"}.fa-cent-sign{--fa:\"\\e3f5\"}.fa-flask{--fa:\"\\f0c3\"}.fa-person-pregnant{--fa:\"\\e31e\"}.fa-wand-sparkles{--fa:\"\\f72b\"}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:\"\\f142\"}.fa-ticket{--fa:\"\\f145\"}.fa-power-off{--fa:\"\\f011\"}.fa-long-arrow-alt-right,.fa-right-long{--fa:\"\\f30b\"}.fa-flag-usa{--fa:\"\\f74d\"}.fa-laptop-file{--fa:\"\\e51d\"}.fa-teletype,.fa-tty{--fa:\"\\f1e4\"}.fa-diagram-next{--fa:\"\\e476\"}.fa-person-rifle{--fa:\"\\e54e\"}.fa-house-medical-circle-exclamation{--fa:\"\\e512\"}.fa-closed-captioning{--fa:\"\\f20a\"}.fa-hiking,.fa-person-hiking{--fa:\"\\f6ec\"}.fa-venus-double{--fa:\"\\f226\"}.fa-images{--fa:\"\\f302\"}.fa-calculator{--fa:\"\\f1ec\"}.fa-people-pulling{--fa:\"\\e535\"}.fa-n{--fa:\"\\4e\"}.fa-cable-car,.fa-tram{--fa:\"\\f7da\"}.fa-cloud-rain{--fa:\"\\f73d\"}.fa-building-circle-xmark{--fa:\"\\e4d4\"}.fa-ship{--fa:\"\\f21a\"}.fa-arrows-down-to-line{--fa:\"\\e4b8\"}.fa-download{--fa:\"\\f019\"}.fa-face-grin,.fa-grin{--fa:\"\\f580\"}.fa-backspace,.fa-delete-left{--fa:\"\\f55a\"}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:\"\\f1fb\"}.fa-file-circle-check{--fa:\"\\e5a0\"}.fa-forward{--fa:\"\\f04e\"}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:\"\\f3ce\"}.fa-face-meh,.fa-meh{--fa:\"\\f11a\"}.fa-align-center{--fa:\"\\f037\"}.fa-book-dead,.fa-book-skull{--fa:\"\\f6b7\"}.fa-drivers-license,.fa-id-card{--fa:\"\\f2c2\"}.fa-dedent,.fa-outdent{--fa:\"\\f03b\"}.fa-heart-circle-exclamation{--fa:\"\\e4fe\"}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:\"\\f015\"}.fa-calendar-week{--fa:\"\\f784\"}.fa-laptop-medical{--fa:\"\\f812\"}.fa-b{--fa:\"\\42\"}.fa-file-medical{--fa:\"\\f477\"}.fa-dice-one{--fa:\"\\f525\"}.fa-kiwi-bird{--fa:\"\\f535\"}.fa-arrow-right-arrow-left,.fa-exchange{--fa:\"\\f0ec\"}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:\"\\f2f9\"}.fa-cutlery,.fa-utensils{--fa:\"\\f2e7\"}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:\"\\f161\"}.fa-mill-sign{--fa:\"\\e1ed\"}.fa-bowl-rice{--fa:\"\\e2eb\"}.fa-skull{--fa:\"\\f54c\"}.fa-broadcast-tower,.fa-tower-broadcast{--fa:\"\\f519\"}.fa-truck-pickup{--fa:\"\\f63c\"}.fa-long-arrow-alt-up,.fa-up-long{--fa:\"\\f30c\"}.fa-stop{--fa:\"\\f04d\"}.fa-code-merge{--fa:\"\\f387\"}.fa-upload{--fa:\"\\f093\"}.fa-hurricane{--fa:\"\\f751\"}.fa-mound{--fa:\"\\e52d\"}.fa-toilet-portable{--fa:\"\\e583\"}.fa-compact-disc{--fa:\"\\f51f\"}.fa-file-arrow-down,.fa-file-download{--fa:\"\\f56d\"}.fa-caravan{--fa:\"\\f8ff\"}.fa-shield-cat{--fa:\"\\e572\"}.fa-bolt,.fa-zap{--fa:\"\\f0e7\"}.fa-glass-water{--fa:\"\\e4f4\"}.fa-oil-well{--fa:\"\\e532\"}.fa-vault{--fa:\"\\e2c5\"}.fa-mars{--fa:\"\\f222\"}.fa-toilet{--fa:\"\\f7d8\"}.fa-plane-circle-xmark{--fa:\"\\e557\"}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:\"\\f157\"}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:\"\\f158\"}.fa-sun{--fa:\"\\f185\"}.fa-guitar{--fa:\"\\f7a6\"}.fa-face-laugh-wink,.fa-laugh-wink{--fa:\"\\f59c\"}.fa-horse-head{--fa:\"\\f7ab\"}.fa-bore-hole{--fa:\"\\e4c3\"}.fa-industry{--fa:\"\\f275\"}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:\"\\f358\"}.fa-arrows-turn-to-dots{--fa:\"\\e4c1\"}.fa-florin-sign{--fa:\"\\e184\"}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:\"\\f884\"}.fa-less-than{--fa:\"\\3c\"}.fa-angle-down{--fa:\"\\f107\"}.fa-car-tunnel{--fa:\"\\e4de\"}.fa-head-side-cough{--fa:\"\\e061\"}.fa-grip-lines{--fa:\"\\f7a4\"}.fa-thumbs-down{--fa:\"\\f165\"}.fa-user-lock{--fa:\"\\f502\"}.fa-arrow-right-long,.fa-long-arrow-right{--fa:\"\\f178\"}.fa-anchor-circle-xmark{--fa:\"\\e4ac\"}.fa-ellipsis,.fa-ellipsis-h{--fa:\"\\f141\"}.fa-chess-pawn{--fa:\"\\f443\"}.fa-first-aid,.fa-kit-medical{--fa:\"\\f479\"}.fa-person-through-window{--fa:\"\\e5a9\"}.fa-toolbox{--fa:\"\\f552\"}.fa-hands-holding-circle{--fa:\"\\e4fb\"}.fa-bug{--fa:\"\\f188\"}.fa-credit-card,.fa-credit-card-alt{--fa:\"\\f09d\"}.fa-automobile,.fa-car{--fa:\"\\f1b9\"}.fa-hand-holding-hand{--fa:\"\\e4f7\"}.fa-book-open-reader,.fa-book-reader{--fa:\"\\f5da\"}.fa-mountain-sun{--fa:\"\\e52f\"}.fa-arrows-left-right-to-line{--fa:\"\\e4ba\"}.fa-dice-d20{--fa:\"\\f6cf\"}.fa-truck-droplet{--fa:\"\\e58c\"}.fa-file-circle-xmark{--fa:\"\\e5a1\"}.fa-temperature-arrow-up,.fa-temperature-up{--fa:\"\\e040\"}.fa-medal{--fa:\"\\f5a2\"}.fa-bed{--fa:\"\\f236\"}.fa-h-square,.fa-square-h{--fa:\"\\f0fd\"}.fa-podcast{--fa:\"\\f2ce\"}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:\"\\f2c7\"}.fa-bell{--fa:\"\\f0f3\"}.fa-superscript{--fa:\"\\f12b\"}.fa-plug-circle-xmark{--fa:\"\\e560\"}.fa-star-of-life{--fa:\"\\f621\"}.fa-phone-slash{--fa:\"\\f3dd\"}.fa-paint-roller{--fa:\"\\f5aa\"}.fa-hands-helping,.fa-handshake-angle{--fa:\"\\f4c4\"}.fa-location-dot,.fa-map-marker-alt{--fa:\"\\f3c5\"}.fa-file{--fa:\"\\f15b\"}.fa-greater-than{--fa:\"\\3e\"}.fa-person-swimming,.fa-swimmer{--fa:\"\\f5c4\"}.fa-arrow-down{--fa:\"\\f063\"}.fa-droplet,.fa-tint{--fa:\"\\f043\"}.fa-eraser{--fa:\"\\f12d\"}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:\"\\f57d\"}.fa-person-burst{--fa:\"\\e53b\"}.fa-dove{--fa:\"\\f4ba\"}.fa-battery-0,.fa-battery-empty{--fa:\"\\f244\"}.fa-socks{--fa:\"\\f696\"}.fa-inbox{--fa:\"\\f01c\"}.fa-section{--fa:\"\\e447\"}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:\"\\f625\"}.fa-envelope-open-text{--fa:\"\\f658\"}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:\"\\f0f8\"}.fa-wine-bottle{--fa:\"\\f72f\"}.fa-chess-rook{--fa:\"\\f447\"}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:\"\\f550\"}.fa-dharmachakra{--fa:\"\\f655\"}.fa-hotdog{--fa:\"\\f80f\"}.fa-blind,.fa-person-walking-with-cane{--fa:\"\\f29d\"}.fa-drum{--fa:\"\\f569\"}.fa-ice-cream{--fa:\"\\f810\"}.fa-heart-circle-bolt{--fa:\"\\e4fc\"}.fa-fax{--fa:\"\\f1ac\"}.fa-paragraph{--fa:\"\\f1dd\"}.fa-check-to-slot,.fa-vote-yea{--fa:\"\\f772\"}.fa-star-half{--fa:\"\\f089\"}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:\"\\f468\"}.fa-chain,.fa-link{--fa:\"\\f0c1\"}.fa-assistive-listening-systems,.fa-ear-listen{--fa:\"\\f2a2\"}.fa-tree-city{--fa:\"\\e587\"}.fa-play{--fa:\"\\f04b\"}.fa-font{--fa:\"\\f031\"}.fa-table-cells-row-lock{--fa:\"\\e67a\"}.fa-rupiah-sign{--fa:\"\\e23d\"}.fa-magnifying-glass,.fa-search{--fa:\"\\f002\"}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:\"\\f45d\"}.fa-diagnoses,.fa-person-dots-from-line{--fa:\"\\f470\"}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:\"\\f82a\"}.fa-naira-sign{--fa:\"\\e1f6\"}.fa-cart-arrow-down{--fa:\"\\f218\"}.fa-walkie-talkie{--fa:\"\\f8ef\"}.fa-file-edit,.fa-file-pen{--fa:\"\\f31c\"}.fa-receipt{--fa:\"\\f543\"}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:\"\\f14b\"}.fa-suitcase-rolling{--fa:\"\\f5c1\"}.fa-person-circle-exclamation{--fa:\"\\e53f\"}.fa-chevron-down{--fa:\"\\f078\"}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:\"\\f240\"}.fa-skull-crossbones{--fa:\"\\f714\"}.fa-code-compare{--fa:\"\\e13a\"}.fa-list-dots,.fa-list-ul{--fa:\"\\f0ca\"}.fa-school-lock{--fa:\"\\e56f\"}.fa-tower-cell{--fa:\"\\e585\"}.fa-down-long,.fa-long-arrow-alt-down{--fa:\"\\f309\"}.fa-ranking-star{--fa:\"\\e561\"}.fa-chess-king{--fa:\"\\f43f\"}.fa-person-harassing{--fa:\"\\e549\"}.fa-brazilian-real-sign{--fa:\"\\e46c\"}.fa-landmark-alt,.fa-landmark-dome{--fa:\"\\f752\"}.fa-arrow-up{--fa:\"\\f062\"}.fa-television,.fa-tv,.fa-tv-alt{--fa:\"\\f26c\"}.fa-shrimp{--fa:\"\\e448\"}.fa-list-check,.fa-tasks{--fa:\"\\f0ae\"}.fa-jug-detergent{--fa:\"\\e519\"}.fa-circle-user,.fa-user-circle{--fa:\"\\f2bd\"}.fa-user-shield{--fa:\"\\f505\"}.fa-wind{--fa:\"\\f72e\"}.fa-car-burst,.fa-car-crash{--fa:\"\\f5e1\"}.fa-y{--fa:\"\\59\"}.fa-person-snowboarding,.fa-snowboarding{--fa:\"\\f7ce\"}.fa-shipping-fast,.fa-truck-fast{--fa:\"\\f48b\"}.fa-fish{--fa:\"\\f578\"}.fa-user-graduate{--fa:\"\\f501\"}.fa-adjust,.fa-circle-half-stroke{--fa:\"\\f042\"}.fa-clapperboard{--fa:\"\\e131\"}.fa-circle-radiation,.fa-radiation-alt{--fa:\"\\f7ba\"}.fa-baseball,.fa-baseball-ball{--fa:\"\\f433\"}.fa-jet-fighter-up{--fa:\"\\e518\"}.fa-diagram-project,.fa-project-diagram{--fa:\"\\f542\"}.fa-copy{--fa:\"\\f0c5\"}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:\"\\f6a9\"}.fa-hand-sparkles{--fa:\"\\e05d\"}.fa-grip,.fa-grip-horizontal{--fa:\"\\f58d\"}.fa-share-from-square,.fa-share-square{--fa:\"\\f14d\"}.fa-child-combatant,.fa-child-rifle{--fa:\"\\e4e0\"}.fa-gun{--fa:\"\\e19b\"}.fa-phone-square,.fa-square-phone{--fa:\"\\f098\"}.fa-add,.fa-plus{--fa:\"\\2b\"}.fa-expand{--fa:\"\\f065\"}.fa-computer{--fa:\"\\e4e5\"}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:\"\\f00d\"}.fa-arrows,.fa-arrows-up-down-left-right{--fa:\"\\f047\"}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:\"\\f51c\"}.fa-peso-sign{--fa:\"\\e222\"}.fa-building-shield{--fa:\"\\e4d8\"}.fa-baby{--fa:\"\\f77c\"}.fa-users-line{--fa:\"\\e592\"}.fa-quote-left,.fa-quote-left-alt{--fa:\"\\f10d\"}.fa-tractor{--fa:\"\\f722\"}.fa-trash-arrow-up,.fa-trash-restore{--fa:\"\\f829\"}.fa-arrow-down-up-lock{--fa:\"\\e4b0\"}.fa-lines-leaning{--fa:\"\\e51e\"}.fa-ruler-combined{--fa:\"\\f546\"}.fa-copyright{--fa:\"\\f1f9\"}.fa-equals{--fa:\"\\3d\"}.fa-blender{--fa:\"\\f517\"}.fa-teeth{--fa:\"\\f62e\"}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:\"\\f20b\"}.fa-map{--fa:\"\\f279\"}.fa-rocket{--fa:\"\\f135\"}.fa-photo-film,.fa-photo-video{--fa:\"\\f87c\"}.fa-folder-minus{--fa:\"\\f65d\"}.fa-hexagon-nodes-bolt{--fa:\"\\e69a\"}.fa-store{--fa:\"\\f54e\"}.fa-arrow-trend-up{--fa:\"\\e098\"}.fa-plug-circle-minus{--fa:\"\\e55e\"}.fa-sign,.fa-sign-hanging{--fa:\"\\f4d9\"}.fa-bezier-curve{--fa:\"\\f55b\"}.fa-bell-slash{--fa:\"\\f1f6\"}.fa-tablet,.fa-tablet-android{--fa:\"\\f3fb\"}.fa-school-flag{--fa:\"\\e56e\"}.fa-fill{--fa:\"\\f575\"}.fa-angle-up{--fa:\"\\f106\"}.fa-drumstick-bite{--fa:\"\\f6d7\"}.fa-holly-berry{--fa:\"\\f7aa\"}.fa-chevron-left{--fa:\"\\f053\"}.fa-bacteria{--fa:\"\\e059\"}.fa-hand-lizard{--fa:\"\\f258\"}.fa-notdef{--fa:\"\\e1fe\"}.fa-disease{--fa:\"\\f7fa\"}.fa-briefcase-medical{--fa:\"\\f469\"}.fa-genderless{--fa:\"\\f22d\"}.fa-chevron-right{--fa:\"\\f054\"}.fa-retweet{--fa:\"\\f079\"}.fa-car-alt,.fa-car-rear{--fa:\"\\f5de\"}.fa-pump-soap{--fa:\"\\e06b\"}.fa-video-slash{--fa:\"\\f4e2\"}.fa-battery-2,.fa-battery-quarter{--fa:\"\\f243\"}.fa-radio{--fa:\"\\f8d7\"}.fa-baby-carriage,.fa-carriage-baby{--fa:\"\\f77d\"}.fa-traffic-light{--fa:\"\\f637\"}.fa-thermometer{--fa:\"\\f491\"}.fa-vr-cardboard{--fa:\"\\f729\"}.fa-hand-middle-finger{--fa:\"\\f806\"}.fa-percent,.fa-percentage{--fa:\"\\25\"}.fa-truck-moving{--fa:\"\\f4df\"}.fa-glass-water-droplet{--fa:\"\\e4f5\"}.fa-display{--fa:\"\\e163\"}.fa-face-smile,.fa-smile{--fa:\"\\f118\"}.fa-thumb-tack,.fa-thumbtack{--fa:\"\\f08d\"}.fa-trophy{--fa:\"\\f091\"}.fa-person-praying,.fa-pray{--fa:\"\\f683\"}.fa-hammer{--fa:\"\\f6e3\"}.fa-hand-peace{--fa:\"\\f25b\"}.fa-rotate,.fa-sync-alt{--fa:\"\\f2f1\"}.fa-spinner{--fa:\"\\f110\"}.fa-robot{--fa:\"\\f544\"}.fa-peace{--fa:\"\\f67c\"}.fa-cogs,.fa-gears{--fa:\"\\f085\"}.fa-warehouse{--fa:\"\\f494\"}.fa-arrow-up-right-dots{--fa:\"\\e4b7\"}.fa-splotch{--fa:\"\\f5bc\"}.fa-face-grin-hearts,.fa-grin-hearts{--fa:\"\\f584\"}.fa-dice-four{--fa:\"\\f524\"}.fa-sim-card{--fa:\"\\f7c4\"}.fa-transgender,.fa-transgender-alt{--fa:\"\\f225\"}.fa-mercury{--fa:\"\\f223\"}.fa-arrow-turn-down,.fa-level-down{--fa:\"\\f149\"}.fa-person-falling-burst{--fa:\"\\e547\"}.fa-award{--fa:\"\\f559\"}.fa-ticket-alt,.fa-ticket-simple{--fa:\"\\f3ff\"}.fa-building{--fa:\"\\f1ad\"}.fa-angle-double-left,.fa-angles-left{--fa:\"\\f100\"}.fa-qrcode{--fa:\"\\f029\"}.fa-clock-rotate-left,.fa-history{--fa:\"\\f1da\"}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:\"\\f583\"}.fa-arrow-right-from-file,.fa-file-export{--fa:\"\\f56e\"}.fa-shield,.fa-shield-blank{--fa:\"\\f132\"}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:\"\\f885\"}.fa-comment-nodes{--fa:\"\\e696\"}.fa-house-medical{--fa:\"\\e3b2\"}.fa-golf-ball,.fa-golf-ball-tee{--fa:\"\\f450\"}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:\"\\f137\"}.fa-house-chimney-window{--fa:\"\\e00d\"}.fa-pen-nib{--fa:\"\\f5ad\"}.fa-tent-arrow-turn-left{--fa:\"\\e580\"}.fa-tents{--fa:\"\\e582\"}.fa-magic,.fa-wand-magic{--fa:\"\\f0d0\"}.fa-dog{--fa:\"\\f6d3\"}.fa-carrot{--fa:\"\\f787\"}.fa-moon{--fa:\"\\f186\"}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:\"\\f5ce\"}.fa-cheese{--fa:\"\\f7ef\"}.fa-yin-yang{--fa:\"\\f6ad\"}.fa-music{--fa:\"\\f001\"}.fa-code-commit{--fa:\"\\f386\"}.fa-temperature-low{--fa:\"\\f76b\"}.fa-biking,.fa-person-biking{--fa:\"\\f84a\"}.fa-broom{--fa:\"\\f51a\"}.fa-shield-heart{--fa:\"\\e574\"}.fa-gopuram{--fa:\"\\f664\"}.fa-earth-oceania,.fa-globe-oceania{--fa:\"\\e47b\"}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:\"\\f2d3\"}.fa-hashtag{--fa:\"\\23\"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:\"\\f424\"}.fa-oil-can{--fa:\"\\f613\"}.fa-t{--fa:\"\\54\"}.fa-hippo{--fa:\"\\f6ed\"}.fa-chart-column{--fa:\"\\e0e3\"}.fa-infinity{--fa:\"\\f534\"}.fa-vial-circle-check{--fa:\"\\e596\"}.fa-person-arrow-down-to-line{--fa:\"\\e538\"}.fa-voicemail{--fa:\"\\f897\"}.fa-fan{--fa:\"\\f863\"}.fa-person-walking-luggage{--fa:\"\\e554\"}.fa-arrows-alt-v,.fa-up-down{--fa:\"\\f338\"}.fa-cloud-moon-rain{--fa:\"\\f73c\"}.fa-calendar{--fa:\"\\f133\"}.fa-trailer{--fa:\"\\e041\"}.fa-bahai,.fa-haykal{--fa:\"\\f666\"}.fa-sd-card{--fa:\"\\f7c2\"}.fa-dragon{--fa:\"\\f6d5\"}.fa-shoe-prints{--fa:\"\\f54b\"}.fa-circle-plus,.fa-plus-circle{--fa:\"\\f055\"}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:\"\\f58b\"}.fa-hand-holding{--fa:\"\\f4bd\"}.fa-plug-circle-exclamation{--fa:\"\\e55d\"}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:\"\\f127\"}.fa-clone{--fa:\"\\f24d\"}.fa-person-walking-arrow-loop-left{--fa:\"\\e551\"}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:\"\\f882\"}.fa-fire-alt,.fa-fire-flame-curved{--fa:\"\\f7e4\"}.fa-tornado{--fa:\"\\f76f\"}.fa-file-circle-plus{--fa:\"\\e494\"}.fa-book-quran,.fa-quran{--fa:\"\\f687\"}.fa-anchor{--fa:\"\\f13d\"}.fa-border-all{--fa:\"\\f84c\"}.fa-angry,.fa-face-angry{--fa:\"\\f556\"}.fa-cookie-bite{--fa:\"\\f564\"}.fa-arrow-trend-down{--fa:\"\\e097\"}.fa-feed,.fa-rss{--fa:\"\\f09e\"}.fa-draw-polygon{--fa:\"\\f5ee\"}.fa-balance-scale,.fa-scale-balanced{--fa:\"\\f24e\"}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:\"\\f62a\"}.fa-shower{--fa:\"\\f2cc\"}.fa-desktop,.fa-desktop-alt{--fa:\"\\f390\"}.fa-m{--fa:\"\\4d\"}.fa-table-list,.fa-th-list{--fa:\"\\f00b\"}.fa-comment-sms,.fa-sms{--fa:\"\\f7cd\"}.fa-book{--fa:\"\\f02d\"}.fa-user-plus{--fa:\"\\f234\"}.fa-check{--fa:\"\\f00c\"}.fa-battery-4,.fa-battery-three-quarters{--fa:\"\\f241\"}.fa-house-circle-check{--fa:\"\\e509\"}.fa-angle-left{--fa:\"\\f104\"}.fa-diagram-successor{--fa:\"\\e47a\"}.fa-truck-arrow-right{--fa:\"\\e58b\"}.fa-arrows-split-up-and-left{--fa:\"\\e4bc\"}.fa-fist-raised,.fa-hand-fist{--fa:\"\\f6de\"}.fa-cloud-moon{--fa:\"\\f6c3\"}.fa-briefcase{--fa:\"\\f0b1\"}.fa-person-falling{--fa:\"\\e546\"}.fa-image-portrait,.fa-portrait{--fa:\"\\f3e0\"}.fa-user-tag{--fa:\"\\f507\"}.fa-rug{--fa:\"\\e569\"}.fa-earth-europe,.fa-globe-europe{--fa:\"\\f7a2\"}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:\"\\f59d\"}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:\"\\f410\"}.fa-baht-sign{--fa:\"\\e0ac\"}.fa-book-open{--fa:\"\\f518\"}.fa-book-journal-whills,.fa-journal-whills{--fa:\"\\f66a\"}.fa-handcuffs{--fa:\"\\e4f8\"}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:\"\\f071\"}.fa-database{--fa:\"\\f1c0\"}.fa-mail-forward,.fa-share{--fa:\"\\f064\"}.fa-bottle-droplet{--fa:\"\\e4c4\"}.fa-mask-face{--fa:\"\\e1d7\"}.fa-hill-rockslide{--fa:\"\\e508\"}.fa-exchange-alt,.fa-right-left{--fa:\"\\f362\"}.fa-paper-plane{--fa:\"\\f1d8\"}.fa-road-circle-exclamation{--fa:\"\\e565\"}.fa-dungeon{--fa:\"\\f6d9\"}.fa-align-right{--fa:\"\\f038\"}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:\"\\f53b\"}.fa-life-ring{--fa:\"\\f1cd\"}.fa-hands,.fa-sign-language,.fa-signing{--fa:\"\\f2a7\"}.fa-calendar-day{--fa:\"\\f783\"}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:\"\\f5c5\"}.fa-arrows-up-down,.fa-arrows-v{--fa:\"\\f07d\"}.fa-face-grimace,.fa-grimace{--fa:\"\\f57f\"}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:\"\\e2ce\"}.fa-level-down-alt,.fa-turn-down{--fa:\"\\f3be\"}.fa-person-walking-arrow-right{--fa:\"\\e552\"}.fa-envelope-square,.fa-square-envelope{--fa:\"\\f199\"}.fa-dice{--fa:\"\\f522\"}.fa-bowling-ball{--fa:\"\\f436\"}.fa-brain{--fa:\"\\f5dc\"}.fa-band-aid,.fa-bandage{--fa:\"\\f462\"}.fa-calendar-minus{--fa:\"\\f272\"}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:\"\\f057\"}.fa-gifts{--fa:\"\\f79c\"}.fa-hotel{--fa:\"\\f594\"}.fa-earth-asia,.fa-globe-asia{--fa:\"\\f57e\"}.fa-id-card-alt,.fa-id-card-clip{--fa:\"\\f47f\"}.fa-magnifying-glass-plus,.fa-search-plus{--fa:\"\\f00e\"}.fa-thumbs-up{--fa:\"\\f164\"}.fa-user-clock{--fa:\"\\f4fd\"}.fa-allergies,.fa-hand-dots{--fa:\"\\f461\"}.fa-file-invoice{--fa:\"\\f570\"}.fa-window-minimize{--fa:\"\\f2d1\"}.fa-coffee,.fa-mug-saucer{--fa:\"\\f0f4\"}.fa-brush{--fa:\"\\f55d\"}.fa-file-half-dashed{--fa:\"\\e698\"}.fa-mask{--fa:\"\\f6fa\"}.fa-magnifying-glass-minus,.fa-search-minus{--fa:\"\\f010\"}.fa-ruler-vertical{--fa:\"\\f548\"}.fa-user-alt,.fa-user-large{--fa:\"\\f406\"}.fa-train-tram{--fa:\"\\e5b4\"}.fa-user-nurse{--fa:\"\\f82f\"}.fa-syringe{--fa:\"\\f48e\"}.fa-cloud-sun{--fa:\"\\f6c4\"}.fa-stopwatch-20{--fa:\"\\e06f\"}.fa-square-full{--fa:\"\\f45c\"}.fa-magnet{--fa:\"\\f076\"}.fa-jar{--fa:\"\\e516\"}.fa-note-sticky,.fa-sticky-note{--fa:\"\\f249\"}.fa-bug-slash{--fa:\"\\e490\"}.fa-arrow-up-from-water-pump{--fa:\"\\e4b6\"}.fa-bone{--fa:\"\\f5d7\"}.fa-table-cells-row-unlock{--fa:\"\\e691\"}.fa-user-injured{--fa:\"\\f728\"}.fa-face-sad-tear,.fa-sad-tear{--fa:\"\\f5b4\"}.fa-plane{--fa:\"\\f072\"}.fa-tent-arrows-down{--fa:\"\\e581\"}.fa-exclamation{--fa:\"\\21\"}.fa-arrows-spin{--fa:\"\\e4bb\"}.fa-print{--fa:\"\\f02f\"}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:\"\\e2bb\"}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:\"\\24\"}.fa-x{--fa:\"\\58\"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:\"\\f688\"}.fa-users-cog,.fa-users-gear{--fa:\"\\f509\"}.fa-person-military-pointing{--fa:\"\\e54a\"}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:\"\\f19c\"}.fa-umbrella{--fa:\"\\f0e9\"}.fa-trowel{--fa:\"\\e589\"}.fa-d{--fa:\"\\44\"}.fa-stapler{--fa:\"\\e5af\"}.fa-masks-theater,.fa-theater-masks{--fa:\"\\f630\"}.fa-kip-sign{--fa:\"\\e1c4\"}.fa-hand-point-left{--fa:\"\\f0a5\"}.fa-handshake-alt,.fa-handshake-simple{--fa:\"\\f4c6\"}.fa-fighter-jet,.fa-jet-fighter{--fa:\"\\f0fb\"}.fa-share-alt-square,.fa-square-share-nodes{--fa:\"\\f1e1\"}.fa-barcode{--fa:\"\\f02a\"}.fa-plus-minus{--fa:\"\\e43c\"}.fa-video,.fa-video-camera{--fa:\"\\f03d\"}.fa-graduation-cap,.fa-mortar-board{--fa:\"\\f19d\"}.fa-hand-holding-medical{--fa:\"\\e05c\"}.fa-person-circle-check{--fa:\"\\e53e\"}.fa-level-up-alt,.fa-turn-up{--fa:\"\\f3bf\"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:\"Font Awesome 6 Brands\";--fa-font-brands:normal 400 1em/1 \"Font Awesome 6 Brands\"}@font-face{font-family:\"Font Awesome 6 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:\"\\f3d0\"}.fa-hooli{--fa:\"\\f427\"}.fa-yelp{--fa:\"\\f1e9\"}.fa-cc-visa{--fa:\"\\f1f0\"}.fa-lastfm{--fa:\"\\f202\"}.fa-shopware{--fa:\"\\f5b5\"}.fa-creative-commons-nc{--fa:\"\\f4e8\"}.fa-aws{--fa:\"\\f375\"}.fa-redhat{--fa:\"\\f7bc\"}.fa-yoast{--fa:\"\\f2b1\"}.fa-cloudflare{--fa:\"\\e07d\"}.fa-ups{--fa:\"\\f7e0\"}.fa-pixiv{--fa:\"\\e640\"}.fa-wpexplorer{--fa:\"\\f2de\"}.fa-dyalog{--fa:\"\\f399\"}.fa-bity{--fa:\"\\f37a\"}.fa-stackpath{--fa:\"\\f842\"}.fa-buysellads{--fa:\"\\f20d\"}.fa-first-order{--fa:\"\\f2b0\"}.fa-modx{--fa:\"\\f285\"}.fa-guilded{--fa:\"\\e07e\"}.fa-vnv{--fa:\"\\f40b\"}.fa-js-square,.fa-square-js{--fa:\"\\f3b9\"}.fa-microsoft{--fa:\"\\f3ca\"}.fa-qq{--fa:\"\\f1d6\"}.fa-orcid{--fa:\"\\f8d2\"}.fa-java{--fa:\"\\f4e4\"}.fa-invision{--fa:\"\\f7b0\"}.fa-creative-commons-pd-alt{--fa:\"\\f4ed\"}.fa-centercode{--fa:\"\\f380\"}.fa-glide-g{--fa:\"\\f2a6\"}.fa-drupal{--fa:\"\\f1a9\"}.fa-jxl{--fa:\"\\e67b\"}.fa-dart-lang{--fa:\"\\e693\"}.fa-hire-a-helper{--fa:\"\\f3b0\"}.fa-creative-commons-by{--fa:\"\\f4e7\"}.fa-unity{--fa:\"\\e049\"}.fa-whmcs{--fa:\"\\f40d\"}.fa-rocketchat{--fa:\"\\f3e8\"}.fa-vk{--fa:\"\\f189\"}.fa-untappd{--fa:\"\\f405\"}.fa-mailchimp{--fa:\"\\f59e\"}.fa-css3-alt{--fa:\"\\f38b\"}.fa-reddit-square,.fa-square-reddit{--fa:\"\\f1a2\"}.fa-vimeo-v{--fa:\"\\f27d\"}.fa-contao{--fa:\"\\f26d\"}.fa-square-font-awesome{--fa:\"\\e5ad\"}.fa-deskpro{--fa:\"\\f38f\"}.fa-brave{--fa:\"\\e63c\"}.fa-sistrix{--fa:\"\\f3ee\"}.fa-instagram-square,.fa-square-instagram{--fa:\"\\e055\"}.fa-battle-net{--fa:\"\\f835\"}.fa-the-red-yeti{--fa:\"\\f69d\"}.fa-hacker-news-square,.fa-square-hacker-news{--fa:\"\\f3af\"}.fa-edge{--fa:\"\\f282\"}.fa-threads{--fa:\"\\e618\"}.fa-napster{--fa:\"\\f3d2\"}.fa-snapchat-square,.fa-square-snapchat{--fa:\"\\f2ad\"}.fa-google-plus-g{--fa:\"\\f0d5\"}.fa-artstation{--fa:\"\\f77a\"}.fa-markdown{--fa:\"\\f60f\"}.fa-sourcetree{--fa:\"\\f7d3\"}.fa-google-plus{--fa:\"\\f2b3\"}.fa-diaspora{--fa:\"\\f791\"}.fa-foursquare{--fa:\"\\f180\"}.fa-stack-overflow{--fa:\"\\f16c\"}.fa-github-alt{--fa:\"\\f113\"}.fa-phoenix-squadron{--fa:\"\\f511\"}.fa-pagelines{--fa:\"\\f18c\"}.fa-algolia{--fa:\"\\f36c\"}.fa-red-river{--fa:\"\\f3e3\"}.fa-creative-commons-sa{--fa:\"\\f4ef\"}.fa-safari{--fa:\"\\f267\"}.fa-google{--fa:\"\\f1a0\"}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:\"\\f35c\"}.fa-atlassian{--fa:\"\\f77b\"}.fa-linkedin-in{--fa:\"\\f0e1\"}.fa-digital-ocean{--fa:\"\\f391\"}.fa-nimblr{--fa:\"\\f5a8\"}.fa-chromecast{--fa:\"\\f838\"}.fa-evernote{--fa:\"\\f839\"}.fa-hacker-news{--fa:\"\\f1d4\"}.fa-creative-commons-sampling{--fa:\"\\f4f0\"}.fa-adversal{--fa:\"\\f36a\"}.fa-creative-commons{--fa:\"\\f25e\"}.fa-watchman-monitoring{--fa:\"\\e087\"}.fa-fonticons{--fa:\"\\f280\"}.fa-weixin{--fa:\"\\f1d7\"}.fa-shirtsinbulk{--fa:\"\\f214\"}.fa-codepen{--fa:\"\\f1cb\"}.fa-git-alt{--fa:\"\\f841\"}.fa-lyft{--fa:\"\\f3c3\"}.fa-rev{--fa:\"\\f5b2\"}.fa-windows{--fa:\"\\f17a\"}.fa-wizards-of-the-coast{--fa:\"\\f730\"}.fa-square-viadeo,.fa-viadeo-square{--fa:\"\\f2aa\"}.fa-meetup{--fa:\"\\f2e0\"}.fa-centos{--fa:\"\\f789\"}.fa-adn{--fa:\"\\f170\"}.fa-cloudsmith{--fa:\"\\f384\"}.fa-opensuse{--fa:\"\\e62b\"}.fa-pied-piper-alt{--fa:\"\\f1a8\"}.fa-dribbble-square,.fa-square-dribbble{--fa:\"\\f397\"}.fa-codiepie{--fa:\"\\f284\"}.fa-node{--fa:\"\\f419\"}.fa-mix{--fa:\"\\f3cb\"}.fa-steam{--fa:\"\\f1b6\"}.fa-cc-apple-pay{--fa:\"\\f416\"}.fa-scribd{--fa:\"\\f28a\"}.fa-debian{--fa:\"\\e60b\"}.fa-openid{--fa:\"\\f19b\"}.fa-instalod{--fa:\"\\e081\"}.fa-files-pinwheel{--fa:\"\\e69f\"}.fa-expeditedssl{--fa:\"\\f23e\"}.fa-sellcast{--fa:\"\\f2da\"}.fa-square-twitter,.fa-twitter-square{--fa:\"\\f081\"}.fa-r-project{--fa:\"\\f4f7\"}.fa-delicious{--fa:\"\\f1a5\"}.fa-freebsd{--fa:\"\\f3a4\"}.fa-vuejs{--fa:\"\\f41f\"}.fa-accusoft{--fa:\"\\f369\"}.fa-ioxhost{--fa:\"\\f208\"}.fa-fonticons-fi{--fa:\"\\f3a2\"}.fa-app-store{--fa:\"\\f36f\"}.fa-cc-mastercard{--fa:\"\\f1f1\"}.fa-itunes-note{--fa:\"\\f3b5\"}.fa-golang{--fa:\"\\e40f\"}.fa-kickstarter,.fa-square-kickstarter{--fa:\"\\f3bb\"}.fa-grav{--fa:\"\\f2d6\"}.fa-weibo{--fa:\"\\f18a\"}.fa-uncharted{--fa:\"\\e084\"}.fa-firstdraft{--fa:\"\\f3a1\"}.fa-square-youtube,.fa-youtube-square{--fa:\"\\f431\"}.fa-wikipedia-w{--fa:\"\\f266\"}.fa-rendact,.fa-wpressr{--fa:\"\\f3e4\"}.fa-angellist{--fa:\"\\f209\"}.fa-galactic-republic{--fa:\"\\f50c\"}.fa-nfc-directional{--fa:\"\\e530\"}.fa-skype{--fa:\"\\f17e\"}.fa-joget{--fa:\"\\f3b7\"}.fa-fedora{--fa:\"\\f798\"}.fa-stripe-s{--fa:\"\\f42a\"}.fa-meta{--fa:\"\\e49b\"}.fa-laravel{--fa:\"\\f3bd\"}.fa-hotjar{--fa:\"\\f3b1\"}.fa-bluetooth-b{--fa:\"\\f294\"}.fa-square-letterboxd{--fa:\"\\e62e\"}.fa-sticker-mule{--fa:\"\\f3f7\"}.fa-creative-commons-zero{--fa:\"\\f4f3\"}.fa-hips{--fa:\"\\f452\"}.fa-css{--fa:\"\\e6a2\"}.fa-behance{--fa:\"\\f1b4\"}.fa-reddit{--fa:\"\\f1a1\"}.fa-discord{--fa:\"\\f392\"}.fa-chrome{--fa:\"\\f268\"}.fa-app-store-ios{--fa:\"\\f370\"}.fa-cc-discover{--fa:\"\\f1f2\"}.fa-wpbeginner{--fa:\"\\f297\"}.fa-confluence{--fa:\"\\f78d\"}.fa-shoelace{--fa:\"\\e60c\"}.fa-mdb{--fa:\"\\f8ca\"}.fa-dochub{--fa:\"\\f394\"}.fa-accessible-icon{--fa:\"\\f368\"}.fa-ebay{--fa:\"\\f4f4\"}.fa-amazon{--fa:\"\\f270\"}.fa-unsplash{--fa:\"\\e07c\"}.fa-yarn{--fa:\"\\f7e3\"}.fa-square-steam,.fa-steam-square{--fa:\"\\f1b7\"}.fa-500px{--fa:\"\\f26e\"}.fa-square-vimeo,.fa-vimeo-square{--fa:\"\\f194\"}.fa-asymmetrik{--fa:\"\\f372\"}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:\"\\f2b4\"}.fa-gratipay{--fa:\"\\f184\"}.fa-apple{--fa:\"\\f179\"}.fa-hive{--fa:\"\\e07f\"}.fa-gitkraken{--fa:\"\\f3a6\"}.fa-keybase{--fa:\"\\f4f5\"}.fa-apple-pay{--fa:\"\\f415\"}.fa-padlet{--fa:\"\\e4a0\"}.fa-amazon-pay{--fa:\"\\f42c\"}.fa-github-square,.fa-square-github{--fa:\"\\f092\"}.fa-stumbleupon{--fa:\"\\f1a4\"}.fa-fedex{--fa:\"\\f797\"}.fa-phoenix-framework{--fa:\"\\f3dc\"}.fa-shopify{--fa:\"\\e057\"}.fa-neos{--fa:\"\\f612\"}.fa-square-threads{--fa:\"\\e619\"}.fa-hackerrank{--fa:\"\\f5f7\"}.fa-researchgate{--fa:\"\\f4f8\"}.fa-swift{--fa:\"\\f8e1\"}.fa-angular{--fa:\"\\f420\"}.fa-speakap{--fa:\"\\f3f3\"}.fa-angrycreative{--fa:\"\\f36e\"}.fa-y-combinator{--fa:\"\\f23b\"}.fa-empire{--fa:\"\\f1d1\"}.fa-envira{--fa:\"\\f299\"}.fa-google-scholar{--fa:\"\\e63b\"}.fa-gitlab-square,.fa-square-gitlab{--fa:\"\\e5ae\"}.fa-studiovinari{--fa:\"\\f3f8\"}.fa-pied-piper{--fa:\"\\f2ae\"}.fa-wordpress{--fa:\"\\f19a\"}.fa-product-hunt{--fa:\"\\f288\"}.fa-firefox{--fa:\"\\f269\"}.fa-linode{--fa:\"\\f2b8\"}.fa-goodreads{--fa:\"\\f3a8\"}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:\"\\f264\"}.fa-jsfiddle{--fa:\"\\f1cc\"}.fa-sith{--fa:\"\\f512\"}.fa-themeisle{--fa:\"\\f2b2\"}.fa-page4{--fa:\"\\f3d7\"}.fa-hashnode{--fa:\"\\e499\"}.fa-react{--fa:\"\\f41b\"}.fa-cc-paypal{--fa:\"\\f1f4\"}.fa-squarespace{--fa:\"\\f5be\"}.fa-cc-stripe{--fa:\"\\f1f5\"}.fa-creative-commons-share{--fa:\"\\f4f2\"}.fa-bitcoin{--fa:\"\\f379\"}.fa-keycdn{--fa:\"\\f3ba\"}.fa-opera{--fa:\"\\f26a\"}.fa-itch-io{--fa:\"\\f83a\"}.fa-umbraco{--fa:\"\\f8e8\"}.fa-galactic-senate{--fa:\"\\f50d\"}.fa-ubuntu{--fa:\"\\f7df\"}.fa-draft2digital{--fa:\"\\f396\"}.fa-stripe{--fa:\"\\f429\"}.fa-houzz{--fa:\"\\f27c\"}.fa-gg{--fa:\"\\f260\"}.fa-dhl{--fa:\"\\f790\"}.fa-pinterest-square,.fa-square-pinterest{--fa:\"\\f0d3\"}.fa-xing{--fa:\"\\f168\"}.fa-blackberry{--fa:\"\\f37b\"}.fa-creative-commons-pd{--fa:\"\\f4ec\"}.fa-playstation{--fa:\"\\f3df\"}.fa-quinscape{--fa:\"\\f459\"}.fa-less{--fa:\"\\f41d\"}.fa-blogger-b{--fa:\"\\f37d\"}.fa-opencart{--fa:\"\\f23d\"}.fa-vine{--fa:\"\\f1ca\"}.fa-signal-messenger{--fa:\"\\e663\"}.fa-paypal{--fa:\"\\f1ed\"}.fa-gitlab{--fa:\"\\f296\"}.fa-typo3{--fa:\"\\f42b\"}.fa-reddit-alien{--fa:\"\\f281\"}.fa-yahoo{--fa:\"\\f19e\"}.fa-dailymotion{--fa:\"\\e052\"}.fa-affiliatetheme{--fa:\"\\f36b\"}.fa-pied-piper-pp{--fa:\"\\f1a7\"}.fa-bootstrap{--fa:\"\\f836\"}.fa-odnoklassniki{--fa:\"\\f263\"}.fa-nfc-symbol{--fa:\"\\e531\"}.fa-mintbit{--fa:\"\\e62f\"}.fa-ethereum{--fa:\"\\f42e\"}.fa-speaker-deck{--fa:\"\\f83c\"}.fa-creative-commons-nc-eu{--fa:\"\\f4e9\"}.fa-patreon{--fa:\"\\f3d9\"}.fa-avianex{--fa:\"\\f374\"}.fa-ello{--fa:\"\\f5f1\"}.fa-gofore{--fa:\"\\f3a7\"}.fa-bimobject{--fa:\"\\f378\"}.fa-brave-reverse{--fa:\"\\e63d\"}.fa-facebook-f{--fa:\"\\f39e\"}.fa-google-plus-square,.fa-square-google-plus{--fa:\"\\f0d4\"}.fa-web-awesome{--fa:\"\\e682\"}.fa-mandalorian{--fa:\"\\f50f\"}.fa-first-order-alt{--fa:\"\\f50a\"}.fa-osi{--fa:\"\\f41a\"}.fa-google-wallet{--fa:\"\\f1ee\"}.fa-d-and-d-beyond{--fa:\"\\f6ca\"}.fa-periscope{--fa:\"\\f3da\"}.fa-fulcrum{--fa:\"\\f50b\"}.fa-cloudscale{--fa:\"\\f383\"}.fa-forumbee{--fa:\"\\f211\"}.fa-mizuni{--fa:\"\\f3cc\"}.fa-schlix{--fa:\"\\f3ea\"}.fa-square-xing,.fa-xing-square{--fa:\"\\f169\"}.fa-bandcamp{--fa:\"\\f2d5\"}.fa-wpforms{--fa:\"\\f298\"}.fa-cloudversify{--fa:\"\\f385\"}.fa-usps{--fa:\"\\f7e1\"}.fa-megaport{--fa:\"\\f5a3\"}.fa-magento{--fa:\"\\f3c4\"}.fa-spotify{--fa:\"\\f1bc\"}.fa-optin-monster{--fa:\"\\f23c\"}.fa-fly{--fa:\"\\f417\"}.fa-square-bluesky{--fa:\"\\e6a3\"}.fa-aviato{--fa:\"\\f421\"}.fa-itunes{--fa:\"\\f3b4\"}.fa-cuttlefish{--fa:\"\\f38c\"}.fa-blogger{--fa:\"\\f37c\"}.fa-flickr{--fa:\"\\f16e\"}.fa-viber{--fa:\"\\f409\"}.fa-soundcloud{--fa:\"\\f1be\"}.fa-digg{--fa:\"\\f1a6\"}.fa-tencent-weibo{--fa:\"\\f1d5\"}.fa-letterboxd{--fa:\"\\e62d\"}.fa-symfony{--fa:\"\\f83d\"}.fa-maxcdn{--fa:\"\\f136\"}.fa-etsy{--fa:\"\\f2d7\"}.fa-facebook-messenger{--fa:\"\\f39f\"}.fa-audible{--fa:\"\\f373\"}.fa-think-peaks{--fa:\"\\f731\"}.fa-bilibili{--fa:\"\\e3d9\"}.fa-erlang{--fa:\"\\f39d\"}.fa-x-twitter{--fa:\"\\e61b\"}.fa-cotton-bureau{--fa:\"\\f89e\"}.fa-dashcube{--fa:\"\\f210\"}.fa-42-group,.fa-innosoft{--fa:\"\\e080\"}.fa-stack-exchange{--fa:\"\\f18d\"}.fa-elementor{--fa:\"\\f430\"}.fa-pied-piper-square,.fa-square-pied-piper{--fa:\"\\e01e\"}.fa-creative-commons-nd{--fa:\"\\f4eb\"}.fa-palfed{--fa:\"\\f3d8\"}.fa-superpowers{--fa:\"\\f2dd\"}.fa-resolving{--fa:\"\\f3e7\"}.fa-xbox{--fa:\"\\f412\"}.fa-square-web-awesome-stroke{--fa:\"\\e684\"}.fa-searchengin{--fa:\"\\f3eb\"}.fa-tiktok{--fa:\"\\e07b\"}.fa-facebook-square,.fa-square-facebook{--fa:\"\\f082\"}.fa-renren{--fa:\"\\f18b\"}.fa-linux{--fa:\"\\f17c\"}.fa-glide{--fa:\"\\f2a5\"}.fa-linkedin{--fa:\"\\f08c\"}.fa-hubspot{--fa:\"\\f3b2\"}.fa-deploydog{--fa:\"\\f38e\"}.fa-twitch{--fa:\"\\f1e8\"}.fa-flutter{--fa:\"\\e694\"}.fa-ravelry{--fa:\"\\f2d9\"}.fa-mixer{--fa:\"\\e056\"}.fa-lastfm-square,.fa-square-lastfm{--fa:\"\\f203\"}.fa-vimeo{--fa:\"\\f40a\"}.fa-mendeley{--fa:\"\\f7b3\"}.fa-uniregistry{--fa:\"\\f404\"}.fa-figma{--fa:\"\\f799\"}.fa-creative-commons-remix{--fa:\"\\f4ee\"}.fa-cc-amazon-pay{--fa:\"\\f42d\"}.fa-dropbox{--fa:\"\\f16b\"}.fa-instagram{--fa:\"\\f16d\"}.fa-cmplid{--fa:\"\\e360\"}.fa-upwork{--fa:\"\\e641\"}.fa-facebook{--fa:\"\\f09a\"}.fa-gripfire{--fa:\"\\f3ac\"}.fa-jedi-order{--fa:\"\\f50e\"}.fa-uikit{--fa:\"\\f403\"}.fa-fort-awesome-alt{--fa:\"\\f3a3\"}.fa-phabricator{--fa:\"\\f3db\"}.fa-ussunnah{--fa:\"\\f407\"}.fa-earlybirds{--fa:\"\\f39a\"}.fa-trade-federation{--fa:\"\\f513\"}.fa-autoprefixer{--fa:\"\\f41c\"}.fa-whatsapp{--fa:\"\\f232\"}.fa-square-upwork{--fa:\"\\e67c\"}.fa-slideshare{--fa:\"\\f1e7\"}.fa-google-play{--fa:\"\\f3ab\"}.fa-viadeo{--fa:\"\\f2a9\"}.fa-line{--fa:\"\\f3c0\"}.fa-google-drive{--fa:\"\\f3aa\"}.fa-servicestack{--fa:\"\\f3ec\"}.fa-simplybuilt{--fa:\"\\f215\"}.fa-bitbucket{--fa:\"\\f171\"}.fa-imdb{--fa:\"\\f2d8\"}.fa-deezer{--fa:\"\\e077\"}.fa-raspberry-pi{--fa:\"\\f7bb\"}.fa-jira{--fa:\"\\f7b1\"}.fa-docker{--fa:\"\\f395\"}.fa-screenpal{--fa:\"\\e570\"}.fa-bluetooth{--fa:\"\\f293\"}.fa-gitter{--fa:\"\\f426\"}.fa-d-and-d{--fa:\"\\f38d\"}.fa-microblog{--fa:\"\\e01a\"}.fa-cc-diners-club{--fa:\"\\f24c\"}.fa-gg-circle{--fa:\"\\f261\"}.fa-pied-piper-hat{--fa:\"\\f4e5\"}.fa-kickstarter-k{--fa:\"\\f3bc\"}.fa-yandex{--fa:\"\\f413\"}.fa-readme{--fa:\"\\f4d5\"}.fa-html5{--fa:\"\\f13b\"}.fa-sellsy{--fa:\"\\f213\"}.fa-square-web-awesome{--fa:\"\\e683\"}.fa-sass{--fa:\"\\f41e\"}.fa-wirsindhandwerk,.fa-wsh{--fa:\"\\e2d0\"}.fa-buromobelexperte{--fa:\"\\f37f\"}.fa-salesforce{--fa:\"\\f83b\"}.fa-octopus-deploy{--fa:\"\\e082\"}.fa-medapps{--fa:\"\\f3c6\"}.fa-ns8{--fa:\"\\f3d5\"}.fa-pinterest-p{--fa:\"\\f231\"}.fa-apper{--fa:\"\\f371\"}.fa-fort-awesome{--fa:\"\\f286\"}.fa-waze{--fa:\"\\f83f\"}.fa-bluesky{--fa:\"\\e671\"}.fa-cc-jcb{--fa:\"\\f24b\"}.fa-snapchat,.fa-snapchat-ghost{--fa:\"\\f2ab\"}.fa-fantasy-flight-games{--fa:\"\\f6dc\"}.fa-rust{--fa:\"\\e07a\"}.fa-wix{--fa:\"\\f5cf\"}.fa-behance-square,.fa-square-behance{--fa:\"\\f1b5\"}.fa-supple{--fa:\"\\f3f9\"}.fa-webflow{--fa:\"\\e65c\"}.fa-rebel{--fa:\"\\f1d0\"}.fa-css3{--fa:\"\\f13c\"}.fa-staylinked{--fa:\"\\f3f5\"}.fa-kaggle{--fa:\"\\f5fa\"}.fa-space-awesome{--fa:\"\\e5ac\"}.fa-deviantart{--fa:\"\\f1bd\"}.fa-cpanel{--fa:\"\\f388\"}.fa-goodreads-g{--fa:\"\\f3a9\"}.fa-git-square,.fa-square-git{--fa:\"\\f1d2\"}.fa-square-tumblr,.fa-tumblr-square{--fa:\"\\f174\"}.fa-trello{--fa:\"\\f181\"}.fa-creative-commons-nc-jp{--fa:\"\\f4ea\"}.fa-get-pocket{--fa:\"\\f265\"}.fa-perbyte{--fa:\"\\e083\"}.fa-grunt{--fa:\"\\f3ad\"}.fa-weebly{--fa:\"\\f5cc\"}.fa-connectdevelop{--fa:\"\\f20e\"}.fa-leanpub{--fa:\"\\f212\"}.fa-black-tie{--fa:\"\\f27e\"}.fa-themeco{--fa:\"\\f5c6\"}.fa-python{--fa:\"\\f3e2\"}.fa-android{--fa:\"\\f17b\"}.fa-bots{--fa:\"\\e340\"}.fa-free-code-camp{--fa:\"\\f2c5\"}.fa-hornbill{--fa:\"\\f592\"}.fa-js{--fa:\"\\f3b8\"}.fa-ideal{--fa:\"\\e013\"}.fa-git{--fa:\"\\f1d3\"}.fa-dev{--fa:\"\\f6cc\"}.fa-sketch{--fa:\"\\f7c6\"}.fa-yandex-international{--fa:\"\\f414\"}.fa-cc-amex{--fa:\"\\f1f3\"}.fa-uber{--fa:\"\\f402\"}.fa-github{--fa:\"\\f09b\"}.fa-php{--fa:\"\\f457\"}.fa-alipay{--fa:\"\\f642\"}.fa-youtube{--fa:\"\\f167\"}.fa-skyatlas{--fa:\"\\f216\"}.fa-firefox-browser{--fa:\"\\e007\"}.fa-replyd{--fa:\"\\f3e6\"}.fa-suse{--fa:\"\\f7d6\"}.fa-jenkins{--fa:\"\\f3b6\"}.fa-twitter{--fa:\"\\f099\"}.fa-rockrms{--fa:\"\\f3e9\"}.fa-pinterest{--fa:\"\\f0d2\"}.fa-buffer{--fa:\"\\f837\"}.fa-npm{--fa:\"\\f3d4\"}.fa-yammer{--fa:\"\\f840\"}.fa-btc{--fa:\"\\f15a\"}.fa-dribbble{--fa:\"\\f17d\"}.fa-stumbleupon-circle{--fa:\"\\f1a3\"}.fa-internet-explorer{--fa:\"\\f26b\"}.fa-stubber{--fa:\"\\e5c7\"}.fa-telegram,.fa-telegram-plane{--fa:\"\\f2c6\"}.fa-old-republic{--fa:\"\\f510\"}.fa-odysee{--fa:\"\\e5c6\"}.fa-square-whatsapp,.fa-whatsapp-square{--fa:\"\\f40c\"}.fa-node-js{--fa:\"\\f3d3\"}.fa-edge-legacy{--fa:\"\\e078\"}.fa-slack,.fa-slack-hash{--fa:\"\\f198\"}.fa-medrt{--fa:\"\\f3c8\"}.fa-usb{--fa:\"\\f287\"}.fa-tumblr{--fa:\"\\f173\"}.fa-vaadin{--fa:\"\\f408\"}.fa-quora{--fa:\"\\f2c4\"}.fa-square-x-twitter{--fa:\"\\e61a\"}.fa-reacteurope{--fa:\"\\f75d\"}.fa-medium,.fa-medium-m{--fa:\"\\f23a\"}.fa-amilia{--fa:\"\\f36d\"}.fa-mixcloud{--fa:\"\\f289\"}.fa-flipboard{--fa:\"\\f44d\"}.fa-viacoin{--fa:\"\\f237\"}.fa-critical-role{--fa:\"\\f6c9\"}.fa-sitrox{--fa:\"\\e44a\"}.fa-discourse{--fa:\"\\f393\"}.fa-joomla{--fa:\"\\f1aa\"}.fa-mastodon{--fa:\"\\f4f6\"}.fa-airbnb{--fa:\"\\f834\"}.fa-wolf-pack-battalion{--fa:\"\\f514\"}.fa-buy-n-large{--fa:\"\\f8a6\"}.fa-gulp{--fa:\"\\f3ae\"}.fa-creative-commons-sampling-plus{--fa:\"\\f4f1\"}.fa-strava{--fa:\"\\f428\"}.fa-ember{--fa:\"\\f423\"}.fa-canadian-maple-leaf{--fa:\"\\f785\"}.fa-teamspeak{--fa:\"\\f4f9\"}.fa-pushed{--fa:\"\\f3e1\"}.fa-wordpress-simple{--fa:\"\\f411\"}.fa-nutritionix{--fa:\"\\f3d6\"}.fa-wodu{--fa:\"\\e088\"}.fa-google-pay{--fa:\"\\e079\"}.fa-intercom{--fa:\"\\f7af\"}.fa-zhihu{--fa:\"\\f63f\"}.fa-korvue{--fa:\"\\f42f\"}.fa-pix{--fa:\"\\e43a\"}.fa-steam-symbol{--fa:\"\\f3f6\"}:host,:root{--fa-font-regular:normal 400 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:\"Font Awesome 6 Free\";--fa-font-solid:normal 900 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa-solid,.fas{font-weight:900}@font-face{font-family:\"Font Awesome 5 Brands\";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format(\"woff2\"),url(../webfonts/fa-v4compatibility.ttf) format(\"truetype\");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}.button{display:flex;height:50px;padding:0;background:#3e7671;border:none;outline:none;border-radius:5px;overflow:hidden;font-size:16px;font-weight:500;cursor:pointer;min-width:220px;max-width:220px}.button:hover{background:#008168}.button:active{background:#3e7671}.button-text{display:block;margin:auto;padding:0 10px;color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:50%;text-transform:capitalize}.button-icon{margin:auto;padding:10px;font-size:20px;color:#ffffff}.button-profile{margin:auto}.button-profile svg{display:flex;margin-left:4px;background-color:#fff;border-radius:4px}.profile-image{display:flex;margin-left:4px;width:40px;height:40px;border-radius:4px;background-color:#fff}.button-text-full-width{width:auto!important}.button-link{text-decoration:none!important}.dropdown{position:relative;display:inline-block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:180px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1;border-radius:5px;text-align:left!important}.dropdown-content-link a{color:#71797E;padding:16px 20px;text-decoration:none;display:block;cursor:pointer;font-size:1rem!important}.dropdown-content-link a:hover{background-color:#f1f1f1;color:#000;opacity:0.7}.dropdown:hover .dropdown-content{display:block}.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4);text-align:center}.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:40%}.modal-body{max-height:50vh;overflow-y:auto}.close{color:#aaaaaa;float:right;font-size:28px;font-weight:bold}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer}.modal-app{background-color:#c3e9bc;padding:15px;margin:10px;border-radius:5px}.external-app-link{text-decoration:none;color:#000}.gray-text{color:#606060}.green-text{color:#3e7671}#countdown{position:relative;margin:auto;margin-top:30px;height:40px;width:40px;text-align:center}#countdown-number{color:#2e2e2e;display:inline-block;line-height:40px}#countdown svg{position:absolute;top:0;right:0;width:40px;height:40px;transform:rotateY(-180deg) rotateZ(-90deg)}#countdown svg circle{stroke-dasharray:113px;stroke-dashoffset:0px;stroke-linecap:round;stroke-width:4px;stroke:#008168;fill:none;animation:countdown 6s linear infinite forwards}@keyframes countdown{from{stroke-dashoffset:0px}to{stroke-dashoffset:113px}}.lds-ring{color:#fff}.lds-ring{display:flex;justify-content:center;align-items:center;margin:auto;position:relative}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:25px;height:25px;margin:3px;border:2px solid currentColor;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:currentColor transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.dropdown-content .dropdown-user-profile{padding:12px 10px 8px 18px;border-bottom:1px solid #aaaaaa}.dropdown-content .dropdown-user-profile .username{font-size:16px;color:#2e2e2e;text-transform:capitalize}.dropdown-content .dropdown-user-profile .first-last-name{font-size:13px;color:#606060}.menu-bar-icons{color:#008168;display:inline-block;margin-right:8px;font-size:18px}.other-links-list{padding:14px;background-color:#f1f1f1;margin-bottom:8px;text-align:start;border-radius:5px}.tab-list{margin:0px 40px;padding:0;list-style:none;display:flex;position:relative;width:85%;border-bottom:1px solid #aaa}.tab-item{flex:1;text-align:center;transition:.3s;opacity:0.5}.tab-toggle{display:none}.tab-content{display:none}.tab-toggle:nth-child(1):checked~.tab-list .tab-item:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-list .tab-item:nth-child(2){opacity:1;color:#008168;border-bottom:2px solid #008168}.tab-toggle:nth-child(2):checked~.tab-list::before{transform:translateX(100%)}.tab-toggle:nth-child(3):checked~.tab-list::before{transform:translateX(200%)}.tab-toggle:nth-child(1):checked~.tab-container .tab-content:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-container .tab-content:nth-child(2){display:block}.tab-trigger{display:block;padding:10px 0}.tab-container{padding:15px 30px}.grid-view-menu{display:grid;gap:4px;grid-template-columns:repeat(3, 1fr);align-content:start;padding:8px;max-height:230px;overflow-y:auto}.grid-view-link{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:75px;height:70px;padding:6px;text-decoration:none;font-size:13px;color:#128f8b;text-align:center;transition:transform 0.2s ease, background-color 0.1s ease;position:relative;z-index:1;border-radius:3px;cursor:pointer}.grid-view-link:hover{background-color:#eeeeee;transform:scale(1.1);z-index:5}.grid-view-link-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#71797e;width:100%}.grid-view-link:hover .grid-view-link-text{white-space:pre-wrap;overflow:visible;text-overflow:unset}.grid-view-link i{transition:transform 0.2s ease}.grid-view-link:hover i{transform:scale(1.1)}hr.solid{border-top:1px solid #bbb;margin:2px 0}.restricted-overlay{position:fixed;inset:0;background:linear-gradient(135deg, #0f3d3e, #128f8b);display:flex;justify-content:center;align-items:center;padding:20px;z-index:9999999;font-family:\"Segoe UI\", sans-serif}.restricted-card{background:#ffffff;border-radius:10px;padding:50px;max-width:540px;width:100%;text-align:center;box-shadow:0 25px 70px rgba(0, 0, 0, 0.25);animation:fadeInUp 0.3s ease}.restricted-icon{font-size:48px;color:#128f8b;margin-bottom:30px}.restricted-card h2{margin-bottom:10px;color:#128f8b}.restricted-message{color:#555;font-size:16px;margin-bottom:30px;line-height:1.5}.restricted-links h4{margin-bottom:20px;color:#128f8b}.link-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:20px;margin-bottom:25px}.restricted-link{background:#ecf2f2;padding:10px;border-radius:10px;text-decoration:none;color:#128f8b;font-size:13px;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all 0.2s ease}.restricted-link:hover{background:#128f8b;color:#fff}.restricted-actions{display:flex;justify-content:center;gap:15px}.btn-primary{background:#128f8b;color:#fff;padding:10px 20px;border-radius:8px;text-decoration:none;font-weight:500;transition:0.2s}.btn-primary:hover{background:#0f6e6b}.btn-secondary{background:transparent;border:2px solid #128f8b;color:#128f8b;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-danger{background:transparent;border:2px solid #dc3545;color:#dc3545;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-secondary:hover{background:#128f8b;color:#fff}@keyframes fadeInUp{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}";
4003
- const DashButtonStyle0 = dashButtonCss;
4061
+ const dashButtonCss = () => `.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:"\\30"}.fa-1{--fa:"\\31"}.fa-2{--fa:"\\32"}.fa-3{--fa:"\\33"}.fa-4{--fa:"\\34"}.fa-5{--fa:"\\35"}.fa-6{--fa:"\\36"}.fa-7{--fa:"\\37"}.fa-8{--fa:"\\38"}.fa-9{--fa:"\\39"}.fa-fill-drip{--fa:"\\f576"}.fa-arrows-to-circle{--fa:"\\e4bd"}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:"\\f138"}.fa-at{--fa:"\\40"}.fa-trash-alt,.fa-trash-can{--fa:"\\f2ed"}.fa-text-height{--fa:"\\f034"}.fa-user-times,.fa-user-xmark{--fa:"\\f235"}.fa-stethoscope{--fa:"\\f0f1"}.fa-comment-alt,.fa-message{--fa:"\\f27a"}.fa-info{--fa:"\\f129"}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:"\\f422"}.fa-explosion{--fa:"\\e4e9"}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:"\\f15c"}.fa-wave-square{--fa:"\\f83e"}.fa-ring{--fa:"\\f70b"}.fa-building-un{--fa:"\\e4d9"}.fa-dice-three{--fa:"\\f527"}.fa-calendar-alt,.fa-calendar-days{--fa:"\\f073"}.fa-anchor-circle-check{--fa:"\\e4aa"}.fa-building-circle-arrow-right{--fa:"\\e4d1"}.fa-volleyball,.fa-volleyball-ball{--fa:"\\f45f"}.fa-arrows-up-to-line{--fa:"\\e4c2"}.fa-sort-desc,.fa-sort-down{--fa:"\\f0dd"}.fa-circle-minus,.fa-minus-circle{--fa:"\\f056"}.fa-door-open{--fa:"\\f52b"}.fa-right-from-bracket,.fa-sign-out-alt{--fa:"\\f2f5"}.fa-atom{--fa:"\\f5d2"}.fa-soap{--fa:"\\e06e"}.fa-heart-music-camera-bolt,.fa-icons{--fa:"\\f86d"}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:"\\f539"}.fa-bridge-circle-check{--fa:"\\e4c9"}.fa-pump-medical{--fa:"\\e06a"}.fa-fingerprint{--fa:"\\f577"}.fa-hand-point-right{--fa:"\\f0a4"}.fa-magnifying-glass-location,.fa-search-location{--fa:"\\f689"}.fa-forward-step,.fa-step-forward{--fa:"\\f051"}.fa-face-smile-beam,.fa-smile-beam{--fa:"\\f5b8"}.fa-flag-checkered{--fa:"\\f11e"}.fa-football,.fa-football-ball{--fa:"\\f44e"}.fa-school-circle-exclamation{--fa:"\\e56c"}.fa-crop{--fa:"\\f125"}.fa-angle-double-down,.fa-angles-down{--fa:"\\f103"}.fa-users-rectangle{--fa:"\\e594"}.fa-people-roof{--fa:"\\e537"}.fa-people-line{--fa:"\\e534"}.fa-beer,.fa-beer-mug-empty{--fa:"\\f0fc"}.fa-diagram-predecessor{--fa:"\\e477"}.fa-arrow-up-long,.fa-long-arrow-up{--fa:"\\f176"}.fa-burn,.fa-fire-flame-simple{--fa:"\\f46a"}.fa-male,.fa-person{--fa:"\\f183"}.fa-laptop{--fa:"\\f109"}.fa-file-csv{--fa:"\\f6dd"}.fa-menorah{--fa:"\\f676"}.fa-truck-plane{--fa:"\\e58f"}.fa-record-vinyl{--fa:"\\f8d9"}.fa-face-grin-stars,.fa-grin-stars{--fa:"\\f587"}.fa-bong{--fa:"\\f55c"}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:"\\f67b"}.fa-arrow-down-up-across-line{--fa:"\\e4af"}.fa-spoon,.fa-utensil-spoon{--fa:"\\f2e5"}.fa-jar-wheat{--fa:"\\e517"}.fa-envelopes-bulk,.fa-mail-bulk{--fa:"\\f674"}.fa-file-circle-exclamation{--fa:"\\e4eb"}.fa-circle-h,.fa-hospital-symbol{--fa:"\\f47e"}.fa-pager{--fa:"\\f815"}.fa-address-book,.fa-contact-book{--fa:"\\f2b9"}.fa-strikethrough{--fa:"\\f0cc"}.fa-k{--fa:"\\4b"}.fa-landmark-flag{--fa:"\\e51c"}.fa-pencil,.fa-pencil-alt{--fa:"\\f303"}.fa-backward{--fa:"\\f04a"}.fa-caret-right{--fa:"\\f0da"}.fa-comments{--fa:"\\f086"}.fa-file-clipboard,.fa-paste{--fa:"\\f0ea"}.fa-code-pull-request{--fa:"\\e13c"}.fa-clipboard-list{--fa:"\\f46d"}.fa-truck-loading,.fa-truck-ramp-box{--fa:"\\f4de"}.fa-user-check{--fa:"\\f4fc"}.fa-vial-virus{--fa:"\\e597"}.fa-sheet-plastic{--fa:"\\e571"}.fa-blog{--fa:"\\f781"}.fa-user-ninja{--fa:"\\f504"}.fa-person-arrow-up-from-line{--fa:"\\e539"}.fa-scroll-torah,.fa-torah{--fa:"\\f6a0"}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:"\\f458"}.fa-toggle-off{--fa:"\\f204"}.fa-archive,.fa-box-archive{--fa:"\\f187"}.fa-person-drowning{--fa:"\\e545"}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:"\\f886"}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:"\\f58a"}.fa-spray-can{--fa:"\\f5bd"}.fa-truck-monster{--fa:"\\f63b"}.fa-w{--fa:"\\57"}.fa-earth-africa,.fa-globe-africa{--fa:"\\f57c"}.fa-rainbow{--fa:"\\f75b"}.fa-circle-notch{--fa:"\\f1ce"}.fa-tablet-alt,.fa-tablet-screen-button{--fa:"\\f3fa"}.fa-paw{--fa:"\\f1b0"}.fa-cloud{--fa:"\\f0c2"}.fa-trowel-bricks{--fa:"\\e58a"}.fa-face-flushed,.fa-flushed{--fa:"\\f579"}.fa-hospital-user{--fa:"\\f80d"}.fa-tent-arrow-left-right{--fa:"\\e57f"}.fa-gavel,.fa-legal{--fa:"\\f0e3"}.fa-binoculars{--fa:"\\f1e5"}.fa-microphone-slash{--fa:"\\f131"}.fa-box-tissue{--fa:"\\e05b"}.fa-motorcycle{--fa:"\\f21c"}.fa-bell-concierge,.fa-concierge-bell{--fa:"\\f562"}.fa-pen-ruler,.fa-pencil-ruler{--fa:"\\f5ae"}.fa-people-arrows,.fa-people-arrows-left-right{--fa:"\\e068"}.fa-mars-and-venus-burst{--fa:"\\e523"}.fa-caret-square-right,.fa-square-caret-right{--fa:"\\f152"}.fa-cut,.fa-scissors{--fa:"\\f0c4"}.fa-sun-plant-wilt{--fa:"\\e57a"}.fa-toilets-portable{--fa:"\\e584"}.fa-hockey-puck{--fa:"\\f453"}.fa-table{--fa:"\\f0ce"}.fa-magnifying-glass-arrow-right{--fa:"\\e521"}.fa-digital-tachograph,.fa-tachograph-digital{--fa:"\\f566"}.fa-users-slash{--fa:"\\e073"}.fa-clover{--fa:"\\e139"}.fa-mail-reply,.fa-reply{--fa:"\\f3e5"}.fa-star-and-crescent{--fa:"\\f699"}.fa-house-fire{--fa:"\\e50c"}.fa-minus-square,.fa-square-minus{--fa:"\\f146"}.fa-helicopter{--fa:"\\f533"}.fa-compass{--fa:"\\f14e"}.fa-caret-square-down,.fa-square-caret-down{--fa:"\\f150"}.fa-file-circle-question{--fa:"\\e4ef"}.fa-laptop-code{--fa:"\\f5fc"}.fa-swatchbook{--fa:"\\f5c3"}.fa-prescription-bottle{--fa:"\\f485"}.fa-bars,.fa-navicon{--fa:"\\f0c9"}.fa-people-group{--fa:"\\e533"}.fa-hourglass-3,.fa-hourglass-end{--fa:"\\f253"}.fa-heart-broken,.fa-heart-crack{--fa:"\\f7a9"}.fa-external-link-square-alt,.fa-square-up-right{--fa:"\\f360"}.fa-face-kiss-beam,.fa-kiss-beam{--fa:"\\f597"}.fa-film{--fa:"\\f008"}.fa-ruler-horizontal{--fa:"\\f547"}.fa-people-robbery{--fa:"\\e536"}.fa-lightbulb{--fa:"\\f0eb"}.fa-caret-left{--fa:"\\f0d9"}.fa-circle-exclamation,.fa-exclamation-circle{--fa:"\\f06a"}.fa-school-circle-xmark{--fa:"\\e56d"}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:"\\f08b"}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:"\\f13a"}.fa-unlock-alt,.fa-unlock-keyhole{--fa:"\\f13e"}.fa-cloud-showers-heavy{--fa:"\\f740"}.fa-headphones-alt,.fa-headphones-simple{--fa:"\\f58f"}.fa-sitemap{--fa:"\\f0e8"}.fa-circle-dollar-to-slot,.fa-donate{--fa:"\\f4b9"}.fa-memory{--fa:"\\f538"}.fa-road-spikes{--fa:"\\e568"}.fa-fire-burner{--fa:"\\e4f1"}.fa-flag{--fa:"\\f024"}.fa-hanukiah{--fa:"\\f6e6"}.fa-feather{--fa:"\\f52d"}.fa-volume-down,.fa-volume-low{--fa:"\\f027"}.fa-comment-slash{--fa:"\\f4b3"}.fa-cloud-sun-rain{--fa:"\\f743"}.fa-compress{--fa:"\\f066"}.fa-wheat-alt,.fa-wheat-awn{--fa:"\\e2cd"}.fa-ankh{--fa:"\\f644"}.fa-hands-holding-child{--fa:"\\e4fa"}.fa-asterisk{--fa:"\\2a"}.fa-check-square,.fa-square-check{--fa:"\\f14a"}.fa-peseta-sign{--fa:"\\e221"}.fa-header,.fa-heading{--fa:"\\f1dc"}.fa-ghost{--fa:"\\f6e2"}.fa-list,.fa-list-squares{--fa:"\\f03a"}.fa-phone-square-alt,.fa-square-phone-flip{--fa:"\\f87b"}.fa-cart-plus{--fa:"\\f217"}.fa-gamepad{--fa:"\\f11b"}.fa-circle-dot,.fa-dot-circle{--fa:"\\f192"}.fa-dizzy,.fa-face-dizzy{--fa:"\\f567"}.fa-egg{--fa:"\\f7fb"}.fa-house-medical-circle-xmark{--fa:"\\e513"}.fa-campground{--fa:"\\f6bb"}.fa-folder-plus{--fa:"\\f65e"}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:"\\f1e3"}.fa-paint-brush,.fa-paintbrush{--fa:"\\f1fc"}.fa-lock{--fa:"\\f023"}.fa-gas-pump{--fa:"\\f52f"}.fa-hot-tub,.fa-hot-tub-person{--fa:"\\f593"}.fa-map-location,.fa-map-marked{--fa:"\\f59f"}.fa-house-flood-water{--fa:"\\e50e"}.fa-tree{--fa:"\\f1bb"}.fa-bridge-lock{--fa:"\\e4cc"}.fa-sack-dollar{--fa:"\\f81d"}.fa-edit,.fa-pen-to-square{--fa:"\\f044"}.fa-car-side{--fa:"\\f5e4"}.fa-share-alt,.fa-share-nodes{--fa:"\\f1e0"}.fa-heart-circle-minus{--fa:"\\e4ff"}.fa-hourglass-2,.fa-hourglass-half{--fa:"\\f252"}.fa-microscope{--fa:"\\f610"}.fa-sink{--fa:"\\e06d"}.fa-bag-shopping,.fa-shopping-bag{--fa:"\\f290"}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:"\\f881"}.fa-mitten{--fa:"\\f7b5"}.fa-person-rays{--fa:"\\e54d"}.fa-users{--fa:"\\f0c0"}.fa-eye-slash{--fa:"\\f070"}.fa-flask-vial{--fa:"\\e4f3"}.fa-hand,.fa-hand-paper{--fa:"\\f256"}.fa-om{--fa:"\\f679"}.fa-worm{--fa:"\\e599"}.fa-house-circle-xmark{--fa:"\\e50b"}.fa-plug{--fa:"\\f1e6"}.fa-chevron-up{--fa:"\\f077"}.fa-hand-spock{--fa:"\\f259"}.fa-stopwatch{--fa:"\\f2f2"}.fa-face-kiss,.fa-kiss{--fa:"\\f596"}.fa-bridge-circle-xmark{--fa:"\\e4cb"}.fa-face-grin-tongue,.fa-grin-tongue{--fa:"\\f589"}.fa-chess-bishop{--fa:"\\f43a"}.fa-face-grin-wink,.fa-grin-wink{--fa:"\\f58c"}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:"\\f2a4"}.fa-road-circle-check{--fa:"\\e564"}.fa-dice-five{--fa:"\\f523"}.fa-rss-square,.fa-square-rss{--fa:"\\f143"}.fa-land-mine-on{--fa:"\\e51b"}.fa-i-cursor{--fa:"\\f246"}.fa-stamp{--fa:"\\f5bf"}.fa-stairs{--fa:"\\e289"}.fa-i{--fa:"\\49"}.fa-hryvnia,.fa-hryvnia-sign{--fa:"\\f6f2"}.fa-pills{--fa:"\\f484"}.fa-face-grin-wide,.fa-grin-alt{--fa:"\\f581"}.fa-tooth{--fa:"\\f5c9"}.fa-v{--fa:"\\56"}.fa-bangladeshi-taka-sign{--fa:"\\e2e6"}.fa-bicycle{--fa:"\\f206"}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:"\\e579"}.fa-head-side-cough-slash{--fa:"\\e062"}.fa-ambulance,.fa-truck-medical{--fa:"\\f0f9"}.fa-wheat-awn-circle-exclamation{--fa:"\\e598"}.fa-snowman{--fa:"\\f7d0"}.fa-mortar-pestle{--fa:"\\f5a7"}.fa-road-barrier{--fa:"\\e562"}.fa-school{--fa:"\\f549"}.fa-igloo{--fa:"\\f7ae"}.fa-joint{--fa:"\\f595"}.fa-angle-right{--fa:"\\f105"}.fa-horse{--fa:"\\f6f0"}.fa-q{--fa:"\\51"}.fa-g{--fa:"\\47"}.fa-notes-medical{--fa:"\\f481"}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:"\\f2c9"}.fa-dong-sign{--fa:"\\e169"}.fa-capsules{--fa:"\\f46b"}.fa-poo-bolt,.fa-poo-storm{--fa:"\\f75a"}.fa-face-frown-open,.fa-frown-open{--fa:"\\f57a"}.fa-hand-point-up{--fa:"\\f0a6"}.fa-money-bill{--fa:"\\f0d6"}.fa-bookmark{--fa:"\\f02e"}.fa-align-justify{--fa:"\\f039"}.fa-umbrella-beach{--fa:"\\f5ca"}.fa-helmet-un{--fa:"\\e503"}.fa-bullseye{--fa:"\\f140"}.fa-bacon{--fa:"\\f7e5"}.fa-hand-point-down{--fa:"\\f0a7"}.fa-arrow-up-from-bracket{--fa:"\\e09a"}.fa-folder,.fa-folder-blank{--fa:"\\f07b"}.fa-file-medical-alt,.fa-file-waveform{--fa:"\\f478"}.fa-radiation{--fa:"\\f7b9"}.fa-chart-simple{--fa:"\\e473"}.fa-mars-stroke{--fa:"\\f229"}.fa-vial{--fa:"\\f492"}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:"\\f624"}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:"\\e2ca"}.fa-e{--fa:"\\45"}.fa-pen-alt,.fa-pen-clip{--fa:"\\f305"}.fa-bridge-circle-exclamation{--fa:"\\e4ca"}.fa-user{--fa:"\\f007"}.fa-school-circle-check{--fa:"\\e56b"}.fa-dumpster{--fa:"\\f793"}.fa-shuttle-van,.fa-van-shuttle{--fa:"\\f5b6"}.fa-building-user{--fa:"\\e4da"}.fa-caret-square-left,.fa-square-caret-left{--fa:"\\f191"}.fa-highlighter{--fa:"\\f591"}.fa-key{--fa:"\\f084"}.fa-bullhorn{--fa:"\\f0a1"}.fa-globe{--fa:"\\f0ac"}.fa-synagogue{--fa:"\\f69b"}.fa-person-half-dress{--fa:"\\e548"}.fa-road-bridge{--fa:"\\e563"}.fa-location-arrow{--fa:"\\f124"}.fa-c{--fa:"\\43"}.fa-tablet-button{--fa:"\\f10a"}.fa-building-lock{--fa:"\\e4d6"}.fa-pizza-slice{--fa:"\\f818"}.fa-money-bill-wave{--fa:"\\f53a"}.fa-area-chart,.fa-chart-area{--fa:"\\f1fe"}.fa-house-flag{--fa:"\\e50d"}.fa-person-circle-minus{--fa:"\\e540"}.fa-ban,.fa-cancel{--fa:"\\f05e"}.fa-camera-rotate{--fa:"\\e0d8"}.fa-air-freshener,.fa-spray-can-sparkles{--fa:"\\f5d0"}.fa-star{--fa:"\\f005"}.fa-repeat{--fa:"\\f363"}.fa-cross{--fa:"\\f654"}.fa-box{--fa:"\\f466"}.fa-venus-mars{--fa:"\\f228"}.fa-arrow-pointer,.fa-mouse-pointer{--fa:"\\f245"}.fa-expand-arrows-alt,.fa-maximize{--fa:"\\f31e"}.fa-charging-station{--fa:"\\f5e7"}.fa-shapes,.fa-triangle-circle-square{--fa:"\\f61f"}.fa-random,.fa-shuffle{--fa:"\\f074"}.fa-person-running,.fa-running{--fa:"\\f70c"}.fa-mobile-retro{--fa:"\\e527"}.fa-grip-lines-vertical{--fa:"\\f7a5"}.fa-spider{--fa:"\\f717"}.fa-hands-bound{--fa:"\\e4f9"}.fa-file-invoice-dollar{--fa:"\\f571"}.fa-plane-circle-exclamation{--fa:"\\e556"}.fa-x-ray{--fa:"\\f497"}.fa-spell-check{--fa:"\\f891"}.fa-slash{--fa:"\\f715"}.fa-computer-mouse,.fa-mouse{--fa:"\\f8cc"}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:"\\f090"}.fa-shop-slash,.fa-store-alt-slash{--fa:"\\e070"}.fa-server{--fa:"\\f233"}.fa-virus-covid-slash{--fa:"\\e4a9"}.fa-shop-lock{--fa:"\\e4a5"}.fa-hourglass-1,.fa-hourglass-start{--fa:"\\f251"}.fa-blender-phone{--fa:"\\f6b6"}.fa-building-wheat{--fa:"\\e4db"}.fa-person-breastfeeding{--fa:"\\e53a"}.fa-right-to-bracket,.fa-sign-in-alt{--fa:"\\f2f6"}.fa-venus{--fa:"\\f221"}.fa-passport{--fa:"\\f5ab"}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:"\\e68f"}.fa-heart-pulse,.fa-heartbeat{--fa:"\\f21e"}.fa-people-carry,.fa-people-carry-box{--fa:"\\f4ce"}.fa-temperature-high{--fa:"\\f769"}.fa-microchip{--fa:"\\f2db"}.fa-crown{--fa:"\\f521"}.fa-weight-hanging{--fa:"\\f5cd"}.fa-xmarks-lines{--fa:"\\e59a"}.fa-file-prescription{--fa:"\\f572"}.fa-weight,.fa-weight-scale{--fa:"\\f496"}.fa-user-friends,.fa-user-group{--fa:"\\f500"}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:"\\f15e"}.fa-chess-knight{--fa:"\\f441"}.fa-face-laugh-squint,.fa-laugh-squint{--fa:"\\f59b"}.fa-wheelchair{--fa:"\\f193"}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:"\\f0aa"}.fa-toggle-on{--fa:"\\f205"}.fa-person-walking,.fa-walking{--fa:"\\f554"}.fa-l{--fa:"\\4c"}.fa-fire{--fa:"\\f06d"}.fa-bed-pulse,.fa-procedures{--fa:"\\f487"}.fa-shuttle-space,.fa-space-shuttle{--fa:"\\f197"}.fa-face-laugh,.fa-laugh{--fa:"\\f599"}.fa-folder-open{--fa:"\\f07c"}.fa-heart-circle-plus{--fa:"\\e500"}.fa-code-fork{--fa:"\\e13b"}.fa-city{--fa:"\\f64f"}.fa-microphone-alt,.fa-microphone-lines{--fa:"\\f3c9"}.fa-pepper-hot{--fa:"\\f816"}.fa-unlock{--fa:"\\f09c"}.fa-colon-sign{--fa:"\\e140"}.fa-headset{--fa:"\\f590"}.fa-store-slash{--fa:"\\e071"}.fa-road-circle-xmark{--fa:"\\e566"}.fa-user-minus{--fa:"\\f503"}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:"\\f22a"}.fa-champagne-glasses,.fa-glass-cheers{--fa:"\\f79f"}.fa-clipboard{--fa:"\\f328"}.fa-house-circle-exclamation{--fa:"\\e50a"}.fa-file-arrow-up,.fa-file-upload{--fa:"\\f574"}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:"\\f1eb"}.fa-bath,.fa-bathtub{--fa:"\\f2cd"}.fa-underline{--fa:"\\f0cd"}.fa-user-edit,.fa-user-pen{--fa:"\\f4ff"}.fa-signature{--fa:"\\f5b7"}.fa-stroopwafel{--fa:"\\f551"}.fa-bold{--fa:"\\f032"}.fa-anchor-lock{--fa:"\\e4ad"}.fa-building-ngo{--fa:"\\e4d7"}.fa-manat-sign{--fa:"\\e1d5"}.fa-not-equal{--fa:"\\f53e"}.fa-border-style,.fa-border-top-left{--fa:"\\f853"}.fa-map-location-dot,.fa-map-marked-alt{--fa:"\\f5a0"}.fa-jedi{--fa:"\\f669"}.fa-poll,.fa-square-poll-vertical{--fa:"\\f681"}.fa-mug-hot{--fa:"\\f7b6"}.fa-battery-car,.fa-car-battery{--fa:"\\f5df"}.fa-gift{--fa:"\\f06b"}.fa-dice-two{--fa:"\\f528"}.fa-chess-queen{--fa:"\\f445"}.fa-glasses{--fa:"\\f530"}.fa-chess-board{--fa:"\\f43c"}.fa-building-circle-check{--fa:"\\e4d2"}.fa-person-chalkboard{--fa:"\\e53d"}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:"\\f22b"}.fa-hand-back-fist,.fa-hand-rock{--fa:"\\f255"}.fa-caret-square-up,.fa-square-caret-up{--fa:"\\f151"}.fa-cloud-showers-water{--fa:"\\e4e4"}.fa-bar-chart,.fa-chart-bar{--fa:"\\f080"}.fa-hands-bubbles,.fa-hands-wash{--fa:"\\e05e"}.fa-less-than-equal{--fa:"\\f537"}.fa-train{--fa:"\\f238"}.fa-eye-low-vision,.fa-low-vision{--fa:"\\f2a8"}.fa-crow{--fa:"\\f520"}.fa-sailboat{--fa:"\\e445"}.fa-window-restore{--fa:"\\f2d2"}.fa-plus-square,.fa-square-plus{--fa:"\\f0fe"}.fa-torii-gate{--fa:"\\f6a1"}.fa-frog{--fa:"\\f52e"}.fa-bucket{--fa:"\\e4cf"}.fa-image{--fa:"\\f03e"}.fa-microphone{--fa:"\\f130"}.fa-cow{--fa:"\\f6c8"}.fa-caret-up{--fa:"\\f0d8"}.fa-screwdriver{--fa:"\\f54a"}.fa-folder-closed{--fa:"\\e185"}.fa-house-tsunami{--fa:"\\e515"}.fa-square-nfi{--fa:"\\e576"}.fa-arrow-up-from-ground-water{--fa:"\\e4b5"}.fa-glass-martini-alt,.fa-martini-glass{--fa:"\\f57b"}.fa-square-binary{--fa:"\\e69b"}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:"\\f2ea"}.fa-columns,.fa-table-columns{--fa:"\\f0db"}.fa-lemon{--fa:"\\f094"}.fa-head-side-mask{--fa:"\\e063"}.fa-handshake{--fa:"\\f2b5"}.fa-gem{--fa:"\\f3a5"}.fa-dolly,.fa-dolly-box{--fa:"\\f472"}.fa-smoking{--fa:"\\f48d"}.fa-compress-arrows-alt,.fa-minimize{--fa:"\\f78c"}.fa-monument{--fa:"\\f5a6"}.fa-snowplow{--fa:"\\f7d2"}.fa-angle-double-right,.fa-angles-right{--fa:"\\f101"}.fa-cannabis{--fa:"\\f55f"}.fa-circle-play,.fa-play-circle{--fa:"\\f144"}.fa-tablets{--fa:"\\f490"}.fa-ethernet{--fa:"\\f796"}.fa-eur,.fa-euro,.fa-euro-sign{--fa:"\\f153"}.fa-chair{--fa:"\\f6c0"}.fa-check-circle,.fa-circle-check{--fa:"\\f058"}.fa-circle-stop,.fa-stop-circle{--fa:"\\f28d"}.fa-compass-drafting,.fa-drafting-compass{--fa:"\\f568"}.fa-plate-wheat{--fa:"\\e55a"}.fa-icicles{--fa:"\\f7ad"}.fa-person-shelter{--fa:"\\e54f"}.fa-neuter{--fa:"\\f22c"}.fa-id-badge{--fa:"\\f2c1"}.fa-marker{--fa:"\\f5a1"}.fa-face-laugh-beam,.fa-laugh-beam{--fa:"\\f59a"}.fa-helicopter-symbol{--fa:"\\e502"}.fa-universal-access{--fa:"\\f29a"}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:"\\f139"}.fa-lari-sign{--fa:"\\e1c8"}.fa-volcano{--fa:"\\f770"}.fa-person-walking-dashed-line-arrow-right{--fa:"\\e553"}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:"\\f154"}.fa-viruses{--fa:"\\e076"}.fa-square-person-confined{--fa:"\\e577"}.fa-user-tie{--fa:"\\f508"}.fa-arrow-down-long,.fa-long-arrow-down{--fa:"\\f175"}.fa-tent-arrow-down-to-line{--fa:"\\e57e"}.fa-certificate{--fa:"\\f0a3"}.fa-mail-reply-all,.fa-reply-all{--fa:"\\f122"}.fa-suitcase{--fa:"\\f0f2"}.fa-person-skating,.fa-skating{--fa:"\\f7c5"}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:"\\f662"}.fa-camera-retro{--fa:"\\f083"}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:"\\f0ab"}.fa-arrow-right-to-file,.fa-file-import{--fa:"\\f56f"}.fa-external-link-square,.fa-square-arrow-up-right{--fa:"\\f14c"}.fa-box-open{--fa:"\\f49e"}.fa-scroll{--fa:"\\f70e"}.fa-spa{--fa:"\\f5bb"}.fa-location-pin-lock{--fa:"\\e51f"}.fa-pause{--fa:"\\f04c"}.fa-hill-avalanche{--fa:"\\e507"}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:"\\f2cb"}.fa-bomb{--fa:"\\f1e2"}.fa-registered{--fa:"\\f25d"}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:"\\f2bb"}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:"\\f516"}.fa-subscript{--fa:"\\f12c"}.fa-diamond-turn-right,.fa-directions{--fa:"\\f5eb"}.fa-burst{--fa:"\\e4dc"}.fa-house-laptop,.fa-laptop-house{--fa:"\\e066"}.fa-face-tired,.fa-tired{--fa:"\\f5c8"}.fa-money-bills{--fa:"\\e1f3"}.fa-smog{--fa:"\\f75f"}.fa-crutch{--fa:"\\f7f7"}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:"\\f0ee"}.fa-palette{--fa:"\\f53f"}.fa-arrows-turn-right{--fa:"\\e4c0"}.fa-vest{--fa:"\\e085"}.fa-ferry{--fa:"\\e4ea"}.fa-arrows-down-to-people{--fa:"\\e4b9"}.fa-seedling,.fa-sprout{--fa:"\\f4d8"}.fa-arrows-alt-h,.fa-left-right{--fa:"\\f337"}.fa-boxes-packing{--fa:"\\e4c7"}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:"\\f0a8"}.fa-group-arrows-rotate{--fa:"\\e4f6"}.fa-bowl-food{--fa:"\\e4c6"}.fa-candy-cane{--fa:"\\f786"}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:"\\f160"}.fa-cloud-bolt,.fa-thunderstorm{--fa:"\\f76c"}.fa-remove-format,.fa-text-slash{--fa:"\\f87d"}.fa-face-smile-wink,.fa-smile-wink{--fa:"\\f4da"}.fa-file-word{--fa:"\\f1c2"}.fa-file-powerpoint{--fa:"\\f1c4"}.fa-arrows-h,.fa-arrows-left-right{--fa:"\\f07e"}.fa-house-lock{--fa:"\\e510"}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:"\\f0ed"}.fa-children{--fa:"\\e4e1"}.fa-blackboard,.fa-chalkboard{--fa:"\\f51b"}.fa-user-alt-slash,.fa-user-large-slash{--fa:"\\f4fa"}.fa-envelope-open{--fa:"\\f2b6"}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:"\\e05f"}.fa-mattress-pillow{--fa:"\\e525"}.fa-guarani-sign{--fa:"\\e19a"}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:"\\f021"}.fa-fire-extinguisher{--fa:"\\f134"}.fa-cruzeiro-sign{--fa:"\\e152"}.fa-greater-than-equal{--fa:"\\f532"}.fa-shield-alt,.fa-shield-halved{--fa:"\\f3ed"}.fa-atlas,.fa-book-atlas{--fa:"\\f558"}.fa-virus{--fa:"\\e074"}.fa-envelope-circle-check{--fa:"\\e4e8"}.fa-layer-group{--fa:"\\f5fd"}.fa-arrows-to-dot{--fa:"\\e4be"}.fa-archway{--fa:"\\f557"}.fa-heart-circle-check{--fa:"\\e4fd"}.fa-house-chimney-crack,.fa-house-damage{--fa:"\\f6f1"}.fa-file-archive,.fa-file-zipper{--fa:"\\f1c6"}.fa-square{--fa:"\\f0c8"}.fa-glass-martini,.fa-martini-glass-empty{--fa:"\\f000"}.fa-couch{--fa:"\\f4b8"}.fa-cedi-sign{--fa:"\\e0df"}.fa-italic{--fa:"\\f033"}.fa-table-cells-column-lock{--fa:"\\e678"}.fa-church{--fa:"\\f51d"}.fa-comments-dollar{--fa:"\\f653"}.fa-democrat{--fa:"\\f747"}.fa-z{--fa:"\\5a"}.fa-person-skiing,.fa-skiing{--fa:"\\f7c9"}.fa-road-lock{--fa:"\\e567"}.fa-a{--fa:"\\41"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:"\\e03f"}.fa-feather-alt,.fa-feather-pointed{--fa:"\\f56b"}.fa-p{--fa:"\\50"}.fa-snowflake{--fa:"\\f2dc"}.fa-newspaper{--fa:"\\f1ea"}.fa-ad,.fa-rectangle-ad{--fa:"\\f641"}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:"\\f0a9"}.fa-filter-circle-xmark{--fa:"\\e17b"}.fa-locust{--fa:"\\e520"}.fa-sort,.fa-unsorted{--fa:"\\f0dc"}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:"\\f0cb"}.fa-person-dress-burst{--fa:"\\e544"}.fa-money-check-alt,.fa-money-check-dollar{--fa:"\\f53d"}.fa-vector-square{--fa:"\\f5cb"}.fa-bread-slice{--fa:"\\f7ec"}.fa-language{--fa:"\\f1ab"}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:"\\f598"}.fa-filter{--fa:"\\f0b0"}.fa-question{--fa:"\\3f"}.fa-file-signature{--fa:"\\f573"}.fa-arrows-alt,.fa-up-down-left-right{--fa:"\\f0b2"}.fa-house-chimney-user{--fa:"\\e065"}.fa-hand-holding-heart{--fa:"\\f4be"}.fa-puzzle-piece{--fa:"\\f12e"}.fa-money-check{--fa:"\\f53c"}.fa-star-half-alt,.fa-star-half-stroke{--fa:"\\f5c0"}.fa-code{--fa:"\\f121"}.fa-glass-whiskey,.fa-whiskey-glass{--fa:"\\f7a0"}.fa-building-circle-exclamation{--fa:"\\e4d3"}.fa-magnifying-glass-chart{--fa:"\\e522"}.fa-arrow-up-right-from-square,.fa-external-link{--fa:"\\f08e"}.fa-cubes-stacked{--fa:"\\e4e6"}.fa-krw,.fa-won,.fa-won-sign{--fa:"\\f159"}.fa-virus-covid{--fa:"\\e4a8"}.fa-austral-sign{--fa:"\\e0a9"}.fa-f{--fa:"\\46"}.fa-leaf{--fa:"\\f06c"}.fa-road{--fa:"\\f018"}.fa-cab,.fa-taxi{--fa:"\\f1ba"}.fa-person-circle-plus{--fa:"\\e541"}.fa-chart-pie,.fa-pie-chart{--fa:"\\f200"}.fa-bolt-lightning{--fa:"\\e0b7"}.fa-sack-xmark{--fa:"\\e56a"}.fa-file-excel{--fa:"\\f1c3"}.fa-file-contract{--fa:"\\f56c"}.fa-fish-fins{--fa:"\\e4f2"}.fa-building-flag{--fa:"\\e4d5"}.fa-face-grin-beam,.fa-grin-beam{--fa:"\\f582"}.fa-object-ungroup{--fa:"\\f248"}.fa-poop{--fa:"\\f619"}.fa-location-pin,.fa-map-marker{--fa:"\\f041"}.fa-kaaba{--fa:"\\f66b"}.fa-toilet-paper{--fa:"\\f71e"}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:"\\f807"}.fa-eject{--fa:"\\f052"}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:"\\f35a"}.fa-plane-circle-check{--fa:"\\e555"}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:"\\f5a5"}.fa-object-group{--fa:"\\f247"}.fa-chart-line,.fa-line-chart{--fa:"\\f201"}.fa-mask-ventilator{--fa:"\\e524"}.fa-arrow-right{--fa:"\\f061"}.fa-map-signs,.fa-signs-post{--fa:"\\f277"}.fa-cash-register{--fa:"\\f788"}.fa-person-circle-question{--fa:"\\e542"}.fa-h{--fa:"\\48"}.fa-tarp{--fa:"\\e57b"}.fa-screwdriver-wrench,.fa-tools{--fa:"\\f7d9"}.fa-arrows-to-eye{--fa:"\\e4bf"}.fa-plug-circle-bolt{--fa:"\\e55b"}.fa-heart{--fa:"\\f004"}.fa-mars-and-venus{--fa:"\\f224"}.fa-home-user,.fa-house-user{--fa:"\\e1b0"}.fa-dumpster-fire{--fa:"\\f794"}.fa-house-crack{--fa:"\\e3b1"}.fa-cocktail,.fa-martini-glass-citrus{--fa:"\\f561"}.fa-face-surprise,.fa-surprise{--fa:"\\f5c2"}.fa-bottle-water{--fa:"\\e4c5"}.fa-circle-pause,.fa-pause-circle{--fa:"\\f28b"}.fa-toilet-paper-slash{--fa:"\\e072"}.fa-apple-alt,.fa-apple-whole{--fa:"\\f5d1"}.fa-kitchen-set{--fa:"\\e51a"}.fa-r{--fa:"\\52"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:"\\f2ca"}.fa-cube{--fa:"\\f1b2"}.fa-bitcoin-sign{--fa:"\\e0b4"}.fa-shield-dog{--fa:"\\e573"}.fa-solar-panel{--fa:"\\f5ba"}.fa-lock-open{--fa:"\\f3c1"}.fa-elevator{--fa:"\\e16d"}.fa-money-bill-transfer{--fa:"\\e528"}.fa-money-bill-trend-up{--fa:"\\e529"}.fa-house-flood-water-circle-arrow-right{--fa:"\\e50f"}.fa-poll-h,.fa-square-poll-horizontal{--fa:"\\f682"}.fa-circle{--fa:"\\f111"}.fa-backward-fast,.fa-fast-backward{--fa:"\\f049"}.fa-recycle{--fa:"\\f1b8"}.fa-user-astronaut{--fa:"\\f4fb"}.fa-plane-slash{--fa:"\\e069"}.fa-trademark{--fa:"\\f25c"}.fa-basketball,.fa-basketball-ball{--fa:"\\f434"}.fa-satellite-dish{--fa:"\\f7c0"}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:"\\f35b"}.fa-mobile-alt,.fa-mobile-screen-button{--fa:"\\f3cd"}.fa-volume-high,.fa-volume-up{--fa:"\\f028"}.fa-users-rays{--fa:"\\e593"}.fa-wallet{--fa:"\\f555"}.fa-clipboard-check{--fa:"\\f46c"}.fa-file-audio{--fa:"\\f1c7"}.fa-burger,.fa-hamburger{--fa:"\\f805"}.fa-wrench{--fa:"\\f0ad"}.fa-bugs{--fa:"\\e4d0"}.fa-rupee,.fa-rupee-sign{--fa:"\\f156"}.fa-file-image{--fa:"\\f1c5"}.fa-circle-question,.fa-question-circle{--fa:"\\f059"}.fa-plane-departure{--fa:"\\f5b0"}.fa-handshake-slash{--fa:"\\e060"}.fa-book-bookmark{--fa:"\\e0bb"}.fa-code-branch{--fa:"\\f126"}.fa-hat-cowboy{--fa:"\\f8c0"}.fa-bridge{--fa:"\\e4c8"}.fa-phone-alt,.fa-phone-flip{--fa:"\\f879"}.fa-truck-front{--fa:"\\e2b7"}.fa-cat{--fa:"\\f6be"}.fa-anchor-circle-exclamation{--fa:"\\e4ab"}.fa-truck-field{--fa:"\\e58d"}.fa-route{--fa:"\\f4d7"}.fa-clipboard-question{--fa:"\\e4e3"}.fa-panorama{--fa:"\\e209"}.fa-comment-medical{--fa:"\\f7f5"}.fa-teeth-open{--fa:"\\f62f"}.fa-file-circle-minus{--fa:"\\e4ed"}.fa-tags{--fa:"\\f02c"}.fa-wine-glass{--fa:"\\f4e3"}.fa-fast-forward,.fa-forward-fast{--fa:"\\f050"}.fa-face-meh-blank,.fa-meh-blank{--fa:"\\f5a4"}.fa-parking,.fa-square-parking{--fa:"\\f540"}.fa-house-signal{--fa:"\\e012"}.fa-bars-progress,.fa-tasks-alt{--fa:"\\f828"}.fa-faucet-drip{--fa:"\\e006"}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:"\\f474"}.fa-ban-smoking,.fa-smoking-ban{--fa:"\\f54d"}.fa-terminal{--fa:"\\f120"}.fa-mobile-button{--fa:"\\f10b"}.fa-house-medical-flag{--fa:"\\e514"}.fa-basket-shopping,.fa-shopping-basket{--fa:"\\f291"}.fa-tape{--fa:"\\f4db"}.fa-bus-alt,.fa-bus-simple{--fa:"\\f55e"}.fa-eye{--fa:"\\f06e"}.fa-face-sad-cry,.fa-sad-cry{--fa:"\\f5b3"}.fa-audio-description{--fa:"\\f29e"}.fa-person-military-to-person{--fa:"\\e54c"}.fa-file-shield{--fa:"\\e4f0"}.fa-user-slash{--fa:"\\f506"}.fa-pen{--fa:"\\f304"}.fa-tower-observation{--fa:"\\e586"}.fa-file-code{--fa:"\\f1c9"}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:"\\f012"}.fa-bus{--fa:"\\f207"}.fa-heart-circle-xmark{--fa:"\\e501"}.fa-home-lg,.fa-house-chimney{--fa:"\\e3af"}.fa-window-maximize{--fa:"\\f2d0"}.fa-face-frown,.fa-frown{--fa:"\\f119"}.fa-prescription{--fa:"\\f5b1"}.fa-shop,.fa-store-alt{--fa:"\\f54f"}.fa-floppy-disk,.fa-save{--fa:"\\f0c7"}.fa-vihara{--fa:"\\f6a7"}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:"\\f515"}.fa-sort-asc,.fa-sort-up{--fa:"\\f0de"}.fa-comment-dots,.fa-commenting{--fa:"\\f4ad"}.fa-plant-wilt{--fa:"\\e5aa"}.fa-diamond{--fa:"\\f219"}.fa-face-grin-squint,.fa-grin-squint{--fa:"\\f585"}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:"\\f4c0"}.fa-chart-diagram{--fa:"\\e695"}.fa-bacterium{--fa:"\\e05a"}.fa-hand-pointer{--fa:"\\f25a"}.fa-drum-steelpan{--fa:"\\f56a"}.fa-hand-scissors{--fa:"\\f257"}.fa-hands-praying,.fa-praying-hands{--fa:"\\f684"}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:"\\f01e"}.fa-biohazard{--fa:"\\f780"}.fa-location,.fa-location-crosshairs{--fa:"\\f601"}.fa-mars-double{--fa:"\\f227"}.fa-child-dress{--fa:"\\e59c"}.fa-users-between-lines{--fa:"\\e591"}.fa-lungs-virus{--fa:"\\e067"}.fa-face-grin-tears,.fa-grin-tears{--fa:"\\f588"}.fa-phone{--fa:"\\f095"}.fa-calendar-times,.fa-calendar-xmark{--fa:"\\f273"}.fa-child-reaching{--fa:"\\e59d"}.fa-head-side-virus{--fa:"\\e064"}.fa-user-cog,.fa-user-gear{--fa:"\\f4fe"}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:"\\f163"}.fa-door-closed{--fa:"\\f52a"}.fa-shield-virus{--fa:"\\e06c"}.fa-dice-six{--fa:"\\f526"}.fa-mosquito-net{--fa:"\\e52c"}.fa-file-fragment{--fa:"\\e697"}.fa-bridge-water{--fa:"\\e4ce"}.fa-person-booth{--fa:"\\f756"}.fa-text-width{--fa:"\\f035"}.fa-hat-wizard{--fa:"\\f6e8"}.fa-pen-fancy{--fa:"\\f5ac"}.fa-digging,.fa-person-digging{--fa:"\\f85e"}.fa-trash{--fa:"\\f1f8"}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:"\\f629"}.fa-book-medical{--fa:"\\f7e6"}.fa-poo{--fa:"\\f2fe"}.fa-quote-right,.fa-quote-right-alt{--fa:"\\f10e"}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:"\\f553"}.fa-cubes{--fa:"\\f1b3"}.fa-divide{--fa:"\\f529"}.fa-tenge,.fa-tenge-sign{--fa:"\\f7d7"}.fa-headphones{--fa:"\\f025"}.fa-hands-holding{--fa:"\\f4c2"}.fa-hands-clapping{--fa:"\\e1a8"}.fa-republican{--fa:"\\f75e"}.fa-arrow-left{--fa:"\\f060"}.fa-person-circle-xmark{--fa:"\\e543"}.fa-ruler{--fa:"\\f545"}.fa-align-left{--fa:"\\f036"}.fa-dice-d6{--fa:"\\f6d1"}.fa-restroom{--fa:"\\f7bd"}.fa-j{--fa:"\\4a"}.fa-users-viewfinder{--fa:"\\e595"}.fa-file-video{--fa:"\\f1c8"}.fa-external-link-alt,.fa-up-right-from-square{--fa:"\\f35d"}.fa-table-cells,.fa-th{--fa:"\\f00a"}.fa-file-pdf{--fa:"\\f1c1"}.fa-bible,.fa-book-bible{--fa:"\\f647"}.fa-o{--fa:"\\4f"}.fa-medkit,.fa-suitcase-medical{--fa:"\\f0fa"}.fa-user-secret{--fa:"\\f21b"}.fa-otter{--fa:"\\f700"}.fa-female,.fa-person-dress{--fa:"\\f182"}.fa-comment-dollar{--fa:"\\f651"}.fa-briefcase-clock,.fa-business-time{--fa:"\\f64a"}.fa-table-cells-large,.fa-th-large{--fa:"\\f009"}.fa-book-tanakh,.fa-tanakh{--fa:"\\f827"}.fa-phone-volume,.fa-volume-control-phone{--fa:"\\f2a0"}.fa-hat-cowboy-side{--fa:"\\f8c1"}.fa-clipboard-user{--fa:"\\f7f3"}.fa-child{--fa:"\\f1ae"}.fa-lira-sign{--fa:"\\f195"}.fa-satellite{--fa:"\\f7bf"}.fa-plane-lock{--fa:"\\e558"}.fa-tag{--fa:"\\f02b"}.fa-comment{--fa:"\\f075"}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:"\\f1fd"}.fa-envelope{--fa:"\\f0e0"}.fa-angle-double-up,.fa-angles-up{--fa:"\\f102"}.fa-paperclip{--fa:"\\f0c6"}.fa-arrow-right-to-city{--fa:"\\e4b3"}.fa-ribbon{--fa:"\\f4d6"}.fa-lungs{--fa:"\\f604"}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:"\\f887"}.fa-litecoin-sign{--fa:"\\e1d3"}.fa-border-none{--fa:"\\f850"}.fa-circle-nodes{--fa:"\\e4e2"}.fa-parachute-box{--fa:"\\f4cd"}.fa-indent{--fa:"\\f03c"}.fa-truck-field-un{--fa:"\\e58e"}.fa-hourglass,.fa-hourglass-empty{--fa:"\\f254"}.fa-mountain{--fa:"\\f6fc"}.fa-user-doctor,.fa-user-md{--fa:"\\f0f0"}.fa-circle-info,.fa-info-circle{--fa:"\\f05a"}.fa-cloud-meatball{--fa:"\\f73b"}.fa-camera,.fa-camera-alt{--fa:"\\f030"}.fa-square-virus{--fa:"\\e578"}.fa-meteor{--fa:"\\f753"}.fa-car-on{--fa:"\\e4dd"}.fa-sleigh{--fa:"\\f7cc"}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:"\\f162"}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:"\\f4c1"}.fa-water{--fa:"\\f773"}.fa-calendar-check{--fa:"\\f274"}.fa-braille{--fa:"\\f2a1"}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:"\\f486"}.fa-landmark{--fa:"\\f66f"}.fa-truck{--fa:"\\f0d1"}.fa-crosshairs{--fa:"\\f05b"}.fa-person-cane{--fa:"\\e53c"}.fa-tent{--fa:"\\e57d"}.fa-vest-patches{--fa:"\\e086"}.fa-check-double{--fa:"\\f560"}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:"\\f15d"}.fa-money-bill-wheat{--fa:"\\e52a"}.fa-cookie{--fa:"\\f563"}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:"\\f0e2"}.fa-hard-drive,.fa-hdd{--fa:"\\f0a0"}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:"\\f586"}.fa-dumbbell{--fa:"\\f44b"}.fa-list-alt,.fa-rectangle-list{--fa:"\\f022"}.fa-tarp-droplet{--fa:"\\e57c"}.fa-house-medical-circle-check{--fa:"\\e511"}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:"\\f7ca"}.fa-calendar-plus{--fa:"\\f271"}.fa-plane-arrival{--fa:"\\f5af"}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:"\\f359"}.fa-subway,.fa-train-subway{--fa:"\\f239"}.fa-chart-gantt{--fa:"\\e0e4"}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:"\\e1bc"}.fa-crop-alt,.fa-crop-simple{--fa:"\\f565"}.fa-money-bill-1,.fa-money-bill-alt{--fa:"\\f3d1"}.fa-left-long,.fa-long-arrow-alt-left{--fa:"\\f30a"}.fa-dna{--fa:"\\f471"}.fa-virus-slash{--fa:"\\e075"}.fa-minus,.fa-subtract{--fa:"\\f068"}.fa-chess{--fa:"\\f439"}.fa-arrow-left-long,.fa-long-arrow-left{--fa:"\\f177"}.fa-plug-circle-check{--fa:"\\e55c"}.fa-street-view{--fa:"\\f21d"}.fa-franc-sign{--fa:"\\e18f"}.fa-volume-off{--fa:"\\f026"}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:"\\f2a3"}.fa-cog,.fa-gear{--fa:"\\f013"}.fa-droplet-slash,.fa-tint-slash{--fa:"\\f5c7"}.fa-mosque{--fa:"\\f678"}.fa-mosquito{--fa:"\\e52b"}.fa-star-of-david{--fa:"\\f69a"}.fa-person-military-rifle{--fa:"\\e54b"}.fa-cart-shopping,.fa-shopping-cart{--fa:"\\f07a"}.fa-vials{--fa:"\\f493"}.fa-plug-circle-plus{--fa:"\\e55f"}.fa-place-of-worship{--fa:"\\f67f"}.fa-grip-vertical{--fa:"\\f58e"}.fa-hexagon-nodes{--fa:"\\e699"}.fa-arrow-turn-up,.fa-level-up{--fa:"\\f148"}.fa-u{--fa:"\\55"}.fa-square-root-alt,.fa-square-root-variable{--fa:"\\f698"}.fa-clock,.fa-clock-four{--fa:"\\f017"}.fa-backward-step,.fa-step-backward{--fa:"\\f048"}.fa-pallet{--fa:"\\f482"}.fa-faucet{--fa:"\\e005"}.fa-baseball-bat-ball{--fa:"\\f432"}.fa-s{--fa:"\\53"}.fa-timeline{--fa:"\\e29c"}.fa-keyboard{--fa:"\\f11c"}.fa-caret-down{--fa:"\\f0d7"}.fa-clinic-medical,.fa-house-chimney-medical{--fa:"\\f7f2"}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:"\\f2c8"}.fa-mobile-android-alt,.fa-mobile-screen{--fa:"\\f3cf"}.fa-plane-up{--fa:"\\e22d"}.fa-piggy-bank{--fa:"\\f4d3"}.fa-battery-3,.fa-battery-half{--fa:"\\f242"}.fa-mountain-city{--fa:"\\e52e"}.fa-coins{--fa:"\\f51e"}.fa-khanda{--fa:"\\f66d"}.fa-sliders,.fa-sliders-h{--fa:"\\f1de"}.fa-folder-tree{--fa:"\\f802"}.fa-network-wired{--fa:"\\f6ff"}.fa-map-pin{--fa:"\\f276"}.fa-hamsa{--fa:"\\f665"}.fa-cent-sign{--fa:"\\e3f5"}.fa-flask{--fa:"\\f0c3"}.fa-person-pregnant{--fa:"\\e31e"}.fa-wand-sparkles{--fa:"\\f72b"}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:"\\f142"}.fa-ticket{--fa:"\\f145"}.fa-power-off{--fa:"\\f011"}.fa-long-arrow-alt-right,.fa-right-long{--fa:"\\f30b"}.fa-flag-usa{--fa:"\\f74d"}.fa-laptop-file{--fa:"\\e51d"}.fa-teletype,.fa-tty{--fa:"\\f1e4"}.fa-diagram-next{--fa:"\\e476"}.fa-person-rifle{--fa:"\\e54e"}.fa-house-medical-circle-exclamation{--fa:"\\e512"}.fa-closed-captioning{--fa:"\\f20a"}.fa-hiking,.fa-person-hiking{--fa:"\\f6ec"}.fa-venus-double{--fa:"\\f226"}.fa-images{--fa:"\\f302"}.fa-calculator{--fa:"\\f1ec"}.fa-people-pulling{--fa:"\\e535"}.fa-n{--fa:"\\4e"}.fa-cable-car,.fa-tram{--fa:"\\f7da"}.fa-cloud-rain{--fa:"\\f73d"}.fa-building-circle-xmark{--fa:"\\e4d4"}.fa-ship{--fa:"\\f21a"}.fa-arrows-down-to-line{--fa:"\\e4b8"}.fa-download{--fa:"\\f019"}.fa-face-grin,.fa-grin{--fa:"\\f580"}.fa-backspace,.fa-delete-left{--fa:"\\f55a"}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:"\\f1fb"}.fa-file-circle-check{--fa:"\\e5a0"}.fa-forward{--fa:"\\f04e"}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:"\\f3ce"}.fa-face-meh,.fa-meh{--fa:"\\f11a"}.fa-align-center{--fa:"\\f037"}.fa-book-dead,.fa-book-skull{--fa:"\\f6b7"}.fa-drivers-license,.fa-id-card{--fa:"\\f2c2"}.fa-dedent,.fa-outdent{--fa:"\\f03b"}.fa-heart-circle-exclamation{--fa:"\\e4fe"}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:"\\f015"}.fa-calendar-week{--fa:"\\f784"}.fa-laptop-medical{--fa:"\\f812"}.fa-b{--fa:"\\42"}.fa-file-medical{--fa:"\\f477"}.fa-dice-one{--fa:"\\f525"}.fa-kiwi-bird{--fa:"\\f535"}.fa-arrow-right-arrow-left,.fa-exchange{--fa:"\\f0ec"}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:"\\f2f9"}.fa-cutlery,.fa-utensils{--fa:"\\f2e7"}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:"\\f161"}.fa-mill-sign{--fa:"\\e1ed"}.fa-bowl-rice{--fa:"\\e2eb"}.fa-skull{--fa:"\\f54c"}.fa-broadcast-tower,.fa-tower-broadcast{--fa:"\\f519"}.fa-truck-pickup{--fa:"\\f63c"}.fa-long-arrow-alt-up,.fa-up-long{--fa:"\\f30c"}.fa-stop{--fa:"\\f04d"}.fa-code-merge{--fa:"\\f387"}.fa-upload{--fa:"\\f093"}.fa-hurricane{--fa:"\\f751"}.fa-mound{--fa:"\\e52d"}.fa-toilet-portable{--fa:"\\e583"}.fa-compact-disc{--fa:"\\f51f"}.fa-file-arrow-down,.fa-file-download{--fa:"\\f56d"}.fa-caravan{--fa:"\\f8ff"}.fa-shield-cat{--fa:"\\e572"}.fa-bolt,.fa-zap{--fa:"\\f0e7"}.fa-glass-water{--fa:"\\e4f4"}.fa-oil-well{--fa:"\\e532"}.fa-vault{--fa:"\\e2c5"}.fa-mars{--fa:"\\f222"}.fa-toilet{--fa:"\\f7d8"}.fa-plane-circle-xmark{--fa:"\\e557"}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:"\\f157"}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:"\\f158"}.fa-sun{--fa:"\\f185"}.fa-guitar{--fa:"\\f7a6"}.fa-face-laugh-wink,.fa-laugh-wink{--fa:"\\f59c"}.fa-horse-head{--fa:"\\f7ab"}.fa-bore-hole{--fa:"\\e4c3"}.fa-industry{--fa:"\\f275"}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:"\\f358"}.fa-arrows-turn-to-dots{--fa:"\\e4c1"}.fa-florin-sign{--fa:"\\e184"}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:"\\f884"}.fa-less-than{--fa:"\\3c"}.fa-angle-down{--fa:"\\f107"}.fa-car-tunnel{--fa:"\\e4de"}.fa-head-side-cough{--fa:"\\e061"}.fa-grip-lines{--fa:"\\f7a4"}.fa-thumbs-down{--fa:"\\f165"}.fa-user-lock{--fa:"\\f502"}.fa-arrow-right-long,.fa-long-arrow-right{--fa:"\\f178"}.fa-anchor-circle-xmark{--fa:"\\e4ac"}.fa-ellipsis,.fa-ellipsis-h{--fa:"\\f141"}.fa-chess-pawn{--fa:"\\f443"}.fa-first-aid,.fa-kit-medical{--fa:"\\f479"}.fa-person-through-window{--fa:"\\e5a9"}.fa-toolbox{--fa:"\\f552"}.fa-hands-holding-circle{--fa:"\\e4fb"}.fa-bug{--fa:"\\f188"}.fa-credit-card,.fa-credit-card-alt{--fa:"\\f09d"}.fa-automobile,.fa-car{--fa:"\\f1b9"}.fa-hand-holding-hand{--fa:"\\e4f7"}.fa-book-open-reader,.fa-book-reader{--fa:"\\f5da"}.fa-mountain-sun{--fa:"\\e52f"}.fa-arrows-left-right-to-line{--fa:"\\e4ba"}.fa-dice-d20{--fa:"\\f6cf"}.fa-truck-droplet{--fa:"\\e58c"}.fa-file-circle-xmark{--fa:"\\e5a1"}.fa-temperature-arrow-up,.fa-temperature-up{--fa:"\\e040"}.fa-medal{--fa:"\\f5a2"}.fa-bed{--fa:"\\f236"}.fa-h-square,.fa-square-h{--fa:"\\f0fd"}.fa-podcast{--fa:"\\f2ce"}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:"\\f2c7"}.fa-bell{--fa:"\\f0f3"}.fa-superscript{--fa:"\\f12b"}.fa-plug-circle-xmark{--fa:"\\e560"}.fa-star-of-life{--fa:"\\f621"}.fa-phone-slash{--fa:"\\f3dd"}.fa-paint-roller{--fa:"\\f5aa"}.fa-hands-helping,.fa-handshake-angle{--fa:"\\f4c4"}.fa-location-dot,.fa-map-marker-alt{--fa:"\\f3c5"}.fa-file{--fa:"\\f15b"}.fa-greater-than{--fa:"\\3e"}.fa-person-swimming,.fa-swimmer{--fa:"\\f5c4"}.fa-arrow-down{--fa:"\\f063"}.fa-droplet,.fa-tint{--fa:"\\f043"}.fa-eraser{--fa:"\\f12d"}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:"\\f57d"}.fa-person-burst{--fa:"\\e53b"}.fa-dove{--fa:"\\f4ba"}.fa-battery-0,.fa-battery-empty{--fa:"\\f244"}.fa-socks{--fa:"\\f696"}.fa-inbox{--fa:"\\f01c"}.fa-section{--fa:"\\e447"}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:"\\f625"}.fa-envelope-open-text{--fa:"\\f658"}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:"\\f0f8"}.fa-wine-bottle{--fa:"\\f72f"}.fa-chess-rook{--fa:"\\f447"}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:"\\f550"}.fa-dharmachakra{--fa:"\\f655"}.fa-hotdog{--fa:"\\f80f"}.fa-blind,.fa-person-walking-with-cane{--fa:"\\f29d"}.fa-drum{--fa:"\\f569"}.fa-ice-cream{--fa:"\\f810"}.fa-heart-circle-bolt{--fa:"\\e4fc"}.fa-fax{--fa:"\\f1ac"}.fa-paragraph{--fa:"\\f1dd"}.fa-check-to-slot,.fa-vote-yea{--fa:"\\f772"}.fa-star-half{--fa:"\\f089"}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:"\\f468"}.fa-chain,.fa-link{--fa:"\\f0c1"}.fa-assistive-listening-systems,.fa-ear-listen{--fa:"\\f2a2"}.fa-tree-city{--fa:"\\e587"}.fa-play{--fa:"\\f04b"}.fa-font{--fa:"\\f031"}.fa-table-cells-row-lock{--fa:"\\e67a"}.fa-rupiah-sign{--fa:"\\e23d"}.fa-magnifying-glass,.fa-search{--fa:"\\f002"}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:"\\f45d"}.fa-diagnoses,.fa-person-dots-from-line{--fa:"\\f470"}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:"\\f82a"}.fa-naira-sign{--fa:"\\e1f6"}.fa-cart-arrow-down{--fa:"\\f218"}.fa-walkie-talkie{--fa:"\\f8ef"}.fa-file-edit,.fa-file-pen{--fa:"\\f31c"}.fa-receipt{--fa:"\\f543"}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:"\\f14b"}.fa-suitcase-rolling{--fa:"\\f5c1"}.fa-person-circle-exclamation{--fa:"\\e53f"}.fa-chevron-down{--fa:"\\f078"}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:"\\f240"}.fa-skull-crossbones{--fa:"\\f714"}.fa-code-compare{--fa:"\\e13a"}.fa-list-dots,.fa-list-ul{--fa:"\\f0ca"}.fa-school-lock{--fa:"\\e56f"}.fa-tower-cell{--fa:"\\e585"}.fa-down-long,.fa-long-arrow-alt-down{--fa:"\\f309"}.fa-ranking-star{--fa:"\\e561"}.fa-chess-king{--fa:"\\f43f"}.fa-person-harassing{--fa:"\\e549"}.fa-brazilian-real-sign{--fa:"\\e46c"}.fa-landmark-alt,.fa-landmark-dome{--fa:"\\f752"}.fa-arrow-up{--fa:"\\f062"}.fa-television,.fa-tv,.fa-tv-alt{--fa:"\\f26c"}.fa-shrimp{--fa:"\\e448"}.fa-list-check,.fa-tasks{--fa:"\\f0ae"}.fa-jug-detergent{--fa:"\\e519"}.fa-circle-user,.fa-user-circle{--fa:"\\f2bd"}.fa-user-shield{--fa:"\\f505"}.fa-wind{--fa:"\\f72e"}.fa-car-burst,.fa-car-crash{--fa:"\\f5e1"}.fa-y{--fa:"\\59"}.fa-person-snowboarding,.fa-snowboarding{--fa:"\\f7ce"}.fa-shipping-fast,.fa-truck-fast{--fa:"\\f48b"}.fa-fish{--fa:"\\f578"}.fa-user-graduate{--fa:"\\f501"}.fa-adjust,.fa-circle-half-stroke{--fa:"\\f042"}.fa-clapperboard{--fa:"\\e131"}.fa-circle-radiation,.fa-radiation-alt{--fa:"\\f7ba"}.fa-baseball,.fa-baseball-ball{--fa:"\\f433"}.fa-jet-fighter-up{--fa:"\\e518"}.fa-diagram-project,.fa-project-diagram{--fa:"\\f542"}.fa-copy{--fa:"\\f0c5"}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:"\\f6a9"}.fa-hand-sparkles{--fa:"\\e05d"}.fa-grip,.fa-grip-horizontal{--fa:"\\f58d"}.fa-share-from-square,.fa-share-square{--fa:"\\f14d"}.fa-child-combatant,.fa-child-rifle{--fa:"\\e4e0"}.fa-gun{--fa:"\\e19b"}.fa-phone-square,.fa-square-phone{--fa:"\\f098"}.fa-add,.fa-plus{--fa:"\\2b"}.fa-expand{--fa:"\\f065"}.fa-computer{--fa:"\\e4e5"}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:"\\f00d"}.fa-arrows,.fa-arrows-up-down-left-right{--fa:"\\f047"}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:"\\f51c"}.fa-peso-sign{--fa:"\\e222"}.fa-building-shield{--fa:"\\e4d8"}.fa-baby{--fa:"\\f77c"}.fa-users-line{--fa:"\\e592"}.fa-quote-left,.fa-quote-left-alt{--fa:"\\f10d"}.fa-tractor{--fa:"\\f722"}.fa-trash-arrow-up,.fa-trash-restore{--fa:"\\f829"}.fa-arrow-down-up-lock{--fa:"\\e4b0"}.fa-lines-leaning{--fa:"\\e51e"}.fa-ruler-combined{--fa:"\\f546"}.fa-copyright{--fa:"\\f1f9"}.fa-equals{--fa:"\\3d"}.fa-blender{--fa:"\\f517"}.fa-teeth{--fa:"\\f62e"}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:"\\f20b"}.fa-map{--fa:"\\f279"}.fa-rocket{--fa:"\\f135"}.fa-photo-film,.fa-photo-video{--fa:"\\f87c"}.fa-folder-minus{--fa:"\\f65d"}.fa-hexagon-nodes-bolt{--fa:"\\e69a"}.fa-store{--fa:"\\f54e"}.fa-arrow-trend-up{--fa:"\\e098"}.fa-plug-circle-minus{--fa:"\\e55e"}.fa-sign,.fa-sign-hanging{--fa:"\\f4d9"}.fa-bezier-curve{--fa:"\\f55b"}.fa-bell-slash{--fa:"\\f1f6"}.fa-tablet,.fa-tablet-android{--fa:"\\f3fb"}.fa-school-flag{--fa:"\\e56e"}.fa-fill{--fa:"\\f575"}.fa-angle-up{--fa:"\\f106"}.fa-drumstick-bite{--fa:"\\f6d7"}.fa-holly-berry{--fa:"\\f7aa"}.fa-chevron-left{--fa:"\\f053"}.fa-bacteria{--fa:"\\e059"}.fa-hand-lizard{--fa:"\\f258"}.fa-notdef{--fa:"\\e1fe"}.fa-disease{--fa:"\\f7fa"}.fa-briefcase-medical{--fa:"\\f469"}.fa-genderless{--fa:"\\f22d"}.fa-chevron-right{--fa:"\\f054"}.fa-retweet{--fa:"\\f079"}.fa-car-alt,.fa-car-rear{--fa:"\\f5de"}.fa-pump-soap{--fa:"\\e06b"}.fa-video-slash{--fa:"\\f4e2"}.fa-battery-2,.fa-battery-quarter{--fa:"\\f243"}.fa-radio{--fa:"\\f8d7"}.fa-baby-carriage,.fa-carriage-baby{--fa:"\\f77d"}.fa-traffic-light{--fa:"\\f637"}.fa-thermometer{--fa:"\\f491"}.fa-vr-cardboard{--fa:"\\f729"}.fa-hand-middle-finger{--fa:"\\f806"}.fa-percent,.fa-percentage{--fa:"\\25"}.fa-truck-moving{--fa:"\\f4df"}.fa-glass-water-droplet{--fa:"\\e4f5"}.fa-display{--fa:"\\e163"}.fa-face-smile,.fa-smile{--fa:"\\f118"}.fa-thumb-tack,.fa-thumbtack{--fa:"\\f08d"}.fa-trophy{--fa:"\\f091"}.fa-person-praying,.fa-pray{--fa:"\\f683"}.fa-hammer{--fa:"\\f6e3"}.fa-hand-peace{--fa:"\\f25b"}.fa-rotate,.fa-sync-alt{--fa:"\\f2f1"}.fa-spinner{--fa:"\\f110"}.fa-robot{--fa:"\\f544"}.fa-peace{--fa:"\\f67c"}.fa-cogs,.fa-gears{--fa:"\\f085"}.fa-warehouse{--fa:"\\f494"}.fa-arrow-up-right-dots{--fa:"\\e4b7"}.fa-splotch{--fa:"\\f5bc"}.fa-face-grin-hearts,.fa-grin-hearts{--fa:"\\f584"}.fa-dice-four{--fa:"\\f524"}.fa-sim-card{--fa:"\\f7c4"}.fa-transgender,.fa-transgender-alt{--fa:"\\f225"}.fa-mercury{--fa:"\\f223"}.fa-arrow-turn-down,.fa-level-down{--fa:"\\f149"}.fa-person-falling-burst{--fa:"\\e547"}.fa-award{--fa:"\\f559"}.fa-ticket-alt,.fa-ticket-simple{--fa:"\\f3ff"}.fa-building{--fa:"\\f1ad"}.fa-angle-double-left,.fa-angles-left{--fa:"\\f100"}.fa-qrcode{--fa:"\\f029"}.fa-clock-rotate-left,.fa-history{--fa:"\\f1da"}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:"\\f583"}.fa-arrow-right-from-file,.fa-file-export{--fa:"\\f56e"}.fa-shield,.fa-shield-blank{--fa:"\\f132"}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:"\\f885"}.fa-comment-nodes{--fa:"\\e696"}.fa-house-medical{--fa:"\\e3b2"}.fa-golf-ball,.fa-golf-ball-tee{--fa:"\\f450"}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:"\\f137"}.fa-house-chimney-window{--fa:"\\e00d"}.fa-pen-nib{--fa:"\\f5ad"}.fa-tent-arrow-turn-left{--fa:"\\e580"}.fa-tents{--fa:"\\e582"}.fa-magic,.fa-wand-magic{--fa:"\\f0d0"}.fa-dog{--fa:"\\f6d3"}.fa-carrot{--fa:"\\f787"}.fa-moon{--fa:"\\f186"}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:"\\f5ce"}.fa-cheese{--fa:"\\f7ef"}.fa-yin-yang{--fa:"\\f6ad"}.fa-music{--fa:"\\f001"}.fa-code-commit{--fa:"\\f386"}.fa-temperature-low{--fa:"\\f76b"}.fa-biking,.fa-person-biking{--fa:"\\f84a"}.fa-broom{--fa:"\\f51a"}.fa-shield-heart{--fa:"\\e574"}.fa-gopuram{--fa:"\\f664"}.fa-earth-oceania,.fa-globe-oceania{--fa:"\\e47b"}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:"\\f2d3"}.fa-hashtag{--fa:"\\23"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:"\\f424"}.fa-oil-can{--fa:"\\f613"}.fa-t{--fa:"\\54"}.fa-hippo{--fa:"\\f6ed"}.fa-chart-column{--fa:"\\e0e3"}.fa-infinity{--fa:"\\f534"}.fa-vial-circle-check{--fa:"\\e596"}.fa-person-arrow-down-to-line{--fa:"\\e538"}.fa-voicemail{--fa:"\\f897"}.fa-fan{--fa:"\\f863"}.fa-person-walking-luggage{--fa:"\\e554"}.fa-arrows-alt-v,.fa-up-down{--fa:"\\f338"}.fa-cloud-moon-rain{--fa:"\\f73c"}.fa-calendar{--fa:"\\f133"}.fa-trailer{--fa:"\\e041"}.fa-bahai,.fa-haykal{--fa:"\\f666"}.fa-sd-card{--fa:"\\f7c2"}.fa-dragon{--fa:"\\f6d5"}.fa-shoe-prints{--fa:"\\f54b"}.fa-circle-plus,.fa-plus-circle{--fa:"\\f055"}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:"\\f58b"}.fa-hand-holding{--fa:"\\f4bd"}.fa-plug-circle-exclamation{--fa:"\\e55d"}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:"\\f127"}.fa-clone{--fa:"\\f24d"}.fa-person-walking-arrow-loop-left{--fa:"\\e551"}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:"\\f882"}.fa-fire-alt,.fa-fire-flame-curved{--fa:"\\f7e4"}.fa-tornado{--fa:"\\f76f"}.fa-file-circle-plus{--fa:"\\e494"}.fa-book-quran,.fa-quran{--fa:"\\f687"}.fa-anchor{--fa:"\\f13d"}.fa-border-all{--fa:"\\f84c"}.fa-angry,.fa-face-angry{--fa:"\\f556"}.fa-cookie-bite{--fa:"\\f564"}.fa-arrow-trend-down{--fa:"\\e097"}.fa-feed,.fa-rss{--fa:"\\f09e"}.fa-draw-polygon{--fa:"\\f5ee"}.fa-balance-scale,.fa-scale-balanced{--fa:"\\f24e"}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:"\\f62a"}.fa-shower{--fa:"\\f2cc"}.fa-desktop,.fa-desktop-alt{--fa:"\\f390"}.fa-m{--fa:"\\4d"}.fa-table-list,.fa-th-list{--fa:"\\f00b"}.fa-comment-sms,.fa-sms{--fa:"\\f7cd"}.fa-book{--fa:"\\f02d"}.fa-user-plus{--fa:"\\f234"}.fa-check{--fa:"\\f00c"}.fa-battery-4,.fa-battery-three-quarters{--fa:"\\f241"}.fa-house-circle-check{--fa:"\\e509"}.fa-angle-left{--fa:"\\f104"}.fa-diagram-successor{--fa:"\\e47a"}.fa-truck-arrow-right{--fa:"\\e58b"}.fa-arrows-split-up-and-left{--fa:"\\e4bc"}.fa-fist-raised,.fa-hand-fist{--fa:"\\f6de"}.fa-cloud-moon{--fa:"\\f6c3"}.fa-briefcase{--fa:"\\f0b1"}.fa-person-falling{--fa:"\\e546"}.fa-image-portrait,.fa-portrait{--fa:"\\f3e0"}.fa-user-tag{--fa:"\\f507"}.fa-rug{--fa:"\\e569"}.fa-earth-europe,.fa-globe-europe{--fa:"\\f7a2"}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:"\\f59d"}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:"\\f410"}.fa-baht-sign{--fa:"\\e0ac"}.fa-book-open{--fa:"\\f518"}.fa-book-journal-whills,.fa-journal-whills{--fa:"\\f66a"}.fa-handcuffs{--fa:"\\e4f8"}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:"\\f071"}.fa-database{--fa:"\\f1c0"}.fa-mail-forward,.fa-share{--fa:"\\f064"}.fa-bottle-droplet{--fa:"\\e4c4"}.fa-mask-face{--fa:"\\e1d7"}.fa-hill-rockslide{--fa:"\\e508"}.fa-exchange-alt,.fa-right-left{--fa:"\\f362"}.fa-paper-plane{--fa:"\\f1d8"}.fa-road-circle-exclamation{--fa:"\\e565"}.fa-dungeon{--fa:"\\f6d9"}.fa-align-right{--fa:"\\f038"}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:"\\f53b"}.fa-life-ring{--fa:"\\f1cd"}.fa-hands,.fa-sign-language,.fa-signing{--fa:"\\f2a7"}.fa-calendar-day{--fa:"\\f783"}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:"\\f5c5"}.fa-arrows-up-down,.fa-arrows-v{--fa:"\\f07d"}.fa-face-grimace,.fa-grimace{--fa:"\\f57f"}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:"\\e2ce"}.fa-level-down-alt,.fa-turn-down{--fa:"\\f3be"}.fa-person-walking-arrow-right{--fa:"\\e552"}.fa-envelope-square,.fa-square-envelope{--fa:"\\f199"}.fa-dice{--fa:"\\f522"}.fa-bowling-ball{--fa:"\\f436"}.fa-brain{--fa:"\\f5dc"}.fa-band-aid,.fa-bandage{--fa:"\\f462"}.fa-calendar-minus{--fa:"\\f272"}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:"\\f057"}.fa-gifts{--fa:"\\f79c"}.fa-hotel{--fa:"\\f594"}.fa-earth-asia,.fa-globe-asia{--fa:"\\f57e"}.fa-id-card-alt,.fa-id-card-clip{--fa:"\\f47f"}.fa-magnifying-glass-plus,.fa-search-plus{--fa:"\\f00e"}.fa-thumbs-up{--fa:"\\f164"}.fa-user-clock{--fa:"\\f4fd"}.fa-allergies,.fa-hand-dots{--fa:"\\f461"}.fa-file-invoice{--fa:"\\f570"}.fa-window-minimize{--fa:"\\f2d1"}.fa-coffee,.fa-mug-saucer{--fa:"\\f0f4"}.fa-brush{--fa:"\\f55d"}.fa-file-half-dashed{--fa:"\\e698"}.fa-mask{--fa:"\\f6fa"}.fa-magnifying-glass-minus,.fa-search-minus{--fa:"\\f010"}.fa-ruler-vertical{--fa:"\\f548"}.fa-user-alt,.fa-user-large{--fa:"\\f406"}.fa-train-tram{--fa:"\\e5b4"}.fa-user-nurse{--fa:"\\f82f"}.fa-syringe{--fa:"\\f48e"}.fa-cloud-sun{--fa:"\\f6c4"}.fa-stopwatch-20{--fa:"\\e06f"}.fa-square-full{--fa:"\\f45c"}.fa-magnet{--fa:"\\f076"}.fa-jar{--fa:"\\e516"}.fa-note-sticky,.fa-sticky-note{--fa:"\\f249"}.fa-bug-slash{--fa:"\\e490"}.fa-arrow-up-from-water-pump{--fa:"\\e4b6"}.fa-bone{--fa:"\\f5d7"}.fa-table-cells-row-unlock{--fa:"\\e691"}.fa-user-injured{--fa:"\\f728"}.fa-face-sad-tear,.fa-sad-tear{--fa:"\\f5b4"}.fa-plane{--fa:"\\f072"}.fa-tent-arrows-down{--fa:"\\e581"}.fa-exclamation{--fa:"\\21"}.fa-arrows-spin{--fa:"\\e4bb"}.fa-print{--fa:"\\f02f"}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:"\\e2bb"}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:"\\24"}.fa-x{--fa:"\\58"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:"\\f688"}.fa-users-cog,.fa-users-gear{--fa:"\\f509"}.fa-person-military-pointing{--fa:"\\e54a"}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:"\\f19c"}.fa-umbrella{--fa:"\\f0e9"}.fa-trowel{--fa:"\\e589"}.fa-d{--fa:"\\44"}.fa-stapler{--fa:"\\e5af"}.fa-masks-theater,.fa-theater-masks{--fa:"\\f630"}.fa-kip-sign{--fa:"\\e1c4"}.fa-hand-point-left{--fa:"\\f0a5"}.fa-handshake-alt,.fa-handshake-simple{--fa:"\\f4c6"}.fa-fighter-jet,.fa-jet-fighter{--fa:"\\f0fb"}.fa-share-alt-square,.fa-square-share-nodes{--fa:"\\f1e1"}.fa-barcode{--fa:"\\f02a"}.fa-plus-minus{--fa:"\\e43c"}.fa-video,.fa-video-camera{--fa:"\\f03d"}.fa-graduation-cap,.fa-mortar-board{--fa:"\\f19d"}.fa-hand-holding-medical{--fa:"\\e05c"}.fa-person-circle-check{--fa:"\\e53e"}.fa-level-up-alt,.fa-turn-up{--fa:"\\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:"\\f3d0"}.fa-hooli{--fa:"\\f427"}.fa-yelp{--fa:"\\f1e9"}.fa-cc-visa{--fa:"\\f1f0"}.fa-lastfm{--fa:"\\f202"}.fa-shopware{--fa:"\\f5b5"}.fa-creative-commons-nc{--fa:"\\f4e8"}.fa-aws{--fa:"\\f375"}.fa-redhat{--fa:"\\f7bc"}.fa-yoast{--fa:"\\f2b1"}.fa-cloudflare{--fa:"\\e07d"}.fa-ups{--fa:"\\f7e0"}.fa-pixiv{--fa:"\\e640"}.fa-wpexplorer{--fa:"\\f2de"}.fa-dyalog{--fa:"\\f399"}.fa-bity{--fa:"\\f37a"}.fa-stackpath{--fa:"\\f842"}.fa-buysellads{--fa:"\\f20d"}.fa-first-order{--fa:"\\f2b0"}.fa-modx{--fa:"\\f285"}.fa-guilded{--fa:"\\e07e"}.fa-vnv{--fa:"\\f40b"}.fa-js-square,.fa-square-js{--fa:"\\f3b9"}.fa-microsoft{--fa:"\\f3ca"}.fa-qq{--fa:"\\f1d6"}.fa-orcid{--fa:"\\f8d2"}.fa-java{--fa:"\\f4e4"}.fa-invision{--fa:"\\f7b0"}.fa-creative-commons-pd-alt{--fa:"\\f4ed"}.fa-centercode{--fa:"\\f380"}.fa-glide-g{--fa:"\\f2a6"}.fa-drupal{--fa:"\\f1a9"}.fa-jxl{--fa:"\\e67b"}.fa-dart-lang{--fa:"\\e693"}.fa-hire-a-helper{--fa:"\\f3b0"}.fa-creative-commons-by{--fa:"\\f4e7"}.fa-unity{--fa:"\\e049"}.fa-whmcs{--fa:"\\f40d"}.fa-rocketchat{--fa:"\\f3e8"}.fa-vk{--fa:"\\f189"}.fa-untappd{--fa:"\\f405"}.fa-mailchimp{--fa:"\\f59e"}.fa-css3-alt{--fa:"\\f38b"}.fa-reddit-square,.fa-square-reddit{--fa:"\\f1a2"}.fa-vimeo-v{--fa:"\\f27d"}.fa-contao{--fa:"\\f26d"}.fa-square-font-awesome{--fa:"\\e5ad"}.fa-deskpro{--fa:"\\f38f"}.fa-brave{--fa:"\\e63c"}.fa-sistrix{--fa:"\\f3ee"}.fa-instagram-square,.fa-square-instagram{--fa:"\\e055"}.fa-battle-net{--fa:"\\f835"}.fa-the-red-yeti{--fa:"\\f69d"}.fa-hacker-news-square,.fa-square-hacker-news{--fa:"\\f3af"}.fa-edge{--fa:"\\f282"}.fa-threads{--fa:"\\e618"}.fa-napster{--fa:"\\f3d2"}.fa-snapchat-square,.fa-square-snapchat{--fa:"\\f2ad"}.fa-google-plus-g{--fa:"\\f0d5"}.fa-artstation{--fa:"\\f77a"}.fa-markdown{--fa:"\\f60f"}.fa-sourcetree{--fa:"\\f7d3"}.fa-google-plus{--fa:"\\f2b3"}.fa-diaspora{--fa:"\\f791"}.fa-foursquare{--fa:"\\f180"}.fa-stack-overflow{--fa:"\\f16c"}.fa-github-alt{--fa:"\\f113"}.fa-phoenix-squadron{--fa:"\\f511"}.fa-pagelines{--fa:"\\f18c"}.fa-algolia{--fa:"\\f36c"}.fa-red-river{--fa:"\\f3e3"}.fa-creative-commons-sa{--fa:"\\f4ef"}.fa-safari{--fa:"\\f267"}.fa-google{--fa:"\\f1a0"}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:"\\f35c"}.fa-atlassian{--fa:"\\f77b"}.fa-linkedin-in{--fa:"\\f0e1"}.fa-digital-ocean{--fa:"\\f391"}.fa-nimblr{--fa:"\\f5a8"}.fa-chromecast{--fa:"\\f838"}.fa-evernote{--fa:"\\f839"}.fa-hacker-news{--fa:"\\f1d4"}.fa-creative-commons-sampling{--fa:"\\f4f0"}.fa-adversal{--fa:"\\f36a"}.fa-creative-commons{--fa:"\\f25e"}.fa-watchman-monitoring{--fa:"\\e087"}.fa-fonticons{--fa:"\\f280"}.fa-weixin{--fa:"\\f1d7"}.fa-shirtsinbulk{--fa:"\\f214"}.fa-codepen{--fa:"\\f1cb"}.fa-git-alt{--fa:"\\f841"}.fa-lyft{--fa:"\\f3c3"}.fa-rev{--fa:"\\f5b2"}.fa-windows{--fa:"\\f17a"}.fa-wizards-of-the-coast{--fa:"\\f730"}.fa-square-viadeo,.fa-viadeo-square{--fa:"\\f2aa"}.fa-meetup{--fa:"\\f2e0"}.fa-centos{--fa:"\\f789"}.fa-adn{--fa:"\\f170"}.fa-cloudsmith{--fa:"\\f384"}.fa-opensuse{--fa:"\\e62b"}.fa-pied-piper-alt{--fa:"\\f1a8"}.fa-dribbble-square,.fa-square-dribbble{--fa:"\\f397"}.fa-codiepie{--fa:"\\f284"}.fa-node{--fa:"\\f419"}.fa-mix{--fa:"\\f3cb"}.fa-steam{--fa:"\\f1b6"}.fa-cc-apple-pay{--fa:"\\f416"}.fa-scribd{--fa:"\\f28a"}.fa-debian{--fa:"\\e60b"}.fa-openid{--fa:"\\f19b"}.fa-instalod{--fa:"\\e081"}.fa-files-pinwheel{--fa:"\\e69f"}.fa-expeditedssl{--fa:"\\f23e"}.fa-sellcast{--fa:"\\f2da"}.fa-square-twitter,.fa-twitter-square{--fa:"\\f081"}.fa-r-project{--fa:"\\f4f7"}.fa-delicious{--fa:"\\f1a5"}.fa-freebsd{--fa:"\\f3a4"}.fa-vuejs{--fa:"\\f41f"}.fa-accusoft{--fa:"\\f369"}.fa-ioxhost{--fa:"\\f208"}.fa-fonticons-fi{--fa:"\\f3a2"}.fa-app-store{--fa:"\\f36f"}.fa-cc-mastercard{--fa:"\\f1f1"}.fa-itunes-note{--fa:"\\f3b5"}.fa-golang{--fa:"\\e40f"}.fa-kickstarter,.fa-square-kickstarter{--fa:"\\f3bb"}.fa-grav{--fa:"\\f2d6"}.fa-weibo{--fa:"\\f18a"}.fa-uncharted{--fa:"\\e084"}.fa-firstdraft{--fa:"\\f3a1"}.fa-square-youtube,.fa-youtube-square{--fa:"\\f431"}.fa-wikipedia-w{--fa:"\\f266"}.fa-rendact,.fa-wpressr{--fa:"\\f3e4"}.fa-angellist{--fa:"\\f209"}.fa-galactic-republic{--fa:"\\f50c"}.fa-nfc-directional{--fa:"\\e530"}.fa-skype{--fa:"\\f17e"}.fa-joget{--fa:"\\f3b7"}.fa-fedora{--fa:"\\f798"}.fa-stripe-s{--fa:"\\f42a"}.fa-meta{--fa:"\\e49b"}.fa-laravel{--fa:"\\f3bd"}.fa-hotjar{--fa:"\\f3b1"}.fa-bluetooth-b{--fa:"\\f294"}.fa-square-letterboxd{--fa:"\\e62e"}.fa-sticker-mule{--fa:"\\f3f7"}.fa-creative-commons-zero{--fa:"\\f4f3"}.fa-hips{--fa:"\\f452"}.fa-css{--fa:"\\e6a2"}.fa-behance{--fa:"\\f1b4"}.fa-reddit{--fa:"\\f1a1"}.fa-discord{--fa:"\\f392"}.fa-chrome{--fa:"\\f268"}.fa-app-store-ios{--fa:"\\f370"}.fa-cc-discover{--fa:"\\f1f2"}.fa-wpbeginner{--fa:"\\f297"}.fa-confluence{--fa:"\\f78d"}.fa-shoelace{--fa:"\\e60c"}.fa-mdb{--fa:"\\f8ca"}.fa-dochub{--fa:"\\f394"}.fa-accessible-icon{--fa:"\\f368"}.fa-ebay{--fa:"\\f4f4"}.fa-amazon{--fa:"\\f270"}.fa-unsplash{--fa:"\\e07c"}.fa-yarn{--fa:"\\f7e3"}.fa-square-steam,.fa-steam-square{--fa:"\\f1b7"}.fa-500px{--fa:"\\f26e"}.fa-square-vimeo,.fa-vimeo-square{--fa:"\\f194"}.fa-asymmetrik{--fa:"\\f372"}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:"\\f2b4"}.fa-gratipay{--fa:"\\f184"}.fa-apple{--fa:"\\f179"}.fa-hive{--fa:"\\e07f"}.fa-gitkraken{--fa:"\\f3a6"}.fa-keybase{--fa:"\\f4f5"}.fa-apple-pay{--fa:"\\f415"}.fa-padlet{--fa:"\\e4a0"}.fa-amazon-pay{--fa:"\\f42c"}.fa-github-square,.fa-square-github{--fa:"\\f092"}.fa-stumbleupon{--fa:"\\f1a4"}.fa-fedex{--fa:"\\f797"}.fa-phoenix-framework{--fa:"\\f3dc"}.fa-shopify{--fa:"\\e057"}.fa-neos{--fa:"\\f612"}.fa-square-threads{--fa:"\\e619"}.fa-hackerrank{--fa:"\\f5f7"}.fa-researchgate{--fa:"\\f4f8"}.fa-swift{--fa:"\\f8e1"}.fa-angular{--fa:"\\f420"}.fa-speakap{--fa:"\\f3f3"}.fa-angrycreative{--fa:"\\f36e"}.fa-y-combinator{--fa:"\\f23b"}.fa-empire{--fa:"\\f1d1"}.fa-envira{--fa:"\\f299"}.fa-google-scholar{--fa:"\\e63b"}.fa-gitlab-square,.fa-square-gitlab{--fa:"\\e5ae"}.fa-studiovinari{--fa:"\\f3f8"}.fa-pied-piper{--fa:"\\f2ae"}.fa-wordpress{--fa:"\\f19a"}.fa-product-hunt{--fa:"\\f288"}.fa-firefox{--fa:"\\f269"}.fa-linode{--fa:"\\f2b8"}.fa-goodreads{--fa:"\\f3a8"}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:"\\f264"}.fa-jsfiddle{--fa:"\\f1cc"}.fa-sith{--fa:"\\f512"}.fa-themeisle{--fa:"\\f2b2"}.fa-page4{--fa:"\\f3d7"}.fa-hashnode{--fa:"\\e499"}.fa-react{--fa:"\\f41b"}.fa-cc-paypal{--fa:"\\f1f4"}.fa-squarespace{--fa:"\\f5be"}.fa-cc-stripe{--fa:"\\f1f5"}.fa-creative-commons-share{--fa:"\\f4f2"}.fa-bitcoin{--fa:"\\f379"}.fa-keycdn{--fa:"\\f3ba"}.fa-opera{--fa:"\\f26a"}.fa-itch-io{--fa:"\\f83a"}.fa-umbraco{--fa:"\\f8e8"}.fa-galactic-senate{--fa:"\\f50d"}.fa-ubuntu{--fa:"\\f7df"}.fa-draft2digital{--fa:"\\f396"}.fa-stripe{--fa:"\\f429"}.fa-houzz{--fa:"\\f27c"}.fa-gg{--fa:"\\f260"}.fa-dhl{--fa:"\\f790"}.fa-pinterest-square,.fa-square-pinterest{--fa:"\\f0d3"}.fa-xing{--fa:"\\f168"}.fa-blackberry{--fa:"\\f37b"}.fa-creative-commons-pd{--fa:"\\f4ec"}.fa-playstation{--fa:"\\f3df"}.fa-quinscape{--fa:"\\f459"}.fa-less{--fa:"\\f41d"}.fa-blogger-b{--fa:"\\f37d"}.fa-opencart{--fa:"\\f23d"}.fa-vine{--fa:"\\f1ca"}.fa-signal-messenger{--fa:"\\e663"}.fa-paypal{--fa:"\\f1ed"}.fa-gitlab{--fa:"\\f296"}.fa-typo3{--fa:"\\f42b"}.fa-reddit-alien{--fa:"\\f281"}.fa-yahoo{--fa:"\\f19e"}.fa-dailymotion{--fa:"\\e052"}.fa-affiliatetheme{--fa:"\\f36b"}.fa-pied-piper-pp{--fa:"\\f1a7"}.fa-bootstrap{--fa:"\\f836"}.fa-odnoklassniki{--fa:"\\f263"}.fa-nfc-symbol{--fa:"\\e531"}.fa-mintbit{--fa:"\\e62f"}.fa-ethereum{--fa:"\\f42e"}.fa-speaker-deck{--fa:"\\f83c"}.fa-creative-commons-nc-eu{--fa:"\\f4e9"}.fa-patreon{--fa:"\\f3d9"}.fa-avianex{--fa:"\\f374"}.fa-ello{--fa:"\\f5f1"}.fa-gofore{--fa:"\\f3a7"}.fa-bimobject{--fa:"\\f378"}.fa-brave-reverse{--fa:"\\e63d"}.fa-facebook-f{--fa:"\\f39e"}.fa-google-plus-square,.fa-square-google-plus{--fa:"\\f0d4"}.fa-web-awesome{--fa:"\\e682"}.fa-mandalorian{--fa:"\\f50f"}.fa-first-order-alt{--fa:"\\f50a"}.fa-osi{--fa:"\\f41a"}.fa-google-wallet{--fa:"\\f1ee"}.fa-d-and-d-beyond{--fa:"\\f6ca"}.fa-periscope{--fa:"\\f3da"}.fa-fulcrum{--fa:"\\f50b"}.fa-cloudscale{--fa:"\\f383"}.fa-forumbee{--fa:"\\f211"}.fa-mizuni{--fa:"\\f3cc"}.fa-schlix{--fa:"\\f3ea"}.fa-square-xing,.fa-xing-square{--fa:"\\f169"}.fa-bandcamp{--fa:"\\f2d5"}.fa-wpforms{--fa:"\\f298"}.fa-cloudversify{--fa:"\\f385"}.fa-usps{--fa:"\\f7e1"}.fa-megaport{--fa:"\\f5a3"}.fa-magento{--fa:"\\f3c4"}.fa-spotify{--fa:"\\f1bc"}.fa-optin-monster{--fa:"\\f23c"}.fa-fly{--fa:"\\f417"}.fa-square-bluesky{--fa:"\\e6a3"}.fa-aviato{--fa:"\\f421"}.fa-itunes{--fa:"\\f3b4"}.fa-cuttlefish{--fa:"\\f38c"}.fa-blogger{--fa:"\\f37c"}.fa-flickr{--fa:"\\f16e"}.fa-viber{--fa:"\\f409"}.fa-soundcloud{--fa:"\\f1be"}.fa-digg{--fa:"\\f1a6"}.fa-tencent-weibo{--fa:"\\f1d5"}.fa-letterboxd{--fa:"\\e62d"}.fa-symfony{--fa:"\\f83d"}.fa-maxcdn{--fa:"\\f136"}.fa-etsy{--fa:"\\f2d7"}.fa-facebook-messenger{--fa:"\\f39f"}.fa-audible{--fa:"\\f373"}.fa-think-peaks{--fa:"\\f731"}.fa-bilibili{--fa:"\\e3d9"}.fa-erlang{--fa:"\\f39d"}.fa-x-twitter{--fa:"\\e61b"}.fa-cotton-bureau{--fa:"\\f89e"}.fa-dashcube{--fa:"\\f210"}.fa-42-group,.fa-innosoft{--fa:"\\e080"}.fa-stack-exchange{--fa:"\\f18d"}.fa-elementor{--fa:"\\f430"}.fa-pied-piper-square,.fa-square-pied-piper{--fa:"\\e01e"}.fa-creative-commons-nd{--fa:"\\f4eb"}.fa-palfed{--fa:"\\f3d8"}.fa-superpowers{--fa:"\\f2dd"}.fa-resolving{--fa:"\\f3e7"}.fa-xbox{--fa:"\\f412"}.fa-square-web-awesome-stroke{--fa:"\\e684"}.fa-searchengin{--fa:"\\f3eb"}.fa-tiktok{--fa:"\\e07b"}.fa-facebook-square,.fa-square-facebook{--fa:"\\f082"}.fa-renren{--fa:"\\f18b"}.fa-linux{--fa:"\\f17c"}.fa-glide{--fa:"\\f2a5"}.fa-linkedin{--fa:"\\f08c"}.fa-hubspot{--fa:"\\f3b2"}.fa-deploydog{--fa:"\\f38e"}.fa-twitch{--fa:"\\f1e8"}.fa-flutter{--fa:"\\e694"}.fa-ravelry{--fa:"\\f2d9"}.fa-mixer{--fa:"\\e056"}.fa-lastfm-square,.fa-square-lastfm{--fa:"\\f203"}.fa-vimeo{--fa:"\\f40a"}.fa-mendeley{--fa:"\\f7b3"}.fa-uniregistry{--fa:"\\f404"}.fa-figma{--fa:"\\f799"}.fa-creative-commons-remix{--fa:"\\f4ee"}.fa-cc-amazon-pay{--fa:"\\f42d"}.fa-dropbox{--fa:"\\f16b"}.fa-instagram{--fa:"\\f16d"}.fa-cmplid{--fa:"\\e360"}.fa-upwork{--fa:"\\e641"}.fa-facebook{--fa:"\\f09a"}.fa-gripfire{--fa:"\\f3ac"}.fa-jedi-order{--fa:"\\f50e"}.fa-uikit{--fa:"\\f403"}.fa-fort-awesome-alt{--fa:"\\f3a3"}.fa-phabricator{--fa:"\\f3db"}.fa-ussunnah{--fa:"\\f407"}.fa-earlybirds{--fa:"\\f39a"}.fa-trade-federation{--fa:"\\f513"}.fa-autoprefixer{--fa:"\\f41c"}.fa-whatsapp{--fa:"\\f232"}.fa-square-upwork{--fa:"\\e67c"}.fa-slideshare{--fa:"\\f1e7"}.fa-google-play{--fa:"\\f3ab"}.fa-viadeo{--fa:"\\f2a9"}.fa-line{--fa:"\\f3c0"}.fa-google-drive{--fa:"\\f3aa"}.fa-servicestack{--fa:"\\f3ec"}.fa-simplybuilt{--fa:"\\f215"}.fa-bitbucket{--fa:"\\f171"}.fa-imdb{--fa:"\\f2d8"}.fa-deezer{--fa:"\\e077"}.fa-raspberry-pi{--fa:"\\f7bb"}.fa-jira{--fa:"\\f7b1"}.fa-docker{--fa:"\\f395"}.fa-screenpal{--fa:"\\e570"}.fa-bluetooth{--fa:"\\f293"}.fa-gitter{--fa:"\\f426"}.fa-d-and-d{--fa:"\\f38d"}.fa-microblog{--fa:"\\e01a"}.fa-cc-diners-club{--fa:"\\f24c"}.fa-gg-circle{--fa:"\\f261"}.fa-pied-piper-hat{--fa:"\\f4e5"}.fa-kickstarter-k{--fa:"\\f3bc"}.fa-yandex{--fa:"\\f413"}.fa-readme{--fa:"\\f4d5"}.fa-html5{--fa:"\\f13b"}.fa-sellsy{--fa:"\\f213"}.fa-square-web-awesome{--fa:"\\e683"}.fa-sass{--fa:"\\f41e"}.fa-wirsindhandwerk,.fa-wsh{--fa:"\\e2d0"}.fa-buromobelexperte{--fa:"\\f37f"}.fa-salesforce{--fa:"\\f83b"}.fa-octopus-deploy{--fa:"\\e082"}.fa-medapps{--fa:"\\f3c6"}.fa-ns8{--fa:"\\f3d5"}.fa-pinterest-p{--fa:"\\f231"}.fa-apper{--fa:"\\f371"}.fa-fort-awesome{--fa:"\\f286"}.fa-waze{--fa:"\\f83f"}.fa-bluesky{--fa:"\\e671"}.fa-cc-jcb{--fa:"\\f24b"}.fa-snapchat,.fa-snapchat-ghost{--fa:"\\f2ab"}.fa-fantasy-flight-games{--fa:"\\f6dc"}.fa-rust{--fa:"\\e07a"}.fa-wix{--fa:"\\f5cf"}.fa-behance-square,.fa-square-behance{--fa:"\\f1b5"}.fa-supple{--fa:"\\f3f9"}.fa-webflow{--fa:"\\e65c"}.fa-rebel{--fa:"\\f1d0"}.fa-css3{--fa:"\\f13c"}.fa-staylinked{--fa:"\\f3f5"}.fa-kaggle{--fa:"\\f5fa"}.fa-space-awesome{--fa:"\\e5ac"}.fa-deviantart{--fa:"\\f1bd"}.fa-cpanel{--fa:"\\f388"}.fa-goodreads-g{--fa:"\\f3a9"}.fa-git-square,.fa-square-git{--fa:"\\f1d2"}.fa-square-tumblr,.fa-tumblr-square{--fa:"\\f174"}.fa-trello{--fa:"\\f181"}.fa-creative-commons-nc-jp{--fa:"\\f4ea"}.fa-get-pocket{--fa:"\\f265"}.fa-perbyte{--fa:"\\e083"}.fa-grunt{--fa:"\\f3ad"}.fa-weebly{--fa:"\\f5cc"}.fa-connectdevelop{--fa:"\\f20e"}.fa-leanpub{--fa:"\\f212"}.fa-black-tie{--fa:"\\f27e"}.fa-themeco{--fa:"\\f5c6"}.fa-python{--fa:"\\f3e2"}.fa-android{--fa:"\\f17b"}.fa-bots{--fa:"\\e340"}.fa-free-code-camp{--fa:"\\f2c5"}.fa-hornbill{--fa:"\\f592"}.fa-js{--fa:"\\f3b8"}.fa-ideal{--fa:"\\e013"}.fa-git{--fa:"\\f1d3"}.fa-dev{--fa:"\\f6cc"}.fa-sketch{--fa:"\\f7c6"}.fa-yandex-international{--fa:"\\f414"}.fa-cc-amex{--fa:"\\f1f3"}.fa-uber{--fa:"\\f402"}.fa-github{--fa:"\\f09b"}.fa-php{--fa:"\\f457"}.fa-alipay{--fa:"\\f642"}.fa-youtube{--fa:"\\f167"}.fa-skyatlas{--fa:"\\f216"}.fa-firefox-browser{--fa:"\\e007"}.fa-replyd{--fa:"\\f3e6"}.fa-suse{--fa:"\\f7d6"}.fa-jenkins{--fa:"\\f3b6"}.fa-twitter{--fa:"\\f099"}.fa-rockrms{--fa:"\\f3e9"}.fa-pinterest{--fa:"\\f0d2"}.fa-buffer{--fa:"\\f837"}.fa-npm{--fa:"\\f3d4"}.fa-yammer{--fa:"\\f840"}.fa-btc{--fa:"\\f15a"}.fa-dribbble{--fa:"\\f17d"}.fa-stumbleupon-circle{--fa:"\\f1a3"}.fa-internet-explorer{--fa:"\\f26b"}.fa-stubber{--fa:"\\e5c7"}.fa-telegram,.fa-telegram-plane{--fa:"\\f2c6"}.fa-old-republic{--fa:"\\f510"}.fa-odysee{--fa:"\\e5c6"}.fa-square-whatsapp,.fa-whatsapp-square{--fa:"\\f40c"}.fa-node-js{--fa:"\\f3d3"}.fa-edge-legacy{--fa:"\\e078"}.fa-slack,.fa-slack-hash{--fa:"\\f198"}.fa-medrt{--fa:"\\f3c8"}.fa-usb{--fa:"\\f287"}.fa-tumblr{--fa:"\\f173"}.fa-vaadin{--fa:"\\f408"}.fa-quora{--fa:"\\f2c4"}.fa-square-x-twitter{--fa:"\\e61a"}.fa-reacteurope{--fa:"\\f75d"}.fa-medium,.fa-medium-m{--fa:"\\f23a"}.fa-amilia{--fa:"\\f36d"}.fa-mixcloud{--fa:"\\f289"}.fa-flipboard{--fa:"\\f44d"}.fa-viacoin{--fa:"\\f237"}.fa-critical-role{--fa:"\\f6c9"}.fa-sitrox{--fa:"\\e44a"}.fa-discourse{--fa:"\\f393"}.fa-joomla{--fa:"\\f1aa"}.fa-mastodon{--fa:"\\f4f6"}.fa-airbnb{--fa:"\\f834"}.fa-wolf-pack-battalion{--fa:"\\f514"}.fa-buy-n-large{--fa:"\\f8a6"}.fa-gulp{--fa:"\\f3ae"}.fa-creative-commons-sampling-plus{--fa:"\\f4f1"}.fa-strava{--fa:"\\f428"}.fa-ember{--fa:"\\f423"}.fa-canadian-maple-leaf{--fa:"\\f785"}.fa-teamspeak{--fa:"\\f4f9"}.fa-pushed{--fa:"\\f3e1"}.fa-wordpress-simple{--fa:"\\f411"}.fa-nutritionix{--fa:"\\f3d6"}.fa-wodu{--fa:"\\e088"}.fa-google-pay{--fa:"\\e079"}.fa-intercom{--fa:"\\f7af"}.fa-zhihu{--fa:"\\f63f"}.fa-korvue{--fa:"\\f42f"}.fa-pix{--fa:"\\e43a"}.fa-steam-symbol{--fa:"\\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}.button{display:flex;height:50px;padding:0;background:#3e7671;border:none;outline:none;border-radius:5px;overflow:hidden;font-size:16px;font-weight:500;cursor:pointer;min-width:220px;max-width:220px}.button:hover{background:#008168}.button:active{background:#3e7671}.button-text{display:block;margin:auto;padding:0 10px;color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:50%;text-transform:capitalize}.button-icon{margin:auto;padding:10px;font-size:20px;color:#ffffff}.button-profile{margin:auto}.button-profile svg{display:flex;margin-left:4px;background-color:#fff;border-radius:4px}.profile-image{display:flex;margin-left:4px;width:40px;height:40px;border-radius:4px;background-color:#fff}.button-text-full-width{width:auto!important}.button-link{text-decoration:none!important}.dropdown{position:relative;display:inline-block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:180px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1;border-radius:5px;text-align:left!important}.dropdown-content-link a{color:#71797E;padding:16px 20px;text-decoration:none;display:block;cursor:pointer;font-size:1rem!important}.dropdown-content-link a:hover{background-color:#f1f1f1;color:#000;opacity:0.7}.dropdown:hover .dropdown-content{display:block}.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4);text-align:center}.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:40%}.modal-body{max-height:50vh;overflow-y:auto}.close{color:#aaaaaa;float:right;font-size:28px;font-weight:bold}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer}.modal-app{background-color:#c3e9bc;padding:15px;margin:10px;border-radius:5px}.external-app-link{text-decoration:none;color:#000}.gray-text{color:#606060}.green-text{color:#3e7671}#countdown{position:relative;margin:auto;margin-top:30px;height:40px;width:40px;text-align:center}#countdown-number{color:#2e2e2e;display:inline-block;line-height:40px}#countdown svg{position:absolute;top:0;right:0;width:40px;height:40px;transform:rotateY(-180deg) rotateZ(-90deg)}#countdown svg circle{stroke-dasharray:113px;stroke-dashoffset:0px;stroke-linecap:round;stroke-width:4px;stroke:#008168;fill:none;animation:countdown 6s linear infinite forwards}@keyframes countdown{from{stroke-dashoffset:0px}to{stroke-dashoffset:113px}}.lds-ring{color:#fff}.lds-ring{display:flex;justify-content:center;align-items:center;margin:auto;position:relative}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:25px;height:25px;margin:3px;border:2px solid currentColor;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:currentColor transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.dropdown-content .dropdown-user-profile{padding:12px 10px 8px 18px;border-bottom:1px solid #aaaaaa}.dropdown-content .dropdown-user-profile .username{font-size:16px;color:#2e2e2e;text-transform:capitalize}.dropdown-content .dropdown-user-profile .first-last-name{font-size:13px;color:#606060}.menu-bar-icons{color:#008168;display:inline-block;margin-right:8px;font-size:18px}.other-links-list{padding:14px;background-color:#f1f1f1;margin-bottom:8px;text-align:start;border-radius:5px}.tab-list{margin:0px 40px;padding:0;list-style:none;display:flex;position:relative;width:85%;border-bottom:1px solid #aaa}.tab-item{flex:1;text-align:center;transition:.3s;opacity:0.5}.tab-toggle{display:none}.tab-content{display:none}.tab-toggle:nth-child(1):checked~.tab-list .tab-item:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-list .tab-item:nth-child(2){opacity:1;color:#008168;border-bottom:2px solid #008168}.tab-toggle:nth-child(2):checked~.tab-list::before{transform:translateX(100%)}.tab-toggle:nth-child(3):checked~.tab-list::before{transform:translateX(200%)}.tab-toggle:nth-child(1):checked~.tab-container .tab-content:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-container .tab-content:nth-child(2){display:block}.tab-trigger{display:block;padding:10px 0}.tab-container{padding:15px 30px}.grid-view-menu{display:grid;gap:4px;grid-template-columns:repeat(3, 1fr);align-content:start;padding:8px;max-height:230px;overflow-y:auto}.grid-view-link{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:75px;height:70px;padding:6px;text-decoration:none;font-size:13px;color:#128f8b;text-align:center;transition:transform 0.2s ease, background-color 0.1s ease;position:relative;z-index:1;border-radius:3px;cursor:pointer}.grid-view-link:hover{background-color:#eeeeee;transform:scale(1.1);z-index:5}.grid-view-link-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#71797e;width:100%}.grid-view-link:hover .grid-view-link-text{white-space:pre-wrap;overflow:visible;text-overflow:unset}.grid-view-link i{transition:transform 0.2s ease}.grid-view-link:hover i{transform:scale(1.1)}hr.solid{border-top:1px solid #bbb;margin:2px 0}.restricted-overlay{position:fixed;inset:0;background:linear-gradient(135deg, #0f3d3e, #128f8b);display:flex;justify-content:center;align-items:center;padding:20px;z-index:9999999;font-family:"Segoe UI", sans-serif}.restricted-card{background:#ffffff;border-radius:10px;padding:50px;max-width:540px;width:100%;text-align:center;box-shadow:0 25px 70px rgba(0, 0, 0, 0.25);animation:fadeInUp 0.3s ease}.restricted-icon{font-size:48px;color:#128f8b;margin-bottom:30px}.restricted-card h2{margin-bottom:10px;color:#128f8b}.restricted-message{color:#555;font-size:16px;margin-bottom:30px;line-height:1.5}.restricted-links h4{margin-bottom:20px;color:#128f8b}.link-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:20px;margin-bottom:25px}.restricted-link{background:#ecf2f2;padding:10px;border-radius:10px;text-decoration:none;color:#128f8b;font-size:13px;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all 0.2s ease}.restricted-link:hover{background:#128f8b;color:#fff}.restricted-actions{display:flex;justify-content:center;gap:15px}.btn-primary{background:#128f8b;color:#fff;padding:10px 20px;border-radius:8px;text-decoration:none;font-weight:500;transition:0.2s}.btn-primary:hover{background:#0f6e6b}.btn-secondary{background:transparent;border:2px solid #128f8b;color:#128f8b;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-danger{background:transparent;border:2px solid #dc3545;color:#dc3545;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-secondary:hover{background:#128f8b;color:#fff}@keyframes fadeInUp{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}`;
4004
4062
 
4005
4063
  const DashButtonComponent = class {
4006
4064
  constructor(hostRef) {
4007
4065
  index.registerInstance(this, hostRef);
4008
4066
  this.showPostLoginText = false;
4009
4067
  this.silentCheckSso = false;
4010
- this.redirectUri = undefined;
4011
4068
  this.authMethod = "check-sso";
4012
4069
  this.portalApiUrl = "";
4013
4070
  this.plmUrl = "https://productlicensemanager-zdzw.cloud.zdzw-project.com";
4014
4071
  this.showUnauthorizedModal = false;
4015
4072
  this.primaryColor = "";
4016
4073
  this.accentColor = "";
4074
+ this.notificationPosition = "left";
4017
4075
  this.keycloak = null;
4018
4076
  this.isAuth = false;
4019
4077
  this.givenUserName = "";
4020
4078
  this.silentCheckSsoRedirectUri = window.location.origin + '/assets/verificar-sso.html';
4021
4079
  this.appList = [];
4022
- this.avatarSvg = jdenticonModule.toSvg("init-avatar", 40);
4080
+ this.avatarSvg = jdenticonModuleExports.toSvg("init-avatar", 40);
4023
4081
  this.isLoading = false;
4024
- this.config = undefined;
4025
- this.localMenuLinks = undefined;
4026
- this.organizationUrl = undefined;
4027
4082
  this.isRestricted = false;
4028
4083
  }
4084
+ componentDidLoad() {
4085
+ // Add a click listener to this specific component instance
4086
+ this.el.addEventListener('click', (event) => {
4087
+ const path = event.composedPath();
4088
+ // Ensure this click originated from inside the notification module
4089
+ const isInsideNotification = path.some((target) => target && target.tagName === 'NOTIFICATION-COMPONENT');
4090
+ // If the click is outside the notification module (e.g., somewhere else in dash-button), exit early
4091
+ if (!isInsideNotification) {
4092
+ return;
4093
+ }
4094
+ // 2. Identify the specific link element inside the path array
4095
+ const clickedLink = path.find((target) => target && (target.tagName === 'A' || (typeof target.hasAttribute === 'function' && target.hasAttribute('href'))));
4096
+ if (clickedLink) {
4097
+ const destinationUrl = clickedLink.getAttribute('href');
4098
+ if (destinationUrl) {
4099
+ // Prevent the default behavior ONLY for the notification component links
4100
+ event.preventDefault();
4101
+ event.stopPropagation();
4102
+ // Check if the link contains the unique class name
4103
+ const isHomeIconLink = clickedLink.classList.contains('button-link');
4104
+ if (isHomeIconLink) {
4105
+ console.log('Notification module home link intercepted. Opening in new tab:', destinationUrl);
4106
+ window.open(destinationUrl, '_blank', 'noopener,noreferrer');
4107
+ }
4108
+ else {
4109
+ console.log('Notification module standard link intercepted. Navigating in current view:', destinationUrl);
4110
+ window.location.href = destinationUrl;
4111
+ }
4112
+ }
4113
+ }
4114
+ });
4115
+ }
4029
4116
  async componentWillLoad() {
4030
4117
  var _a, _b, _c, _d;
4031
4118
  // Fetch config from API
@@ -4068,16 +4155,17 @@ const DashButtonComponent = class {
4068
4155
  onLoad: this.authMethod,
4069
4156
  checkLoginIframe: false,
4070
4157
  silentCheckSsoRedirectUri: this.silentCheckSso ? this.silentCheckSsoRedirectUri : '',
4071
- }).then(res => {
4158
+ }).then((res) => {
4159
+ var _a, _b, _c;
4072
4160
  if (res) {
4073
4161
  this.isAuth = true;
4074
4162
  localStorage.setItem("keycloak", JSON.stringify(this.keycloak));
4075
4163
  // document.cookie = "DASH_BTN=" + JSON.parse(localStorage.getItem('keycloak')).token;
4076
- document.cookie = this.config.cookieName + "=" + JSON.parse(localStorage.getItem('keycloak')).token;
4164
+ document.cookie = this.config.cookieName + "=" + JSON.parse((_a = localStorage.getItem('keycloak')) !== null && _a !== void 0 ? _a : '{}').token;
4077
4165
  // Set userName
4078
- this.givenUserName = JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.preferred_username;
4166
+ this.givenUserName = JSON.parse((_b = localStorage.getItem('keycloak')) !== null && _b !== void 0 ? _b : '{}').idTokenParsed.preferred_username;
4079
4167
  // Set user avatar
4080
- this.avatarSvg = jdenticonModule.toSvg(JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.sub, 40);
4168
+ this.avatarSvg = jdenticonModuleExports.toSvg(JSON.parse((_c = localStorage.getItem('keycloak')) !== null && _c !== void 0 ? _c : '{}').idTokenParsed.sub, 40);
4081
4169
  }
4082
4170
  });
4083
4171
  }
@@ -4108,27 +4196,44 @@ const DashButtonComponent = class {
4108
4196
  }
4109
4197
  }
4110
4198
  }
4199
+ // First, check global links
4200
+ // Then, check the token's organization URL
4201
+ // Finally, check against dashbutton configuration: allowedGlobalDomain and whitelistedUrls
4111
4202
  validateAppAccessByUrl() {
4112
- var _a, _b, _c, _d;
4113
- const currentUrl = window.location.href;
4114
- const currentOrigin = window.location.origin;
4203
+ var _a, _b, _c, _d, _e, _f;
4204
+ const normalizeUrl = (url) => url.replace(/\/+$/, '');
4205
+ const currentUrl = normalizeUrl(window.location.href);
4206
+ const currentOrigin = normalizeUrl(window.location.origin);
4115
4207
  const globalLinks = ((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.global) === null || _c === void 0 ? void 0 : _c.links) || [];
4116
- // Check Global Links
4208
+ const allowedGlobalDomain = ((_d = this.config) === null || _d === void 0 ? void 0 : _d.allowedGlobalDomain) || '';
4209
+ const whitelistedUrls = ((_e = this.config) === null || _e === void 0 ? void 0 : _e.whitelistedUrls) || '';
4210
+ // First, check global links
4117
4211
  const matchGlobal = globalLinks.some(link => {
4118
4212
  try {
4119
- const linkOrigin = new URL(link.url).origin;
4213
+ const linkOrigin = normalizeUrl(new URL(link.url).origin);
4120
4214
  return currentOrigin === linkOrigin;
4121
4215
  }
4122
4216
  catch (_a) {
4123
4217
  return false;
4124
4218
  }
4125
4219
  });
4126
- // Check Token organizationUrl
4127
- const tokenParsed = (_d = this.keycloak) === null || _d === void 0 ? void 0 : _d.tokenParsed;
4220
+ // Then check the token organization URL
4221
+ const tokenParsed = (_f = this.keycloak) === null || _f === void 0 ? void 0 : _f.tokenParsed;
4128
4222
  const allowedOrg = tokenParsed === null || tokenParsed === void 0 ? void 0 : tokenParsed.organizationUrl;
4129
- const matchOrganization = allowedOrg && currentUrl.includes(allowedOrg);
4130
- // global and org url validations
4131
- const isAllowed = matchGlobal || matchOrganization;
4223
+ const matchOrganization = allowedOrg && currentUrl.includes(normalizeUrl(allowedOrg));
4224
+ // Check allowedGlobalDomain (single domain)
4225
+ const matchAllowedDomain = allowedGlobalDomain &&
4226
+ currentOrigin.includes(normalizeUrl(allowedGlobalDomain));
4227
+ // Check whitelistedUrls (comma-separated string)
4228
+ const whitelistedArray = whitelistedUrls
4229
+ ? whitelistedUrls.split(',').map(url => normalizeUrl(url.trim()))
4230
+ : [];
4231
+ const matchWhitelisted = whitelistedArray.some(url => currentUrl.includes(url));
4232
+ // Final validation
4233
+ const isAllowed = matchGlobal ||
4234
+ matchOrganization ||
4235
+ matchAllowedDomain ||
4236
+ matchWhitelisted;
4132
4237
  this.isRestricted = !isAllowed;
4133
4238
  }
4134
4239
  login() {
@@ -4148,10 +4253,20 @@ const DashButtonComponent = class {
4148
4253
  const appModal = this.el.shadowRoot.querySelector('#appListModal');
4149
4254
  appModal.style.display = "none";
4150
4255
  }
4256
+ renderNotificationComponent() {
4257
+ var _a;
4258
+ const token = (_a = this.keycloak) === null || _a === void 0 ? void 0 : _a.idTokenParsed;
4259
+ const owner = (token === null || token === void 0 ? void 0 : token.preferred_username) || (token === null || token === void 0 ? void 0 : token.sub) || '';
4260
+ const orgUrlRaw = (token === null || token === void 0 ? void 0 : token.organizationUrl) || '';
4261
+ const orgHost = orgUrlRaw
4262
+ ? new URL(orgUrlRaw.startsWith('http') ? orgUrlRaw : `https://${orgUrlRaw}`).hostname
4263
+ : '';
4264
+ return orgHost && owner ? (index.h("notification-component", { owner: owner, "max-records": 10, "display-type": "icon", "notification-url": `https://notifications.${orgHost}/notifications-api`, "socket-connect": true, "socket-url": `wss://repository.${orgHost}/socket`, "list-url": `https://notifications.${orgHost}/notifications` })) : null;
4265
+ }
4151
4266
  render() {
4152
4267
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
4153
- return index.h("div", { key: 'd186318626a3fbd1d011d3532559901d1c36859e' }, index.h("div", { key: 'a5887ec423aabb35ca7988169cfa7a9f0bd588e6' }, (() => {
4154
- var _a, _b, _c, _d, _e, _f;
4268
+ return index.h("div", { key: '6c2ac818d23abd54b4548eb41c7536f2609356e9' }, index.h("div", { key: '1009063ae416ebba5624b67468c5711421e2aff8' }, (() => {
4269
+ var _a, _b, _c, _d, _e, _f, _g, _h;
4155
4270
  // GLOBAL LOADING SPINNER
4156
4271
  if (this.isLoading) {
4157
4272
  return (index.h("a", { id: "login-btn", class: "button button-link" }, index.h("div", { class: "lds-ring" }, index.h("div", null), index.h("div", null), index.h("div", null), index.h("div", null))));
@@ -4163,21 +4278,23 @@ const DashButtonComponent = class {
4163
4278
  return (index.h("a", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, href: this.redirectUri, id: "login-btn", class: "button button-link" }, index.h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, class: "button-text button-text-full-width" }, "Go to Dashboard")));
4164
4279
  }
4165
4280
  else if (this.isAuth) {
4166
- return (index.h("div", { id: "profile-btn", class: "dropdown" }, index.h("button", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, type: "button", class: "button" }, index.h("span", { class: "button-profile" }, JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.imageUrl ?
4281
+ return (index.h("div", { class: "profile-actions", style: { display: "inline-flex", alignItems: "center", gap: "15px" } }, this.notificationPosition !== "right" && this.renderNotificationComponent(), index.h("div", { id: "profile-btn", class: "dropdown" }, index.h("button", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, type: "button", class: "button" }, index.h("span", { class: "button-profile" }, JSON.parse((_g = localStorage.getItem('keycloak')) !== null && _g !== void 0 ? _g : '{}').idTokenParsed.imageUrl ?
4167
4282
  index.h("img", { class: "profile-image", src: "https://s-damith.github.io/test-avatar/images/e24da9c5-0b1f-46fa-82cd-7c711c77b5c7.png" })
4168
4283
  :
4169
- index.h("div", { innerHTML: this.avatarSvg })), index.h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, id: "given-name", class: "button-text" }, this.givenUserName), index.h("div", { class: "button-icon" }, (this.config.menuViewType == "grid") ? index.h("i", { class: "fa-solid fa-grip-vertical" }) : index.h("i", { class: "fa-solid fa-bars" }))), index.h("div", { class: "dropdown-content" }, index.h("div", { class: "dropdown-user-profile" }, index.h("div", { class: "username" }, "@", this.givenUserName), index.h("div", { class: "first-last-name" }, JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.name)), (this.config.menuViewType == "grid") ? (index.h("div", null, index.h("div", { class: "grid-view-menu" }, this.config.menu.global.links.map(item => {
4284
+ index.h("div", { innerHTML: this.avatarSvg })), index.h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, id: "given-name", class: "button-text" }, this.givenUserName), index.h("div", { class: "button-icon" }, (this.config.menuViewType == "grid") ? index.h("i", { class: "fa-solid fa-grip-vertical" }) : index.h("i", { class: "fa-solid fa-bars" }))), index.h("div", { class: "dropdown-content" }, index.h("div", { class: "dropdown-user-profile" }, index.h("div", { class: "username" }, "@", this.givenUserName), index.h("div", { class: "first-last-name" }, JSON.parse((_h = localStorage.getItem('keycloak')) !== null && _h !== void 0 ? _h : '{}').idTokenParsed.name)), (this.config.menuViewType == "grid") ? (index.h("div", null, index.h("div", { class: "grid-view-menu" }, this.config.menu.global.links.map(item => {
4170
4285
  return (index.h("a", { href: item.url, target: '_blank', class: "grid-view-link" }, index.h("i", { class: item.icon + " fa-2x" }), index.h("div", { class: "grid-view-link-text" }, item.name)));
4171
- })), this.config.menu.global.links.length != 0 && index.h("hr", { class: "solid" }), index.h("div", { class: "grid-view-menu", style: this.config.menu.global.links.length == 0 && { "margin-bottom": "12px" } }, index.h("a", { onClick: this.showModal.bind(this), class: "grid-view-link" }, index.h("i", { class: "fa-regular fa-window-restore fa-2x" }), index.h("div", { class: "grid-view-link-text" }, "Modules")), index.h("a", { href: this.config.defaultLink.url, target: '_blank', class: "grid-view-link" }, index.h("i", { class: "fa-solid fa-globe fa-2x" }), index.h("div", { class: "grid-view-link-text" }, this.config.defaultLink.name)), index.h("a", { onClick: this.logout.bind(this), class: "grid-view-link" }, index.h("i", { class: "fa-solid fa-right-from-bracket fa-2x" }), index.h("div", { class: "grid-view-link-text" }, "Logout"))))) : (
4286
+ })), this.config.menu.global.links.length != 0 && index.h("hr", { class: "solid" }), index.h("div", { class: "grid-view-menu", style: this.config.menu.global.links.length === 0
4287
+ ? { marginBottom: '12px' }
4288
+ : undefined }, index.h("a", { onClick: this.showModal.bind(this), class: "grid-view-link" }, index.h("i", { class: "fa-regular fa-window-restore fa-2x" }), index.h("div", { class: "grid-view-link-text" }, "Modules")), index.h("a", { href: this.config.defaultLink.url, target: '_blank', class: "grid-view-link" }, index.h("i", { class: "fa-solid fa-globe fa-2x" }), index.h("div", { class: "grid-view-link-text" }, this.config.defaultLink.name)), index.h("a", { onClick: this.logout.bind(this), class: "grid-view-link" }, index.h("i", { class: "fa-solid fa-right-from-bracket fa-2x" }), index.h("div", { class: "grid-view-link-text" }, "Logout"))))) : (
4172
4289
  // List View
4173
4290
  index.h("div", { class: "dropdown-content-link" }, this.config.menu.global.links.map(item => {
4174
4291
  return (index.h("a", { href: item.url, target: '_blank', id: "applications-btn" }, index.h("i", { class: item.icon + " menu-bar-icons" }), item.name));
4175
- }), index.h("a", { onClick: this.showModal.bind(this), id: "applications-btn" }, index.h("i", { class: "fa-regular fa-window-restore menu-bar-icons" }), "Modules"), index.h("a", { href: this.config.defaultLink.url, target: '_blank', id: "applications-btn" }, index.h("i", { class: "fa-solid fa-globe menu-bar-icons" }), this.config.defaultLink.name), index.h("a", { onClick: this.logout.bind(this), id: "logout-btn" }, index.h("i", { class: "fa-solid fa-right-from-bracket menu-bar-icons" }), "Logout"))))));
4292
+ }), index.h("a", { onClick: this.showModal.bind(this), id: "applications-btn" }, index.h("i", { class: "fa-regular fa-window-restore menu-bar-icons" }), "Modules"), index.h("a", { href: this.config.defaultLink.url, target: '_blank', id: "applications-btn" }, index.h("i", { class: "fa-solid fa-globe menu-bar-icons" }), this.config.defaultLink.name), index.h("a", { onClick: this.logout.bind(this), id: "logout-btn" }, index.h("i", { class: "fa-solid fa-right-from-bracket menu-bar-icons" }), "Logout"))))), this.notificationPosition === "right" && this.renderNotificationComponent()));
4176
4293
  }
4177
4294
  else {
4178
4295
  return (index.h("button", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, onClick: this.login.bind(this), id: "login-btn", type: "button", class: "button" }, index.h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, class: "button-text" }, "Login")));
4179
4296
  }
4180
- })()), index.h("div", { key: '1ad6675f4e190df28410c54f7ad9f097578e0403', id: "appListModal", class: "modal" }, index.h("div", { key: '655f51c1d18372eca86610750d1ac3c8e1eeeefa', class: "modal-content" }, index.h("span", { key: 'bb850ddc02afdbbc04b5fbc6258d6ab2b1e92bfb', onClick: this.closeModal.bind(this), class: "close" }, "\u00D7"), index.h("div", { key: '4fdec67f888e554e1c8a3328ae2b55fb1a0fea4d', class: "box" }, index.h("input", { type: "radio", class: "tab-toggle", name: "tab-toggle", id: "tab1", checked: true }), index.h("ul", { key: '4317ec4e90f682b549aea49971d12426aaa5c0ef', class: "tab-list" }, index.h("li", { class: "tab-item" }, index.h("label", { class: "tab-trigger", htmlFor: "tab1" }, index.h("i", { class: "fa-solid fa-table-list menu-bar-icons" }), " ", this.config.menu.local.name))), index.h("div", { key: '8f1b8e0ec034d45a9c04776b90afcbd3cd9fea3e', class: "tab-container" }, index.h("div", { key: 'e59e81838b0c2fa419314503ab0c2d56143496cb', class: "tab-content" }, index.h("div", { key: 'f393c5497bfeddae25469d2d4475f9aacdf13629', class: "modal-body" }, !((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.local) === null || _c === void 0 ? void 0 : _c.enableCustomLocalMenu) ? (
4297
+ })()), index.h("div", { key: '051c1ac1086683050a19e713ee92c84dbd95cf31', id: "appListModal", class: "modal" }, index.h("div", { key: '0233801fbaec4a37c840039e531b775e5d5aa0f0', class: "modal-content" }, index.h("span", { key: '593cd28e612ec14e620bc54b341c68245385d3d1', onClick: this.closeModal.bind(this), class: "close" }, "\u00D7"), index.h("div", { key: '7d2c59e86c7a044136c7ad1962c35f34ac994d9b', class: "box" }, index.h("input", { key: '7d081171cb9858947fbe049dff08fabc1fe76655', type: "radio", class: "tab-toggle", name: "tab-toggle", id: "tab1", checked: true }), index.h("ul", { key: 'ffa4ab2f57ac98ef9097f2f609a9c8b020476cc3', class: "tab-list" }, index.h("li", { key: '3f37fda895caa295c7cbea584deac6c7a9ad780f', class: "tab-item" }, index.h("label", { key: '60b4e3a4b99b26b43df9f806ff9a374e2fe4047d', class: "tab-trigger", htmlFor: "tab1" }, index.h("i", { key: 'cb0d59237ff0f70544a6bb255b8048cde7fe0e9b', class: "fa-solid fa-table-list menu-bar-icons" }), " ", this.config.menu.local.name))), index.h("div", { key: 'f430fc9079ac64f3b857c4c4c47b408b1121f751', class: "tab-container" }, index.h("div", { key: 'e0db3bbf88afb5da03ec95332beb3a4700e51a65', class: "tab-content" }, index.h("div", { key: '12340dceb0bc90990593852ca1e62f27fffb4671', class: "modal-body" }, !((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.local) === null || _c === void 0 ? void 0 : _c.enableCustomLocalMenu) ? (
4181
4298
  // <div>{this.localMenuLinks}</div>
4182
4299
  (_d = this.localMenuLinks) === null || _d === void 0 ? void 0 : _d.map((app, index$1) => {
4183
4300
  const isDisabled = !app.url;
@@ -4185,14 +4302,12 @@ const DashButtonComponent = class {
4185
4302
  })) : ((_e = this.config.menu.local.links) === null || _e === void 0 ? void 0 : _e.map((app, index$1) => (index.h("a", { key: index$1, class: "external-app-link", target: "_blank", rel: "noopener noreferrer", href: app.url }, index.h("div", { class: "modal-app" }, index.h("div", null, app.name)))))), !this.organizationUrl ? (index.h("div", null, index.h("h3", { class: "gray-text" }, "Organization Domain URL not set"), index.h("p", { class: "gray-text" }, "Please set your Organization Domain URL on the Portal profile page."))) : (((!((_h = (_g = (_f = this.config) === null || _f === void 0 ? void 0 : _f.menu) === null || _g === void 0 ? void 0 : _g.local) === null || _h === void 0 ? void 0 : _h.enableCustomLocalMenu) &&
4186
4303
  ((_k = (_j = this.localMenuLinks) === null || _j === void 0 ? void 0 : _j.length) !== null && _k !== void 0 ? _k : 0) === 0) ||
4187
4304
  (((_o = (_m = (_l = this.config) === null || _l === void 0 ? void 0 : _l.menu) === null || _m === void 0 ? void 0 : _m.local) === null || _o === void 0 ? void 0 : _o.enableCustomLocalMenu) &&
4188
- ((_t = (_s = (_r = (_q = (_p = this.config) === null || _p === void 0 ? void 0 : _p.menu) === null || _q === void 0 ? void 0 : _q.local) === null || _r === void 0 ? void 0 : _r.links) === null || _s === void 0 ? void 0 : _s.length) !== null && _t !== void 0 ? _t : 0) === 0)) && (index.h("div", null, index.h("h3", { class: "gray-text" }, "No installed ", ((_w = (_v = (_u = this.config) === null || _u === void 0 ? void 0 : _u.menu) === null || _v === void 0 ? void 0 : _v.local) === null || _w === void 0 ? void 0 : _w.name) || "menu", " found."), index.h("p", { class: "gray-text" }, "Please contact administration.")))))))))), index.h("div", { key: 'c47c1a2e57cbd3d42fcb19d559343a7104e092c0', id: "appPermissionErrorModal", class: "modal" }, index.h("div", { key: 'cd8a0b1837afc3089bda1bd4d9e7ec0c2a7c3f45', class: "modal-content" }, index.h("img", { key: 'e21aa2b61cbedff394e4cbbc6993fd06b3c3906e', src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGD0lEQVR4nO2cbU8TWRTH/W5WEAmF4nNiieFFoeBjYhQUWzUWYkpbDfGFCR9CoolvQF9aWgG3kMCG8LACC1ikuCuUh7bH/M/MmW131S2ZqTDjPcmkdub2tvPj3HP/55yJR44oU6ZMmTJlyg7YOsL9pI7+shkogGFzDqMAhhVAOsiQozwwrACS8sCwfXd+tYTDCiApDwwf/FJUSzisAJKjNhFlPzYF0KQpgCZNATRpCqBJUwBNmgJo0hRAk6YAmjQF0KkAs4uLtPz8OU2HQpRqaaFkQwPFq6v5SHo8fA7XVgYGKLu0dGC/81ABLORylB4cpInLl+nt0aP7OiauXKH00BAV8vlfE2AmkaCxpiYDSKK6mqaammjx+nX6FAzS348e0VYkwgf+jXO4Nun18lj53PuLF2kjmfx1AOa3t2mmt9cAkDxxghauXaPN3l7KxmJlHRgLmKNutzHPTCTCczsa4G4mQ6nWVr7h4WPHaL6trQTc+r17NOf30/iZMzTmdtNwVRWPA2Scm/H56FMgQNlolMfDO/9ob+cxmDPl99PuxoYzAe5mMrzcxOvWAALgolFauXmTxurry45/gPvnjRsG+LW7d3lOWdKVhHggAPPb24bnvW9ooL96evjGP4dC9NvJkwaY0fPnaa6vjzLJJG19+ED5bJY/u5NOUyYep/lnz2jk3Ll/4p/Hw/B4ru5unls8Mb+z4xyAM3rMg5cIvHRXFyVqavg8oKy+elXWjooxqy9f0luXy5gTm4xAFE+cjcWcATCTSGgxr6rKWLaAF9fj1u+BAOW2tsqeL7+7S5OdnRq8mhpaf/CA5xSI8EiJiRsjI/YGWMjlDKmCDUOWrXje3NOnRIWCaXh45biqL+f59nYjHlqtE38qwPTgoLHMeLeNRo2YB8+zEp7ExK1olI+Rujo+t/b6tX0BTugZBnQebha7rcQ8K5Ytw9O9WWKi7M7QiZKx2BJgdnHRyDDE+0SqYMOwEt7k7dvaxqJLHHwXvpMzFpeLtpeX7QdwZWCAbwjpmYhkkSrlxqVy4WEc4q1IHBbbsRhNXrjA71devLAfwOlQiH88lhJuBhkGbxx9fZbDE4NO5LTO5+OxCB14P93dbT+AKZ9P84ZgkG8GqRjeQ9ZUAh4MYhvXxs+e5fHwRBbWra32A5j0ePjHf9H1mST+2YWFisCDba+u8vV3tbWGNuT3jY32AxjXS06QFLgZKUH9aPct7O3RVFfXf+BlHj6kZG2tBq+j47tpGs5LoYKrNpGI9v74cfsDHNazg+/dvFl4sNzmprHz2x5g8l9LWMTuzsePli7bYkMBgqVMfb39l3CqpeXbm0g8XhF439xEgkGjOmN7GTOjA4XU2Be8zs6y4MFmnzzRpJLfXypjenrsK6Qnvd4SSQGxCyFtNbxiIb1+/74mpL1e+wrp7NISp1ElqZwuZZB2WQkPZqRyevz7Eg5zCc22qVxxMUGWMRL94sTfKnjYfd+dPq15261bpcWEq1fJvuWsoSEt/3W7tRZlNMolJylxWQEPJTGRP6lTpwz5YpSz3ryxcUE1nzcaSeieFTeArIKH3Fq8GSX9koJqc7O9C6owNL0lO5CKsZTfzS7bqTt3+LPxornxKu2Cz6Oj5IymUkTLCOB54iWAKOIaMRE7JXbS/zOMwYYhMQ9/gOLOnPxBZh8/dlhb06+Vs9B6FIi4cYmJInGgEyGIkbHgc8idkWHgHHRecVsTMU/mwuuY3tYcv3TJWW1NGJrdJY113WtkdxaJU84BqSK7rRFXdc/Dd+w5rbFeDHG8rc2IiQj2UmwQsY1iKFIxlKSg46AjARfnkGGISOZHO6JRnkNiHjzPsY92iGFZoultLNu6OtZs+3m4CCIZnxGpIjGvUsv2UAEUQ9NblrSUoNDDQP4KT+TH2/QWJT/eFgjwNaRnnGHI4x3NzRXZbQ89QBg0GsQ2Wo+SnZR1uFycYbBI3kdv2XEAiw35KqQMGkDoYaCeaDzi29jIuziuYYyVua1jANrFFECTpgCaNAXQpCmAJk0BNGkKoElTACsNUB39ZTFQAMMW/78xypQpU6ZMmbIjP9e+AkAlsBlIjsPOAAAAAElFTkSuQmCC" }), index.h("h2", { key: '0ea76a87518b2a0c2a171bc0f40cb4767f6683e9', class: "green-text margin-b" }, "You don't have permission to access this application."), index.h("h3", { key: '1dc9d8f8f2ef3a34bf8cb887679c574a59fe5a75', class: "green-text" }, "Please contact the administration."), (this.config.defaultLink.url && this.showUnauthorizedModal) ?
4305
+ ((_t = (_s = (_r = (_q = (_p = this.config) === null || _p === void 0 ? void 0 : _p.menu) === null || _q === void 0 ? void 0 : _q.local) === null || _r === void 0 ? void 0 : _r.links) === null || _s === void 0 ? void 0 : _s.length) !== null && _t !== void 0 ? _t : 0) === 0)) && (index.h("div", null, index.h("h3", { class: "gray-text" }, "No installed ", ((_w = (_v = (_u = this.config) === null || _u === void 0 ? void 0 : _u.menu) === null || _v === void 0 ? void 0 : _v.local) === null || _w === void 0 ? void 0 : _w.name) || "menu", " found."), index.h("p", { class: "gray-text" }, "Please contact administration.")))))))))), index.h("div", { key: '515bb25f527f3d7a6e0499c2ceb55265afcfa829', id: "appPermissionErrorModal", class: "modal" }, index.h("div", { key: '4127074cd4e5b207b8699aa59e80ca9c3bd95811', class: "modal-content" }, index.h("img", { key: '938f69e927df06b10a9a43a9e6b9d51729773d74', src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGD0lEQVR4nO2cbU8TWRTH/W5WEAmF4nNiieFFoeBjYhQUWzUWYkpbDfGFCR9CoolvQF9aWgG3kMCG8LACC1ikuCuUh7bH/M/MmW131S2ZqTDjPcmkdub2tvPj3HP/55yJR44oU6ZMmTJlyg7YOsL9pI7+shkogGFzDqMAhhVAOsiQozwwrACS8sCwfXd+tYTDCiApDwwf/FJUSzisAJKjNhFlPzYF0KQpgCZNATRpCqBJUwBNmgJo0hRAk6YAmjQF0KkAs4uLtPz8OU2HQpRqaaFkQwPFq6v5SHo8fA7XVgYGKLu0dGC/81ABLORylB4cpInLl+nt0aP7OiauXKH00BAV8vlfE2AmkaCxpiYDSKK6mqaammjx+nX6FAzS348e0VYkwgf+jXO4Nun18lj53PuLF2kjmfx1AOa3t2mmt9cAkDxxghauXaPN3l7KxmJlHRgLmKNutzHPTCTCczsa4G4mQ6nWVr7h4WPHaL6trQTc+r17NOf30/iZMzTmdtNwVRWPA2Scm/H56FMgQNlolMfDO/9ob+cxmDPl99PuxoYzAe5mMrzcxOvWAALgolFauXmTxurry45/gPvnjRsG+LW7d3lOWdKVhHggAPPb24bnvW9ooL96evjGP4dC9NvJkwaY0fPnaa6vjzLJJG19+ED5bJY/u5NOUyYep/lnz2jk3Ll/4p/Hw/B4ru5unls8Mb+z4xyAM3rMg5cIvHRXFyVqavg8oKy+elXWjooxqy9f0luXy5gTm4xAFE+cjcWcATCTSGgxr6rKWLaAF9fj1u+BAOW2tsqeL7+7S5OdnRq8mhpaf/CA5xSI8EiJiRsjI/YGWMjlDKmCDUOWrXje3NOnRIWCaXh45biqL+f59nYjHlqtE38qwPTgoLHMeLeNRo2YB8+zEp7ExK1olI+Rujo+t/b6tX0BTugZBnQebha7rcQ8K5Ytw9O9WWKi7M7QiZKx2BJgdnHRyDDE+0SqYMOwEt7k7dvaxqJLHHwXvpMzFpeLtpeX7QdwZWCAbwjpmYhkkSrlxqVy4WEc4q1IHBbbsRhNXrjA71devLAfwOlQiH88lhJuBhkGbxx9fZbDE4NO5LTO5+OxCB14P93dbT+AKZ9P84ZgkG8GqRjeQ9ZUAh4MYhvXxs+e5fHwRBbWra32A5j0ePjHf9H1mST+2YWFisCDba+u8vV3tbWGNuT3jY32AxjXS06QFLgZKUH9aPct7O3RVFfXf+BlHj6kZG2tBq+j47tpGs5LoYKrNpGI9v74cfsDHNazg+/dvFl4sNzmprHz2x5g8l9LWMTuzsePli7bYkMBgqVMfb39l3CqpeXbm0g8XhF439xEgkGjOmN7GTOjA4XU2Be8zs6y4MFmnzzRpJLfXypjenrsK6Qnvd4SSQGxCyFtNbxiIb1+/74mpL1e+wrp7NISp1ElqZwuZZB2WQkPZqRyevz7Eg5zCc22qVxxMUGWMRL94sTfKnjYfd+dPq15261bpcWEq1fJvuWsoSEt/3W7tRZlNMolJylxWQEPJTGRP6lTpwz5YpSz3ryxcUE1nzcaSeieFTeArIKH3Fq8GSX9koJqc7O9C6owNL0lO5CKsZTfzS7bqTt3+LPxornxKu2Cz6Oj5IymUkTLCOB54iWAKOIaMRE7JXbS/zOMwYYhMQ9/gOLOnPxBZh8/dlhb06+Vs9B6FIi4cYmJInGgEyGIkbHgc8idkWHgHHRecVsTMU/mwuuY3tYcv3TJWW1NGJrdJY113WtkdxaJU84BqSK7rRFXdc/Dd+w5rbFeDHG8rc2IiQj2UmwQsY1iKFIxlKSg46AjARfnkGGISOZHO6JRnkNiHjzPsY92iGFZoultLNu6OtZs+3m4CCIZnxGpIjGvUsv2UAEUQ9NblrSUoNDDQP4KT+TH2/QWJT/eFgjwNaRnnGHI4x3NzRXZbQ89QBg0GsQ2Wo+SnZR1uFycYbBI3kdv2XEAiw35KqQMGkDoYaCeaDzi29jIuziuYYyVua1jANrFFECTpgCaNAXQpCmAJk0BNGkKoElTACsNUB39ZTFQAMMW/78xypQpU6ZMmbIjP9e+AkAlsBlIjsPOAAAAAElFTkSuQmCC" }), index.h("h2", { key: 'e4b224018cd85b9b8e7ae8025a16e15b1d7305ca', class: "green-text margin-b" }, "You don't have permission to access this application."), index.h("h3", { key: 'c6566424fa314d3ce884263321a74b268cb2f0f1', class: "green-text" }, "Please contact the administration."), (this.config.defaultLink.url && this.showUnauthorizedModal) ?
4189
4306
  index.h("div", null, index.h("h4", { class: "gray-text" }, "You will be automatically redirected to the portal."), index.h("div", { id: "countdown" }, index.h("div", { id: "countdown-number" }), index.h("svg", null, index.h("circle", { r: "18", cx: "20", cy: "20" }))))
4190
4307
  : index.h("div", null))));
4191
4308
  }
4192
4309
  get el() { return index.getElement(this); }
4193
4310
  };
4194
- DashButtonComponent.style = DashButtonStyle0;
4311
+ DashButtonComponent.style = dashButtonCss();
4195
4312
 
4196
4313
  exports.dash_button = DashButtonComponent;
4197
-
4198
- //# sourceMappingURL=dash-button.cjs.entry.js.map