@canonry/canonry 4.136.1 → 4.136.2

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 (25) hide show
  1. package/assets/assets/{AuditHistoryPanel-B73VrWNb.js → AuditHistoryPanel-DtUGiN21.js} +1 -1
  2. package/assets/assets/{BacklinksPage-CLVMg_qx.js → BacklinksPage-BGwtmwfz.js} +1 -1
  3. package/assets/assets/{ChartPrimitives-P81CbvWc.js → ChartPrimitives-Df2UC1g3.js} +1 -1
  4. package/assets/assets/{HistoryPage-IcDqWBYW.js → HistoryPage-AtaMVEUx.js} +1 -1
  5. package/assets/assets/{ProjectPage-DTivvVIl.js → ProjectPage-OlBjxXNx.js} +1 -1
  6. package/assets/assets/{RunRow-BTH3-Tml.js → RunRow-Cmf-5xVo.js} +1 -1
  7. package/assets/assets/{RunsPage-B0k5wjFN.js → RunsPage-BAPy9Yri.js} +1 -1
  8. package/assets/assets/{SettingsPage-DGnT3Vdr.js → SettingsPage-BXO7WpTo.js} +1 -1
  9. package/assets/assets/{TrafficPage-D79PC0bB.js → TrafficPage-IH-wiPu2.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-BYEVjfFm.js → TrafficSourceDetailPage-CTTN-P52.js} +1 -1
  11. package/assets/assets/{arrow-left-DCdFYJK-.js → arrow-left-BwzAIeJ_.js} +1 -1
  12. package/assets/assets/{extract-error-message-bM0aUBUI.js → extract-error-message-BIcIoJLN.js} +1 -1
  13. package/assets/assets/index-BPpSrJY0.js +210 -0
  14. package/assets/assets/{trash-2-CEz2iXBv.js → trash-2-C50OeBAV.js} +1 -1
  15. package/assets/index.html +1 -1
  16. package/dist/{chunk-PIMWEIJ3.js → chunk-GGIRLRAY.js} +3042 -397
  17. package/dist/{chunk-YMF35LN5.js → chunk-MXR3GI5L.js} +54 -122
  18. package/dist/{chunk-OESGFFUO.js → chunk-SMFUCXHI.js} +1 -1
  19. package/dist/{chunk-YQ2RXMU2.js → chunk-YVMQWVNY.js} +91 -184
  20. package/dist/cli.js +4 -4
  21. package/dist/index.js +4 -4
  22. package/dist/{intelligence-service-BKLR57RQ.js → intelligence-service-BD6BHTEJ.js} +2 -2
  23. package/dist/mcp.js +2 -2
  24. package/package.json +10 -10
  25. package/assets/assets/index-CMuA-uEN.js +0 -210
@@ -300,6 +300,2914 @@ var gaMeasurementAnalysisDtoSchema = z2.object({
300
300
  })
301
301
  });
302
302
 
303
+ // ../../node_modules/.pnpm/uc.micro@3.0.0/node_modules/uc.micro/build/index.mjs
304
+ var Any = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
305
+ var Cc = /[\0-\x1F\x7F-\x9F]/;
306
+ var P = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B4E\u1B4F\u1B5A-\u1B60\u1B7D-\u1B7F\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDD6E\uDEAD\uDED0\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9\uDFD4\uDFD5\uDFD7\uDFD8]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09\uDFE1]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDD6D-\uDD6F\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD839\uDDFF|\uD83A[\uDD5E\uDD5F]/;
307
+ var Z = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;
308
+
309
+ // ../../node_modules/.pnpm/linkify-it@6.1.0/node_modules/linkify-it/build/index.mjs
310
+ var REBuilder = class {
311
+ src_Any = Any.source;
312
+ src_Cc = Cc.source;
313
+ src_Z = Z.source;
314
+ src_P = P.source;
315
+ src_ZPCc = [
316
+ this.src_Z,
317
+ this.src_P,
318
+ this.src_Cc
319
+ ].join("|");
320
+ src_ZCc = [this.src_Z, this.src_Cc].join("|");
321
+ cache = {};
322
+ opts = {
323
+ maxLength: 1e4,
324
+ urlAuth: false,
325
+ schema_names: []
326
+ };
327
+ constructor(opts = {}) {
328
+ this.opts = {
329
+ ...this.opts,
330
+ ...opts
331
+ };
332
+ }
333
+ set(opts = {}) {
334
+ this.opts = {
335
+ ...this.opts,
336
+ ...opts
337
+ };
338
+ this.cache = {};
339
+ return this;
340
+ }
341
+ escapeRE(str) {
342
+ return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
343
+ }
344
+ nestedPairRE(open, close, depth = 4) {
345
+ const openRE = this.escapeRE(open);
346
+ const closeRE = this.escapeRE(close);
347
+ const atom = `(?:(?!${this.src_ZCc}|${openRE}|${closeRE}).)`;
348
+ let pair = `${openRE}${atom}{0,1000}${closeRE}`;
349
+ for (let level = 2; level <= depth; level++) pair = `${openRE}(?:${atom}|${pair}){0,1000}${closeRE}`;
350
+ return pair;
351
+ }
352
+ get_text_separators() {
353
+ return this.cache.text_separators ??= /[><\uff5c]/;
354
+ }
355
+ get_pseudo_letter() {
356
+ return this.cache.src_pseudo_letter ??= new RegExp(`(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`);
357
+ }
358
+ get_ipv4_addr() {
359
+ return this.cache.src_ip4 ??= /* @__PURE__ */ new RegExp("(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])");
360
+ }
361
+ get_ipv6_addr() {
362
+ const h16 = "[0-9A-Fa-f]{1,4}";
363
+ const ls32 = `(?:(?:${h16}:${h16})|${this.get_ipv4_addr().source})`;
364
+ return this.cache.src_ip6_addr ??= new RegExp(`(?:(?:${h16}:){6}${ls32}|::(?:${h16}:){5}${ls32}|(?:${h16})?::(?:${h16}:){4}${ls32}|(?:(?:${h16}:){0,1}${h16})?::(?:${h16}:){3}${ls32}|(?:(?:${h16}:){0,2}${h16})?::(?:${h16}:){2}${ls32}|(?:(?:${h16}:){0,3}${h16})?::${h16}:${ls32}|(?:(?:${h16}:){0,4}${h16})?::${ls32}|(?:(?:${h16}:){0,5}${h16})?::${h16}|(?:(?:${h16}:){0,6}${h16})?::)`);
365
+ }
366
+ get_ipv6_url_host() {
367
+ return this.cache.src_ip6_host ??= new RegExp(`\\[${this.get_ipv6_addr().source}\\]`);
368
+ }
369
+ get_ipv6_mail_host() {
370
+ return this.cache.src_ipv6_mail_host ??= new RegExp(`\\[IPv6:${this.get_ipv6_addr().source}\\]`);
371
+ }
372
+ get_auth() {
373
+ return this.cache.src_auth ??= new RegExp(`(?:(?:(?!${this.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`);
374
+ }
375
+ get_port() {
376
+ return this.cache.src_port ??= /* @__PURE__ */ new RegExp("(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?");
377
+ }
378
+ get_host_terminator() {
379
+ return this.cache.src_host_terminator ??= new RegExp(`(?=$|${this.get_text_separators().source}|${this.src_ZPCc})(?!${this.opts["---"] ? "-(?!--)|" : "-|"}_|:\\d|\\.-|\\.(?!$|${this.src_ZPCc}))`);
380
+ }
381
+ get_path_terminator() {
382
+ return this.cache.src_path_terminator ??= new RegExp(`${this.src_ZPCc}|${this.get_text_separators().source}`);
383
+ }
384
+ get_path() {
385
+ return this.cache.src_path ??= new RegExp(`(?:[/?#](?:${this.nestedPairRE("[", "]")}|${this.nestedPairRE("(", ")")}|${this.nestedPairRE("{", "}")}|\\"(?:(?!${this.src_ZCc}|["]).){1,100}\\"|\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\'|\\'(?=${this.get_pseudo_letter().source}|[-])|\\.{2,20}[:]?[a-zA-Z0-9%/&]|\\.(?!${this.src_ZCc}|[.]|$)|` + (this.opts["---"] ? "\\-(?!--(?:[^-]|$))(?:-{0,19})|" : "\\-{1,20}|") + `,(?!${this.src_ZCc}|$)|;(?!${this.src_ZCc}|$)|\\!{1,20}(?!${this.src_ZCc}|[!]|$)|\\?(?!${this.src_ZCc}|[?]|$)|` + this.get_path_extra().source + `[\\\\/:%@#&=_~*]|(?!${this.get_path_terminator().source}).){1,${this.opts.maxLength}}|\\/)?`);
386
+ }
387
+ get_mail_name() {
388
+ return this.cache.src_mail_name ??= /* @__PURE__ */ new RegExp("[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}");
389
+ }
390
+ get_xn() {
391
+ return this.cache.src_xn ??= /* @__PURE__ */ new RegExp("xn--[a-z0-9\\-]{1,59}");
392
+ }
393
+ get_tld() {
394
+ if (this.cache.tld) return this.cache.tld;
395
+ const tlds_src = [...new Set(this.opts.tlds || [])].sort().reverse().join("|");
396
+ this.cache.tld = new RegExp(`${tlds_src || "$#none#$"}|${this.get_xn().source}`);
397
+ return this.cache.tld;
398
+ }
399
+ get_domain_root() {
400
+ return this.cache.src_domain_root ??= new RegExp("(?:" + this.get_xn().source + `|${this.get_pseudo_letter().source}{1,63})`);
401
+ }
402
+ get_domain() {
403
+ return this.cache.src_domain ??= new RegExp("(?:" + this.get_xn().source + `|(?:${this.get_pseudo_letter().source})|(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source}))`);
404
+ }
405
+ get_url_host_port() {
406
+ return this.cache.url_host_port ??= new RegExp("(?:" + this.get_ipv6_url_host().source + `|(?:(?:(?:${this.get_domain().source})\\.){0,10}${this.get_domain().source}))` + this.get_port().source + this.get_host_terminator().source);
407
+ }
408
+ get_fuzzy_url_host_port() {
409
+ return this.cache.fuzzy_url_host_port ??= new RegExp("(?:" + (this.opts.fuzzyIP ? this.get_ipv4_addr().source + "|" : "") + `(?:(?:(?:${this.get_domain().source})\\.){1,10}(?:${this.get_tld().source})))` + this.get_host_terminator().source);
410
+ }
411
+ get_mail_host() {
412
+ return this.cache.src_mail_host ??= new RegExp("(?:" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})\\.){0,4}${this.get_domain().source}))` + this.get_host_terminator().source);
413
+ }
414
+ get_fuzzy_mail_host() {
415
+ return this.cache.src_fuzzy_mail_host ??= new RegExp("(?:" + this.get_ipv6_mail_host().source + `|(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source}))` + this.get_host_terminator().source);
416
+ }
417
+ get_path_extra() {
418
+ return this.cache.src_path_extra ??= /* @__PURE__ */ new RegExp("");
419
+ }
420
+ get_fuzzy_mail_host_search() {
421
+ return this.cache.mail_fuzzy_host_search ??= new RegExp(`@${this.get_fuzzy_mail_host().source}`, "ig");
422
+ }
423
+ get_fuzzy_link_search() {
424
+ return this.cache.link_fuzzy_search ??= new RegExp(`(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uFF5C]|${this.src_ZPCc}))(?:(?![$+<=>^\`|\uFF5C])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`, "ig");
425
+ }
426
+ get_http_validator() {
427
+ return this.cache.http_validator ??= new RegExp("\\/\\/" + (this.opts.urlAuth ? this.get_auth().source : "") + this.get_url_host_port().source + this.get_path().source, "iy");
428
+ }
429
+ get_relative_proto_validator() {
430
+ return this.cache.relative_proto_validator ??= new RegExp((this.opts.urlAuth ? this.get_auth().source : "") + `(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})` + this.get_port().source + this.get_host_terminator().source + this.get_path().source, "iy");
431
+ }
432
+ get_mail_name_validator() {
433
+ return this.cache.mail_name_validator ??= new RegExp(`(?:^|${this.get_text_separators().source}|"|\\(|${this.src_ZCc})(${this.get_mail_name().source})$`);
434
+ }
435
+ get_mailto_validator() {
436
+ return this.cache.mailto_validator ??= new RegExp(`${this.get_mail_name().source}@${this.get_mail_host().source}`, "iy");
437
+ }
438
+ get_schema_names() {
439
+ return this.cache.schema_names ??= new RegExp((this.opts.schema_names || []).map((name) => this.escapeRE(name)).join("|"));
440
+ }
441
+ get_schema_search() {
442
+ return this.cache.schema_search ??= new RegExp(`(^|(?!_)(?:[><\uFF5C]|${this.src_ZPCc}))(${this.get_schema_names().source})`, "ig");
443
+ }
444
+ get_schema_at_start() {
445
+ return this.cache.schema_at_start ??= new RegExp(`^${this.get_schema_search().source}`, "i");
446
+ }
447
+ };
448
+ var web_schema = {
449
+ validate: (text, pos, self) => {
450
+ const re = self.re.get_http_validator();
451
+ re.lastIndex = pos;
452
+ const m = re.exec(text);
453
+ return m ? m[0].length : 0;
454
+ },
455
+ normalize: (match, self) => self.normalize(match)
456
+ };
457
+ var defaultSchemas = {
458
+ "http:": web_schema,
459
+ "https:": web_schema,
460
+ "ftp:": web_schema,
461
+ "//": {
462
+ validate: function(text, pos, self) {
463
+ const re = self.re.get_relative_proto_validator();
464
+ re.lastIndex = pos;
465
+ const m = re.exec(text);
466
+ if (m) {
467
+ if (pos >= 3 && text[pos - 3] === ":") return 0;
468
+ if (pos >= 3 && text[pos - 3] === "/") return 0;
469
+ return m[0].length;
470
+ }
471
+ return 0;
472
+ },
473
+ normalize: (match, self) => self.normalize(match)
474
+ },
475
+ "mailto:": {
476
+ validate: function(text, pos, self) {
477
+ const re = self.re.get_mailto_validator();
478
+ re.lastIndex = pos;
479
+ const m = re.exec(text);
480
+ return m ? m[0].length : 0;
481
+ },
482
+ normalize: (match, self) => self.normalize(match)
483
+ }
484
+ };
485
+ var tlds_2ch = "a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw";
486
+ var tlds_default = "biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444";
487
+ function unpackTlds() {
488
+ const result = tlds_default.split("|");
489
+ tlds_2ch.split("|").forEach((item) => {
490
+ const sep = item.indexOf(":");
491
+ const prefix = item.slice(0, sep);
492
+ for (const suffix of item.slice(sep + 1)) result.push(prefix + suffix);
493
+ });
494
+ return result;
495
+ }
496
+ var defaultOptions = {
497
+ fuzzyLink: false,
498
+ fuzzyEmail: true,
499
+ fuzzyIP: false,
500
+ "---": false,
501
+ tlds: unpackTlds(),
502
+ urlAuth: false,
503
+ maxLength: 1e4
504
+ };
505
+ var Match = class {
506
+ /** Prefix (protocol) for matched string. Empty for fuzzy links. */
507
+ schema;
508
+ /** First position of matched string. */
509
+ index;
510
+ /** Next position after matched string. */
511
+ lastIndex;
512
+ /** Matched string. */
513
+ raw;
514
+ /** Normalized text of matched string. */
515
+ text;
516
+ /** Normalized URL of matched string. */
517
+ url;
518
+ constructor(text, schema, index, lastIndex) {
519
+ const raw = text.slice(index, lastIndex);
520
+ this.schema = schema.toLowerCase();
521
+ this.index = index;
522
+ this.lastIndex = lastIndex;
523
+ this.raw = raw;
524
+ this.text = raw;
525
+ this.url = raw;
526
+ }
527
+ };
528
+ var LinkifyIt = class {
529
+ __opts__;
530
+ __schemas__;
531
+ re;
532
+ /**
533
+ * Creates new linkifier instance.
534
+ *
535
+ * By default understands:
536
+ *
537
+ * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links
538
+ * - "fuzzy" emails (foo@bar.com).
539
+ *
540
+ * See {@link LinkifyConstructorOptions} for available options.
541
+ *
542
+ * @param options Recognition options.
543
+ *
544
+ * @example
545
+ * ```javascript
546
+ * import { LinkifyIt } from 'linkify-it'
547
+ *
548
+ * const linkify = new LinkifyIt({ fuzzyLink: true })
549
+ *
550
+ * linkify
551
+ * .tlds(require('tlds')) // Reload with full TLD list
552
+ * .tlds('onion', true) // Add unofficial `.onion` domain
553
+ * .add('ftp:', null) // Disable `ftp:` protocol
554
+ * .set({ fuzzyIP: true }) // Enable IPs in fuzzy links
555
+ *
556
+ * console.log(linkify.test('Site github.com!')) // true
557
+ * console.log(linkify.match('Site github.com!'))
558
+ * ```
559
+ */
560
+ constructor(options = {}) {
561
+ const { rebuilder, ...linkifyOptions } = options;
562
+ this.__opts__ = {
563
+ ...defaultOptions,
564
+ ...linkifyOptions
565
+ };
566
+ this.__schemas__ = { ...defaultSchemas };
567
+ this.re = rebuilder || new REBuilder();
568
+ this.re.set({
569
+ ...this.__opts__,
570
+ schema_names: Object.keys(this.__schemas__)
571
+ });
572
+ }
573
+ /**
574
+ * Add new rule definition.
575
+ *
576
+ * `schema` is a link prefix (usually, protocol name with `:` at the end,
577
+ * `skype:` for example). `linkify-it` makes sure that prefix is not
578
+ * preceded with alphanumeric char and symbols. Only whitespaces and
579
+ * punctuation allowed.
580
+ *
581
+ * `definition` is a rule to check tail after link prefix. To disable an
582
+ * existing rule, pass `null`.
583
+ *
584
+ * @param schema Rule name (fixed pattern prefix).
585
+ * @param definition Schema definition, or `null` to disable the rule.
586
+ *
587
+ * See [twitter mentions example](https://github.com/markdown-it/linkify-it/blob/master/examples/twitter.mjs).
588
+ */
589
+ add(schema, definition = null) {
590
+ if (!definition) delete this.__schemas__[schema];
591
+ else {
592
+ const def = {
593
+ normalize: (match, self) => self.normalize(match),
594
+ ...definition
595
+ };
596
+ this.__schemas__[schema] = def;
597
+ }
598
+ this.re.set({
599
+ ...this.__opts__,
600
+ schema_names: Object.keys(this.__schemas__)
601
+ });
602
+ return this;
603
+ }
604
+ /**
605
+ * Set recognition options for links without schema.
606
+ *
607
+ * @param options Recognition options.
608
+ */
609
+ set(options = {}) {
610
+ this.__opts__ = {
611
+ ...this.__opts__,
612
+ ...options
613
+ };
614
+ this.re.set({
615
+ ...this.__opts__,
616
+ schema_names: Object.keys(this.__schemas__)
617
+ });
618
+ return this;
619
+ }
620
+ /**
621
+ * Searches linkifiable pattern and returns `true` on success or `false` on fail.
622
+ *
623
+ * @param text Text to scan.
624
+ */
625
+ test(text) {
626
+ if (!text.length) return false;
627
+ let m, re;
628
+ re = this.re.get_schema_search();
629
+ re.lastIndex = 0;
630
+ while ((m = re.exec(text)) !== null) if (this.testSchemaAt(text, m[2], re.lastIndex)) return true;
631
+ if (this.__opts__.fuzzyLink && this.__schemas__["http:"]) {
632
+ re = this.re.get_fuzzy_link_search();
633
+ re.lastIndex = 0;
634
+ if (re.exec(text) !== null) return true;
635
+ }
636
+ if (this.__opts__.fuzzyEmail && this.__schemas__["mailto:"]) {
637
+ if (text.indexOf("@") >= 0) {
638
+ const mailHostRe = this.re.get_fuzzy_mail_host_search();
639
+ const mailNameRe = this.re.get_mail_name_validator();
640
+ mailHostRe.lastIndex = 0;
641
+ while ((m = mailHostRe.exec(text)) !== null) {
642
+ const name = text.slice(Math.max(0, m.index - 65), m.index);
643
+ if (mailNameRe.test(name)) return true;
644
+ }
645
+ }
646
+ }
647
+ return false;
648
+ }
649
+ /**
650
+ * Similar to {@link LinkifyIt.test} but checks only specific protocol tail exactly
651
+ * at given position. Returns length of found pattern (0 on fail).
652
+ *
653
+ * @param text Text to scan.
654
+ * @param schema Rule (schema) name.
655
+ * @param pos Text offset to check from.
656
+ */
657
+ testSchemaAt(text, schema, pos) {
658
+ if (!this.__schemas__[schema.toLowerCase()]) return 0;
659
+ return this.__schemas__[schema.toLowerCase()].validate(text.slice(0, pos + this.__opts__.maxLength), pos, this);
660
+ }
661
+ /**
662
+ * Returns array of found link descriptions or `null` on fail. We strongly
663
+ * recommend to use {@link LinkifyIt.test} first, for best speed.
664
+ *
665
+ * @param text Text to scan.
666
+ */
667
+ match(text) {
668
+ const result = [];
669
+ const schemaRe = this.re.get_schema_search();
670
+ let fuzzyLinkRe;
671
+ let mailHostRe;
672
+ let mailNameRe;
673
+ let fuzzyLinkCandidate;
674
+ let fuzzyEmailCandidate;
675
+ let schemaPrefix;
676
+ let schemaDone = false;
677
+ let fuzzyLinkDone = false;
678
+ let fuzzyEmailDone = false;
679
+ let pos = 0;
680
+ if (!text.length) return null;
681
+ schemaRe.lastIndex = 0;
682
+ if (this.__opts__.fuzzyLink && this.__schemas__["http:"]) {
683
+ fuzzyLinkRe = this.re.get_fuzzy_link_search();
684
+ fuzzyLinkRe.lastIndex = 0;
685
+ }
686
+ if (this.__opts__.fuzzyEmail && this.__schemas__["mailto:"]) {
687
+ mailHostRe = this.re.get_fuzzy_mail_host_search();
688
+ mailHostRe.lastIndex = 0;
689
+ mailNameRe = this.re.get_mail_name_validator();
690
+ }
691
+ for (; ; ) {
692
+ const scanFrom = Math.max(pos - 1, 0);
693
+ if (mailHostRe && mailNameRe && !fuzzyEmailDone && (!fuzzyEmailCandidate || fuzzyEmailCandidate.index < pos)) {
694
+ if (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;
695
+ for (; ; ) {
696
+ const m = mailHostRe.exec(text);
697
+ if (!m) {
698
+ fuzzyEmailDone = true;
699
+ fuzzyEmailCandidate = void 0;
700
+ break;
701
+ }
702
+ const name = mailNameRe.exec(text.slice(Math.max(0, m.index - 65), m.index));
703
+ if (!name) continue;
704
+ fuzzyEmailCandidate = {
705
+ schema: "mailto:",
706
+ index: m.index - name[1].length,
707
+ lastIndex: m.index + m[0].length
708
+ };
709
+ if (fuzzyEmailCandidate.index >= pos) break;
710
+ if (mailHostRe.lastIndex < scanFrom) mailHostRe.lastIndex = scanFrom;
711
+ }
712
+ }
713
+ if (fuzzyLinkRe && !fuzzyLinkDone && (!fuzzyLinkCandidate || fuzzyLinkCandidate.index < pos)) {
714
+ if (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;
715
+ for (; ; ) {
716
+ const m = fuzzyLinkRe.exec(text);
717
+ if (!m) {
718
+ fuzzyLinkDone = true;
719
+ fuzzyLinkCandidate = void 0;
720
+ break;
721
+ }
722
+ fuzzyLinkCandidate = {
723
+ schema: "",
724
+ index: m.index + m[1].length,
725
+ lastIndex: m.index + m[0].length
726
+ };
727
+ if (fuzzyLinkCandidate.index >= pos) break;
728
+ if (fuzzyLinkRe.lastIndex < scanFrom) fuzzyLinkRe.lastIndex = scanFrom;
729
+ }
730
+ }
731
+ let fuzzyCandidate = fuzzyEmailCandidate;
732
+ if (!fuzzyCandidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < fuzzyCandidate.index || fuzzyLinkCandidate.index === fuzzyCandidate.index && fuzzyLinkCandidate.lastIndex > fuzzyCandidate.lastIndex)) fuzzyCandidate = fuzzyLinkCandidate;
733
+ let schemaCandidate;
734
+ if (!schemaDone) for (; ; ) {
735
+ if (!schemaPrefix) {
736
+ if (schemaRe.lastIndex < scanFrom) schemaRe.lastIndex = scanFrom;
737
+ const m = schemaRe.exec(text);
738
+ if (!m) {
739
+ schemaDone = true;
740
+ break;
741
+ }
742
+ schemaPrefix = {
743
+ schema: m[2],
744
+ index: m.index + m[1].length,
745
+ lastIndex: m.index + m[0].length
746
+ };
747
+ }
748
+ if (schemaPrefix.index < pos) {
749
+ schemaPrefix = void 0;
750
+ continue;
751
+ }
752
+ if (fuzzyCandidate && schemaPrefix.index > fuzzyCandidate.index) break;
753
+ const prefix = schemaPrefix;
754
+ schemaPrefix = void 0;
755
+ const len = this.testSchemaAt(text, prefix.schema, prefix.lastIndex);
756
+ if (len) {
757
+ schemaCandidate = {
758
+ schema: prefix.schema,
759
+ index: prefix.index,
760
+ lastIndex: prefix.lastIndex + len
761
+ };
762
+ break;
763
+ }
764
+ }
765
+ let candidate = schemaCandidate;
766
+ if (!candidate || fuzzyEmailCandidate && (fuzzyEmailCandidate.index < candidate.index || fuzzyEmailCandidate.index === candidate.index && fuzzyEmailCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyEmailCandidate;
767
+ if (!candidate || fuzzyLinkCandidate && (fuzzyLinkCandidate.index < candidate.index || fuzzyLinkCandidate.index === candidate.index && fuzzyLinkCandidate.lastIndex > candidate.lastIndex)) candidate = fuzzyLinkCandidate;
768
+ if (!candidate) break;
769
+ if (candidate === fuzzyEmailCandidate) fuzzyEmailCandidate = void 0;
770
+ else if (candidate === fuzzyLinkCandidate) fuzzyLinkCandidate = void 0;
771
+ const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);
772
+ if (match.schema) this.__schemas__[match.schema].normalize(match, this);
773
+ else this.normalize(match);
774
+ result.push(match);
775
+ pos = candidate.lastIndex;
776
+ }
777
+ if (result.length) return result;
778
+ return null;
779
+ }
780
+ /**
781
+ * Returns fully-formed (not fuzzy) link if it starts at the beginning
782
+ * of the string, and null otherwise.
783
+ *
784
+ * @param text Text to scan.
785
+ */
786
+ matchAtStart(text) {
787
+ if (!text.length) return null;
788
+ const m = this.re.get_schema_at_start().exec(text);
789
+ if (!m) return null;
790
+ const len = this.testSchemaAt(text, m[2], m[0].length);
791
+ if (!len) return null;
792
+ const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);
793
+ this.__schemas__[match.schema].normalize(match, this);
794
+ return match;
795
+ }
796
+ /**
797
+ * Load (or merge) new TLDs list. Those are used for fuzzy links (without
798
+ * prefix) to avoid false positives. By default this algorithm is used:
799
+ *
800
+ * - hostname with any 2-letter root zones are ok.
801
+ * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф
802
+ * are ok.
803
+ * - encoded (`xn--...`) root zones are ok.
804
+ *
805
+ * If list is replaced, then exact match for 2-chars root zones will be checked.
806
+ *
807
+ * @param list List of TLDs.
808
+ * @param keepOld Merge with current list if `true` (`false` by default).
809
+ */
810
+ tlds(list, keepOld = false) {
811
+ list = Array.isArray(list) ? list : [list];
812
+ if (!keepOld) this.__opts__.tlds = list;
813
+ else this.__opts__.tlds = this.__opts__.tlds.concat(list);
814
+ this.re.set({
815
+ ...this.__opts__,
816
+ schema_names: Object.keys(this.__schemas__)
817
+ });
818
+ return this;
819
+ }
820
+ /**
821
+ * Default normalizer (if schema does not define its own).
822
+ *
823
+ * @param match Match to normalize.
824
+ */
825
+ normalize(match) {
826
+ if (!match.schema) match.url = `http://${match.url}`;
827
+ if (match.schema === "mailto:" && !/^mailto:/i.test(match.url)) match.url = `mailto:${match.url}`;
828
+ }
829
+ };
830
+
831
+ // ../../node_modules/.pnpm/tlds@1.261.0/node_modules/tlds/index.json
832
+ var tlds_default2 = [
833
+ "aaa",
834
+ "aarp",
835
+ "abb",
836
+ "abbott",
837
+ "abbvie",
838
+ "abc",
839
+ "able",
840
+ "abogado",
841
+ "abudhabi",
842
+ "ac",
843
+ "academy",
844
+ "accenture",
845
+ "accountant",
846
+ "accountants",
847
+ "aco",
848
+ "actor",
849
+ "ad",
850
+ "ads",
851
+ "adult",
852
+ "ae",
853
+ "aeg",
854
+ "aero",
855
+ "aetna",
856
+ "af",
857
+ "afl",
858
+ "africa",
859
+ "ag",
860
+ "agakhan",
861
+ "agency",
862
+ "ai",
863
+ "aig",
864
+ "airbus",
865
+ "airforce",
866
+ "airtel",
867
+ "akdn",
868
+ "al",
869
+ "alibaba",
870
+ "alipay",
871
+ "allfinanz",
872
+ "allstate",
873
+ "ally",
874
+ "alsace",
875
+ "alstom",
876
+ "am",
877
+ "amazon",
878
+ "americanexpress",
879
+ "americanfamily",
880
+ "amex",
881
+ "amfam",
882
+ "amica",
883
+ "amsterdam",
884
+ "analytics",
885
+ "android",
886
+ "anquan",
887
+ "anz",
888
+ "ao",
889
+ "aol",
890
+ "apartments",
891
+ "app",
892
+ "apple",
893
+ "aq",
894
+ "aquarelle",
895
+ "ar",
896
+ "arab",
897
+ "aramco",
898
+ "archi",
899
+ "army",
900
+ "arpa",
901
+ "art",
902
+ "arte",
903
+ "as",
904
+ "asda",
905
+ "asia",
906
+ "associates",
907
+ "at",
908
+ "athleta",
909
+ "attorney",
910
+ "au",
911
+ "auction",
912
+ "audi",
913
+ "audible",
914
+ "audio",
915
+ "auspost",
916
+ "author",
917
+ "auto",
918
+ "autos",
919
+ "aw",
920
+ "aws",
921
+ "ax",
922
+ "axa",
923
+ "az",
924
+ "azure",
925
+ "ba",
926
+ "baby",
927
+ "baidu",
928
+ "banamex",
929
+ "band",
930
+ "bank",
931
+ "bar",
932
+ "barcelona",
933
+ "barclaycard",
934
+ "barclays",
935
+ "barefoot",
936
+ "bargains",
937
+ "baseball",
938
+ "basketball",
939
+ "bauhaus",
940
+ "bayern",
941
+ "bb",
942
+ "bbc",
943
+ "bbt",
944
+ "bbva",
945
+ "bcg",
946
+ "bcn",
947
+ "bd",
948
+ "be",
949
+ "beats",
950
+ "beauty",
951
+ "beer",
952
+ "berlin",
953
+ "best",
954
+ "bestbuy",
955
+ "bet",
956
+ "bf",
957
+ "bg",
958
+ "bh",
959
+ "bharti",
960
+ "bi",
961
+ "bible",
962
+ "bid",
963
+ "bike",
964
+ "bing",
965
+ "bingo",
966
+ "bio",
967
+ "biz",
968
+ "bj",
969
+ "black",
970
+ "blackfriday",
971
+ "blockbuster",
972
+ "blog",
973
+ "bloomberg",
974
+ "blue",
975
+ "bm",
976
+ "bms",
977
+ "bmw",
978
+ "bn",
979
+ "bnpparibas",
980
+ "bo",
981
+ "boats",
982
+ "boehringer",
983
+ "bofa",
984
+ "bom",
985
+ "bond",
986
+ "boo",
987
+ "book",
988
+ "booking",
989
+ "bosch",
990
+ "bostik",
991
+ "boston",
992
+ "bot",
993
+ "boutique",
994
+ "box",
995
+ "br",
996
+ "bradesco",
997
+ "bridgestone",
998
+ "broadway",
999
+ "broker",
1000
+ "brother",
1001
+ "brussels",
1002
+ "bs",
1003
+ "bt",
1004
+ "build",
1005
+ "builders",
1006
+ "business",
1007
+ "buy",
1008
+ "buzz",
1009
+ "bv",
1010
+ "bw",
1011
+ "by",
1012
+ "bz",
1013
+ "bzh",
1014
+ "ca",
1015
+ "cab",
1016
+ "cafe",
1017
+ "cal",
1018
+ "call",
1019
+ "calvinklein",
1020
+ "cam",
1021
+ "camera",
1022
+ "camp",
1023
+ "canon",
1024
+ "capetown",
1025
+ "capital",
1026
+ "capitalone",
1027
+ "car",
1028
+ "caravan",
1029
+ "cards",
1030
+ "care",
1031
+ "career",
1032
+ "careers",
1033
+ "cars",
1034
+ "casa",
1035
+ "case",
1036
+ "cash",
1037
+ "casino",
1038
+ "cat",
1039
+ "catering",
1040
+ "catholic",
1041
+ "cba",
1042
+ "cbn",
1043
+ "cbre",
1044
+ "cc",
1045
+ "cd",
1046
+ "center",
1047
+ "ceo",
1048
+ "cern",
1049
+ "cf",
1050
+ "cfa",
1051
+ "cfd",
1052
+ "cg",
1053
+ "ch",
1054
+ "chanel",
1055
+ "channel",
1056
+ "charity",
1057
+ "chase",
1058
+ "chat",
1059
+ "cheap",
1060
+ "chintai",
1061
+ "christmas",
1062
+ "chrome",
1063
+ "church",
1064
+ "ci",
1065
+ "cipriani",
1066
+ "circle",
1067
+ "cisco",
1068
+ "citadel",
1069
+ "citi",
1070
+ "citic",
1071
+ "city",
1072
+ "ck",
1073
+ "cl",
1074
+ "claims",
1075
+ "cleaning",
1076
+ "click",
1077
+ "clinic",
1078
+ "clinique",
1079
+ "clothing",
1080
+ "cloud",
1081
+ "club",
1082
+ "clubmed",
1083
+ "cm",
1084
+ "cn",
1085
+ "co",
1086
+ "coach",
1087
+ "codes",
1088
+ "coffee",
1089
+ "college",
1090
+ "cologne",
1091
+ "com",
1092
+ "commbank",
1093
+ "community",
1094
+ "company",
1095
+ "compare",
1096
+ "computer",
1097
+ "comsec",
1098
+ "condos",
1099
+ "construction",
1100
+ "consulting",
1101
+ "contact",
1102
+ "contractors",
1103
+ "cooking",
1104
+ "cool",
1105
+ "coop",
1106
+ "corsica",
1107
+ "country",
1108
+ "coupon",
1109
+ "coupons",
1110
+ "courses",
1111
+ "cpa",
1112
+ "cr",
1113
+ "credit",
1114
+ "creditcard",
1115
+ "creditunion",
1116
+ "cricket",
1117
+ "crown",
1118
+ "crs",
1119
+ "cruise",
1120
+ "cruises",
1121
+ "cu",
1122
+ "cuisinella",
1123
+ "cv",
1124
+ "cw",
1125
+ "cx",
1126
+ "cy",
1127
+ "cymru",
1128
+ "cyou",
1129
+ "cz",
1130
+ "dad",
1131
+ "dance",
1132
+ "data",
1133
+ "date",
1134
+ "dating",
1135
+ "datsun",
1136
+ "day",
1137
+ "dclk",
1138
+ "dds",
1139
+ "de",
1140
+ "deal",
1141
+ "dealer",
1142
+ "deals",
1143
+ "degree",
1144
+ "delivery",
1145
+ "dell",
1146
+ "deloitte",
1147
+ "delta",
1148
+ "democrat",
1149
+ "dental",
1150
+ "dentist",
1151
+ "desi",
1152
+ "design",
1153
+ "dev",
1154
+ "dhl",
1155
+ "diamonds",
1156
+ "diet",
1157
+ "digital",
1158
+ "direct",
1159
+ "directory",
1160
+ "discount",
1161
+ "discover",
1162
+ "dish",
1163
+ "diy",
1164
+ "dj",
1165
+ "dk",
1166
+ "dm",
1167
+ "dnp",
1168
+ "do",
1169
+ "docs",
1170
+ "doctor",
1171
+ "dog",
1172
+ "domains",
1173
+ "dot",
1174
+ "download",
1175
+ "drive",
1176
+ "dtv",
1177
+ "dubai",
1178
+ "dupont",
1179
+ "durban",
1180
+ "dvag",
1181
+ "dvr",
1182
+ "dz",
1183
+ "earth",
1184
+ "eat",
1185
+ "ec",
1186
+ "eco",
1187
+ "edeka",
1188
+ "edu",
1189
+ "education",
1190
+ "ee",
1191
+ "eg",
1192
+ "email",
1193
+ "emerck",
1194
+ "energy",
1195
+ "engineer",
1196
+ "engineering",
1197
+ "enterprises",
1198
+ "epson",
1199
+ "equipment",
1200
+ "er",
1201
+ "ericsson",
1202
+ "erni",
1203
+ "es",
1204
+ "esq",
1205
+ "estate",
1206
+ "et",
1207
+ "eu",
1208
+ "eurovision",
1209
+ "eus",
1210
+ "events",
1211
+ "exchange",
1212
+ "expert",
1213
+ "exposed",
1214
+ "express",
1215
+ "extraspace",
1216
+ "fage",
1217
+ "fail",
1218
+ "fairwinds",
1219
+ "faith",
1220
+ "family",
1221
+ "fan",
1222
+ "fans",
1223
+ "farm",
1224
+ "farmers",
1225
+ "fashion",
1226
+ "fast",
1227
+ "fedex",
1228
+ "feedback",
1229
+ "ferrari",
1230
+ "ferrero",
1231
+ "fi",
1232
+ "fidelity",
1233
+ "fido",
1234
+ "film",
1235
+ "final",
1236
+ "finance",
1237
+ "financial",
1238
+ "fire",
1239
+ "firestone",
1240
+ "firmdale",
1241
+ "fish",
1242
+ "fishing",
1243
+ "fit",
1244
+ "fitness",
1245
+ "fj",
1246
+ "fk",
1247
+ "flickr",
1248
+ "flights",
1249
+ "flir",
1250
+ "florist",
1251
+ "flowers",
1252
+ "fly",
1253
+ "fm",
1254
+ "fo",
1255
+ "foo",
1256
+ "food",
1257
+ "football",
1258
+ "ford",
1259
+ "forex",
1260
+ "forsale",
1261
+ "forum",
1262
+ "foundation",
1263
+ "fox",
1264
+ "fr",
1265
+ "free",
1266
+ "fresenius",
1267
+ "frl",
1268
+ "frogans",
1269
+ "frontier",
1270
+ "ftr",
1271
+ "fujitsu",
1272
+ "fun",
1273
+ "fund",
1274
+ "furniture",
1275
+ "futbol",
1276
+ "fyi",
1277
+ "ga",
1278
+ "gal",
1279
+ "gallery",
1280
+ "gallo",
1281
+ "gallup",
1282
+ "game",
1283
+ "games",
1284
+ "gap",
1285
+ "garden",
1286
+ "gay",
1287
+ "gb",
1288
+ "gbiz",
1289
+ "gd",
1290
+ "gdn",
1291
+ "ge",
1292
+ "gea",
1293
+ "gent",
1294
+ "genting",
1295
+ "george",
1296
+ "gf",
1297
+ "gg",
1298
+ "ggee",
1299
+ "gh",
1300
+ "gi",
1301
+ "gift",
1302
+ "gifts",
1303
+ "gives",
1304
+ "giving",
1305
+ "gl",
1306
+ "glass",
1307
+ "gle",
1308
+ "global",
1309
+ "globo",
1310
+ "gm",
1311
+ "gmail",
1312
+ "gmbh",
1313
+ "gmo",
1314
+ "gmx",
1315
+ "gn",
1316
+ "godaddy",
1317
+ "gold",
1318
+ "goldpoint",
1319
+ "golf",
1320
+ "goo",
1321
+ "goodyear",
1322
+ "goog",
1323
+ "google",
1324
+ "gop",
1325
+ "got",
1326
+ "gov",
1327
+ "gp",
1328
+ "gq",
1329
+ "gr",
1330
+ "grainger",
1331
+ "graphics",
1332
+ "gratis",
1333
+ "green",
1334
+ "gripe",
1335
+ "grocery",
1336
+ "group",
1337
+ "gs",
1338
+ "gt",
1339
+ "gu",
1340
+ "gucci",
1341
+ "guge",
1342
+ "guide",
1343
+ "guitars",
1344
+ "guru",
1345
+ "gw",
1346
+ "gy",
1347
+ "hair",
1348
+ "hamburg",
1349
+ "hangout",
1350
+ "haus",
1351
+ "hbo",
1352
+ "hdfc",
1353
+ "hdfcbank",
1354
+ "health",
1355
+ "healthcare",
1356
+ "help",
1357
+ "helsinki",
1358
+ "here",
1359
+ "hermes",
1360
+ "hiphop",
1361
+ "hisamitsu",
1362
+ "hitachi",
1363
+ "hiv",
1364
+ "hk",
1365
+ "hkt",
1366
+ "hm",
1367
+ "hn",
1368
+ "hockey",
1369
+ "holdings",
1370
+ "holiday",
1371
+ "homedepot",
1372
+ "homegoods",
1373
+ "homes",
1374
+ "homesense",
1375
+ "honda",
1376
+ "horse",
1377
+ "hospital",
1378
+ "host",
1379
+ "hosting",
1380
+ "hot",
1381
+ "hotels",
1382
+ "hotmail",
1383
+ "house",
1384
+ "how",
1385
+ "hr",
1386
+ "hsbc",
1387
+ "ht",
1388
+ "hu",
1389
+ "hughes",
1390
+ "hyatt",
1391
+ "hyundai",
1392
+ "ibm",
1393
+ "icbc",
1394
+ "ice",
1395
+ "icu",
1396
+ "id",
1397
+ "ie",
1398
+ "ieee",
1399
+ "ifm",
1400
+ "ikano",
1401
+ "il",
1402
+ "im",
1403
+ "imamat",
1404
+ "imdb",
1405
+ "immo",
1406
+ "immobilien",
1407
+ "in",
1408
+ "inc",
1409
+ "industries",
1410
+ "infiniti",
1411
+ "info",
1412
+ "ing",
1413
+ "ink",
1414
+ "institute",
1415
+ "insurance",
1416
+ "insure",
1417
+ "int",
1418
+ "international",
1419
+ "intuit",
1420
+ "investments",
1421
+ "io",
1422
+ "ipiranga",
1423
+ "iq",
1424
+ "ir",
1425
+ "irish",
1426
+ "is",
1427
+ "ismaili",
1428
+ "ist",
1429
+ "istanbul",
1430
+ "it",
1431
+ "itau",
1432
+ "itv",
1433
+ "jaguar",
1434
+ "java",
1435
+ "jcb",
1436
+ "je",
1437
+ "jeep",
1438
+ "jetzt",
1439
+ "jewelry",
1440
+ "jio",
1441
+ "jll",
1442
+ "jm",
1443
+ "jmp",
1444
+ "jnj",
1445
+ "jo",
1446
+ "jobs",
1447
+ "joburg",
1448
+ "jot",
1449
+ "joy",
1450
+ "jp",
1451
+ "jpmorgan",
1452
+ "jprs",
1453
+ "juegos",
1454
+ "juniper",
1455
+ "kaufen",
1456
+ "kddi",
1457
+ "ke",
1458
+ "kerryhotels",
1459
+ "kerryproperties",
1460
+ "kfh",
1461
+ "kg",
1462
+ "kh",
1463
+ "ki",
1464
+ "kia",
1465
+ "kids",
1466
+ "kim",
1467
+ "kindle",
1468
+ "kitchen",
1469
+ "kiwi",
1470
+ "km",
1471
+ "kn",
1472
+ "koeln",
1473
+ "komatsu",
1474
+ "kosher",
1475
+ "kp",
1476
+ "kpmg",
1477
+ "kpn",
1478
+ "kr",
1479
+ "krd",
1480
+ "kred",
1481
+ "kuokgroup",
1482
+ "kw",
1483
+ "ky",
1484
+ "kyoto",
1485
+ "kz",
1486
+ "la",
1487
+ "lacaixa",
1488
+ "lamborghini",
1489
+ "lamer",
1490
+ "land",
1491
+ "landrover",
1492
+ "lanxess",
1493
+ "lasalle",
1494
+ "lat",
1495
+ "latino",
1496
+ "latrobe",
1497
+ "law",
1498
+ "lawyer",
1499
+ "lb",
1500
+ "lc",
1501
+ "lds",
1502
+ "lease",
1503
+ "leclerc",
1504
+ "lefrak",
1505
+ "legal",
1506
+ "lego",
1507
+ "lexus",
1508
+ "lgbt",
1509
+ "li",
1510
+ "lidl",
1511
+ "life",
1512
+ "lifeinsurance",
1513
+ "lifestyle",
1514
+ "lighting",
1515
+ "like",
1516
+ "lilly",
1517
+ "limited",
1518
+ "limo",
1519
+ "lincoln",
1520
+ "link",
1521
+ "live",
1522
+ "living",
1523
+ "lk",
1524
+ "llc",
1525
+ "llp",
1526
+ "loan",
1527
+ "loans",
1528
+ "locker",
1529
+ "locus",
1530
+ "lol",
1531
+ "london",
1532
+ "lotte",
1533
+ "lotto",
1534
+ "love",
1535
+ "lpl",
1536
+ "lplfinancial",
1537
+ "lr",
1538
+ "ls",
1539
+ "lt",
1540
+ "ltd",
1541
+ "ltda",
1542
+ "lu",
1543
+ "lundbeck",
1544
+ "luxe",
1545
+ "luxury",
1546
+ "lv",
1547
+ "ly",
1548
+ "ma",
1549
+ "madrid",
1550
+ "maif",
1551
+ "maison",
1552
+ "makeup",
1553
+ "man",
1554
+ "management",
1555
+ "mango",
1556
+ "map",
1557
+ "market",
1558
+ "marketing",
1559
+ "markets",
1560
+ "marriott",
1561
+ "marshalls",
1562
+ "mattel",
1563
+ "mba",
1564
+ "mc",
1565
+ "mckinsey",
1566
+ "md",
1567
+ "me",
1568
+ "med",
1569
+ "media",
1570
+ "meet",
1571
+ "melbourne",
1572
+ "meme",
1573
+ "memorial",
1574
+ "men",
1575
+ "menu",
1576
+ "merckmsd",
1577
+ "mg",
1578
+ "mh",
1579
+ "miami",
1580
+ "microsoft",
1581
+ "mil",
1582
+ "mini",
1583
+ "mint",
1584
+ "mit",
1585
+ "mitsubishi",
1586
+ "mk",
1587
+ "ml",
1588
+ "mlb",
1589
+ "mls",
1590
+ "mm",
1591
+ "mma",
1592
+ "mn",
1593
+ "mo",
1594
+ "mobi",
1595
+ "mobile",
1596
+ "moda",
1597
+ "moe",
1598
+ "moi",
1599
+ "mom",
1600
+ "monash",
1601
+ "money",
1602
+ "monster",
1603
+ "mormon",
1604
+ "mortgage",
1605
+ "moscow",
1606
+ "moto",
1607
+ "motorcycles",
1608
+ "mov",
1609
+ "movie",
1610
+ "mp",
1611
+ "mq",
1612
+ "mr",
1613
+ "ms",
1614
+ "msd",
1615
+ "mt",
1616
+ "mtn",
1617
+ "mtr",
1618
+ "mu",
1619
+ "museum",
1620
+ "music",
1621
+ "mv",
1622
+ "mw",
1623
+ "mx",
1624
+ "my",
1625
+ "mz",
1626
+ "na",
1627
+ "nab",
1628
+ "nagoya",
1629
+ "name",
1630
+ "navy",
1631
+ "nba",
1632
+ "nc",
1633
+ "ne",
1634
+ "nec",
1635
+ "net",
1636
+ "netbank",
1637
+ "netflix",
1638
+ "network",
1639
+ "neustar",
1640
+ "new",
1641
+ "news",
1642
+ "next",
1643
+ "nextdirect",
1644
+ "nexus",
1645
+ "nf",
1646
+ "nfl",
1647
+ "ng",
1648
+ "ngo",
1649
+ "nhk",
1650
+ "ni",
1651
+ "nico",
1652
+ "nike",
1653
+ "nikon",
1654
+ "ninja",
1655
+ "nissan",
1656
+ "nissay",
1657
+ "nl",
1658
+ "no",
1659
+ "nokia",
1660
+ "norton",
1661
+ "now",
1662
+ "nowruz",
1663
+ "nowtv",
1664
+ "np",
1665
+ "nr",
1666
+ "nra",
1667
+ "nrw",
1668
+ "ntt",
1669
+ "nu",
1670
+ "nyc",
1671
+ "nz",
1672
+ "obi",
1673
+ "observer",
1674
+ "office",
1675
+ "okinawa",
1676
+ "olayan",
1677
+ "olayangroup",
1678
+ "ollo",
1679
+ "om",
1680
+ "omega",
1681
+ "one",
1682
+ "ong",
1683
+ "onl",
1684
+ "online",
1685
+ "ooo",
1686
+ "open",
1687
+ "oracle",
1688
+ "orange",
1689
+ "org",
1690
+ "organic",
1691
+ "origins",
1692
+ "osaka",
1693
+ "otsuka",
1694
+ "ott",
1695
+ "ovh",
1696
+ "pa",
1697
+ "page",
1698
+ "panasonic",
1699
+ "paris",
1700
+ "pars",
1701
+ "partners",
1702
+ "parts",
1703
+ "party",
1704
+ "pay",
1705
+ "pccw",
1706
+ "pe",
1707
+ "pet",
1708
+ "pf",
1709
+ "pfizer",
1710
+ "pg",
1711
+ "ph",
1712
+ "pharmacy",
1713
+ "phd",
1714
+ "philips",
1715
+ "phone",
1716
+ "photo",
1717
+ "photography",
1718
+ "photos",
1719
+ "physio",
1720
+ "pics",
1721
+ "pictet",
1722
+ "pictures",
1723
+ "pid",
1724
+ "pin",
1725
+ "ping",
1726
+ "pink",
1727
+ "pioneer",
1728
+ "pizza",
1729
+ "pk",
1730
+ "pl",
1731
+ "place",
1732
+ "play",
1733
+ "playstation",
1734
+ "plumbing",
1735
+ "plus",
1736
+ "pm",
1737
+ "pn",
1738
+ "pnc",
1739
+ "pohl",
1740
+ "poker",
1741
+ "politie",
1742
+ "porn",
1743
+ "post",
1744
+ "pr",
1745
+ "praxi",
1746
+ "press",
1747
+ "prime",
1748
+ "pro",
1749
+ "prod",
1750
+ "productions",
1751
+ "prof",
1752
+ "progressive",
1753
+ "promo",
1754
+ "properties",
1755
+ "property",
1756
+ "protection",
1757
+ "pru",
1758
+ "prudential",
1759
+ "ps",
1760
+ "pt",
1761
+ "pub",
1762
+ "pw",
1763
+ "pwc",
1764
+ "py",
1765
+ "qa",
1766
+ "qpon",
1767
+ "quebec",
1768
+ "quest",
1769
+ "racing",
1770
+ "radio",
1771
+ "re",
1772
+ "read",
1773
+ "realestate",
1774
+ "realtor",
1775
+ "realty",
1776
+ "recipes",
1777
+ "red",
1778
+ "redumbrella",
1779
+ "rehab",
1780
+ "reise",
1781
+ "reisen",
1782
+ "reit",
1783
+ "reliance",
1784
+ "ren",
1785
+ "rent",
1786
+ "rentals",
1787
+ "repair",
1788
+ "report",
1789
+ "republican",
1790
+ "rest",
1791
+ "restaurant",
1792
+ "review",
1793
+ "reviews",
1794
+ "rexroth",
1795
+ "rich",
1796
+ "richardli",
1797
+ "ricoh",
1798
+ "ril",
1799
+ "rio",
1800
+ "rip",
1801
+ "ro",
1802
+ "rocks",
1803
+ "rodeo",
1804
+ "rogers",
1805
+ "room",
1806
+ "rs",
1807
+ "rsvp",
1808
+ "ru",
1809
+ "rugby",
1810
+ "ruhr",
1811
+ "run",
1812
+ "rw",
1813
+ "rwe",
1814
+ "ryukyu",
1815
+ "sa",
1816
+ "saarland",
1817
+ "safe",
1818
+ "safety",
1819
+ "sakura",
1820
+ "sale",
1821
+ "salon",
1822
+ "samsclub",
1823
+ "samsung",
1824
+ "sandvik",
1825
+ "sandvikcoromant",
1826
+ "sanofi",
1827
+ "sap",
1828
+ "sarl",
1829
+ "sas",
1830
+ "save",
1831
+ "saxo",
1832
+ "sb",
1833
+ "sbi",
1834
+ "sbs",
1835
+ "sc",
1836
+ "scb",
1837
+ "schaeffler",
1838
+ "schmidt",
1839
+ "scholarships",
1840
+ "school",
1841
+ "schule",
1842
+ "schwarz",
1843
+ "science",
1844
+ "scot",
1845
+ "sd",
1846
+ "se",
1847
+ "search",
1848
+ "seat",
1849
+ "secure",
1850
+ "security",
1851
+ "seek",
1852
+ "select",
1853
+ "sener",
1854
+ "services",
1855
+ "seven",
1856
+ "sew",
1857
+ "sex",
1858
+ "sexy",
1859
+ "sfr",
1860
+ "sg",
1861
+ "sh",
1862
+ "shangrila",
1863
+ "sharp",
1864
+ "shell",
1865
+ "shia",
1866
+ "shiksha",
1867
+ "shoes",
1868
+ "shop",
1869
+ "shopping",
1870
+ "shouji",
1871
+ "show",
1872
+ "si",
1873
+ "silk",
1874
+ "sina",
1875
+ "singles",
1876
+ "site",
1877
+ "sj",
1878
+ "sk",
1879
+ "ski",
1880
+ "skin",
1881
+ "sky",
1882
+ "skype",
1883
+ "sl",
1884
+ "sling",
1885
+ "sm",
1886
+ "smart",
1887
+ "smile",
1888
+ "sn",
1889
+ "sncf",
1890
+ "so",
1891
+ "soccer",
1892
+ "social",
1893
+ "softbank",
1894
+ "software",
1895
+ "sohu",
1896
+ "solar",
1897
+ "solutions",
1898
+ "song",
1899
+ "sony",
1900
+ "soy",
1901
+ "spa",
1902
+ "space",
1903
+ "sport",
1904
+ "spot",
1905
+ "sr",
1906
+ "srl",
1907
+ "ss",
1908
+ "st",
1909
+ "stada",
1910
+ "staples",
1911
+ "star",
1912
+ "statebank",
1913
+ "statefarm",
1914
+ "stc",
1915
+ "stcgroup",
1916
+ "stockholm",
1917
+ "storage",
1918
+ "store",
1919
+ "stream",
1920
+ "studio",
1921
+ "study",
1922
+ "style",
1923
+ "su",
1924
+ "sucks",
1925
+ "supplies",
1926
+ "supply",
1927
+ "support",
1928
+ "surf",
1929
+ "surgery",
1930
+ "suzuki",
1931
+ "sv",
1932
+ "swatch",
1933
+ "swiss",
1934
+ "sx",
1935
+ "sy",
1936
+ "sydney",
1937
+ "systems",
1938
+ "sz",
1939
+ "tab",
1940
+ "taipei",
1941
+ "talk",
1942
+ "taobao",
1943
+ "target",
1944
+ "tatamotors",
1945
+ "tatar",
1946
+ "tattoo",
1947
+ "tax",
1948
+ "taxi",
1949
+ "tc",
1950
+ "tci",
1951
+ "td",
1952
+ "tdk",
1953
+ "team",
1954
+ "tech",
1955
+ "technology",
1956
+ "tel",
1957
+ "temasek",
1958
+ "tennis",
1959
+ "teva",
1960
+ "tf",
1961
+ "tg",
1962
+ "th",
1963
+ "thd",
1964
+ "theater",
1965
+ "theatre",
1966
+ "tiaa",
1967
+ "tickets",
1968
+ "tienda",
1969
+ "tips",
1970
+ "tires",
1971
+ "tirol",
1972
+ "tj",
1973
+ "tjmaxx",
1974
+ "tjx",
1975
+ "tk",
1976
+ "tkmaxx",
1977
+ "tl",
1978
+ "tm",
1979
+ "tmall",
1980
+ "tn",
1981
+ "to",
1982
+ "today",
1983
+ "tokyo",
1984
+ "tools",
1985
+ "top",
1986
+ "toray",
1987
+ "toshiba",
1988
+ "total",
1989
+ "tours",
1990
+ "town",
1991
+ "toyota",
1992
+ "toys",
1993
+ "tr",
1994
+ "trade",
1995
+ "trading",
1996
+ "training",
1997
+ "travel",
1998
+ "travelers",
1999
+ "travelersinsurance",
2000
+ "trust",
2001
+ "trv",
2002
+ "tt",
2003
+ "tube",
2004
+ "tui",
2005
+ "tunes",
2006
+ "tushu",
2007
+ "tv",
2008
+ "tvs",
2009
+ "tw",
2010
+ "tz",
2011
+ "ua",
2012
+ "ubank",
2013
+ "ubs",
2014
+ "ug",
2015
+ "uk",
2016
+ "unicom",
2017
+ "university",
2018
+ "uno",
2019
+ "uol",
2020
+ "ups",
2021
+ "us",
2022
+ "uy",
2023
+ "uz",
2024
+ "va",
2025
+ "vacations",
2026
+ "vana",
2027
+ "vanguard",
2028
+ "vc",
2029
+ "ve",
2030
+ "vegas",
2031
+ "ventures",
2032
+ "verisign",
2033
+ "verm\xF6gensberater",
2034
+ "verm\xF6gensberatung",
2035
+ "versicherung",
2036
+ "vet",
2037
+ "vg",
2038
+ "vi",
2039
+ "viajes",
2040
+ "video",
2041
+ "vig",
2042
+ "viking",
2043
+ "villas",
2044
+ "vin",
2045
+ "vip",
2046
+ "virgin",
2047
+ "visa",
2048
+ "vision",
2049
+ "viva",
2050
+ "vivo",
2051
+ "vlaanderen",
2052
+ "vn",
2053
+ "vodka",
2054
+ "volvo",
2055
+ "vote",
2056
+ "voting",
2057
+ "voto",
2058
+ "voyage",
2059
+ "vu",
2060
+ "wales",
2061
+ "walmart",
2062
+ "walter",
2063
+ "wang",
2064
+ "wanggou",
2065
+ "watch",
2066
+ "watches",
2067
+ "weather",
2068
+ "weatherchannel",
2069
+ "webcam",
2070
+ "weber",
2071
+ "website",
2072
+ "wed",
2073
+ "wedding",
2074
+ "weibo",
2075
+ "weir",
2076
+ "wf",
2077
+ "whoswho",
2078
+ "wien",
2079
+ "wiki",
2080
+ "williamhill",
2081
+ "win",
2082
+ "windows",
2083
+ "wine",
2084
+ "winners",
2085
+ "wme",
2086
+ "wolterskluwer",
2087
+ "woodside",
2088
+ "work",
2089
+ "works",
2090
+ "world",
2091
+ "wow",
2092
+ "ws",
2093
+ "wtc",
2094
+ "wtf",
2095
+ "xbox",
2096
+ "xerox",
2097
+ "xihuan",
2098
+ "xin",
2099
+ "xxx",
2100
+ "xyz",
2101
+ "yachts",
2102
+ "yahoo",
2103
+ "yamaxun",
2104
+ "yandex",
2105
+ "ye",
2106
+ "yodobashi",
2107
+ "yoga",
2108
+ "yokohama",
2109
+ "you",
2110
+ "youtube",
2111
+ "yt",
2112
+ "yun",
2113
+ "za",
2114
+ "zappos",
2115
+ "zara",
2116
+ "zero",
2117
+ "zip",
2118
+ "zm",
2119
+ "zone",
2120
+ "zuerich",
2121
+ "zw",
2122
+ "\u03B5\u03BB",
2123
+ "\u03B5\u03C5",
2124
+ "\u0431\u0433",
2125
+ "\u0431\u0435\u043B",
2126
+ "\u0434\u0435\u0442\u0438",
2127
+ "\u0435\u044E",
2128
+ "\u043A\u0430\u0442\u043E\u043B\u0438\u043A",
2129
+ "\u043A\u043E\u043C",
2130
+ "\u043C\u043A\u0434",
2131
+ "\u043C\u043E\u043D",
2132
+ "\u043C\u043E\u0441\u043A\u0432\u0430",
2133
+ "\u043E\u043D\u043B\u0430\u0439\u043D",
2134
+ "\u043E\u0440\u0433",
2135
+ "\u0440\u0443\u0441",
2136
+ "\u0440\u0444",
2137
+ "\u0441\u0430\u0439\u0442",
2138
+ "\u0441\u0440\u0431",
2139
+ "\u0443\u043A\u0440",
2140
+ "\u049B\u0430\u0437",
2141
+ "\u0570\u0561\u0575",
2142
+ "\u05D9\u05E9\u05E8\u05D0\u05DC",
2143
+ "\u05E7\u05D5\u05DD",
2144
+ "\u0627\u0628\u0648\u0638\u0628\u064A",
2145
+ "\u0627\u0631\u0627\u0645\u0643\u0648",
2146
+ "\u0627\u0644\u0627\u0631\u062F\u0646",
2147
+ "\u0627\u0644\u0628\u062D\u0631\u064A\u0646",
2148
+ "\u0627\u0644\u062C\u0632\u0627\u0626\u0631",
2149
+ "\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629",
2150
+ "\u0627\u0644\u0639\u0644\u064A\u0627\u0646",
2151
+ "\u0627\u0644\u0645\u063A\u0631\u0628",
2152
+ "\u0627\u0645\u0627\u0631\u0627\u062A",
2153
+ "\u0627\u06CC\u0631\u0627\u0646",
2154
+ "\u0628\u0627\u0631\u062A",
2155
+ "\u0628\u0627\u0632\u0627\u0631",
2156
+ "\u0628\u064A\u062A\u0643",
2157
+ "\u0628\u06BE\u0627\u0631\u062A",
2158
+ "\u062A\u0648\u0646\u0633",
2159
+ "\u0633\u0648\u062F\u0627\u0646",
2160
+ "\u0633\u0648\u0631\u064A\u0629",
2161
+ "\u0634\u0628\u0643\u0629",
2162
+ "\u0639\u0631\u0627\u0642",
2163
+ "\u0639\u0631\u0628",
2164
+ "\u0639\u0645\u0627\u0646",
2165
+ "\u0641\u0644\u0633\u0637\u064A\u0646",
2166
+ "\u0642\u0637\u0631",
2167
+ "\u0643\u0627\u062B\u0648\u0644\u064A\u0643",
2168
+ "\u0643\u0648\u0645",
2169
+ "\u0645\u0635\u0631",
2170
+ "\u0645\u0644\u064A\u0633\u064A\u0627",
2171
+ "\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627",
2172
+ "\u0645\u0648\u0642\u0639",
2173
+ "\u0647\u0645\u0631\u0627\u0647",
2174
+ "\u067E\u0627\u06A9\u0633\u062A\u0627\u0646",
2175
+ "\u0680\u0627\u0631\u062A",
2176
+ "\u0915\u0949\u092E",
2177
+ "\u0928\u0947\u091F",
2178
+ "\u092D\u093E\u0930\u0924",
2179
+ "\u092D\u093E\u0930\u0924\u092E\u094D",
2180
+ "\u092D\u093E\u0930\u094B\u0924",
2181
+ "\u0938\u0902\u0917\u0920\u0928",
2182
+ "\u09AC\u09BE\u0982\u09B2\u09BE",
2183
+ "\u09AD\u09BE\u09B0\u09A4",
2184
+ "\u09AD\u09BE\u09F0\u09A4",
2185
+ "\u0A2D\u0A3E\u0A30\u0A24",
2186
+ "\u0AAD\u0ABE\u0AB0\u0AA4",
2187
+ "\u0B2D\u0B3E\u0B30\u0B24",
2188
+ "\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE",
2189
+ "\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8",
2190
+ "\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD",
2191
+ "\u0C2D\u0C3E\u0C30\u0C24\u0C4D",
2192
+ "\u0CAD\u0CBE\u0CB0\u0CA4",
2193
+ "\u0D2D\u0D3E\u0D30\u0D24\u0D02",
2194
+ "\u0DBD\u0D82\u0D9A\u0DCF",
2195
+ "\u0E04\u0E2D\u0E21",
2196
+ "\u0E44\u0E17\u0E22",
2197
+ "\u0EA5\u0EB2\u0EA7",
2198
+ "\u10D2\u10D4",
2199
+ "\u307F\u3093\u306A",
2200
+ "\u30A2\u30DE\u30BE\u30F3",
2201
+ "\u30AF\u30E9\u30A6\u30C9",
2202
+ "\u30B0\u30FC\u30B0\u30EB",
2203
+ "\u30B3\u30E0",
2204
+ "\u30B9\u30C8\u30A2",
2205
+ "\u30BB\u30FC\u30EB",
2206
+ "\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3",
2207
+ "\u30DD\u30A4\u30F3\u30C8",
2208
+ "\u4E16\u754C",
2209
+ "\u4E2D\u4FE1",
2210
+ "\u4E2D\u56FD",
2211
+ "\u4E2D\u570B",
2212
+ "\u4E2D\u6587\u7F51",
2213
+ "\u4E9A\u9A6C\u900A",
2214
+ "\u4F01\u4E1A",
2215
+ "\u4F5B\u5C71",
2216
+ "\u4FE1\u606F",
2217
+ "\u5065\u5EB7",
2218
+ "\u516B\u5366",
2219
+ "\u516C\u53F8",
2220
+ "\u516C\u76CA",
2221
+ "\u53F0\u6E7E",
2222
+ "\u53F0\u7063",
2223
+ "\u5546\u57CE",
2224
+ "\u5546\u5E97",
2225
+ "\u5546\u6807",
2226
+ "\u5609\u91CC",
2227
+ "\u5609\u91CC\u5927\u9152\u5E97",
2228
+ "\u5728\u7EBF",
2229
+ "\u5927\u62FF",
2230
+ "\u5929\u4E3B\u6559",
2231
+ "\u5A31\u4E50",
2232
+ "\u5BB6\u96FB",
2233
+ "\u5E7F\u4E1C",
2234
+ "\u5FAE\u535A",
2235
+ "\u6148\u5584",
2236
+ "\u6211\u7231\u4F60",
2237
+ "\u624B\u673A",
2238
+ "\u62DB\u8058",
2239
+ "\u653F\u52A1",
2240
+ "\u653F\u5E9C",
2241
+ "\u65B0\u52A0\u5761",
2242
+ "\u65B0\u95FB",
2243
+ "\u65F6\u5C1A",
2244
+ "\u66F8\u7C4D",
2245
+ "\u673A\u6784",
2246
+ "\u6DE1\u9A6C\u9521",
2247
+ "\u6E38\u620F",
2248
+ "\u6FB3\u9580",
2249
+ "\u70B9\u770B",
2250
+ "\u79FB\u52A8",
2251
+ "\u7EC4\u7EC7\u673A\u6784",
2252
+ "\u7F51\u5740",
2253
+ "\u7F51\u5E97",
2254
+ "\u7F51\u7AD9",
2255
+ "\u7F51\u7EDC",
2256
+ "\u8054\u901A",
2257
+ "\u8C37\u6B4C",
2258
+ "\u8D2D\u7269",
2259
+ "\u901A\u8CA9",
2260
+ "\u96C6\u56E2",
2261
+ "\u96FB\u8A0A\u76C8\u79D1",
2262
+ "\u98DE\u5229\u6D66",
2263
+ "\u98DF\u54C1",
2264
+ "\u9910\u5385",
2265
+ "\u9999\u683C\u91CC\u62C9",
2266
+ "\u9999\u6E2F",
2267
+ "\uB2F7\uB137",
2268
+ "\uB2F7\uCEF4",
2269
+ "\uC0BC\uC131",
2270
+ "\uD55C\uAD6D"
2271
+ ];
2272
+
2273
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/domain.js
2274
+ function shareSameDomainSuffix(hostname, vhost) {
2275
+ if (hostname.endsWith(vhost)) {
2276
+ return hostname.length === vhost.length || hostname[hostname.length - vhost.length - 1] === ".";
2277
+ }
2278
+ return false;
2279
+ }
2280
+ function extractDomainWithSuffix(hostname, publicSuffix) {
2281
+ const publicSuffixIndex = hostname.length - publicSuffix.length - 2;
2282
+ const lastDotBeforeSuffixIndex = hostname.lastIndexOf(".", publicSuffixIndex);
2283
+ if (lastDotBeforeSuffixIndex === -1) {
2284
+ return hostname;
2285
+ }
2286
+ return hostname.slice(lastDotBeforeSuffixIndex + 1);
2287
+ }
2288
+ function getDomain(suffix, hostname, options) {
2289
+ if (options.validHosts !== null) {
2290
+ const validHosts = options.validHosts;
2291
+ for (const vhost of validHosts) {
2292
+ if (
2293
+ /*@__INLINE__*/
2294
+ shareSameDomainSuffix(hostname, vhost)
2295
+ ) {
2296
+ return vhost;
2297
+ }
2298
+ }
2299
+ }
2300
+ let numberOfLeadingDots = 0;
2301
+ if (hostname.startsWith(".")) {
2302
+ while (numberOfLeadingDots < hostname.length && hostname[numberOfLeadingDots] === ".") {
2303
+ numberOfLeadingDots += 1;
2304
+ }
2305
+ }
2306
+ if (suffix.length === hostname.length - numberOfLeadingDots) {
2307
+ return null;
2308
+ }
2309
+ return (
2310
+ /*@__INLINE__*/
2311
+ extractDomainWithSuffix(hostname, suffix)
2312
+ );
2313
+ }
2314
+
2315
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/domain-without-suffix.js
2316
+ function getDomainWithoutSuffix(domain, suffix) {
2317
+ return domain.slice(0, -suffix.length - 1);
2318
+ }
2319
+
2320
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/extract-hostname.js
2321
+ var CONTROL_CHARS = /[\t\n\r]/g;
2322
+ var extractedHostnameValidated = false;
2323
+ function isValidHostnameChar(code) {
2324
+ return code >= 97 && code <= 122 || // a-z
2325
+ code >= 48 && code <= 57 || // 0-9
2326
+ code > 127 || // non-ASCII (accepted, not punycode-checked)
2327
+ code >= 65 && code <= 90 || // A-Z (becomes valid once lowercased)
2328
+ code === 45 || // '-'
2329
+ code === 95;
2330
+ }
2331
+ function getSpecialScheme(url, schemeStart, colonIndex) {
2332
+ const length = colonIndex - schemeStart;
2333
+ const c0 = url.charCodeAt(schemeStart) | 32;
2334
+ if (length === 2) {
2335
+ return c0 === 119 && (url.charCodeAt(schemeStart + 1) | 32) === 115 ? 1 : 0;
2336
+ } else if (length === 3) {
2337
+ const c1 = url.charCodeAt(schemeStart + 1) | 32;
2338
+ const c2 = url.charCodeAt(schemeStart + 2) | 32;
2339
+ if (c0 === 119 && c1 === 115 && c2 === 115)
2340
+ return 1;
2341
+ if (c0 === 102 && c1 === 116 && c2 === 112)
2342
+ return 1;
2343
+ return 0;
2344
+ } else if (length === 4) {
2345
+ const c1 = url.charCodeAt(schemeStart + 1) | 32;
2346
+ const c2 = url.charCodeAt(schemeStart + 2) | 32;
2347
+ const c3 = url.charCodeAt(schemeStart + 3) | 32;
2348
+ if (c0 === 104 && c1 === 116 && c2 === 116 && c3 === 112)
2349
+ return 1;
2350
+ if (c0 === 102 && c1 === 105 && c2 === 108 && c3 === 101)
2351
+ return 2;
2352
+ return 0;
2353
+ } else if (length === 5) {
2354
+ return c0 === 104 && (url.charCodeAt(schemeStart + 1) | 32) === 116 && (url.charCodeAt(schemeStart + 2) | 32) === 116 && (url.charCodeAt(schemeStart + 3) | 32) === 112 && (url.charCodeAt(schemeStart + 4) | 32) === 115 ? 1 : 0;
2355
+ }
2356
+ return 0;
2357
+ }
2358
+ function extractHostname(url, urlIsValidHostname, validate = false) {
2359
+ let start = 0;
2360
+ let end = url.length;
2361
+ let hasUpper = false;
2362
+ let isSpecial = false;
2363
+ extractedHostnameValidated = false;
2364
+ if (!urlIsValidHostname) {
2365
+ if (url.startsWith("data:")) {
2366
+ return null;
2367
+ }
2368
+ while (start < url.length && url.charCodeAt(start) <= 32) {
2369
+ start += 1;
2370
+ }
2371
+ while (end > start + 1 && url.charCodeAt(end - 1) <= 32) {
2372
+ end -= 1;
2373
+ }
2374
+ if (url.charCodeAt(start) === 47 && url.charCodeAt(start + 1) === 47) {
2375
+ start += 2;
2376
+ } else {
2377
+ const indexOfProtocol = url.indexOf(":/", start);
2378
+ if (indexOfProtocol !== -1) {
2379
+ const special = getSpecialScheme(url, start, indexOfProtocol);
2380
+ if (special === 1) {
2381
+ isSpecial = true;
2382
+ start = indexOfProtocol + 2;
2383
+ while (url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) {
2384
+ start += 1;
2385
+ }
2386
+ } else if (special === 2) {
2387
+ isSpecial = true;
2388
+ start = indexOfProtocol + 1;
2389
+ let slashes = 0;
2390
+ while ((url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) && slashes < 2) {
2391
+ start += 1;
2392
+ slashes += 1;
2393
+ }
2394
+ if (slashes < 2) {
2395
+ return null;
2396
+ }
2397
+ } else {
2398
+ for (let i = start; i < indexOfProtocol; i += 1) {
2399
+ const code = url.charCodeAt(i) | 32;
2400
+ if (!(code >= 97 && code <= 122 || // [a, z]
2401
+ code >= 48 && code <= 57 || // [0, 9]
2402
+ code === 46 || // '.'
2403
+ code === 45 || // '-'
2404
+ code === 43)) {
2405
+ const raw = url.charCodeAt(i);
2406
+ if (raw === 9 || raw === 10 || raw === 13) {
2407
+ return extractHostname(url.replace(CONTROL_CHARS, ""), urlIsValidHostname, validate);
2408
+ }
2409
+ return null;
2410
+ }
2411
+ }
2412
+ if (url.charCodeAt(indexOfProtocol + 2) === 47) {
2413
+ start = indexOfProtocol + 3;
2414
+ } else {
2415
+ return null;
2416
+ }
2417
+ }
2418
+ } else if (url.charCodeAt(start) !== 91) {
2419
+ let indexOfColon = -1;
2420
+ for (let i = start; i < end; i += 1) {
2421
+ const code = url.charCodeAt(i);
2422
+ if (code === 9 || code === 10 || code === 13) {
2423
+ return extractHostname(url.replace(CONTROL_CHARS, ""), urlIsValidHostname, validate);
2424
+ }
2425
+ if (code === 58) {
2426
+ indexOfColon = i;
2427
+ break;
2428
+ }
2429
+ if (code === 47 || code === 92 || code === 63 || code === 35) {
2430
+ break;
2431
+ }
2432
+ }
2433
+ if (indexOfColon !== -1) {
2434
+ let hasIdentifier = false;
2435
+ for (let i = indexOfColon + 1; i < end; i += 1) {
2436
+ const code = url.charCodeAt(i);
2437
+ if (code === 47 || code === 92 || code === 63 || code === 35) {
2438
+ break;
2439
+ }
2440
+ if (code === 64) {
2441
+ hasIdentifier = true;
2442
+ break;
2443
+ }
2444
+ }
2445
+ if (!hasIdentifier) {
2446
+ let allDigits = true;
2447
+ let i = indexOfColon + 1;
2448
+ for (; i < end; i += 1) {
2449
+ const code = url.charCodeAt(i);
2450
+ if (code === 47 || code === 92 || code === 63 || code === 35) {
2451
+ break;
2452
+ }
2453
+ if (code < 48 || code > 57) {
2454
+ allDigits = false;
2455
+ break;
2456
+ }
2457
+ }
2458
+ if (i === indexOfColon + 1) {
2459
+ allDigits = false;
2460
+ }
2461
+ if (!allDigits) {
2462
+ const special = getSpecialScheme(url, start, indexOfColon);
2463
+ if (special === 0) {
2464
+ let isBareIpv6 = false;
2465
+ for (let j = indexOfColon + 1; j < end; j += 1) {
2466
+ const code = url.charCodeAt(j);
2467
+ if (code === 47 || code === 92 || code === 63 || code === 35) {
2468
+ break;
2469
+ }
2470
+ if (code === 58) {
2471
+ isBareIpv6 = true;
2472
+ break;
2473
+ }
2474
+ }
2475
+ if (!isBareIpv6) {
2476
+ return null;
2477
+ }
2478
+ } else {
2479
+ isSpecial = true;
2480
+ start = indexOfColon + 1;
2481
+ if (special === 2) {
2482
+ let slashes = 0;
2483
+ while ((url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) && slashes < 2) {
2484
+ start += 1;
2485
+ slashes += 1;
2486
+ }
2487
+ if (slashes < 2) {
2488
+ return null;
2489
+ }
2490
+ } else {
2491
+ while (url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) {
2492
+ start += 1;
2493
+ }
2494
+ }
2495
+ }
2496
+ }
2497
+ }
2498
+ }
2499
+ }
2500
+ }
2501
+ let indexOfIdentifier = -1;
2502
+ let indexOfClosingBracket = -1;
2503
+ let indexOfPort = -1;
2504
+ let indexOfFirstColon = -1;
2505
+ let hasControl = false;
2506
+ let vValid = validate;
2507
+ let vLastDot = start - 1;
2508
+ let vLastCode = -1;
2509
+ if (validate && start < end) {
2510
+ const c0 = url.charCodeAt(start);
2511
+ if (!/*@__INLINE__*/
2512
+ (isValidHostnameChar(c0) || c0 === 46 || c0 === 95) || c0 === 45) {
2513
+ vValid = false;
2514
+ }
2515
+ }
2516
+ for (let i = start; i < end; i += 1) {
2517
+ const code = url.charCodeAt(i);
2518
+ if (code < 64) {
2519
+ if (code === 47 || code === 35 || code === 63) {
2520
+ end = i;
2521
+ break;
2522
+ } else if (code === 58) {
2523
+ if (indexOfFirstColon === -1) {
2524
+ indexOfFirstColon = i;
2525
+ }
2526
+ indexOfPort = i;
2527
+ } else if (code === 9 || code === 10 || code === 13) {
2528
+ hasControl = true;
2529
+ } else if (validate) {
2530
+ if (code === 46) {
2531
+ if (i - vLastDot > 64 || vLastCode === 46 || vLastCode === 45) {
2532
+ vValid = false;
2533
+ }
2534
+ vLastDot = i;
2535
+ } else if (code < 48 || code > 57) {
2536
+ if (code !== 45 || vLastCode === 46) {
2537
+ vValid = false;
2538
+ }
2539
+ }
2540
+ }
2541
+ } else if (isSpecial && code === 92) {
2542
+ end = i;
2543
+ break;
2544
+ } else if (code === 64) {
2545
+ indexOfIdentifier = i;
2546
+ indexOfFirstColon = -1;
2547
+ } else if (code === 93) {
2548
+ indexOfClosingBracket = i;
2549
+ } else if (code >= 65 && code <= 90) {
2550
+ hasUpper = true;
2551
+ } else if (validate && !/*@__INLINE__*/
2552
+ isValidHostnameChar(code)) {
2553
+ vValid = false;
2554
+ }
2555
+ if (validate) {
2556
+ vLastCode = code;
2557
+ }
2558
+ }
2559
+ if (hasControl) {
2560
+ return extractHostname(url.replace(CONTROL_CHARS, ""), urlIsValidHostname, validate);
2561
+ }
2562
+ if (indexOfIdentifier !== -1 && indexOfIdentifier >= start && indexOfIdentifier < end) {
2563
+ start = indexOfIdentifier + 1;
2564
+ }
2565
+ if (url.charCodeAt(start) === 91) {
2566
+ if (indexOfClosingBracket !== -1) {
2567
+ return url.slice(start + 1, indexOfClosingBracket).toLowerCase();
2568
+ }
2569
+ return null;
2570
+ } else if (indexOfPort !== -1 && indexOfPort > start && indexOfPort < end && // A host:port has exactly one ':' in the host (so its first ':' is its
2571
+ // last); a bare, unbracketed IPv6 literal ("2a01:e35::1") has >= 2, so
2572
+ // its first ':' precedes the last. Only the former has a ':port' to trim.
2573
+ indexOfFirstColon === indexOfPort) {
2574
+ end = indexOfPort;
2575
+ }
2576
+ if (start >= end) {
2577
+ return null;
2578
+ }
2579
+ if (validate && vValid && indexOfIdentifier === -1 && indexOfPort === -1 && indexOfClosingBracket === -1 && url.charCodeAt(end - 1) !== 46 && end - start <= 255 && // total length
2580
+ end - vLastDot - 1 <= 63 && // last label length
2581
+ vLastCode !== 45) {
2582
+ extractedHostnameValidated = true;
2583
+ }
2584
+ }
2585
+ while (end > start + 1 && url.charCodeAt(end - 1) === 46) {
2586
+ end -= 1;
2587
+ }
2588
+ const hostname = start !== 0 || end !== url.length ? url.slice(start, end) : url;
2589
+ if (hasUpper) {
2590
+ return hostname.toLowerCase();
2591
+ }
2592
+ return hostname;
2593
+ }
2594
+
2595
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/is-ip.js
2596
+ function isProbablyIpv4(hostname) {
2597
+ if (hostname.length < 7) {
2598
+ return false;
2599
+ }
2600
+ if (hostname.length > 15) {
2601
+ return false;
2602
+ }
2603
+ let numberOfDots = 0;
2604
+ for (let i = 0; i < hostname.length; i += 1) {
2605
+ const code = hostname.charCodeAt(i);
2606
+ if (code === 46) {
2607
+ numberOfDots += 1;
2608
+ } else if (code < 48 || code > 57) {
2609
+ return false;
2610
+ }
2611
+ }
2612
+ return numberOfDots === 3 && hostname.charCodeAt(0) !== 46 && hostname.charCodeAt(hostname.length - 1) !== 46;
2613
+ }
2614
+ function isProbablyIpv6(hostname) {
2615
+ if (hostname.length < 3) {
2616
+ return false;
2617
+ }
2618
+ let start = hostname.startsWith("[") ? 1 : 0;
2619
+ let end = hostname.length;
2620
+ if (hostname[end - 1] === "]") {
2621
+ end -= 1;
2622
+ }
2623
+ if (end - start > 39) {
2624
+ return false;
2625
+ }
2626
+ let hasColon = false;
2627
+ for (; start < end; start += 1) {
2628
+ const code = hostname.charCodeAt(start);
2629
+ if (code === 58) {
2630
+ hasColon = true;
2631
+ } else if (!(code >= 48 && code <= 57 || // 0-9
2632
+ code >= 97 && code <= 102 || // a-f
2633
+ code >= 65 && code <= 70)) {
2634
+ return false;
2635
+ }
2636
+ }
2637
+ return hasColon;
2638
+ }
2639
+ function isIp(hostname) {
2640
+ return isProbablyIpv6(hostname) || isProbablyIpv4(hostname);
2641
+ }
2642
+
2643
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/is-special-use.js
2644
+ var SPECIAL_USE_DOMAINS = [
2645
+ "test",
2646
+ // RFC 6761
2647
+ "localhost",
2648
+ // RFC 6761
2649
+ "invalid",
2650
+ // RFC 6761
2651
+ "example",
2652
+ // RFC 6761
2653
+ "example.com",
2654
+ // RFC 6761
2655
+ "example.net",
2656
+ // RFC 6761
2657
+ "example.org",
2658
+ // RFC 6761
2659
+ "local",
2660
+ // RFC 6762 (mDNS)
2661
+ "onion",
2662
+ // RFC 7686 (Tor)
2663
+ "alt",
2664
+ // RFC 9476
2665
+ "home.arpa",
2666
+ // RFC 8375
2667
+ "ipv4only.arpa",
2668
+ // RFC 8880
2669
+ "resolver.arpa",
2670
+ // RFC 9462
2671
+ "service.arpa",
2672
+ // RFC 9665
2673
+ "6tisch.arpa",
2674
+ // RFC 9031
2675
+ "eap.arpa"
2676
+ // RFC 9965
2677
+ ];
2678
+ function isSpecialUse(hostname) {
2679
+ for (const name of SPECIAL_USE_DOMAINS) {
2680
+ if (hostname.endsWith(name) && (hostname.length === name.length || hostname.charCodeAt(hostname.length - name.length - 1) === 46)) {
2681
+ return true;
2682
+ }
2683
+ }
2684
+ return false;
2685
+ }
2686
+
2687
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/is-valid.js
2688
+ function isValidAscii(code) {
2689
+ return code >= 97 && code <= 122 || code >= 48 && code <= 57 || code > 127;
2690
+ }
2691
+ function is_valid_default(hostname) {
2692
+ if (hostname.length > 255) {
2693
+ return false;
2694
+ }
2695
+ if (hostname.length === 0) {
2696
+ return false;
2697
+ }
2698
+ if (
2699
+ /*@__INLINE__*/
2700
+ !isValidAscii(hostname.charCodeAt(0)) && hostname.charCodeAt(0) !== 46 && // '.' (dot)
2701
+ hostname.charCodeAt(0) !== 95
2702
+ ) {
2703
+ return false;
2704
+ }
2705
+ let lastDotIndex = -1;
2706
+ let lastCharCode = -1;
2707
+ const len = hostname.length;
2708
+ for (let i = 0; i < len; i += 1) {
2709
+ const code = hostname.charCodeAt(i);
2710
+ if (code === 46) {
2711
+ if (
2712
+ // Check that previous label is < 63 bytes long (64 = 63 + '.')
2713
+ i - lastDotIndex > 64 || // Check that previous character was not already a '.'
2714
+ lastCharCode === 46 || // Check that the previous label does not end with '-' (RFC 1035 §2.3.1 LDH).
2715
+ // '_' is intentionally NOT restricted: DNS allows any octet (RFC 2181 §11) and
2716
+ // WHATWG URL does not treat '_' as a forbidden host code point.
2717
+ lastCharCode === 45
2718
+ ) {
2719
+ return false;
2720
+ }
2721
+ lastDotIndex = i;
2722
+ } else if (
2723
+ // A forbidden character in the label...
2724
+ !/*@__INLINE__*/
2725
+ (isValidAscii(code) || code === 45 || code === 95) || // ...or a '-' starting a label (the byte right after a '.'). A label must
2726
+ // not begin with a hyphen (RFC 1034 §3.5 / RFC 1035 §2.3.1 LDH, as amended
2727
+ // by RFC 1123 §2.1; cf. UTS #46 CheckHyphens). The first label is covered by
2728
+ // the leading-character guard above; mirrors the trailing-'-' rule below.
2729
+ code === 45 && lastCharCode === 46
2730
+ ) {
2731
+ return false;
2732
+ }
2733
+ lastCharCode = code;
2734
+ }
2735
+ return (
2736
+ // Check that last label is shorter than 63 chars
2737
+ len - lastDotIndex - 1 <= 63 && // Check that the last character is an allowed trailing label character.
2738
+ // Since we already checked that the char is a valid hostname character,
2739
+ // we only need to check that it's different from '-'.
2740
+ lastCharCode !== 45
2741
+ );
2742
+ }
2743
+
2744
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/options.js
2745
+ function setDefaultsImpl({ allowIcannDomains = true, allowPrivateDomains = false, detectIp = true, detectSpecialUse = false, extractHostname: extractHostname2 = true, mixedInputs = true, validHosts = null, validateHostname = true }) {
2746
+ return {
2747
+ allowIcannDomains,
2748
+ allowPrivateDomains,
2749
+ detectIp,
2750
+ detectSpecialUse,
2751
+ extractHostname: extractHostname2,
2752
+ mixedInputs,
2753
+ validHosts,
2754
+ validateHostname
2755
+ };
2756
+ }
2757
+ var DEFAULT_OPTIONS = (
2758
+ /*@__INLINE__*/
2759
+ setDefaultsImpl({})
2760
+ );
2761
+ function setDefaults(options) {
2762
+ if (options === void 0) {
2763
+ return DEFAULT_OPTIONS;
2764
+ }
2765
+ return (
2766
+ /*@__INLINE__*/
2767
+ setDefaultsImpl(options)
2768
+ );
2769
+ }
2770
+
2771
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/subdomain.js
2772
+ function getSubdomain(hostname, domain) {
2773
+ if (domain.length === hostname.length) {
2774
+ return "";
2775
+ }
2776
+ return hostname.slice(0, -domain.length - 1);
2777
+ }
2778
+
2779
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/factory.js
2780
+ function getEmptyResult() {
2781
+ return {
2782
+ domain: null,
2783
+ domainWithoutSuffix: null,
2784
+ hostname: null,
2785
+ isIcann: null,
2786
+ isIp: null,
2787
+ isPrivate: null,
2788
+ isSpecialUse: null,
2789
+ publicSuffix: null,
2790
+ subdomain: null
2791
+ };
2792
+ }
2793
+ function resetResult(result) {
2794
+ result.domain = null;
2795
+ result.domainWithoutSuffix = null;
2796
+ result.hostname = null;
2797
+ result.isIcann = null;
2798
+ result.isIp = null;
2799
+ result.isPrivate = null;
2800
+ result.isSpecialUse = null;
2801
+ result.publicSuffix = null;
2802
+ result.subdomain = null;
2803
+ }
2804
+ function parseImpl(url, step, suffixLookup2, partialOptions, result) {
2805
+ const options = (
2806
+ /*@__INLINE__*/
2807
+ setDefaults(partialOptions)
2808
+ );
2809
+ if (typeof url !== "string") {
2810
+ return result;
2811
+ }
2812
+ let urlIsValid = false;
2813
+ if (!options.extractHostname) {
2814
+ result.hostname = url;
2815
+ } else if (options.mixedInputs) {
2816
+ urlIsValid = is_valid_default(url);
2817
+ result.hostname = extractHostname(url, urlIsValid, options.validateHostname);
2818
+ } else {
2819
+ result.hostname = extractHostname(url, false, options.validateHostname);
2820
+ }
2821
+ if (options.detectIp && result.hostname !== null) {
2822
+ result.isIp = isIp(result.hostname);
2823
+ if (result.isIp) {
2824
+ return result;
2825
+ }
2826
+ }
2827
+ if (options.validateHostname && options.extractHostname && result.hostname !== null && // Skip the re-scan when `url` was already validated and extractHostname
2828
+ // returned it unchanged (same reference => identical string, still valid).
2829
+ !(urlIsValid && result.hostname === url) && // Skip the re-scan when extractHostname already validated the host inline
2830
+ // (a confirmed-valid simple authority — see extract-hostname.ts).
2831
+ !extractedHostnameValidated && !is_valid_default(result.hostname)) {
2832
+ result.hostname = null;
2833
+ return result;
2834
+ }
2835
+ if (step === 0 || result.hostname === null) {
2836
+ return result;
2837
+ }
2838
+ if (step === 5 && options.detectSpecialUse) {
2839
+ result.isSpecialUse = isSpecialUse(result.hostname);
2840
+ }
2841
+ suffixLookup2(result.hostname, options, result);
2842
+ if (step === 2 || result.publicSuffix === null) {
2843
+ return result;
2844
+ }
2845
+ result.domain = getDomain(result.publicSuffix, result.hostname, options);
2846
+ if (step === 3 || result.domain === null) {
2847
+ return result;
2848
+ }
2849
+ result.subdomain = getSubdomain(result.hostname, result.domain);
2850
+ if (step === 4) {
2851
+ return result;
2852
+ }
2853
+ result.domainWithoutSuffix = getDomainWithoutSuffix(result.domain, result.publicSuffix);
2854
+ return result;
2855
+ }
2856
+
2857
+ // ../../node_modules/.pnpm/tldts-core@7.4.9/node_modules/tldts-core/dist/es6/src/lookup/fast-path.js
2858
+ function fast_path_default(hostname, options, out) {
2859
+ if (!options.allowPrivateDomains && hostname.length > 3) {
2860
+ const last = hostname.length - 1;
2861
+ const c3 = hostname.charCodeAt(last);
2862
+ const c2 = hostname.charCodeAt(last - 1);
2863
+ const c1 = hostname.charCodeAt(last - 2);
2864
+ const c0 = hostname.charCodeAt(last - 3);
2865
+ if (c3 === 109 && c2 === 111 && c1 === 99 && c0 === 46) {
2866
+ out.isIcann = true;
2867
+ out.isPrivate = false;
2868
+ out.publicSuffix = "com";
2869
+ return true;
2870
+ } else if (c3 === 103 && c2 === 114 && c1 === 111 && c0 === 46) {
2871
+ out.isIcann = true;
2872
+ out.isPrivate = false;
2873
+ out.publicSuffix = "org";
2874
+ return true;
2875
+ } else if (c3 === 117 && c2 === 100 && c1 === 101 && c0 === 46) {
2876
+ out.isIcann = true;
2877
+ out.isPrivate = false;
2878
+ out.publicSuffix = "edu";
2879
+ return true;
2880
+ } else if (c3 === 118 && c2 === 111 && c1 === 103 && c0 === 46) {
2881
+ out.isIcann = true;
2882
+ out.isPrivate = false;
2883
+ out.publicSuffix = "gov";
2884
+ return true;
2885
+ } else if (c3 === 116 && c2 === 101 && c1 === 110 && c0 === 46) {
2886
+ out.isIcann = true;
2887
+ out.isPrivate = false;
2888
+ out.publicSuffix = "net";
2889
+ return true;
2890
+ } else if (c3 === 101 && c2 === 100 && c1 === 46) {
2891
+ out.isIcann = true;
2892
+ out.isPrivate = false;
2893
+ out.publicSuffix = "de";
2894
+ return true;
2895
+ }
2896
+ }
2897
+ return false;
2898
+ }
2899
+
2900
+ // ../../node_modules/.pnpm/tldts@7.4.9/node_modules/tldts/dist/es6/src/data/trie.js
2901
+ var nodeFlags = /* @__PURE__ */ new Uint8Array([1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 0, 2, 0, 0, 1, 0, 0, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, 0, 2, 0, 1, 1, 0, 2, 0, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]);
2902
+ var edgeStart = /* @__PURE__ */ new Uint16Array([0, 0, 0, 10, 11, 18, 106, 111, 117, 124, 130, 136, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 157, 159, 226, 239, 241, 242, 243, 258, 265, 266, 269, 270, 271, 274, 276, 295, 296, 298, 307, 312, 313, 331, 332, 335, 337, 338, 340, 374, 375, 377, 380, 381, 385, 387, 391, 394, 426, 429, 442, 443, 451, 452, 454, 464, 478, 479, 480, 489, 490, 527, 532, 548, 568, 574, 615, 616, 643, 670, 671, 819, 825, 828, 829, 830, 835, 840, 849, 871, 872, 873, 874, 875, 876, 877, 895, 897, 898, 901, 903, 904, 906, 908, 923, 938, 943, 944, 946, 947, 948, 949, 950, 952, 955, 960, 961, 962, 964, 965, 968, 971, 972, 973, 986, 988, 1e3, 1011, 1019, 1021, 1061, 1064, 1068, 1069, 1071, 1074, 1085, 1087, 1097, 1099, 1105, 1107, 1108, 1110, 1113, 1114, 1115, 1167, 1169, 1171, 1191, 1192, 1193, 1194, 1196, 1207, 1238, 1249, 1261, 1270, 1277, 1282, 1295, 1306, 1319, 1320, 1331, 1365, 1366, 1367, 1382, 1397, 1469, 1470, 1472, 1473, 1507, 1508, 1509, 1512, 1516, 1518, 1547, 1548, 1556, 1557, 1558, 1560, 1562, 1563, 1565, 1566, 1567, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1594, 1595, 1596, 1598, 2053, 2056, 2057, 2059, 2066, 2073, 2083, 2087, 2098, 2099, 2100, 2112, 2113, 2115, 2117, 2118, 2125, 2126, 2128, 2129, 2131, 2132, 2133, 2134, 2135, 2209, 2211, 2232, 2233, 2234, 2236, 2262, 2263, 2314, 2315, 2317, 2324, 2330, 2340, 2350, 2403, 2404, 2405, 2415, 2429, 2430, 2433, 2440, 2441, 2449, 2450, 2451, 2452, 2453, 2464, 2465, 2466, 2468, 2469, 2470, 2471, 2473, 2483, 2495, 2501, 2533, 2537, 2539, 2540, 2542, 2543, 2554, 2555, 2557, 2565, 2572, 2578, 2583, 2584, 2590, 2593, 2599, 2606, 2607, 2614, 2622, 2623, 2624, 2662, 2668, 2683, 2684, 2689, 2707, 2738, 2756, 2758, 2761, 2769, 2771, 2778, 2830, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2868, 2869, 2870, 2871, 2872, 2873, 2875, 2876, 2880, 2964, 2977, 2978, 3414, 3418, 3432, 3484, 3512, 3534, 3592, 3614, 3629, 3692, 3743, 3781, 3817, 3842, 3984, 4030, 4081, 4100, 4134, 4149, 4169, 4199, 4230, 4253, 4284, 4314, 4346, 4373, 4448, 4470, 4508, 4518, 4552, 4571, 4597, 4639, 4689, 4715, 4784, 4785, 4787, 4810, 4833, 4869, 4900, 4917, 4974, 4987, 5011, 5040, 5042, 5076, 5092, 5120, 5425, 5434, 5443, 5450, 5467, 5471, 5477, 5516, 5518, 5525, 5532, 5541, 5548, 5549, 5560, 5563, 5578, 5579, 5588, 5589, 5598, 5607, 5613, 5615, 5616, 5617, 5653, 5654, 5656, 5664, 5671, 5684, 5688, 5690, 5691, 5697, 5704, 5718, 5728, 5733, 5741, 5749, 5755, 5756, 5760, 5762, 5763, 5775, 5776, 5777, 5778, 5780, 5781, 5784, 5786, 5789, 5793, 5794, 5800, 5801, 5802, 5804, 5806, 5808, 5809, 5810, 5813, 5815, 5818, 5819, 5821, 6019, 6026, 6027, 6037, 6042, 6059, 6073, 6082, 6083, 6084, 6088, 6089, 6091, 6093, 6099, 6100, 6103, 6104, 6106, 6107, 6108, 7008, 7009, 7013, 7031, 7040, 7043, 7050, 7051, 7053, 7054, 7055, 7057, 7109, 7110, 7113, 7114, 7231, 7232, 7243, 7254, 7261, 7264, 7273, 7274, 7275, 7290, 7345, 7536, 7538, 7539, 7541, 7546, 7559, 7574, 7581, 7590, 7593, 7596, 7603, 7611, 7615, 7616, 7617, 7631, 7635, 7644, 7645, 7646, 7650, 7685, 7686, 7703, 7710, 7718, 7719, 7724, 7732, 7776, 7777, 7783, 7786, 7797, 7802, 7803, 7806, 7839, 7840, 7846, 7853, 7854, 7863, 7872, 7887, 7891, 7943, 7944, 7949, 7951, 7954, 7956, 7957, 7958, 7967, 7981, 7989, 8003, 8015, 8016, 8018, 8020, 8042, 8053, 8059, 8060, 8072, 8084, 8171, 8183, 8185, 8194, 8197, 8203, 8228, 8231, 8232, 8233, 8235, 8238, 8241, 8252, 8254, 8256, 8284, 8358, 8365, 8369, 8370, 8379, 8401, 8402, 8407, 8408, 8487, 8489, 8491, 8500, 8504, 8510, 8516, 8522, 8532, 8537, 8538, 8556, 8567, 8572, 8577, 8587, 8593, 8597, 8603, 8609, 10217, 10218, 10219, 10226, 10228]);
2903
+ var edgeLength = /* @__PURE__ */ new Uint8Array([3, 3, 3, 3, 3, 3, 3, 3, 5, 8, 8, 2, 2, 3, 3, 3, 3, 3, 8, 5, 5, 5, 5, 5, 3, 3, 5, 5, 9, 12, 19, 8, 19, 8, 11, 9, 9, 8, 7, 7, 6, 8, 9, 16, 10, 7, 7, 11, 8, 6, 6, 9, 7, 11, 7, 14, 4, 4, 4, 4, 4, 4, 10, 7, 6, 6, 6, 6, 10, 10, 6, 10, 10, 22, 11, 9, 10, 10, 10, 9, 10, 8, 7, 7, 7, 8, 21, 13, 11, 11, 9, 10, 9, 13, 10, 8, 8, 9, 12, 9, 7, 10, 7, 7, 13, 7, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 6, 3, 3, 3, 3, 3, 3, 2, 5, 3, 3, 3, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 1, 7, 8, 5, 2, 2, 7, 2, 2, 1, 4, 1, 11, 9, 9, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 5, 11, 9, 9, 13, 7, 14, 7, 6, 6, 6, 7, 6, 6, 6, 6, 6, 10, 7, 11, 9, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 8, 7, 10, 9, 9, 9, 8, 9, 8, 10, 6, 9, 9, 8, 10, 10, 7, 8, 1, 9, 10, 12, 12, 12, 10, 9, 9, 10, 10, 9, 9, 1, 1, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 4, 3, 3, 3, 7, 4, 4, 4, 3, 3, 6, 7, 3, 4, 1, 2, 2, 2, 6, 1, 2, 2, 2, 2, 2, 12, 5, 3, 8, 9, 13, 4, 4, 13, 9, 9, 11, 7, 3, 12, 9, 2, 2, 2, 3, 3, 3, 3, 3, 8, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 7, 10, 15, 7, 15, 15, 20, 15, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 13, 13, 9, 9, 9, 9, 9, 9, 7, 8, 6, 8, 8, 6, 8, 13, 8, 8, 6, 13, 8, 11, 13, 8, 6, 13, 8, 6, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 9, 9, 9, 10, 14, 14, 11, 13, 13, 9, 9, 9, 9, 9, 9, 2, 6, 9, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 2, 3, 3, 3, 3, 3, 3, 7, 7, 2, 3, 2, 2, 5, 3, 3, 3, 3, 3, 3, 4, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 7, 2, 2, 12, 8, 10, 8, 10, 7, 18, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 3, 3, 3, 5, 5, 3, 8, 8, 6, 8, 6, 6, 4, 6, 7, 7, 7, 10, 11, 2, 5, 5, 3, 3, 3, 3, 3, 3, 5, 5, 6, 11, 10, 7, 7, 7, 4, 4, 4, 2, 3, 3, 3, 3, 3, 2, 7, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 11, 7, 6, 9, 6, 6, 8, 10, 8, 6, 8, 13, 4, 4, 4, 4, 4, 10, 8, 11, 8, 8, 8, 10, 10, 7, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 10, 13, 7, 8, 7, 11, 8, 8, 6, 9, 8, 8, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 9, 7, 6, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 9, 7, 8, 10, 8, 8, 2, 3, 3, 3, 3, 3, 2, 8, 9, 9, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 9, 2, 2, 3, 3, 3, 3, 3, 3, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 5, 3, 5, 4, 2, 3, 2, 4, 3, 9, 2, 2, 2, 2, 2, 5, 5, 3, 8, 8, 13, 6, 10, 9, 4, 7, 9, 11, 2, 3, 7, 3, 3, 4, 1, 3, 4, 2, 9, 3, 3, 12, 5, 3, 7, 10, 10, 7, 4, 4, 6, 14, 7, 9, 7, 13, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 8, 15, 4, 4, 2, 3, 3, 3, 7, 4, 9, 9, 2, 3, 3, 3, 5, 3, 2, 2, 7, 2, 7, 6, 6, 7, 2, 4, 2, 2, 2, 2, 2, 2, 8, 8, 8, 9, 5, 2, 3, 3, 3, 3, 3, 3, 10, 7, 4, 4, 4, 4, 3, 4, 2, 3, 3, 3, 3, 3, 10, 7, 4, 4, 4, 4, 2, 3, 3, 3, 3, 10, 7, 4, 4, 4, 4, 3, 9, 6, 6, 6, 9, 13, 9, 2, 2, 2, 8, 7, 9, 5, 3, 3, 3, 5, 5, 12, 9, 10, 7, 8, 7, 6, 8, 6, 11, 12, 7, 9, 10, 4, 4, 7, 8, 11, 6, 7, 9, 8, 7, 10, 8, 9, 15, 7, 8, 5, 4, 7, 2, 3, 3, 3, 2, 14, 10, 2, 14, 10, 2, 14, 3, 9, 13, 13, 10, 14, 16, 17, 11, 2, 14, 2, 14, 3, 9, 13, 10, 14, 16, 17, 11, 14, 10, 14, 2, 7, 3, 10, 7, 14, 10, 2, 14, 10, 9, 9, 17, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 10, 10, 10, 12, 9, 4, 10, 11, 8, 8, 8, 7, 9, 5, 3, 3, 3, 3, 3, 3, 3, 3, 5, 8, 4, 4, 4, 4, 4, 4, 6, 16, 3, 3, 14, 3, 14, 2, 14, 9, 13, 10, 10, 14, 16, 17, 11, 6, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 9, 9, 9, 9, 9, 9, 2, 14, 9, 13, 10, 10, 14, 16, 17, 11, 6, 2, 14, 9, 17, 13, 10, 10, 14, 16, 17, 11, 6, 2, 14, 9, 13, 10, 14, 16, 17, 11, 2, 14, 9, 13, 10, 16, 11, 2, 14, 10, 19, 7, 2, 14, 9, 13, 10, 19, 10, 7, 14, 16, 17, 11, 6, 2, 14, 9, 13, 10, 19, 7, 14, 16, 17, 11, 2, 14, 9, 13, 17, 13, 10, 10, 14, 16, 17, 11, 6, 3, 2, 14, 9, 13, 10, 10, 14, 16, 17, 11, 6, 9, 10, 12, 14, 14, 14, 12, 12, 12, 12, 12, 14, 14, 14, 10, 10, 10, 14, 9, 9, 9, 9, 14, 14, 14, 13, 13, 14, 9, 9, 9, 9, 9, 9, 4, 11, 2, 14, 9, 13, 17, 13, 10, 19, 10, 7, 14, 16, 17, 11, 6, 2, 14, 9, 13, 17, 13, 10, 19, 10, 7, 14, 16, 17, 11, 6, 2, 9, 10, 10, 7, 17, 3, 3, 12, 12, 16, 15, 15, 12, 14, 14, 14, 20, 20, 13, 12, 12, 12, 12, 12, 12, 20, 25, 14, 14, 12, 12, 10, 10, 10, 10, 9, 9, 9, 25, 4, 9, 17, 10, 7, 14, 16, 21, 13, 13, 14, 20, 14, 13, 17, 24, 9, 12, 13, 25, 13, 21, 20, 17, 9, 9, 9, 9, 9, 9, 12, 17, 4, 4, 9, 9, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 13, 13, 9, 9, 9, 9, 9, 9, 1, 8, 7, 11, 11, 1, 3, 3, 3, 4, 8, 9, 10, 14, 14, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 13, 13, 9, 9, 9, 9, 9, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 12, 6, 14, 4, 12, 7, 2, 2, 1, 2, 7, 6, 4, 4, 4, 6, 8, 8, 7, 4, 5, 6, 3, 3, 3, 3, 4, 16, 8, 3, 5, 4, 3, 3, 3, 5, 2, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 12, 7, 7, 13, 9, 10, 12, 8, 9, 7, 8, 5, 12, 10, 13, 14, 5, 5, 5, 13, 5, 5, 5, 3, 3, 3, 5, 16, 5, 5, 5, 5, 5, 7, 12, 14, 8, 12, 8, 10, 12, 9, 11, 7, 9, 7, 10, 7, 13, 9, 7, 12, 8, 17, 7, 7, 16, 10, 13, 13, 8, 10, 10, 14, 17, 7, 16, 16, 15, 8, 10, 10, 12, 17, 7, 17, 14, 7, 10, 17, 8, 7, 7, 7, 8, 15, 15, 7, 14, 10, 10, 10, 11, 11, 7, 7, 13, 8, 10, 7, 16, 7, 8, 7, 14, 17, 12, 10, 11, 21, 8, 9, 7, 13, 9, 8, 13, 6, 12, 7, 6, 13, 10, 10, 10, 8, 18, 9, 17, 13, 10, 12, 6, 13, 6, 11, 8, 13, 10, 13, 18, 13, 11, 13, 8, 16, 7, 10, 8, 16, 12, 10, 8, 8, 6, 14, 11, 8, 15, 8, 8, 7, 7, 12, 7, 8, 9, 14, 15, 8, 9, 10, 9, 15, 7, 8, 8, 12, 13, 9, 10, 15, 15, 13, 7, 10, 10, 20, 7, 6, 9, 6, 6, 14, 11, 14, 11, 12, 9, 10, 16, 16, 12, 7, 11, 28, 8, 11, 10, 7, 21, 8, 7, 9, 4, 4, 4, 17, 7, 8, 6, 9, 6, 6, 13, 6, 6, 6, 6, 18, 20, 14, 8, 11, 12, 9, 10, 13, 15, 19, 8, 9, 12, 7, 10, 16, 12, 9, 9, 9, 14, 12, 11, 9, 12, 11, 18, 9, 9, 9, 10, 7, 7, 16, 8, 9, 7, 13, 12, 10, 18, 7, 8, 11, 7, 7, 8, 8, 13, 7, 7, 7, 11, 15, 13, 11, 7, 8, 15, 11, 7, 8, 18, 14, 13, 18, 15, 10, 12, 12, 9, 7, 11, 11, 8, 7, 10, 8, 14, 12, 10, 18, 7, 10, 9, 7, 8, 13, 10, 14, 9, 10, 8, 8, 23, 7, 7, 11, 12, 12, 17, 7, 7, 11, 11, 17, 16, 16, 7, 8, 11, 14, 14, 8, 10, 7, 7, 16, 16, 13, 9, 11, 9, 15, 15, 11, 11, 7, 7, 14, 7, 9, 7, 7, 16, 10, 13, 10, 11, 14, 7, 11, 10, 11, 7, 11, 10, 11, 15, 11, 15, 10, 12, 17, 10, 14, 13, 11, 11, 12, 13, 10, 7, 13, 10, 16, 12, 21, 9, 10, 10, 7, 11, 14, 17, 7, 7, 8, 11, 12, 8, 15, 14, 14, 8, 17, 12, 10, 10, 7, 9, 11, 7, 10, 7, 11, 18, 7, 11, 7, 12, 11, 8, 8, 14, 12, 7, 8, 15, 3, 7, 7, 5, 2, 9, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 5, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 5, 11, 6, 4, 7, 10, 7, 7, 11, 1, 10, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 3, 5, 6, 3, 3, 5, 2, 2, 5, 3, 4, 13, 11, 3, 3, 6, 3, 5, 14, 2, 2, 3, 8, 2, 2, 12, 5, 18, 5, 3, 3, 3, 16, 5, 5, 5, 10, 7, 13, 12, 13, 9, 12, 14, 19, 9, 9, 21, 9, 9, 10, 6, 9, 6, 15, 10, 6, 12, 8, 6, 10, 15, 4, 4, 6, 6, 9, 9, 12, 16, 14, 23, 7, 7, 7, 14, 9, 7, 7, 11, 14, 10, 7, 10, 10, 10, 12, 6, 11, 10, 13, 11, 15, 11, 7, 12, 10, 3, 7, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 3, 7, 2, 5, 5, 3, 3, 5, 5, 5, 5, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 7, 10, 2, 2, 2, 5, 5, 5, 5, 3, 3, 3, 3, 3, 5, 5, 10, 9, 11, 8, 7, 12, 8, 9, 7, 6, 13, 11, 6, 13, 7, 9, 9, 4, 4, 4, 4, 4, 4, 6, 10, 7, 8, 13, 8, 8, 9, 14, 8, 10, 7, 7, 7, 9, 6, 9, 7, 2, 12, 5, 3, 3, 13, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 1, 7, 6, 4, 12, 3, 3, 3, 3, 3, 8, 7, 3, 3, 3, 3, 3, 3, 4, 4, 11, 14, 2, 8, 3, 5, 5, 8, 10, 8, 6, 4, 7, 17, 7, 4, 5, 2, 6, 3, 5, 2, 4, 4, 2, 12, 5, 5, 3, 15, 13, 10, 8, 11, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 3, 3, 3, 3, 4, 18, 2, 12, 5, 3, 3, 3, 3, 3, 5, 16, 8, 8, 9, 6, 6, 4, 4, 4, 4, 31, 6, 6, 10, 11, 21, 10, 9, 7, 10, 7, 7, 2, 4, 4, 4, 4, 6, 5, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 2, 2, 2, 5, 3, 3, 3, 7, 7, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 8, 2, 3, 3, 3, 3, 3, 5, 9, 11, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 5, 10, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 11, 10, 10, 10, 10, 10, 11, 10, 11, 10, 11, 10, 9, 9, 11, 3, 3, 3, 3, 3, 3, 5, 3, 7, 8, 8, 7, 6, 6, 11, 4, 4, 4, 7, 8, 9, 9, 2, 3, 7, 4, 4, 2, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 5, 3, 3, 5, 5, 5, 7, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 6, 9, 12, 3, 7, 10, 7, 2, 2, 3, 3, 3, 3, 3, 4, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 8, 8, 6, 6, 8, 6, 7, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, 20, 19, 8, 10, 9, 7, 10, 6, 8, 11, 6, 6, 6, 6, 13, 12, 8, 6, 7, 14, 11, 9, 2, 5, 3, 3, 6, 2, 3, 2, 2, 2, 2, 2, 2, 2, 5, 4, 3, 7, 6, 4, 7, 4, 3, 6, 4, 7, 2, 7, 7, 7, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 9, 10, 10, 8, 11, 7, 8, 20, 7, 8, 9, 8, 12, 6, 6, 6, 8, 9, 8, 12, 6, 6, 8, 13, 10, 12, 6, 6, 7, 7, 8, 9, 6, 4, 4, 4, 4, 4, 4, 4, 10, 6, 6, 6, 7, 14, 11, 10, 7, 8, 10, 8, 11, 14, 11, 11, 9, 7, 9, 8, 11, 9, 17, 10, 9, 2, 2, 2, 9, 3, 3, 3, 3, 15, 14, 9, 5, 5, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 12, 22, 19, 17, 18, 18, 19, 21, 7, 16, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 16, 11, 11, 7, 7, 7, 7, 17, 7, 8, 12, 15, 9, 19, 7, 19, 8, 16, 21, 11, 12, 19, 14, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 16, 16, 19, 24, 12, 7, 14, 7, 12, 7, 8, 10, 10, 13, 7, 12, 12, 7, 7, 10, 18, 15, 12, 16, 7, 14, 12, 17, 10, 16, 17, 12, 17, 25, 7, 7, 7, 13, 6, 9, 6, 9, 18, 6, 6, 11, 20, 10, 6, 6, 6, 6, 6, 6, 6, 17, 6, 6, 6, 15, 6, 6, 6, 6, 6, 8, 14, 11, 12, 15, 13, 19, 17, 21, 7, 18, 8, 13, 13, 8, 12, 8, 6, 6, 13, 6, 15, 15, 16, 6, 6, 16, 6, 6, 6, 14, 6, 18, 6, 6, 6, 17, 18, 9, 13, 15, 8, 19, 8, 15, 15, 18, 14, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 11, 10, 11, 6, 21, 23, 12, 17, 12, 11, 14, 13, 22, 15, 15, 11, 12, 14, 12, 7, 12, 8, 14, 12, 18, 10, 8, 16, 19, 17, 12, 14, 15, 8, 9, 19, 17, 12, 13, 13, 15, 18, 13, 23, 24, 23, 21, 17, 24, 8, 21, 8, 14, 14, 16, 14, 8, 8, 15, 20, 8, 19, 21, 9, 8, 13, 12, 13, 15, 11, 8, 11, 9, 9, 8, 11, 8, 21, 14, 21, 15, 15, 13, 7, 19, 7, 7, 7, 7, 7, 7, 16, 12, 17, 18, 7, 7, 11, 11, 7, 9, 9, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 10, 10, 7, 9, 7, 7, 7, 6, 8, 6, 6, 6, 6, 6, 6, 6, 7, 6, 8, 6, 6, 9, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 8, 7, 8, 7, 8, 10, 7, 5, 5, 5, 5, 5, 5, 3, 9, 7, 7, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 9, 11, 13, 7, 8, 9, 9, 5, 5, 5, 7, 8, 6, 6, 6, 6, 6, 6, 6, 7, 8, 9, 7, 10, 9, 10, 7, 8, 5, 5, 5, 5, 5, 5, 7, 7, 9, 8, 7, 7, 6, 6, 6, 6, 6, 6, 10, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 4, 4, 4, 4, 8, 7, 7, 10, 10, 9, 8, 8, 15, 9, 8, 8, 8, 8, 8, 9, 10, 9, 10, 7, 8, 13, 5, 5, 5, 5, 5, 3, 3, 7, 7, 8, 6, 6, 6, 4, 4, 11, 9, 7, 8, 9, 10, 7, 5, 5, 5, 5, 5, 3, 3, 7, 6, 6, 13, 7, 9, 8, 7, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 7, 8, 7, 8, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 6, 6, 6, 6, 7, 6, 7, 6, 6, 9, 7, 4, 4, 4, 4, 4, 4, 4, 7, 8, 7, 8, 9, 8, 8, 8, 7, 10, 7, 8, 5, 5, 5, 5, 5, 5, 5, 5, 3, 7, 7, 7, 7, 9, 7, 10, 9, 6, 6, 6, 6, 6, 8, 8, 6, 6, 6, 7, 6, 6, 6, 9, 9, 4, 4, 13, 7, 10, 9, 9, 12, 7, 8, 8, 10, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 3, 7, 7, 11, 7, 9, 8, 8, 6, 6, 10, 6, 8, 8, 8, 6, 7, 6, 6, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 8, 8, 16, 8, 9, 8, 7, 5, 5, 5, 5, 5, 3, 3, 7, 7, 7, 10, 15, 8, 9, 8, 9, 9, 6, 6, 6, 6, 6, 6, 7, 4, 8, 7, 8, 8, 7, 8, 11, 8, 5, 5, 5, 5, 5, 3, 7, 7, 6, 11, 16, 7, 6, 4, 4, 4, 4, 9, 9, 8, 8, 8, 13, 12, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 7, 8, 8, 9, 13, 7, 7, 7, 9, 8, 8, 9, 12, 7, 12, 7, 12, 8, 7, 10, 12, 9, 9, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6, 9, 8, 9, 11, 8, 6, 6, 6, 6, 6, 12, 7, 6, 6, 6, 9, 7, 7, 6, 6, 6, 6, 6, 11, 9, 6, 6, 6, 6, 6, 7, 9, 4, 4, 4, 4, 4, 4, 4, 4, 9, 9, 9, 9, 7, 7, 7, 7, 7, 11, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 7, 7, 11, 11, 7, 12, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 13, 12, 8, 8, 8, 8, 7, 7, 7, 9, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 7, 11, 7, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 10, 11, 6, 7, 9, 4, 4, 4, 4, 4, 4, 9, 9, 8, 9, 8, 8, 8, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 11, 7, 7, 7, 9, 6, 6, 11, 8, 10, 6, 6, 6, 12, 8, 8, 7, 6, 6, 8, 7, 4, 4, 4, 4, 4, 4, 4, 4, 9, 10, 9, 9, 8, 10, 9, 11, 8, 5, 5, 5, 7, 6, 6, 8, 7, 4, 4, 4, 4, 8, 7, 7, 8, 7, 8, 8, 5, 5, 5, 5, 7, 7, 8, 8, 8, 6, 6, 6, 6, 6, 10, 8, 9, 13, 6, 7, 6, 6, 8, 7, 8, 4, 4, 4, 4, 11, 8, 8, 8, 10, 5, 5, 8, 7, 8, 13, 8, 7, 6, 8, 6, 9, 7, 8, 7, 5, 5, 5, 5, 5, 5, 3, 3, 7, 8, 9, 6, 4, 8, 10, 10, 8, 12, 9, 13, 2, 7, 5, 5, 5, 5, 5, 7, 7, 10, 6, 6, 6, 6, 6, 6, 6, 8, 4, 4, 9, 8, 8, 8, 14, 8, 8, 8, 9, 8, 5, 5, 5, 5, 5, 3, 3, 9, 6, 6, 6, 6, 10, 12, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 11, 8, 7, 8, 8, 8, 5, 5, 3, 3, 3, 3, 7, 7, 6, 8, 6, 8, 11, 7, 6, 6, 6, 7, 4, 8, 11, 9, 10, 5, 5, 5, 3, 3, 3, 7, 7, 8, 9, 8, 15, 9, 6, 6, 6, 6, 6, 6, 11, 11, 4, 4, 4, 4, 4, 7, 9, 9, 10, 8, 7, 5, 5, 5, 5, 5, 5, 3, 3, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 7, 4, 4, 4, 4, 4, 9, 9, 8, 8, 10, 13, 5, 5, 5, 3, 17, 7, 7, 7, 7, 7, 8, 6, 8, 13, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 9, 10, 8, 8, 8, 5, 5, 5, 5, 3, 7, 7, 7, 8, 8, 6, 6, 6, 8, 8, 8, 9, 10, 8, 4, 8, 10, 9, 8, 8, 8, 9, 13, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 8, 9, 9, 7, 7, 7, 10, 9, 9, 8, 9, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 11, 8, 8, 9, 9, 10, 8, 9, 7, 7, 5, 5, 5, 5, 5, 5, 3, 7, 8, 7, 6, 6, 8, 6, 6, 10, 4, 7, 8, 9, 12, 8, 7, 7, 5, 5, 5, 5, 5, 5, 3, 3, 7, 14, 7, 9, 8, 8, 6, 6, 8, 12, 12, 6, 6, 7, 7, 10, 4, 4, 4, 4, 4, 9, 9, 14, 9, 13, 8, 7, 5, 5, 5, 6, 6, 6, 7, 4, 8, 7, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 7, 7, 8, 6, 6, 6, 6, 6, 6, 12, 6, 6, 6, 6, 4, 4, 9, 9, 8, 8, 11, 7, 7, 7, 5, 5, 5, 3, 9, 8, 6, 6, 7, 4, 4, 4, 4, 4, 4, 8, 8, 11, 5, 5, 5, 7, 7, 7, 9, 6, 6, 6, 6, 6, 6, 9, 8, 4, 4, 4, 4, 7, 12, 9, 8, 8, 8, 7, 10, 10, 5, 5, 5, 5, 5, 5, 5, 3, 11, 14, 8, 7, 8, 8, 6, 6, 6, 6, 6, 8, 7, 6, 6, 6, 7, 6, 8, 9, 4, 4, 4, 7, 8, 9, 7, 9, 7, 7, 9, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 3, 9, 7, 7, 12, 14, 8, 6, 6, 12, 11, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 15, 7, 4, 4, 4, 16, 9, 9, 9, 8, 9, 9, 9, 9, 9, 8, 8, 8, 13, 11, 8, 5, 5, 5, 5, 3, 7, 6, 6, 8, 8, 8, 6, 6, 7, 10, 7, 4, 4, 4, 4, 9, 7, 8, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 7, 7, 7, 9, 6, 6, 6, 6, 6, 8, 8, 7, 7, 9, 6, 6, 6, 7, 6, 6, 6, 6, 6, 15, 4, 4, 4, 4, 4, 8, 8, 7, 8, 12, 9, 8, 8, 8, 8, 8, 9, 8, 8, 10, 8, 8, 8, 8, 16, 9, 10, 2, 5, 5, 5, 5, 5, 5, 5, 9, 7, 6, 8, 9, 4, 4, 4, 4, 4, 7, 8, 8, 8, 9, 8, 11, 10, 5, 5, 5, 5, 3, 7, 8, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 4, 12, 10, 12, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 3, 3, 7, 7, 10, 8, 9, 7, 6, 10, 7, 6, 6, 4, 4, 8, 9, 7, 9, 9, 9, 9, 8, 8, 8, 8, 10, 5, 5, 5, 5, 5, 5, 8, 7, 6, 6, 6, 10, 6, 7, 10, 7, 4, 4, 4, 4, 4, 4, 4, 12, 9, 10, 7, 7, 10, 8, 10, 5, 12, 9, 6, 6, 6, 6, 6, 7, 6, 4, 4, 4, 10, 9, 9, 8, 7, 7, 5, 5, 5, 5, 5, 5, 3, 3, 13, 7, 7, 9, 7, 7, 7, 8, 9, 9, 7, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 13, 9, 15, 15, 4, 4, 4, 4, 4, 10, 10, 9, 8, 9, 8, 8, 9, 7, 8, 7, 8, 5, 5, 7, 6, 6, 6, 4, 4, 4, 7, 8, 11, 8, 5, 5, 5, 5, 5, 5, 5, 7, 6, 6, 6, 6, 6, 6, 9, 11, 10, 7, 4, 4, 4, 9, 8, 8, 5, 5, 5, 5, 5, 9, 9, 6, 6, 6, 6, 6, 6, 6, 9, 9, 4, 4, 4, 4, 8, 8, 8, 9, 9, 8, 8, 8, 13, 2, 4, 2, 7, 5, 5, 5, 5, 5, 5, 9, 9, 6, 6, 6, 6, 10, 8, 8, 8, 6, 6, 6, 4, 4, 9, 8, 10, 8, 9, 8, 8, 8, 9, 8, 8, 5, 3, 3, 3, 11, 6, 6, 6, 7, 6, 6, 6, 4, 4, 9, 8, 5, 5, 5, 5, 5, 3, 11, 8, 6, 6, 6, 6, 6, 9, 7, 4, 4, 14, 10, 9, 8, 12, 8, 8, 8, 11, 15, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 10, 10, 7, 7, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 7, 11, 7, 7, 11, 11, 7, 8, 9, 10, 7, 7, 9, 9, 9, 9, 7, 7, 10, 8, 13, 8, 8, 8, 8, 11, 10, 6, 6, 8, 10, 11, 14, 14, 6, 6, 6, 6, 6, 6, 9, 11, 7, 7, 6, 8, 12, 11, 11, 6, 6, 10, 6, 6, 6, 6, 6, 10, 7, 7, 6, 6, 11, 6, 6, 6, 11, 8, 9, 7, 6, 10, 11, 9, 10, 11, 7, 11, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 6, 6, 8, 9, 10, 9, 6, 6, 6, 10, 6, 6, 6, 6, 11, 10, 11, 10, 9, 8, 7, 7, 7, 7, 11, 14, 8, 10, 9, 9, 8, 8, 7, 11, 8, 8, 8, 11, 11, 10, 10, 9, 10, 8, 11, 10, 8, 11, 9, 12, 8, 10, 8, 11, 8, 9, 9, 11, 11, 10, 11, 13, 8, 7, 8, 8, 9, 7, 8, 8, 8, 8, 7, 8, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 8, 6, 4, 4, 4, 11, 7, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 3, 3, 3, 3, 8, 7, 7, 8, 8, 4, 8, 7, 7, 7, 9, 7, 8, 9, 8, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 3, 3, 3, 3, 3, 4, 5, 5, 3, 8, 8, 6, 9, 4, 4, 10, 7, 3, 3, 3, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 2, 2, 2, 3, 3, 3, 3, 3, 4, 10, 2, 3, 3, 3, 3, 3, 3, 3, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 5, 2, 4, 2, 6, 2, 2, 9, 5, 5, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 9, 8, 7, 6, 6, 11, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 7, 7, 11, 8, 8, 6, 5, 11, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 3, 3, 3, 3, 3, 3, 6, 4, 4, 4, 4, 3, 3, 3, 3, 5, 7, 2, 3, 3, 3, 3, 3, 8, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 6, 3, 3, 8, 10, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 7, 7, 1, 1, 3, 8, 7, 7, 8, 8, 8, 1, 6, 1, 1, 6, 3, 3, 4, 7, 3, 5, 5, 4, 4, 4, 4, 4, 2, 7, 7, 8, 12, 3, 4, 5, 1, 3, 4, 4, 10, 4, 3, 3, 3, 8, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 9, 20, 7, 5, 5, 5, 9, 13, 5, 5, 5, 5, 5, 3, 3, 3, 16, 5, 5, 5, 13, 7, 8, 8, 11, 8, 7, 9, 7, 11, 12, 9, 9, 8, 8, 11, 10, 14, 7, 12, 10, 11, 13, 7, 9, 11, 17, 17, 14, 13, 7, 8, 7, 10, 10, 7, 16, 13, 7, 8, 17, 12, 9, 8, 6, 7, 10, 6, 6, 12, 6, 8, 10, 8, 8, 8, 6, 8, 6, 14, 6, 6, 6, 13, 6, 10, 6, 6, 7, 14, 8, 6, 6, 10, 11, 10, 9, 9, 7, 7, 6, 6, 6, 9, 9, 7, 9, 10, 9, 13, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 8, 6, 8, 9, 10, 9, 7, 10, 10, 8, 7, 8, 7, 10, 12, 9, 8, 15, 8, 7, 8, 8, 7, 7, 15, 13, 7, 10, 9, 14, 18, 16, 7, 24, 7, 8, 10, 11, 16, 8, 14, 7, 9, 9, 9, 11, 13, 19, 14, 15, 14, 11, 7, 13, 9, 10, 7, 13, 9, 10, 11, 12, 8, 9, 2, 3, 5, 8, 7, 4, 4, 10, 5, 3, 3, 3, 3, 3, 5, 4, 4, 4, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 12, 5, 3, 8, 10, 15, 6, 7, 2, 3, 2, 5, 5, 12, 2, 5, 5, 5, 5, 2, 2, 5, 5, 12, 9, 5, 2, 2, 9, 5, 5, 12, 12, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 12, 5, 8, 8, 9, 5, 5, 5, 8, 19, 7, 16, 15, 14, 9, 9, 9, 9, 7, 11, 11, 11, 7, 14, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 12, 9, 9, 12, 12, 12, 15, 7, 11, 7, 14, 11, 18, 13, 8, 18, 15, 18, 12, 14, 12, 8, 8, 8, 8, 9, 9, 9, 12, 7, 10, 10, 8, 8, 12, 12, 12, 7, 12, 12, 9, 7, 7, 7, 7, 7, 8, 15, 12, 9, 10, 10, 7, 10, 10, 13, 11, 10, 9, 22, 11, 9, 8, 8, 8, 8, 8, 13, 18, 13, 9, 15, 19, 9, 7, 7, 10, 7, 7, 7, 11, 8, 13, 17, 7, 7, 10, 10, 10, 7, 20, 16, 7, 7, 7, 7, 7, 7, 11, 21, 12, 12, 13, 11, 14, 16, 8, 8, 13, 11, 7, 7, 13, 7, 7, 14, 15, 15, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 13, 10, 18, 6, 6, 6, 6, 6, 6, 6, 6, 6, 11, 8, 8, 12, 12, 11, 11, 8, 12, 9, 9, 9, 13, 13, 9, 9, 9, 9, 9, 9, 6, 10, 12, 6, 6, 6, 6, 17, 11, 7, 7, 7, 7, 14, 14, 12, 6, 7, 7, 6, 6, 15, 10, 13, 10, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 13, 9, 9, 15, 13, 6, 12, 12, 6, 19, 11, 10, 7, 7, 16, 8, 19, 17, 9, 9, 9, 9, 9, 6, 6, 6, 10, 8, 16, 8, 6, 6, 9, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6, 6, 20, 6, 9, 6, 14, 9, 9, 9, 6, 9, 8, 8, 12, 9, 8, 8, 8, 8, 7, 8, 12, 7, 8, 8, 8, 6, 8, 6, 6, 6, 6, 6, 6, 6, 9, 8, 8, 6, 6, 13, 9, 12, 13, 12, 14, 13, 12, 11, 11, 6, 8, 8, 8, 6, 13, 12, 11, 11, 12, 6, 11, 12, 11, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, 6, 6, 6, 6, 6, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 6, 18, 6, 12, 13, 13, 13, 9, 10, 15, 9, 12, 6, 6, 6, 6, 6, 6, 6, 6, 9, 15, 10, 9, 10, 13, 9, 19, 8, 18, 17, 10, 10, 8, 8, 6, 6, 6, 6, 6, 6, 10, 14, 8, 16, 16, 9, 8, 15, 8, 8, 10, 12, 14, 7, 7, 8, 8, 7, 7, 7, 7, 8, 13, 13, 11, 9, 9, 9, 12, 10, 17, 8, 11, 9, 7, 7, 14, 8, 14, 14, 7, 7, 7, 7, 7, 7, 14, 7, 7, 7, 7, 7, 10, 10, 8, 14, 7, 7, 7, 7, 8, 8, 8, 8, 8, 17, 9, 7, 15, 7, 8, 12, 7, 9, 14, 7, 7, 7, 9, 13, 8, 14, 7, 16, 18, 13, 15, 14, 12, 13, 10, 15, 9, 7, 7, 7, 10, 13, 15, 15, 9, 9, 9, 9, 19, 11, 7, 11, 11, 13, 8, 8, 8, 8, 7, 12, 19, 17, 9, 9, 13, 7, 7, 7, 9, 7, 7, 7, 12, 13, 15, 10, 8, 8, 14, 15, 12, 13, 13, 8, 12, 14, 7, 11, 7, 14, 15, 13, 12, 8, 8, 8, 8, 11, 13, 15, 15, 8, 13, 12, 8, 8, 8, 13, 10, 16, 14, 11, 8, 8, 12, 12, 9, 15, 15, 12, 12, 13, 8, 8, 9, 12, 13, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 12, 11, 7, 14, 7, 13, 13, 13, 12, 18, 16, 7, 12, 11, 10, 10, 15, 9, 9, 9, 21, 7, 7, 7, 11, 16, 8, 8, 11, 11, 7, 7, 7, 7, 7, 19, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 8, 9, 12, 14, 11, 9, 9, 9, 22, 12, 3, 8, 8, 15, 4, 2, 2, 5, 5, 3, 3, 3, 3, 3, 3, 6, 6, 4, 4, 4, 12, 7, 10, 2, 3, 3, 3, 3, 3, 3, 3, 6, 7, 3, 7, 5, 14, 4, 4, 7, 8, 10, 4, 1, 3, 3, 6, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 2, 2, 5, 3, 4, 2, 2, 2, 2, 2, 2, 11, 5, 5, 5, 11, 5, 5, 3, 5, 5, 5, 5, 11, 14, 13, 9, 11, 9, 12, 8, 11, 11, 8, 11, 16, 9, 9, 7, 10, 9, 12, 8, 15, 6, 7, 6, 6, 13, 10, 8, 11, 8, 6, 6, 6, 12, 16, 6, 11, 7, 8, 9, 18, 6, 6, 9, 4, 4, 6, 13, 6, 6, 6, 6, 8, 8, 9, 16, 7, 7, 14, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 15, 13, 7, 10, 7, 7, 10, 12, 16, 15, 7, 9, 9, 14, 11, 11, 10, 9, 10, 8, 12, 7, 8, 7, 7, 10, 12, 7, 12, 8, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 5, 5, 5, 10, 4, 8, 7, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 7, 4, 5, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 8, 2, 2, 2, 8, 12, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 7, 11, 9, 8, 8, 8, 7, 8, 9, 7, 7, 9, 7, 7, 7, 10, 7, 7, 10, 9, 10, 6, 6, 6, 6, 6, 6, 15, 7, 8, 9, 9, 8, 6, 6, 10, 9, 6, 8, 13, 9, 7, 6, 6, 6, 6, 6, 6, 12, 6, 6, 7, 6, 7, 6, 6, 6, 10, 10, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 14, 6, 6, 7, 7, 9, 6, 6, 6, 6, 9, 9, 8, 9, 10, 9, 8, 9, 12, 7, 7, 7, 8, 7, 10, 12, 11, 9, 10, 7, 7, 7, 9, 10, 10, 8, 12, 9, 7, 7, 9, 8, 8, 8, 10, 7, 7, 8, 9, 9, 7, 7, 7, 8, 2, 4, 6, 3, 4, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 5, 8, 6, 4, 7, 3, 3, 3, 3, 3, 3, 3, 12, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 5, 3, 4, 7, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 6, 4, 3, 4, 2, 2, 2, 5, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 7, 6, 8, 9, 2, 2, 2, 2, 3, 3, 3, 5, 7, 2, 3, 3, 8, 7, 7, 2, 2, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 8, 8, 7, 7, 6, 10, 6, 9, 7, 11, 4, 6, 8, 8, 7, 8, 4, 5, 5, 5, 3, 3, 11, 8, 9, 6, 6, 8, 7, 4, 4, 7, 8, 7, 2, 2, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 7, 2, 2, 5, 3, 3, 2, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 12, 5, 5, 3, 3, 3, 5, 10, 12, 6, 15, 4, 6, 6, 7, 14, 9, 3, 3, 3, 3, 3, 8, 2, 2, 3, 5, 3, 3, 3, 3, 3, 3, 8, 8, 8, 7, 5, 8, 4, 6, 11, 2, 2, 6, 7, 2, 9, 8, 5, 5, 3, 3, 5, 5, 7, 7, 6, 6, 10, 6, 6, 8, 9, 7, 4, 4, 4, 4, 7, 6, 6, 7, 7, 10, 9, 8, 11, 8, 3, 3, 3, 3, 3, 4, 4, 2, 3, 3, 3, 3, 3, 7, 6, 2, 5, 6, 7, 6, 4, 8, 9, 11, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 5, 3, 3, 3, 3, 3, 9, 9, 6, 4, 8, 7, 7, 5, 9, 8, 6, 8, 7, 8, 5, 5, 5, 5, 5, 3, 3, 3, 16, 8, 7, 7, 7, 8, 7, 7, 7, 7, 9, 6, 9, 6, 10, 7, 7, 7, 6, 10, 8, 9, 11, 11, 8, 4, 4, 10, 8, 8, 6, 9, 6, 11, 8, 8, 8, 15, 7, 8, 9, 5, 3, 3, 3, 3, 3, 5, 11, 2, 2, 3, 8, 9, 10, 3, 2, 2, 2, 2, 2, 2, 3, 6, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 3, 3, 3, 3, 3, 3, 11, 5, 3, 3, 3, 3, 3, 3, 3, 3, 6, 7, 4, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 12, 7, 4, 12, 4, 6, 5, 4, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 11, 10, 6, 4, 6, 10, 8, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 7, 8, 8, 7, 13, 12, 10, 10, 8, 8, 7, 7, 9, 12, 11, 6, 6, 8, 8, 9, 7, 7, 7, 10, 15, 10, 4, 4, 4, 4, 4, 11, 8, 8, 9, 7, 9, 14, 14, 12, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 12, 5, 5, 5, 8, 11, 10, 7, 9, 3, 8, 7, 3, 15, 13, 11, 4, 4, 2, 2, 2, 19, 7, 5, 5, 3, 3, 3, 3, 3, 3, 3, 5, 22, 18, 6, 14, 17, 4, 4, 19, 16, 18, 2, 3, 3, 2, 3, 2, 3, 3, 6, 4, 2, 3, 3, 2, 5, 3, 3, 3, 3, 3, 3, 3, 9, 9, 2, 3, 2, 2, 2, 3, 3, 3, 5, 7, 14, 7, 7, 12, 9, 13, 6, 11, 6, 10, 9, 7, 7, 8, 12, 12, 8, 8, 8, 10, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 8, 10, 7, 8, 11, 8, 12, 9, 4, 7, 7, 9, 13, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 1, 2, 2, 3, 3, 3, 3, 3, 3, 5, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 4, 4, 4, 3, 2, 3, 3, 3, 3, 5, 2, 2, 2, 2, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 12, 9, 8, 8, 9, 8, 6, 17, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 4, 4, 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 7, 8, 8, 8, 10, 7, 13, 10, 8, 9, 3, 3, 5, 13, 3, 3, 3, 3, 3, 7, 7, 6, 6, 10, 13, 11, 11, 8, 8, 9, 8, 9, 9, 10, 10, 10, 11, 10, 10, 13, 13, 16, 15, 11, 12, 9, 9, 10, 9, 11, 10, 9, 9, 14, 7, 8, 3, 10, 7, 7, 3, 2, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 7, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 11, 6, 7, 4, 6, 2, 2, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 6, 4, 4, 2, 2, 2, 3, 3, 3, 3, 4, 4, 6, 6, 6, 6, 5, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 11, 6, 10, 9, 12, 7, 7, 11, 14, 9, 7, 12, 3, 3, 7, 12, 11, 12, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 5, 5, 5, 5, 5, 5, 5, 5, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 10, 3, 3, 3, 11, 3, 5, 9, 11, 8, 12, 14, 9, 7, 8, 7, 7, 11, 11, 7, 7, 10, 9, 8, 10, 9, 7, 7, 7, 7, 7, 7, 8, 8, 7, 11, 8, 8, 8, 7, 7, 10, 8, 7, 13, 12, 7, 17, 10, 8, 8, 11, 7, 11, 11, 14, 7, 11, 7, 8, 6, 9, 20, 8, 7, 9, 16, 7, 10, 6, 11, 10, 8, 9, 7, 16, 11, 11, 9, 8, 9, 8, 8, 8, 11, 8, 15, 8, 8, 9, 7, 8, 8, 11, 10, 7, 5, 7, 10, 10, 15, 7, 7, 7, 8, 7, 8, 8, 10, 11, 10, 10, 10, 11, 11, 7, 8, 6, 8, 8, 8, 10, 6, 8, 6, 6, 7, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 16, 6, 15, 6, 7, 11, 11, 7, 9, 10, 11, 13, 10, 6, 16, 8, 10, 12, 11, 6, 6, 6, 6, 6, 6, 6, 10, 6, 10, 7, 7, 7, 7, 11, 7, 11, 6, 6, 6, 6, 6, 6, 17, 7, 7, 6, 6, 12, 22, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 7, 6, 6, 5, 6, 6, 8, 11, 6, 9, 14, 11, 9, 11, 7, 7, 8, 6, 6, 6, 8, 10, 9, 6, 6, 6, 6, 9, 7, 6, 6, 6, 6, 6, 15, 6, 4, 4, 4, 6, 4, 17, 8, 11, 6, 6, 9, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 10, 6, 10, 6, 6, 6, 6, 12, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 6, 6, 18, 6, 6, 6, 8, 9, 10, 7, 8, 9, 10, 11, 7, 13, 6, 8, 8, 6, 6, 14, 7, 7, 7, 7, 10, 7, 14, 9, 6, 6, 9, 15, 9, 7, 14, 6, 11, 14, 13, 7, 12, 8, 7, 7, 7, 7, 7, 12, 7, 10, 9, 16, 6, 8, 6, 5, 17, 6, 8, 10, 4, 6, 4, 10, 15, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 11, 7, 4, 4, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 19, 17, 6, 10, 11, 6, 6, 6, 6, 18, 6, 6, 11, 4, 4, 4, 5, 6, 6, 6, 9, 5, 6, 4, 6, 6, 4, 6, 6, 6, 6, 10, 6, 6, 4, 6, 6, 10, 6, 10, 6, 6, 6, 6, 11, 6, 6, 10, 6, 6, 8, 6, 6, 6, 8, 6, 11, 4, 11, 9, 10, 9, 11, 4, 8, 4, 11, 12, 7, 9, 8, 6, 7, 7, 8, 12, 12, 11, 13, 10, 11, 7, 7, 7, 9, 7, 11, 10, 7, 7, 7, 16, 11, 10, 11, 17, 9, 9, 8, 8, 7, 7, 7, 9, 7, 7, 7, 14, 7, 13, 9, 11, 10, 14, 10, 10, 12, 11, 10, 7, 10, 5, 14, 8, 8, 8, 9, 7, 8, 7, 7, 9, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 11, 8, 10, 8, 7, 8, 14, 11, 8, 9, 9, 9, 8, 24, 10, 10, 12, 7, 7, 15, 11, 8, 8, 12, 11, 8, 9, 9, 7, 8, 9, 10, 11, 10, 11, 7, 12, 7, 7, 11, 9, 8, 14, 13, 12, 8, 11, 10, 8, 8, 7, 7, 14, 9, 10, 8, 9, 11, 7, 14, 8, 8, 13, 8, 8, 12, 7, 10, 14, 14, 11, 9, 10, 9, 9, 7, 7, 11, 11, 13, 9, 13, 5, 5, 5, 7, 9, 5, 11, 12, 14, 8, 7, 7, 11, 10, 9, 7, 8, 8, 7, 10, 11, 11, 5, 5, 7, 5, 5, 5, 7, 7, 15, 7, 7, 8, 7, 15, 12, 12, 10, 7, 8, 7, 11, 7, 7, 7, 23, 11, 8, 8, 11, 10, 7, 8, 11, 7, 19, 7, 7, 6, 9, 9, 9, 11, 3, 4, 7, 8, 6, 6, 4, 10, 8, 2, 2]);
2904
+ var edgeChild = /* @__PURE__ */ new Uint16Array([0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 1, 1, 1, 17, 1, 1, 1, 12, 1, 12, 1, 12, 13, 1, 1, 1, 1, 12, 1, 12, 1, 1, 1, 1, 1, 14, 21, 1, 1, 1, 1, 1, 1, 1, 19, 12, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 1, 16, 1, 18, 1, 1, 15, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 22, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 12, 12, 12, 12, 1, 32, 0, 0, 0, 1, 1, 1, 1, 35, 34, 1, 1, 1, 1, 1, 33, 1, 1, 1, 1, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 40, 0, 0, 0, 41, 0, 12, 1, 1, 12, 1, 1, 1, 1, 44, 45, 45, 45, 44, 45, 44, 44, 46, 45, 44, 45, 44, 44, 44, 44, 44, 44, 46, 44, 44, 44, 44, 44, 44, 45, 47, 47, 45, 44, 44, 44, 44, 44, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 52, 50, 50, 50, 52, 50, 51, 50, 53, 50, 51, 51, 50, 50, 50, 51, 53, 51, 53, 50, 51, 51, 12, 55, 55, 54, 56, 51, 53, 50, 50, 48, 49, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 60, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 67, 1, 12, 1, 1, 66, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 12, 1, 1, 1, 1, 89, 1, 91, 1, 1, 1, 1, 1, 1, 1, 1, 94, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 97, 97, 1, 1, 12, 1, 100, 1, 1, 1, 1, 1, 1, 1, 98, 1, 99, 1, 101, 1, 1, 1, 1, 1, 102, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 110, 111, 1, 1, 1, 1, 1, 1, 113, 113, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 121, 122, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 122, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 122, 1, 1, 1, 1, 1, 1, 1, 1, 1, 126, 123, 125, 120, 1, 124, 1, 1, 114, 1, 1, 1, 1, 117, 1, 127, 1, 1, 1, 1, 1, 119, 1, 108, 1, 109, 1, 12, 128, 106, 1, 112, 1, 1, 1, 1, 1, 107, 115, 1, 12, 12, 12, 118, 116, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 12, 12, 1, 1, 1, 1, 1, 12, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 136, 1, 1, 1, 1, 1, 1, 1, 1, 137, 138, 12, 12, 135, 133, 45, 45, 140, 50, 50, 139, 142, 141, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 1, 0, 144, 132, 1, 0, 1, 12, 12, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 148, 147, 20, 1, 1, 12, 12, 1, 20, 12, 12, 1, 1, 1, 1, 1, 134, 1, 1, 152, 1, 1, 1, 1, 153, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 136, 1, 1, 152, 1, 1, 1, 1, 153, 1, 1, 134, 1, 1, 1, 152, 1, 1, 1, 1, 153, 1, 1, 134, 1, 1, 1, 1, 1, 1, 1, 1, 134, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 160, 1, 1, 1, 152, 1, 1, 1, 1, 1, 153, 1, 1, 160, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 134, 1, 1, 1, 1, 152, 1, 1, 1, 1, 153, 1, 1, 1, 134, 1, 1, 152, 1, 1, 1, 1, 164, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 167, 1, 1, 160, 1, 1, 1, 1, 1, 152, 1, 1, 1, 1, 1, 153, 1, 1, 160, 1, 1, 1, 1, 1, 152, 1, 1, 1, 1, 1, 153, 1, 154, 158, 158, 12, 1, 12, 166, 1, 1, 1, 1, 1, 158, 158, 158, 154, 1, 1, 1, 157, 158, 161, 165, 1, 1, 1, 1, 157, 157, 1, 1, 156, 154, 154, 157, 170, 156, 170, 1, 1, 168, 1, 156, 155, 157, 1, 1, 1, 1, 157, 1, 159, 1, 1, 1, 12, 1, 162, 1, 162, 1, 1, 1, 162, 161, 163, 169, 156, 154, 1, 1, 1, 1, 1, 1, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 172, 173, 172, 172, 172, 172, 174, 174, 172, 173, 172, 173, 172, 172, 12, 12, 12, 12, 12, 1, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 193, 1, 1, 1, 1, 12, 199, 200, 201, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 151, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 196, 1, 1, 1, 184, 1, 210, 1, 1, 1, 208, 1, 1, 205, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 190, 1, 1, 1, 186, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 182, 1, 1, 1, 1, 1, 1, 1, 191, 1, 1, 1, 1, 195, 1, 1, 1, 1, 171, 1, 1, 189, 1, 1, 1, 192, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 180, 1, 12, 1, 1, 12, 1, 1, 1, 1, 183, 1, 1, 1, 188, 1, 203, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 209, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 194, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 176, 12, 1, 1, 1, 178, 12, 1, 1, 1, 1, 1, 1, 1, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 177, 1, 1, 1, 1, 1, 1, 204, 1, 1, 1, 181, 1, 1, 1, 187, 1, 12, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 191, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 175, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 185, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 207, 1, 1, 12, 1, 1, 1, 1, 179, 1, 1, 1, 185, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 197, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 202, 1, 1, 12, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 1, 225, 1, 1, 1, 0, 226, 223, 224, 1, 1, 1, 1, 1, 1, 231, 1, 233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 229, 1, 1, 1, 1, 1, 235, 1, 1, 12, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 234, 1, 1, 1, 12, 1, 1, 1, 1, 230, 1, 1, 1, 228, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 232, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 241, 13, 1, 1, 1, 12, 12, 238, 239, 1, 1, 1, 1, 240, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 242, 1, 1, 12, 16, 1, 1, 1, 1, 1, 1, 1, 243, 1, 1, 1, 12, 12, 1, 1, 1, 1, 1, 243, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 256, 256, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0, 172, 261, 262, 1, 12, 1, 1, 1, 1, 12, 264, 1, 1, 263, 1, 1, 266, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 271, 272, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 12, 0, 283, 0, 0, 284, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 60, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 327, 327, 328, 327, 0, 185, 1, 1, 13, 323, 1, 321, 0, 0, 0, 0, 1, 0, 0, 0, 324, 1, 1, 329, 1, 205, 1, 1, 1, 1, 1, 322, 1, 319, 1, 325, 1, 317, 1, 326, 1, 318, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 12, 1, 12, 320, 320, 1, 1, 1, 316, 184, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 12, 1, 1, 1, 1, 315, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 332, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 266, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 372, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 340, 351, 1, 1, 339, 374, 1, 345, 1, 1, 337, 369, 1, 1, 355, 336, 341, 1, 1, 1, 348, 379, 357, 1, 1, 1, 1, 1, 1, 358, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 367, 371, 0, 0, 79, 1, 1, 0, 365, 342, 378, 343, 346, 353, 1, 368, 0, 1, 0, 79, 362, 360, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 381, 1, 1, 352, 1, 79, 1, 0, 1, 1, 1, 384, 1, 0, 0, 79, 359, 0, 1, 338, 1, 1, 1, 0, 1, 1, 361, 1, 0, 1, 1, 1, 0, 1, 386, 349, 1, 1, 0, 1, 0, 0, 377, 0, 1, 1, 1, 79, 370, 1, 1, 366, 363, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 344, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 376, 0, 79, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 380, 1, 1, 1, 0, 0, 383, 0, 0, 0, 1, 356, 1, 0, 79, 382, 1, 0, 0, 0, 0, 385, 1, 1, 0, 0, 1, 0, 1, 0, 354, 0, 350, 0, 1, 1, 1, 0, 1, 1, 0, 373, 347, 375, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 400, 400, 1, 1, 12, 12, 1, 400, 1, 1, 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 412, 1, 1, 0, 1, 1, 1, 1, 205, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 430, 430, 1, 1, 0, 0, 317, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 442, 1, 441, 1, 1, 1, 1, 1, 1, 1, 1, 445, 1, 12, 12, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 453, 1, 1, 1, 455, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 452, 1, 447, 1, 1, 1, 1, 435, 1, 1, 1, 1, 1, 1, 1, 1, 448, 12, 1, 1, 1, 1, 454, 1, 1, 1, 449, 444, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 317, 1, 433, 1, 1, 12, 451, 1, 1, 317, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 437, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 454, 1, 1, 1, 1, 317, 1, 450, 1, 1, 1, 439, 1, 1, 1, 1, 1, 440, 1, 456, 443, 1, 1, 1, 1, 1, 438, 1, 1, 1, 1, 1, 1, 1, 1, 1, 434, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 446, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 436, 1, 1, 1, 1, 1, 1, 1, 220, 457, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 462, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 12, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 466, 466, 466, 466, 466, 466, 466, 0, 466, 466, 466, 466, 466, 1, 466, 466, 466, 0, 466, 466, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 478, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 488, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 198, 198, 1, 492, 1, 1, 1, 491, 1, 1, 1, 1, 487, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 493, 1, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 372, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 494, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 12, 1, 507, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 60, 1, 1, 12, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 526, 1, 1, 1, 1, 1, 1, 1, 527, 1, 1, 1, 1, 1, 1, 1, 525, 1, 1, 12, 1, 529, 239, 1, 1, 12, 12, 1, 1, 12, 1, 12, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 539, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 132, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 107, 1, 1, 12, 1, 1, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 548, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 144, 1, 1, 1, 228, 1, 1, 12, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 572, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 577, 1, 220, 1, 328, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 578, 1, 1, 1, 1, 0, 580, 0, 79, 0, 579, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 12, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 582, 582, 0, 585, 583, 582, 582, 582, 582, 582, 587, 582, 582, 591, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 588, 585, 582, 582, 585, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 583, 582, 582, 582, 582, 582, 589, 582, 582, 582, 582, 582, 582, 0, 0, 0, 1, 590, 1, 1, 1, 1, 584, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 595, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 12, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 12, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 65, 280, 306, 411, 535, 0, 4, 68, 236, 254, 282, 307, 334, 388, 413, 0, 499, 519, 536, 597, 9, 0, 61, 88, 398, 409, 429, 575, 0, 497, 518, 532, 612, 0, 30, 6, 0, 461, 500, 602, 560, 70, 0, 7, 285, 255, 389, 463, 416, 538, 79, 598, 0, 576, 309, 418, 465, 9, 105, 288, 506, 6, 30, 0, 311, 79, 391, 79, 483, 10, 6, 131, 248, 275, 0, 613, 509, 0, 563, 0, 64, 6, 6, 251, 95, 2, 432, 399, 410, 596, 0, 6, 0, 6, 286, 103, 6, 561, 501, 540, 0, 464, 390, 273, 287, 8, 71, 104, 599, 543, 392, 312, 300, 419, 146, 74, 290, 546, 510, 601, 564, 335, 330, 479, 6, 75, 149, 11, 0, 249, 522, 547, 565, 514, 551, 570, 611, 36, 6, 260, 295, 333, 304, 218, 30, 528, 553, 218, 42, 216, 265, 296, 305, 406, 423, 481, 274, 0, 73, 562, 0, 403, 417, 299, 79, 247, 79, 0, 581, 545, 504, 292, 421, 79, 393, 387, 0, 0, 0, 9, 555, 571, 217, 0, 424, 407, 531, 516, 573, 615, 85, 218, 43, 297, 396, 425, 569, 0, 511, 293, 276, 79, 215, 80, 28, 390, 30, 6, 394, 331, 303, 604, 592, 524, 550, 513, 0, 258, 81, 30, 405, 422, 0, 30, 426, 0, 219, 593, 517, 9, 408, 427, 218, 248, 86, 222, 594, 574, 557, 482, 428, 397, 250, 227, 87, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 129, 0, 0, 84, 549, 0, 0, 0, 0, 0, 0, 0, 27, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 503, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 281, 0, 0, 0, 0, 0, 530, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 568, 0, 0, 0, 0, 600, 521, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 62, 0, 0, 0, 267, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 279, 610, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 278, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 502, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 614, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 544, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 29, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 558, 0, 270, 0, 0, 130, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 414, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 415, 0, 0, 401, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 541, 0, 0, 90, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 623, 623, 623, 623, 623, 623, 622, 624]);
2905
+ var labelText = "orgmilcomschnetedugovdrrformsfeedbackofficialaccoorgmilschnetgovmagazinemediaunioncargopilotgroupcaarespressworksaerodromeworkinggroupair-traffic-controlaircraftaccident-preventioneducatormarketplaceambulanceinsurancecateringairportrepbodyenginesoftwaremodellingair-surveillanceconsultingchartertrainermaintenanceservicesdesignflightskydivingfreightassociationstudentgroundhandlingdgcafuelclubtaxicrewshowballooningexpresstraderbrokerauthoragentsairtrafficjournalistsafetyconsultantmicrolightaccident-investigationparachutingequipmentproductionfederationrecreationscientistnavigationengineertradingglidingleasingresearchpassenger-associationentertainmentparaglidinghangglidingaerobaticrotorcraftemergencycertificationgovernmentaeroclubexchangelogisticschampionshiphomebuiltcouncilconferencecontrolairlinecivilaviationjournalorgcomnetedugovcoorgcomnomnetobjofforgcomnetuwukiloappsframerorgmilcomnetedugovcoradioorgcomnetcommuneedogpbcoitgvorgedugov*spreviewfrontendrelayononstagingupid*mtls*privatelinktypedreamdeveloperbravemochawindsurfaivenmirenupsunwnextbegetngrokclerkwale2bwebcsbrunputerflutterflowspawnbaseshiptodaymagicpatternsnetlifyondigitaloceanrailwayhostedclaudehasurabotdashvercelgithubluyanigadgetreplitcloudflaretelebitedgecomputeevervaultdetaexponyatnoopencrpplxzeaburwasmerframerzeropsconvexmedusajsspritesonherculeseasypanelstreamlitsnowflakemesserliloginlinehackclubnorthflankbase44corespeedadaptableleapcellngrok-freeclerkstagelovableon-fleek*us-west-3ap-south-2us-central-2us-central-1eu-central-1ap-south-1us-west-2us-east-2eu-north-1ap-north-1us-west-1us-east-1*rcloudintsegorgmilcomgobbetnetintedugovturmusicasenasamutualcoopip6uriurnin-addre164homeirisgovdixdaemoncloudnssthwien*inexexkunden4accogvormymyspreadshop4lima2ixortsinfofuturecmsfuturehosting12hpprivfuturemailinglima-cityfunkfeuer123webseitednshomemelmyspreadshopcloudletswasantqldvicactnswtascatholicwasaqldvictasvpsidwasantozqldorgcomvicasnactnetedugovnswtasconfhrsncomairflowlambda-urltransfer-webappairflowtransfer-webapptransfer-webapptransfer-webapp-fipstransfer-webappeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1privatenotebookstudiolabelingnotebookstudionotebooknotebook-fipslabelingnotebookstudionotebook-fipsnotebookstudio-fipsnotebook-fipsnotebookstudionotebook-fipsnotebookstudioeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2experimentsus-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1onrepostsagemakercopporgmilcompronetintedugovbiznameinfoshoprsorgmilcomnetedugovbrendlyresolvenzauscotvstoreorgcomnetedugovbizinfoidacaicoittvorgmilcomschnetedugovinfocloudezproxyacmymyspreadshopkuleuvenwebhostingtransurl123websitecloudnsinterhostsolutionsddns5476103298edgfacbmlonihkjutwvqpsryxzbarsycoororgcomedumyftpno-iporxcloud-ipfor-somemmafanfor-morewebhopselfipjozidyndnscloudnsdscloudfor-thefor-betteractivetrailcoeconorestooteorgcomeconeteduassurmoneyafricaarchitectesrestaurantloisirstourismavocatsinfoagrounivcoorgcomnetedugovtvdeportesaludtksatorgmilcomwebgobnetinteducienciaboliviarevistacooperativaempresanombreindustriamusicapatriamedicinademocraciapoliticapuebloindigenaplurinacionalarteblogwikiinfoagrotransportenoticiasprofesionalacademiaeconomiaecologiamovimientotecnologianaturalsimplesitecepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesmscepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesms*biaamfmtcmptvfeirasampajampanatalbelemananiradiog12medindfndbmdtrdthepoaggfjdfdefinfenflegsegongengcngorgzlgslglogppgmillelqslcimcomnomadmjabimbbibbsbabcrectecsjcetcpscpvhudieticriapipsiecnbiorioecogeoteoodoproatoartfstmatvetdetbetnetcntnotfotgrueduajuespappreptmpemparqsrvadvdevgovntrturagrjorfarjusmusdesvixxyzcozfozslzbhzmaringasantamariacampinagrandegoianiasorocabafloripasaobernardocuritibaboavistarecifeaparecidasaogoncasalvadorcuiabamorenamacapalondrinacontagemsocialfortalmaceioleilaoosascoriobranconiteroi9guacutcheblogflogvlogwikitaxicoopmanauspalmascaxiasjoinvillebaruericampinassantoandreribeiraoriopretoweorgcomnetedugovv0windsurfshiptodaycloudsitecoaccoorgnetgovofmilcomgovmediatechzacoorgcomnetedugsjgovmydnspenfnlabnbmbgcbcqconcontnuyksknsmyspreadshopno-ipawdevboxbarsyonidatemfuinabusavinstanceseceuguukussryzespawncsxcloud-ipmyphotosfantasyleaguetwmailcleverappsscrappingccwucloudnsftpaccessgame-serverccgovobjectsrmalpgcust*svcalp1aeappenginermalpgmyspreadshop4lima2ixsquare7cloudscale123websitefirenet12hpflowgotdnslinkyard-cloudcloudnslima-citydnskingobjectstorageedaccogoorusorgcomnetintedua\xE9roportxn--aroport-byaassogouvcomilgobgovcloudnses-1eu-west-1us-east-1euvipit1eurarubait1s3lbwebsites3websiteru-spbru-mskelasticcsrunstnukukcaukusnl-ams-1fr-par-1fr-par-2functionsnodess3ddlwhmrdbfnck8sifrs3-websitecockpitscblmgdbdtwhkafkpubprivs3ddlwhmrdbk8sifrs3-websitecockpitscblmgdbdtwhkafks3ddlrdbk8sifrs3-websitecockpitscblmgdbdtwhkafkk8sscalebookpl-wawfr-parnl-amsbaremetalsmartlabelinginstancesdechk2kuleuvenlaravelvoorloperurownoxazapscwhstgrvaporobservablehqelementorantagonistreclaimjoteluluencowaydiademjelasticmatlabmagentositetrendhostingaxarnetperspectajenv-arubajelejoteravendbemergenttrafficplexconvexkeliwebserveboltbegetcdnstaticson-rancherprimetelonstackitunison-servicesdnshomelinkyardbarsyjelecloudnscocomnetgovmycn-northwest-1cn-north-1s3s3-accesspoints3-websites3s3-accesspointrdsdualstacks3-deprecatedemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspoints3s3-accesspointrdsdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicn-northwest-1cn-north-1cn-northwest-1ebcomputeelbcn-north-1airflowcn-northwest-1cn-north-1oncn-northwest-1cn-north-1amazonawssagemakeramazonwebservicesdirectasgdsdhehahljlnmhbacscahqhshhihnlnynsnmofjbjzjxjtjhkcqtwgsjssxnxjxgxxzgz\u7DB2\u7D61\u7F51\u7EDC\u516C\u53F8orgmilcomnetedugovxn--55qx5dcanva-appsxn--io0a7iquickconnectcanvasitekhsjxn--od0algmyqnapcloudsrvrlessclustersrealtimestorageleadpagescarrdcrdorgmilcomnomnetedugovhidnssupabaserdpareplmypiumsoxmitotaplpagesfirewalledreplitowodevwebview-assetsvfswebview-assetss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecateds3-websites3-object-lambdaexecute-apis3s3-accesspoints3-websites3-accesspoint-fipss3-fipss3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipss3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9vfss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1us-northeast-1ap-southeast-1me-south-1af-south-1ap-south-1ap-southeast-7us-west-2eu-west-2ap-east-2us-east-2ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ap-southeast-6ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1mrapaccesspoints3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3eu-west-3ap-south-2eu-south-2computes3-ap-northeast-2elbrdss3-ap-east-1s3-sa-east-1s3-us-gov-west-1s3-eu-central-1s3-ca-central-1eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3s3-website-us-west-2s3-website-eu-west-1s3-external-1eu-central-1me-central-1ca-central-1il-central-1s3-us-west-1s3-eu-west-1s3-website-sa-east-1s3-website-ap-southeast-2ap-northeast-1ap-southeast-1s3-us-west-2s3-eu-west-2me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2s3-website-ap-southeast-1s3-1s3-globals3-ap-northeast-3eu-north-1airflowap-southeast-2s3-us-gov-east-1s3-fips-us-gov-east-1s3-me-south-1s3-ap-south-1ap-northeast-2s3-website-us-west-1ap-southeast-5s3-eu-north-1s3-ap-southeast-1s3-website-us-gov-west-1compute-1s3-eu-west-3us-gov-west-1s3-website-ap-northeast-1us-gov-east-1s3-fips-us-gov-west-1s3-website-us-east-1s3-ap-southeast-2ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3-us-east-2s3-ap-northeast-1authauthauth-fipsauth-fipseu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1rservicesbuilderstg-builderdev-builder*ociocpocsdemoinstanceeu-west-3eu-south-2ap-southeast-3ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1previeweu-4us-4us-1eu-1us-2eu-2us-3eu-3appspaasrag-cloudrag-cloud-chjcloudjcloud-ver-jpcdemonodebalancermembersipeuxvsoncillaocelotonzayalilynxsphinxfentigercustomercaracalo365cloudstaticxendevapp001testcode-builder-stgplatformapimediasiteprojedrydpagesjsu2u2-localx0desazacncoitrueu4uhkukgrbrushatenadiarymyspreadshopfrom-flfrom-wvwebspace-hosttheworkpchatenablogservesarcasmapplinzisakuratanwixsiteappchizigiizeis-into-carsdnsiskinkyadobeaemcloudis-a-therapistpgfogmyvncdojinis-an-actress1kappfldrvkozowqa2jpnmexprgmrfirewall-gatewaydynnscafjsfbsbxooguyxnbayfrom-gawoltlab-demois-a-anarchistwiardwebteaches-yogadattowebtb-hostinglive-websiteservegamegotpantheonfrom-nhsubsc-payfrom-ohvipsinaappfrom-cadyndns-officehomelinuxfrom-mahercules-appservebbsstreakusercontentfrom-okfrom-wyfastly-terrariumis-a-llamaqualyhqportalserveexchangeon-vaporvivenushopciscofreakgrayjayleaguesmetaaiusercontentfrom-iais-a-libertariansaves-the-whalestaveusercontentyolasiteoperaunitepoint2thisis-a-catererlinodeusercontentfrom-vagithubusercontentsells-for-lesshosteurcanva-appsplaystation-cloudddnsfreefrom-pafrom-prfrom-waddnskingoutsystemscloudhotelwithflightmydattois-a-nascarfanmydbserverminiserverdamnserverservehumouris-a-playerfrom-nvfrom-nmemergentagentgentappsamplifyappfrom-kyis-an-accountantnfshostserveircfrom-akpythonanywherestackhero-networkpostman-echolikescandydyndns-mailobservableusercontentserveftpfreeboxosfrom-utcdn77-storageamazonawsneat-urldyndns-serverlinodeis-a-teacherfrom-vtgleezemythic-beastsus1-pleniteu1-plenitla1-plenitpaywhirlservecounterstrikejdevcloudhealth-carereformis-into-animegoogleapisis-a-painterafricaisa-hockeynutatmetais-an-actora2hostedis-a-democratdatadetectest-le-patrondigitaloceanspacesis-a-designeris-a-hunterlinodeobjectstemp-dnsissmarterthanyoufrom-arsimplesiteevennodetownnews-stagingis-a-liberalgooglecodejelasticservemp3stdlibqualyhqpartnerdyndns-free1cooldnsest-a-la-masiondrayddnsdynuddnsfrom-orfrom-miis-a-bloggerfrom-himydobisscanvacodeis-an-engineerest-a-la-maisonupsunappdevinappswafflecellmyasustorwpenginepoweredfrom-ctservep2psame-appmyshopblocksthingdustdatalikes-piediscordsezis-with-thebanddev-myqnapcloudlpusercontentis-leetshopitsite3utilitiesis-a-personaltrainersinaappladeskis-a-cheflogoipselfipbase44-sandboxnospamproxyalibabacloudcsmesswithdnsauthgearappsiamallamawithgooglelutrausercontentmochausercontentframercanvasmytabitdyndns-homew-credentialless-staticblitzcpserverdiscordsaysis-a-nurseappspotatlassian-isolated-3premotewdfrom-mtwixstudiocode0emm180rmyactivedirectoryawsappsmytuleapdnsabrpolyspaceqbuserrenderbuiltwithdarkboutirgotdnsabrdnsdopaascanva-hosted-embedawsglobalacceleratorhomesecuritypcmyiphostditchyouripclever-clouddyndns-ipon-aptibleis-a-musiciansecuritytacticsappspaceusercontenthomeunixstrapiappsame-previewcf-ipfsmycloudnaselasticbeanstalkis-certifieddontexistkasserverik-serverdrive-platformatlassian-3pfirebaseappherokuappawsapprunnerbarsycenteris-a-cubicle-slaveservehttpmyshopifyis-a-guruquicksytessiiitesorsitesmagicpatternsappis-a-cpameteorappfrom-wiis-a-rockstarbumbleshrimpdattolocalreadthedocs-hostedfrom-rifamilydsdyndns-picsplesknsbplaceddnsaliasdynaliasdyndns-remotedoomdnsip-ddnsblogdnsis-a-doctorroutingthecloudamazoncognitobarsyonlinedsmynasddnsgurucloudflare-ipfsdeus-canvasfrom-idsmushcdnpagespeedmobilizerdyndns-at-homeunusualpersonhosted-by-previderis-a-republicandyn-o-saurstreamlitappworkisboringonthewificprapidqualifioappis-uberleetis-slickgetmyipwpdevcloudtypeformdyndns-at-workgentlentapismynascloudw-corp-staticblitzfrom-ingeekgalaxyservebeerfrom-mdonrenderspace-to-rentaivencloudappspacehostedonfabricawafaicloudcodespotblogspotatlassian-3p-us-gov-modfrom-ndfrom-msis-a-techieis-a-studentcustomer-ociis-a-photographerdurumisfrom-ksmassivegriddyndns-wikiis-an-entertaineris-a-hard-workermysecuritycamerafrom-mnrackmazedyndns-blogis-a-bulls-fanwritesthisblogfreemyipsimple-urlfrom-sdreservdauthgear-stagingest-mon-blogueuris-into-gamesrice-labsxtooldevicesakurawebis-an-anarchistoraclecloudappsdyndns-worksells-for-urhcloudfrom-dcfastvps-serverwpmucdnis-a-geekscrysecfrom-txis-into-cartoonsmodelscapetrycloudflarelocaltonetstreak-linkbalena-devicesfrom-njforgeblocksfreebox-oswebadorsitefrom-ncdoesntexisthobby-sitestreaklinkshomesecuritymacownprovidertuleap-partnersdattorelaywphostedmailalpha-myqnapcloudservequakeis-a-socialistservehalflifepivohostingdynuhostingquipelementsw-staticblitzdyndns-webfrom-deproject-studyaliases121is-not-certifiedhercules-devis-a-financialadvisorservepicsis-a-greenloseyouripfrom-ilwithyoutubemwcloudnonprodwiredbladehostingdnsdojofrom-tnpixolinomyqnapcloudis-an-artisthostedpiis-a-landscaperauiusercontentoaiusercontenton-forgeis-a-conservativedreamhostersnet-freaksapps-1and1is-goneencoreapifastly-edgefrom-nesalesforcefrom-scdeployagentoraclegovcloudappsfrom-alis-a-lawyercechirevultrobjectsstufftoreadisa-geekddnsgeeklovableprojecttry-snowplowfrom-moblogsyteis-a-bookkeepernogmyforumravendbmyboxdeelementoredsaacficogoorinforgcomgobnatneteduidstoreorgcomnetintedudevnomepublorgcomneteduathgovtestscalculatorspaynowinfoquizzesresearchedcloudnsfunnelsassessmentsjscaleforcetmacltdorgmilcompronetgovbizpresseklogesrsccloudcustomfltusrcloude4corealmgovmunicontentproxy9metacentrumdyndyndyndnsdynpagespages-researchitionoccustomercomymyspreadshopipv64diskussionsbereich4limacomrub2ixfirewall-gatewayddnssspdnsbarsykeymachinesquare7myhome-serverspeedpartnercommunity-proschuldockxenonconnectg\xFCnstigliefernbwcloud-os-instancedyndnssecmy-routerxn--gnstigliefern-wobin-butterl-o-g-i-nisteingeekin-dslin-berlinin-brbfuettertdasnetzleitungsenin-vpnlcube-serverdyn-ip24logoipdyn-berlinruhr-uni-bochum12hpgoipsrvdnsfruskygit-repossvn-reposinternet-dnsg\xFCnstigbestellenhome-webserverxn--gnstigbestellen-zvbbplacedheimdnscosidnswebspaceconfiglima-citydyndns1istmeinvirtualuserschulplattformmy-gatewayddnsseclebtimnetztest-iservmein-iservvirtual-userhome64iservschuletaifun-dnstraeumtgeradeschulserverdynamisches-dns123webseitednshomehs-heilbronndnsupdaterbssgraphicdwadpdwdaepeweaawapaafpfwfabwbpbacwcpcciwebuserapiobjectsidsiskospockkimodorikerbonesteamsparisjanewaypicardglobaltarpitreedpikekiraworfsulukirkarchertuckerhackercanarywesleystagingprereleaset3r2lpbravepanelngrokiservstglclcrmerpflypagesbarsyvivenushoplocalcertlocalplayerbearbloggatewaydeno-stagingis-not-ais-a-goodbotdashvercelmocha-sandboxplatter-appreplitgithubpreviewworkersinbrowserevervaultdetais-ahrsndenoxmitmodxmyaddrstorageapipayloadgrebedocruncontainersstgstagelclstageloginlineis-a-fullstackleapcellngrok-freeis-coolstoragewebharemediatechlibp2pdiscourseimaginecomyspreadshopstoreregbiz123hjemmesidefirmcoorgcomnetedugovsldorgmilcomwebgobartnetedugovtmorgpolcomsocartnetedugovassoagrondiscoodontk12medcuegyecpaabgengorgmilgalsaltulcomadmesmgobpubdocmonfindgnriouioproartlatvetnetfotedulojgovntrturibrbarxxxofficialbasechefprofmktgpsictechinfoarqtcontdentrrpppsiqgit-pagesritmedfieorgcomlibprieduaipgovriikmeactvsportorgmilcomscieunnetedugovnameinfopintouchtawktotawkmyspreadshoporgcomnomgobedu123miwebcomputeorgcomnetedugovbiznameinfocognito-idpeusc-de-east-1onjelasticnxaspdnsbarsydirectwpdeuxfleurstransurldogadoprvwcloudnsamazonwebservicesdnshomeuserpartycokoobinmkmstorjfidemopaasdymyspreadshopalandkapsiikixn--hkkinen-5wacloudplatformdatacenterh\xE4kkinen123kotisivuidacorgmilcompronetedugovbiznameinforadioorgcomneteduuserexperts-comptablestmmyspreadshopgretaprdcomnomynhccifbxoshuissier-justicenotairesaeroportfreeboxoson-webavocatassoportgouvkdnschirurgiens-dentistes-en-franceavouesfbx-os123sitewebveterinairechirurgiens-dentistespharmacienchambagrimedecinfreebox-osdediboxgoupilemszicpyicpvicppleysheezypagesedugovcnpyorgcomcybllcpvtnetedugovtnxonlineschooldaemond6atcopanelorgnetplybotdashstackitkaasorgmilcomnetedugovbizmodltdorgcomedugovcoorgcomneteduappwriteacorgcomnetedugovcloudtranslateusercontentorgcomnetedumobiassoorgcomnetedugovbarsysimplesitediscourseindorgmilcomgobneteduorgcomwebnetedugovguaminfonxhra\u6559\u80B2\u654E\u80B2\u7DB2\u7D61\u7F51\u7D61\u7EC4\u7E54\u7D44\u7E54\u7F51\u7EDC\u7DB2\u7EDC\u7EC4\u7EC7\u7D44\u7EC7\u516C\u53F8\u653F\u5E9C\u500B\u4EBA\u4E2A\u4EBA\u7B87\u4EBAltdorgcomincneteduidvgovxn--uc0ay4axn--55qx5dxn--mk0axixn--io0a7ixn--uc0atvxn--zf0avxxn--lcvr32dxn--od0algxn--wcvs22dxn--gmqw5axn--od0aq3bxn--mxtq1mxn--ciqpnxn--tn0agxn--gmq050iorgmilcomgobneteduiservwp2tempurlmircloudfreesitewpmudevmyfastgadgetcloudaccessjelehalfboltfastvpsemergenteasypanelopencraftizcombrendlynamefromrtpersoadultmedorgpolrelcomproartnetedufirminfoassoshopcoopgouvtmcomediahotelforumvideosportorgsexagrargameslakaseroticaerotikatozsdereklamcasino2000filmsuliinfoboltshopprivnewsszexcityutazasjogaszkonyveloingatlaneacaicogoormy\u1B29\u1B2E\u1B36milwebschnetkopbizzonedesaponpesxn--9tfkymyspreadshopgovmytabittabitorderravpageaccok12idforgnetgovmuniltdplcaccotttvorgcomnetmeca6g5gpgamubacaicniocoukuptverdruscsdelhiindorgmilcomwebnicfingenpronetintedugovresbizbiharbarsyinternetbusinessschooltravelsupabasealumnigujaratfirminfoaeropostbankcoopindevscloudnsno-ipbarsybarrell-of-knowledgebarrel-of-knowledgensupdategroks-thisdnsupdatefor-ourknowsitalldvrcammittwalddynamic-dnsv-infowebhopselfipdyndnshere-for-moreilovecollegemayfirstforumzcloudnsmittwaldservertypo3servergroks-theeusekd1uk0cdndyndnsidrawsainaueuapjpusstagemocksysdevicesclientcustreservdcustdevdisrecprodtestingcobeebyteutwenteboxfusebravepstmndedynngrokorgmilcomnomhzcnetedugovqcxqzzbarsythingdustmo-siemensrb-hostingprotonetfh-muenstergitbookbluebitecloudbeesusercontentnodeartkiloappsforgerockdarklangresinstagingapigeebubbleb-datascryptedhypernodedappnodepantheonsitegitlabgithubkeeneticvirtualservercleverappshostyhostingon-rioedugitticketstelebiton-acornwixstudioon-k3sicp0icp12038jeleqotobigvlairbubbleappsmyaddrstolosmyrdbxwebflowdrive-platformbeagleboardhasura-applolipopdefinimavaporcloudmusicianwebflowtestazurecontainerresindevicereadthedocsloginlineeditorxmoonscalesandcatsbasicserverwebthingsbrowsersafetymarkbeebyteappbitbucketidaccovistablogorgschnetgovxn--mgba3a4f16axn--mgba3a4fraarvanedge\u0627\u064A\u0631\u0627\u0646\u0627\u06CC\u0631\u0627\u0646jclaspeziapdudcefegelemeperetevebacanatavaparasabgagfgogrgpgalclblimfmrmcbmbvbfclcmcvcrcpcchlimifibicivipirisimncnbnanenrnpntnnolomobocoaogorosopotoptvtatctbtmtltotpulunutpspapaqsvpvvvtvavvrtrsrprgrfrcrbrarorkrvstsssbscsmsispzczbzbozen-suedtirolmyspreadshopxn--bulsan-sdtirol-nsbxn--valledaoste-ebbtrentinoaltoadigetrentin-sued-tirolxn--forlcesena-c8axn--forl-cesena-fcbxn--bozen-sdtirol-2obtriestetrentinsuedtiroltrentino-s-tirollecceudineaostesienaparmaluccapaviagenoapaduaaostamonzaabruzzoternirietiturinmilanbozenlaziofermoleccocuneonuoropratola-speziavdataaligfvgpugmolcalcamlomumbsicpmnvenvaoedugovabrsarmaremrbastoslazibxosfirenzetrentinos\xFCdtirolval-d-aostavalle-aostamessinacremonaravennatoscanatrentin-suedtirolbolognacalabriaurbinopesarofriuli-v-giuliaogliastraxn--valle-aoste-ebblaquilaandriatranibarlettasyncloudtrentinosudtirolxn--valle-d-aoste-ehbaostavalleyvalled-aostatrentino-alto-adigevallee-d-aostexn--balsan-sdtirol-nsbpistoiasicilialucaniacataniaiserniaperugiabresciaveneziagorizialiguriaimperiabulsan-suedtirolbalsan-suedtirolbarlettatraniandriaxn--trentino-sdtirol-szbforl\xEC-cesenatuscanyvall\xE9e-d-aostemantovavall\xE9e-aostecasertapiemontevalleaostaval-daostafriulivgiuliatrevisoforli-cesenavall\xE9edaosteferrarapescaravald-aostatrentino-altoadigefriuli-vegiuliavallee-aostecarboniaiglesiastarantomediocampidanovalleedaostetrentinosud-tirolcampobassotrentins\xFCd-tiroltrentinos\xFCd-tirolmonzabrianzatrentino-s\xFCdtirolxn--trentino-sd-tirol-c3bpotenzacosenzavicenzaemiliaromagnavenicefrosinonemarchepordenonetrentinosued-tirolvaresemolisevall\xE9eaostefriuli-veneziagiuliabasilicatalatinaanconasavonaveronamodenaaquilabiellabolzano-altoadigepugliafoggiaumbriatrentino-stirolgenovapadovamateranovararagusapiacenzatrentinostirolvalleeaostetempio-olbiatrentinsudtirolmassa-carrarafriuliveneziagiuliatrentinosuedtirolandria-barletta-tranitrapanixn--cesenaforl-i8amaceratacaltanissettaascoli-picenobrindisicarraramassacagliaririmininapolivibo-valentiachietibulsan-sudtirolbalsan-sudtiroltrentino-a-adigebulsanbalsaniglesiascarboniamilanotorinoteramodell-ogliastraarezzotrentinoalto-adigerovigotrentovenetoiglesias-carboniatrentino-sud-tirolaltoadigereggio-emiliareggio-calabriasardegnatranibarlettaandriapiedmontxn--sdtirol-n2amedio-campidanotrentino-s\xFCd-tirolfriuli-vgiuliafriuli-ve-giuliaromeennaromapisa32-b16-b64-blodiastibarineencomonaplesforlicesenailiadboxosalessandriasicilytrani-barletta-andriaxn--trentin-sdtirol-7vbpesarourbinotrentinsued-tirolcesena-forliforl\xECcesenaemilia-romagnamonzaebrianzaxn--trentinsdtirol-nsbtrentinos-tiroltrentins\xFCdtirolvalledaostaolbia-tempiocampidanomediovibovalentiasassarivalle-daostalombardyfriulivegiuliareggioemiliamonzaedellabrianzaalto-adigevercellitrentin-sudtiroltraniandriabarlettatrentino-sudtirolascolipicenobozen-s\xFCdtirolfriulive-giuliaflorencevaldaostaxn--cesena-forl-mcbcarbonia-iglesiasaosta-valleycarrara-massadellogliastratrentinoa-adigexn--valleaoste-e7apesaro-urbinoxn--trentinosdtirol-7vbxn--trentin-sd-tirol-rzbxn--trentinsd-tirol-6vbtrani-andria-barlettatrentin-s\xFCd-tirolxn--trentinosd-tirol-rzbgrossetomonza-e-della-brianzas\xFCdtirolreggiocalabriatrentinoaadigetrentin-s\xFCdtirolfriuliv-giuliaverbaniacampaniatrentino-aadigefriulivenezia-giuliasardiniaandriabarlettatranibarletta-trani-andriacatanzarooristanourbino-pesarocesena-forl\xECvalle-d-aostacampidano-medio123homepagesiracusatempioolbiasuedtirollombardiaavellinocesenaforl\xECtrentinofriuli-venezia-giuliabozen-sudtirolandria-trani-barlettabulsan-s\xFCdtirolbalsan-s\xFCdtirolmonza-brianzabolzanotrentino-sued-tirolbellunosalernolivornocrotonesondriodnshometrentinsud-tirolmassacarraratrentin-sud-tiroltrentino-suedtirolviterbobergamocesenaforliolbiatempiopalermobeneventoagrigentoofcoorgnetfmaitvphdengorgmilcomschnetedugovperagrikanieasukehandachitatokaiaisaikonanoharuamaobuhigashiuraowariasahiinuyamatobishimaiwakurashitarainazawatoyonegamagorimihamatoyotataharakariyayatomioguchikomakimiyoshinishiotokonamekiyosuchiryutoyohashiokazakiisshikikasugaikotakiratoeianjotogofusosetohazutsushimashinshirotakahamanisshinshikatsuhekinantoyokawaichinomiyatoyoakeodateogataakitaikawakyowahonjoogayurihonjonoshirokamiokakatagamimitanegojomeyokotekosakadaisenkazunonikahohonjyomoriyoshimisatohappoukamikoanihachirogatahigashinarusesembokufujisatokitaakitaitayanagiowanitakkomutsutsurutahirosakigonoheoirasetowadamisawanohejiaomorishingohiranairokunohehashikamitsugarushichinohehachinohenakadomarisannohekuroishisakaeisumiasahiotakiinzaiabikomatsudoyachiyomutsuzawakujukuriomigawakashiwatoganemihamanaritasakuranagaramobarahanamigawachoshishiroichoseikozakishisuikatorimidorichonankyonanfuttsuonjukufunabashinagareyamanodasosatakochuotohnoshourayasukimitsuyokaichibayotsukaidosodegauratateyamakamagayayokoshibahikariyachimatakatsuuratomisatokisarazukamogawaichikawanarashinoichinomiyashimofusaminamibososhirakoichiharaoamishirasatoikatahonaiainansaijoseiyoiyoozuuwajimaniihamanamikatamasakiuchikokihokutobetoonshikokuchuomatsuyamaimabarikamijimakumakogenyawatahamamatsunosabaeikedaobamasakaifukuiohionotsurugamihamawakasaminamiechizeneiheijikatsuyamatakahamaechizensoedaukihaomutaokawanishiogoribuzenonojosueumiokiotochikugosasagurisaigawamizumakishinyoshitomikurumekurateyamadakasuganakamamiyamanogatatakatahakataiizukakawaratagawakasuyaashiyainatsukimunakataminamitsuikishonaikurogifukuchikeisenhigashimiyakoshinguyukuhashiokagakiyamekogaongausuikahotohochuotoyotsumiyawakadazaifuhisayamatachiaraiyanagawanakagawahirokawachikujochikushinochikuhochikuzennamieotamaokumashowateneiiwakikoorinangoononishigoshimogoomotegomishimafukushimaasakawakagamiishishirakawaiitatefutabahiratayugawahanawakitakatakawamatakunimiyabukibandaihigashihironoyamatomiharuyamatsuriaizubangedatesomaaizuwakamatsuyanaizuaizumisatonishiaizuizumizakikitashiobarataishinkaneyamakoriyamainawashirotanagurafurudonosamegawasukagawaishikawatamakawaikedaogakitaruiginanenahashimahichisonakatsugawaibigawashirakawamizunamiminokamomitakekawauesekigaharatomikasakahogikitagatayamagatatajimianpachimotosuyaotsukakamigaharahidakanisekitokigujominogodoyorogifukasamatsutakayamawanouchihigashishirakawakasaharashimonitatsumagoichiyodakannakanrashowameiwakiryuotaoratomiokafujiokaitakuranaganoharahigashiagatsumatakasakishibukawaminakamikatashinatsukiyonokawabanumataannakaoizumimidorishintoisesakiuenoyoshiokakusatsutakayamanakanojonanmokutamamuratatebayashimaebashiotakekaitadaiwahongofuchukuietajimashobaramiharahatsukaichihigashihiroshimamiyoshikumanokurenakasakaseraseranishiasaminamifukuyamashinichionomichiosakikamijimajinsekikogentakeharaotobenanaeikedatohmaozoraobiraabirakyowaeniwataikibibaisharirebunerimohiroooketootarupippunishiokoppechitosefurubirahakodateshiranukakitahiroshimakushiroobihironanporoiwamizawaniikappukunneppufukushimanakasatsunaitoyourakuromatsunaiakabirakamisunagawashibechaurakawakamifuranonakatombetsuasahikawashimokawakayabeokoppebiratoriabashirisaromaatsumanumatahidakabifukamukawamikasahorokanaitoyotomisarufutsuhigashikawaishikarikitamiyoichiesashiiwanaitomariminamifuranoakkeshifuranotoyakoyakumootoineppushikaoishiraoinemuronayorohaboroashorobihororishirifujiutashinaihokutotakasuebetsuurausuassabukikonaishimamakinaiedatetoyabieinikiesanuryuoumuteshikagarikubetsuashibetsukimobetsuaibetsutobetsusobetsuembetsushimizuchippubetsurishirihokuryuhoronobeshintokutsubetsushibetsuhonbetsumombetsutsukigatakuriyamakoshimizushiriuchikutchanmurorannoboribetsukamishihorowassamushinshinotsukembuchiwakkanaikamoenaikiyosatotakinoueshikabesunagawafukagawanakagawatakikawakamikawahigashikagurahamatonbetsumatsumaemoseushirankoshishakotanimakanemashikeotofuketomakomaisandatambaitamiawajikasaiasagoshisoonoakoyashirotoyookaminamiawajiinagawafukusakitakasagokamigorikasugaharimayokawaashiyahimejiakashitaishiaogakisannantakinosumototakarazukanishinomiyashingugoshikinishiwakiyokatakaaioimikisayoyabukawanishiamagasakisasayamashinonsenkakogawaichikawakamikawatatsunotsukubaiwamaogawaasahisakaitokaioaraiitakobandodaigosuifuinaamikasumigaurakashimaomitamayachiyoshimodatetomobetoridehitachinakainashikisakuragawakasamayawaramoriyahitachiomiyanamegatayamagatahitachikamisuushikutakahagiibarakitonekoganakasowayukimihojosomitoryugasakishimotsumafujishirotsuchiurachikuseihitachiotashirosatotamatsukuriuchiharashikahakuinanaotsubatawajimakahokukawakitatsurugikaganominotosuzuuchinadakomatsuanamizunakanotohakusannonoichikanazawaiwateshiwafudaikawaimoriokaofunatohanamakikuzumakikitakamininohekunoheyamadayahabasumitaichinosekitanohatahiraizumirikuzentakatajobojiotsuchihironomiyakoiwaizumikarumaiichinohenodakujitonooshushizukuishifujisawamizusawakamaishikanegasakimannoutazukotohiraayagawazentsujihigashikagawauchinomikanonjisanukimarugamemitoyotakamatsutadotsunaoshimatonoshoakuneamamiizumihiokiyusuikinkoisasookouyamanakatanekagoshimakanoyaisenkawanabeminamitanemakurazakitarumizunishinoomotematsumotosatsumasendaioimatsudaayaseebinamiurazushinakaiodawaraiseharasagamiharahakoneaikawakaiseiatsugitsukuihadanoyamatoyamakitazamaoisochigasakininomiyayokosukakamakuraminamiashigarafujisawasamukawakiyokawahiratsukayugawaraokawaumajikochitsunootoyoakiinonishitosayasudahidakamiharasakawaniyodogawahigashitsunokagamigeiseisusakiotsukinaharisukumomurototosakamiochitoyotosashimizumotoyamanankokunakamurakitagawayusuharaogunichoyoukiasoutoozugyokutoamakusamifunetakamoriyamagaminamataminamiogunikikuchisumotoyamatonagasumashikiaraokumamotokamiamakusanishiharayatsushiroayabeseikasakyoideineujinakagyokameokakyotangokyotanabekyotambaminamiyamashiroyamashinatanabeyawatawazukaminaminantanmiyazuhigashiyamafukuchiyamakitamukokamojoyokizumaizuruujitawaraoyamazakinagaokakyokumiyamakawagoeinabeshimameiwaasahitaikiudonoisetsukisosakikuwanamihamamiyamasuzukatamakimisuginabarikumanokomonominamiisewataraitobakiwatakikihotadomatsusakayokkaichikameyamaureshinoishinomakishichikashukuohirataiwaosakizaohigashimatsushimashikamaiwanumashibataogawaraonagawakawasakiseminemarumoriminamisanrikukakudamuratawakuyatomiyanatoriwataritagajomisatotomekamirifushiroishimatsushimayamamotoshiogamafurukawahyugaebinotsunosaitoayakushimanobeokakitauramiyazakitakazakigokaseshiibamimatashintomikunitomikitakatakobayashikawaminamitakaharukijotakanabemiyakonojonishimeranichinankitagawakadogawamorotsukakisofukushimaminamimakisakaeobuseikedaogawamiasaokayaasahiotakiotarichinoinaomichikumakomaganechikuhokukaruizawayasuokaooshikaikusakaminamiaikitogakushimatsukawakawakamitateshinatakamorikitaaikishiojirimiyadahakubaiizunaiijimaiiyamamiyotasuzakayasakatoguraookuwanagawaminowahirayayamagataminamiminowafujimiomachisakakitakaginaganonakanosakuhokomoronagisoshinanomachiwadauedaiidaharasuwatomiachiaokianankisosakunozawaonsenagematsutakayamashimosuwamatsumotoyamanouchinakagawamochizukiazuminotatsunoobamaomuraseihiunzenosetofutsuikichijiwanagasakiisahayahasamisaikaikawatanasasebohiradokuchinotsugototogitsutsushimashimabarashinkamigotomatsuurayamazoekashibaikomakawaitenrioyodosangokoryoudaojiikarugayamatokoriyamatenkawakatsuragikurotakikawakamimiyakemitsuetakatorikamikitayamayamatotakadahegurishinjokanmakisakuraitawaramotogoseoudanarasoniandokawanishishimoichihigashiyoshinokashiharashimokitayamanosegawayoshinomintsivorytopazsakuragehirnsumomoaseinetopalmail-boxmokurenyoitamuikaojiyagosensanjoaganomyokoseiroagaomishibataniigatanagaokamurakamiuonumayuzawakariwatagamitainaitsunanminamiuonumatochioyahikojoetsuseiroukamosadoizumozakitokamachiitoigawasekikawakashiwazakitsubamemitsukekokonoesaikiusukibeppuusahimeshimakunisakihasamataketatsukumihitaoitahijikusuyufukujukamitsuebungoonobungotakadaibaraniimibizentsuyamaokayamakasaokahayashimayakagemaniwaakaiwamisakishinjotamanotakahashikibichuowakesojanagishookumenannishiawakurakurashikiasakuchisetouchikagaminosatoshotomigusukunakagusukuyaeseizenaurumaiheyaaguniogiminanjokinminamidaitokitanakagusukuyonaguniokinawaishigakikunigamiurasoekadenataramahiraraginozataketomishimojizamamitonakiitomanhigashimotobuyonabarugushikamionnanahanagohaebarukumejimakitadaitonakijinnishiharayomitanginowantokashikiishikawaikedasuitaminohizuminishisakaikananabenodaitoosakasayamayaokishiwadatadaokakaizukatondabayashichihayaakasakakumatorikadomasayamahigashiosakashijonawatehirakatataishimisakitajirihannansennankatanotoyonominatosettsuhigashiyodogawaibarakinosekitachuohigashisumiyoshifujiiderakashiwaraizumiotsutoyonakamatsubaramoriguchiizumisanoshimamototakatsukineyagawahabikinotakaishikawachinaganoyoshinogarikamiminearitaouchiimarihizenogikashimaariakekiyamafukudomikitagatakitahataomachigenkaikanzakinishiaritakyuragisagataratosutakushiroishikaratsuhamatamakouhokukawagoeyoshidasatteogoseirumaasakaurawaogawaniizaomiyayoriiotakishikihonjooganohannohanyuinasaitamaokegawaarakawayoshikawayokozehasudasayamahidakafukayachichibuiwatsukiryokamiyoshimikamiizumifujimiwarabiranzanmiyoshiminanoyashiosakadosugitomisatohigashichichibutodasokakukiyonokazoshiraokakasukabekounosukawajimatsurugashimamiyashirokitamotohatoyamamoroyamahatogayakumagayakawaguchinagatorokamisatomatsubushinamegawatokigawakamikawafujiminohigashimatsuyamakoshigayatokorozawas3isk01isk02ryuohkoseikonanaishorittotakashimamaibarahikonetorahimenishiazaikokagamokotoyasuotsukusatsunagahamamoriyamatoyosatotakatsukinotogawaomihachimanhigashiomiakagiunnanizumogotsuamayatsukakakinokimatsuehamadamasudahikawahikimiokuizumoyasugiyakumomisatotamayuohdahigashiizumookinoshimanishinoshimatsuwanoshimaneshimadafujiedayoshidashimodagotembaiwataatamikosaiyaizuitoizumishimahaibaramakinoharaomaezakikawanehonkannamisusonohigashiizufukuroinumazukawazufujiaraishizuokahamamatsushimizuizunokunimatsuzakimorimachiminamiizunishiizukikugawakakegawafujikawafujinomiyaujiietsugaoyamayaitaohiranikkoashikagakuroisokanumasakurashioyakarasuyamamotegiichikaikaminokawatochigihagamokanogisanobatonasumibunasushiobaranishikatautsunomiyaiwafunemashikoshimotsukeohtawaratakanezawaitanokomatsushimatokushimaichibaminamiaizumiwajikikainanmiyoshinarutomimamugiananmatsushigesanagochishishikuinakagawamachidachiyodakomaefussainagitaitochofufuchuomeotahigashiyamatotoshimaokutamaaogashimakodairaedogawaarakawahachiojishinagawatachikawashibuyasuginamihinodekiyosesumidaoshimanerimamitakahamuraadachinakanomizuhobunkyomegurominatokoganeihigashikurumekokubunjihigashimurayamamusashimurayamatamakitahinochuokotokatsushikakouzushimaogasawaraakishimakunitachishinjukusetagayamusashinohachijoitabashiakirunohinoharachizunanbukotouramisasawakasayonagokogehinoyazutottorinichinansakaiminatokawaharaoyabetairainamiasahinantoimizufuchutakaokakurobeyamadajohanatoyamatonaminyuzenfunahashinakaniikawanamerikawaunazukitogahimiuozufukumitsutateyamakamiichiiwadearidayuasainamitaijikatsuragiaridagawatanabemihamahidakakainankiminomisatoshingushirahamakamitondayurakozakoyagobokitayamawakayamakudoyamahashimotokushimotokozagawahirogawakinokawanachikatsuurarsuseroeoishidasagaeoguniasahinagaitendonanyoobanazawanishikawasakataohkuratozawamikawamamurogawayamagatafunagatatakahatashonaishinjokahokuiideyuzakawanishitsuruokakaminoyamayamanobeshiratakamurayamanakayamakaneyamahigashineyonezawasakegawamitouubeyuuabushimonosekitabuseoshimatoyotaiwakunihikarishunannagatohagihofukudamatsutokuyamashowadoshitsurunanbukoshukaiminami-alpsnirasakikosugeotsukioshinohokutominobuyamanashifuefukichuokofuichikawamisatoyamanakakonakamichitabayamanishikatsuranarusawafujikawahayakawafujiyoshidafujikawaguchikouenohara\u9577\u91CE\u4EAC\u90FD\u5C90\u961C\u5927\u962A\u4E09\u91CD\u7FA4\u99AC\u5343\u8449\u6ECB\u8CC0\u4F50\u8CC0\u5948\u826Fadednelgaccogogror\u79CB\u7530\u611B\u77E5\u9AD8\u77E5\u57FC\u7389\u6C96\u7E04\u6803\u6728\u718A\u672C\u5CA9\u624B\u9752\u68EE\u5C71\u68A8\u65B0\u6F5F\u5CF6\u6839\u9CE5\u53D6\u9577\u5D0E\u9999\u5DDD\u5BAE\u57CE\u77F3\u5DDD\u5927\u5206\u5BAE\u5D0E\u8328\u57CE\u5C71\u53E3\u5175\u5EAB\u5C71\u5F62\u5FB3\u5CF6\u5E83\u5CF6\u798F\u5CF6\u798F\u5CA1\u5CA1\u5C71\u5BCC\u5C71\u9759\u5CA1\u611B\u5A9B\u798F\u4E95\u6771\u4EACxn--4it168dhatenadiaryxn--vgu402ckawaiishophatenablogcocottenamaste\u5317\u6D77\u9053penneehimeiwateversestabachibashigagonnagunmapermahaccaakitaosakauh-ohblushkochiaichifukuikuroncapooitigohyogotokyokyotopunyuthickcheap0t00g00j0mie2-ddaapyawjg0amfemsubxiiboomoobutchueekpgwrgrherskrboyrdyupperunderflierchipsmydnsheavyangryhippygirlyrulez\u795E\u5948\u5DDD\u9E7F\u5150\u5CF6\u548C\u6B4C\u5C71bambinaxn--nit225kokayamasaitamaxn--k7yn95exn--1lqs03nsapporoparasitelolipopmcxn--efvn9sniigatafukuokatokushimafukushimahiroshimakagoshimafakefurokinawaxn--8pvr4ucoolblogxn--0trq7p7nnkawasakinagasakimiyazakichilloutxn--8ltr62kxn--klty5xpeeweezombiecutegirlxn--rny31hxn--uuwu58axn--ntso0iqx3axn--djrs72d6uytoyamanikitanyantakagawamimozanagoyaboyfriendxn--2m4a15egreaterchowderegoismyamagatafashionstorexn--elqq16hxn--pssu33lsendaimiyagixn--rht27zpecoriaomorisaloonwatsonvivianxn--djty4knobushipigboatnaganopinokoxn--f6qx53asadistvelvetsecretxn--5js045dchicappayamanashiibarakidigickgirlfriendxn--1lqs71dmongolianxn--c3s14mxn--qqqt11mtochigixn--5rtq34kparallelo0o0mondkobesagabonadecaoitanarafoolkilldecimainhiholomosblokilociaoundopupugifutankcrapflopnooroopsmodsholyjeezstripperpepperbittershizuokaxn--rht3dkitakyushureadymadeicurusversusmatrixxn--rht61ehungryfloppygloomycrankyhandcraftedlittlestarxn--klt787dxn--kltx9awhitesnowsunnydaytottorilovepoptheshopbuyshopxn--5rtp49cxn--d5qv7z876cwebaccelxn--kbrq7oxn--4pvxsxn--1ctwolovesickkumamotocatfoodxn--tor131oyokohamawakayamatonkotsuxn--ehqz56nxn--uist22hxn--6btw5axn--kltp7dyamaguchifrenchkisspussycatxn--4it797kxn--uisz3gbabybluexn--zbx025dnetgamersxn--7t0a264ckanagawaxn--6orx2rishikawaxn--ntsq17ghalfmoonschoolbusjellybeanxn--mkru45iusercontentlolitapunkxn--32vp30hsakurastoragehokkaidoshimanecandypopbabymilksupersaleweblikeraindropbackdropwebsozaikikirarahateblodaynightmeneacsccogoormobiinfoaeusxxorgmilcomnetedugovorgcomnetedugovbizinfotmprdorgmilcomnomedugovassnotairespresseassocoopgouvveterinairemedecinpharmaciensorgnetedugovtraorgcomedurepgovmeneperekgacscaiiocogoitoresmshsseoulbusanulsandaeguc01milvkimmvchungnamjeonnamjeonbukeliv-dnsgyeonggijejueliv-cdnincheondaejeongangwongyeongbukgwangjuchungbukgyeongnameliv-apicoeduindorgcomembnetedugovorgmilcomnetedugovjcloudorgcomnetintedugovperbnrinfocooyorgcomnetedugovipfscanvamypepw3sstorachakeeneticjoinmcinbrowserdwebcyonnftstoragemyfritzaemewphlxachotelltdorgcomwebsocschngonetintedugrpgovassnomgacsccoorgnetedugovbizinfo123websiteidorgmilcomasnnetedugovconfidmedorgcomplcschnetedugovaccoorgnetgovpresstmassoirseproxaccosoundcasthoptocraftvp4c66orgnetedugovitsmcdirmyboxbarsyedgestacksynologylogintonohostwebhopdiskstationi234tcp4hoocgroknoipprivmydsddnsdnsforlohmustransipdscloudfilegear-sgbrasiliafilegearframerbarsybarsyonlinecoprdorgmilcomnomedugovinforgcomnetedugovnameacprorgcomartnetedugovpresseinfoassoinstgouvorgnycedugovbarsydscloudjuorgcomnetedugovminisiteaccoororgcomnetgovorgmilcompronetintedugovbizmuseumnameinfoaerocoopaccoorgcomnetintedugovbizcooporgcomgobneteduorgmilcomnetedugovbiznameaccoorgmilneteduadvgovcoorgcomnetaltgovforgotherhiskeeneticispmanagernomassoprod5476132eastasiacentraluswesteuropewestus2eastus2rucdnwest1-usfra1-desandboxjls-sto1jls-sto3jls-sto2aglobalabglobalsslmapprodfreetlsmaplon-1lon-2ny-1fr-1sg-1ny-2paassnwebpaashostingjelasticnordeste-idcsocuserpagescwebfileblobservicebuscoreatlricnjsjelasticwebsitestoragesezagbinruhuukjptsmyspreadshopmynetnameakamaiorigin-stagingfrom-coipv64dynv6cdn77serveblogadobeaemcloudhicamsprytdnsupno-ipownipde5ovhicpfirewall-gatewaysytesmypsxbarsyusgovcloudapimyamazemyradwebakamaihdsaveincloudfastlylbfrom-lasubsc-paysquare7in-the-bandblackbaudcdnhomelinuxoninfernoctfcloudservebbsdns-dynamiccloudfrontakamai-stagingipifonyham-radio-opsenseeringclickrisingcommunity-profrom-nylocalcertgrafana-devedgesuite-stagingcloudflareanycasteating-organicatlassian-devmydattofeste-iplocaltotorprojectknx-serveredgekeycloudflareglobalcloudyclustercasacamserveftpakamaized-stagingakamaiorigindns-cloudmyeffectboomlabotdashbuyshousestwmailhetemlazure-mobilein-dslthruhereredirectmedynuddnsbouncemesupabaseluyanicloudappakamaicloudfunctionsdebiannhlfanpgafanstatic-accessin-vpnmysynologymafeloappudohomeftptrafficmanagersiteleafseidatmemsetcloudflarecloudaccesskeyword-onazure-apiis-a-chefdoes-itgets-itwebhopselfiphomeipkicks-assedgesuitewindowsserver-ontunnelmolemydissentscrapper-sitecloudflarecnuni5srcfggffiobbzabcdenodynuopikddnsvpndnsakadnselastxkinghostvps-hostfastlyhomeunixazureedgeshopselectdontexistmyfritzcloudjiffyalwaysdatasells-itsquaresbroke-itazurefddattolocalat-band-campmeinforumfamilydsazurestaticappsdefinimabplaceddnsaliasdynaliasnow-dnsblogdnsroutingthecloudendofinternetdsmynasakamaiedgemymediapcadobeio-staticakamaiedge-stagingakamaihd-stagingddns-ipprivatizehealthinsurancelive-onkrellianschokokeksmassivegridmysecuritycamerarackmazeserveminecraftfrom-azis-a-geekakamaizedmoonscalecryptonomicoffice-on-theusgovtrafficmanageradobeioruntimeedgekey-stagingreserve-onlinechannelsdvrdnsdojousgovcloudappcdn77-sslapps-1and1podzoneazurewebsitesdynathomescaleforceyandexcloudvusercontentisa-geekcdn-edgescoaemalcesappwriteazimuthtlonarvonoticeablestorecomwebrecnetperotherfirminfoartslgdloncogoiltdorgmilcolcomplcschgenngonetedugovbiznamefirmmobiacincoorgmilcomnomwebgobnetintedubizinfocomyspreadshopdemongovtransurl123websitehosting-clusterkhplaycistrongsnesosvalerv\xE5lerxn--vler-qoaossandeheroysandeher\xF8yb\xF8boheroyher\xF8yxn--hery-iraxn--b-5gavalerb\xF8boxn--b-5gasandesandexn--hery-iraxn--vler-qoav\xE5lerh\xE5re\xE5laahavaofsfvfhlolnlalrlhmfmtmahcostntbu\xE5strmreigersundmyspreadshopg\xE1ls\xE1eidsvolltingvollgildeskalflor\xF8vads\xF8vard\xF8vanylvenxn--bhccavuotna-k7astrandaxn--kvnangen-k0axn--sknland-fxaxn--mosjen-eyarakkestadhyllestadnannestadvevelstadvaapstenordre-landsondre-lands\xF8ndre-landtjieltexn--vrggt-xqads\xF8r-aurdalsor-aurdalheradstordmoldefordef\xF8rdeseljefedjeryggehemnexn--krehamn-dxasognegranes\xF8gnebrynetjomevallebykletokkegiskedovretj\xF8mehob\xF8lvoldasaudatolgas\xF8mnaviknad\xF8nnasomnadonnatranafrananesnaraumasmolatr\xE6nafr\xE6nalesjasm\xF8la\xF8rstaorstahitrafloraaukraloppafr\xF8yarissasnasahalsagalsaromsaraisar\xE1isafroyasn\xE5sagronghobolfjelltydal\xE5rdalardalaskimharamkraanghkekr\xE5anghkesorumbarumhurumb\xE6rums\xF8rummodums\xE1l\xE1tb\xE1l\xE1tfrognbjugnv\xE5ganvagangulenskienl\xF8tenlotenstrynvefsnxn--merker-kuaskaunsveiob\xF8mlobomloskj\xE5kvardoflorovadsosalatbalats\xE1latkl\xE6buklabuselbubarduulvikskjakkleppris\xF8rxn--nttery-byaefl\xE5eidflahofmilgolholsellomskifetvikdepvgsfhsaskerrisorhamarasnes\xE5snesr\xF8rosrorosxn--slat-5namasoynaroyvaroyluroydyroyaskoyradoyandoyrodoymeloyrad\xF8yand\xF8yr\xF8d\xF8ymel\xF8yask\xF8ylur\xF8ydyr\xF8ym\xE5s\xF8yv\xE6r\xF8yn\xE6r\xF8yhoylandeth\xF8ylandetdivtasvuodnal\xF8renskoglorenskognesoddtangenxn--tjme-hraxn--smla-hraxn--stjrdal-s1aunjargalillehammerunj\xE1rgaxn--hamary-fyadavvenjargaxn--bearalvhki-y4a123hjemmesidegjerdrumxn--brnnysund-m8acxn--tnsberg-q1axn--mlatvuopmi-s4axn--snsa-roaxn--skierv-utaxn--brum-voatysfjordkvafjordeidfjordkv\xE6fjordsongdalenmjondalenmj\xF8ndalenxn--gls-elackragerog\xE1\u014Bgaviikagangaviikas\xF8rreisasorreisas\xF8r-varangersor-varangerxn--risr-iraskiervaxn--frna-woaxn--trna-woakvinesdalleksvikleirvikr\xF8yrvikroyrviksvelvikvenneslaevje-og-hornnessandnessj\xF8enmarnardalvindafjordsandefjordenebakksnillfjordullensvangxn--trany-yuabr\xF8nn\xF8ysundnamsskoganaustevollxn--stjrdalshalsen-sqbnord-aurdalnord-frontr\xF8gstadtrogstadgrimstadflakstadgjerstadxn--sandy-yuaxn--leagaviika-52bnore-og-uvdalvegarsheixn--rlingen-mxaxn--ggaviika-8ya47hveg\xE5rsheikarlsoykvitsoymasfjordenhamaroyinderoyosteroydavvenj\xE1rgasauheradguovdageaidnuxn--vre-eiker-k8abronnoysiellakkr\xF8dsheradkrodsheradkvinnheradbr\xF8nn\xF8yxn--mtta-vrjjat-k7afxn--lrenskog-54akvits\xF8yv\xE1rgg\xE1tkarls\xF8yoster\xF8yinder\xF8yhamar\xF8ybronnoysundxn--aurskog-hland-jnbbahccavuotnab\xE1hccavuotnagiehtavuoatnastor-elvdalmidtre-gauldalxn--gildeskl-g0akarasjokevenassixn--bievt-0qaxn--yer-znalebesbynessebyxn--hbmer-xqamalselvm\xE5lselvxn--unjrga-rtam\xF8re-og-romsdalmore-og-romsdalhareidmeland\xF8rlandorlandstrand\xE5lg\xE5rdsolundalgardafjord\xE5fjorddielddanuorrikautokeinoxn--stre-toten-zcbskodjeaejriestangeliernebamblestokkefauskesn\xE5asesnaasekongsvingerlangevagberlevagxn--flor-jrahattfjelldalostre-toten\xF8stre-totenvestfoldxn--mely-ira\xE1laheadjualaheadjunordreisaxn--troms-zuaxn--lgrd-poacporsangerflatangerstavangerleikangerbremangersamnangergieldakarasjohkaxn--rdy-0nabfrostautsirasnoasatromsaxn--sr-aurdal-l8aflekkefjordj\xF8lsterjolsteraremarkhedmarkn\xE5\xE5mesjevuemienaamesjevuemiexn--vard-jrarollagmer\xE5kermerakerorskog\xF8rskogxn--bdddj-mrabd\xE1k\u014Boluoktaxn--osyro-wuaaknoluoktatrysilskjerv\xF8ymandaljondalbindalrindalmeldalsuldalorkdalsigdalalvdall\xE6rdalhurdalsirdalverdallerdallardaloppdal\xE5seralaseralhadselkrager\xF8divttasvuotnaoverhallasteinkjerxn--hnefoss-q1askedsmokorsettroms\xF8xn--dyry-iravestre-totenmuseumxn--sandnessjen-ogbrahkkeravjufylkesbiblb\xE1jddarbajddarxn--laheadju-7yarennes\xF8yxn--koluokta-7ya57hxn--hgebostad-g3aleirfjordstorfjordbalsfjordb\xE5tsfjordbatsfjordmuos\xE1tbiev\xE1tloab\xE1tk\xE1r\xE1\u0161johkan\xF8tter\xF8yxn--mjndalen-64anordkappl\xE1hppilahppialstahaugsiljanverranr\xF8ykenroykenhaldenlyngenbergenhortenh\xF8nefosshonefosstroandinbeiarnvarggatosoyroos\xF8yrotromsoidrettmuosatbievatruovatloabatvoagattynsetnessetxn--indery-fyask\xE1nitskanitraholtr\xE5holtxn--ystre-slidre-ujbandebusarpsborgbearduxn--karlsy-fyahordalandjorpelandj\xF8rpelanddeatnuringsakers\xF8r-odalsor-odalxn--slt-elabringerikeaudnedalnittedalnissedalhemsedalslattumsurnadalxn--blt-elabelverumstj\xF8rdalnaustdalhjartdalgj\xF8vikfyresdalhasviknarviklarvikgjovikmalvikgamviklenvikporsgrunnstjordalengerdaldrobakdr\xF8bakxn--msy-ula0hvestvagoyxn--vgan-qoaxn--ryken-vuaxn--lten-graxn--stfold-9xaxn--hpmir-xqaxn--lury-iram\xE1latvuopmimalatvuopmitysv\xE6rkirkenesbirkenesmoskenesb\xE1id\xE1rxn--fjord-lraxn--rdal-poabahcavuotnab\xE1hcavuotnaxn--frde-gralind\xE5sbearalvahkixn--hobl-irar\xE1hkker\xE1vjuxn--loabt-0qav\xE5g\xE5\xE1lt\xE1bod\xF8sundlundrader\xE5deetnetimeholeauregrueoddavagavegaranatanaarnasolasulaaltalekafusavangbergkvam\xE5mliamlibokntinnroangranosenoslobodor\xF8stroststat\xE5motamotivgupriv\xF8yeroyerliermossvossxn--nvuotna-hwalusterlunnermarkerh\xE1bmerhabmerhvalerfjalerxn--rholt-mratysvarbaidarfitjargaularh\xE1pmirhapmirmelhusfosnes\xF8ksnesoksnestysneshemnesevenesflesbergeidsbergtonsbergt\xF8nsberglindasxn--sndre-land-0cbnamsosxn--srum-gra\xF8ystre-slidreoystre-slidrevestre-slidretrondheimbalestrandxn--langevg-jxaaustrheimxn--skjk-soavagsoyaveroysandoykarmoyfinnoytranoyvestbytranbysykkylvenxn--hyanger-q1aspjelkavikandasuoloxn--fl-ziaxn--drbak-wuastathellexn--sr-varanger-ggbtelemarkxn--bhcavuotna-s4axn--porsgu-sta26f\u010D\xE1hcesuolocahcesuoloakrehamn\xE5krehamnsand\xF8ykarm\xF8yfinn\xF8ytran\xF8yv\xE5gs\xF8yaver\xF8ynamdalseidxn--lesund-huabadaddjaxn--vegrshei-c0axn--btsfjord-9zagildesk\xE5lporsanguxn--trgstad-r1an\xE1vuotnanavuotnahammerfestxn--sgne-graxn--brnny-wuacibestadharstadnarviikaeven\xE1\u0161\u0161ivestnesgjemnessandnesagdenesrennesoyxn--avery-yuaxn--tysvr-vrabearalv\xE1hkikongsbergspydebergrandabergxn--andy-iradavvesiidaxn--krdsherad-m8apors\xE1\u014Bgufredrikstadbjerkreimringeburennebuaurskog-holandnotteroyxn--vgsy-qoa0jxn--rmskog-byaskierv\xE1ivelandbyglandfrolandaurlandforsandxn--bjddar-ptamidsund\xE5lesundalesundfetsundfarsundovre-eiker\xF8vre-eikerakershusxn--moreke-juas\xF8rfold\xF8stfoldostfoldsorfoldh\xF8yangerhoyangerlevangerorkangertanangerxn--vestvgy-ixa6olillesandulsteinxn--rennesy-v1agranvinskjervoyxn--klbu-woalavagisxn--h-2faxn--ryrvik-byakafjordk\xE5fjordseljordfolkebiblxn--gjvik-wuajevnakerxn--kfjord-iuabudejjuxn--kranghke-b0axn--davvenjrga-y4axn--rland-uuaxn--ldingen-q1axn--mlselv-iuaxn--rady-iraxn--linds-prabrumunddalxn--ygarden-p1amo-i-ranaeidskogr\xF8mskogromskoghjelmelandxn--finny-yuaxn--sr-odal-q1axn--skjervy-v1aballangenkvanangenkv\xE6nangengratangenxn--hmmrfeasta-s4acvossevangensuohkanxn--rde-ulaxn--mli-tlaxn--ksnes-uuanordlandskanlandsk\xE5nlandsortlandfuoiskuxn--rros-graxn--hcesuolo-7ya35bxn--eveni-0qa01gagaivuotnag\xE1ivuotnaxn--seral-lradrammenmodalenmosjoenjan-mayentorskensteigengloppenxn--snes-poamatta-varjjatxn--sr-fron-q1aomasvuotnajessheimb\xE5d\xE5ddj\xE5xn--krager-gyaxn--kvfjord-nxaxn--asky-iraxn--snase-nraxn--bidr-5nacholt\xE5lenxn--vads-jraxn--jlster-byamosj\xF8enxn--rst-0nastavernxn--ostery-fyaxn--oppegrd-ixaxn--sknit-yqaxn--risa-5naoppeg\xE5rdskiptvetrendalenholtalenxn--mot-tlaxn--lhppi-xqaxn--holtlen-hxaxn--srreisa-q1akopervikxn--muost-0qaxn--bmlo-grahokksundkvalsundegersundxn--karmy-yuaullensakerxn--hylandet-54axn--kvitsy-fyaxn--bod-2nalangev\xE5gberlev\xE5gkristiansandxn--rsta-frahornindalstj\xF8rdalshalsenstjordalshalsensandnessjoenh\xE1mm\xE1rfeastaxn--lrdal-sras\xF8r-fronsor-fronnord-odalkristiansundm\xE1tta-v\xE1rjjatvestv\xE5g\xF8ynesoddennotoddenbuskerud\xF8ygardenoygardensalangenlavangenralingenr\xE6lingenlodingenl\xF8dingenlea\u014Bgaviikalaakesvuemieleangaviikauenorgexn--srfold-byaaskvollxn--rskog-uuaxn--nry-yla5gxn--vry-yla5ghammarfeastaxn--rhkkervju-01afxn--givuotna-8yakommunekrokstadelvanedre-eikerhagebostadh\xE6gebostadxn--berlevg-jxakviteseidxn--s-1faxn--l-1faxn--nmesjevuemie-tcbafuosskomo\xE5rekemoarekexn--lt-liacxn--jrpeland-54asvalbardoppegardholmestrandtvedestrandsogndalsokndalarendalsunndalfolldalxn--krjohka-hwab49jlyngdaletnedalnorddalsaltdalgausdalskedsmovaksdalgjesdalstordalxn--frya-hraaarbortedrangedalxn--smna-graaurskog-h\xF8landxn--vg-yiabtjeldsundhaugesundlindesnesxn--mre-og-romsdal-qqbxn--dnna-gradynmerseineshacknetenterprisecloudmineaccomaorim\u0101oriorgmilcriiwigennetschoolhealthkiwigovtgeekxn--mori-qsacloudnsparliamentcomedorgcompronetedugovmuseumwebsitekinservicebarsywebsitebuildereerobookheimdnsleapcelleero-stagetechcrscsslorigingohomecdbedeeeiemesecabgngilnlalplchfisiincnnoroptatitmtltruauhulumkdkukskjplvtrgrfrkrhrusesismycynzcznetinteduassoososcloudstgbetaaezaeuhkusjshatenadiarycdn77hoptozaptois-a-knightmyftpno-ipjpnddnssdpdnsspdnsbarsysweetpepperis-a-bruinsfanis-very-sweetservegameis-a-soxfanhomelinuxcdn77-secureservebbsmisconfusedwebredirectblogsitefreedesktopcouchpotatofriestoolforgeaccesscamis-lostreadmyblogsmall-webfedorapeopleserveftpis-a-celticsfanmywirepotagertwmailin-dslsellsyourhomeread-booksfreeddnscable-modemis-savednflfanufcfanmlbfanstuff-4-saleendoftheinternetin-vpnmy-firewallhomeftpis-localis-a-chefboldlygoingnowherewebhopselfipkicks-assroxatunkcamdvrfedoraprojectgotdnsdvrdnsdyndnspubtlspimientahomeunixdontexistfedorainfracloudwmflabsfspagesbmoattachmentsteckidsfamilydsdnsaliasdynaliasnow-dnscloudnsdoomdnsduckdnsblogdnshomednsroutingthecloudendofinternetdsmynasip-dynamicpoivronhttpbinmyfirewallis-very-evilmysecuritycamerais-a-linux-userwmcloudis-a-geektuxfamilyis-a-candidatedoesntexistis-very-badhobby-sitegame-hostaltervistais-foundis-a-patsfandnsdojohepforgepodzonedynservcollegefanis-very-goodfrom-meis-very-niceisa-geeknerdpolacmedsldingorgcomnomgobabonetedupleskaemhlxmyboxrockyprvcydeuxfleurspdnscodebergheyflowstatichostorgmilcomnomgobneteduorgcomeduiorgmilcomngonetedugovcloudns1337ngrokacorggogfamcomwebgobnetedugokgopgkpgovgosbizpasaugumicsopozpapuwmwsrprusiskwpspkppspkmpspokeoiawsawifoumsdnskokwpmuppuppsppiwwiwoowuzswkzoschrzpisdnwzmiuwwitdpssewsseumigugimoirmpinbwinbwiihupporzgwgriwupowwskrwioswuozstarostwokonsulattmpccopruszkowmyspreadshopostrodakartuzyopolegminamediaustkazgorajgoraolawailawalomzawloclradombytomjaworznotargilubinkoninzagantorunkutnokepnonakloczestsopotsanokturekplockslasksklepzarowlukowmedaidgdaorgmilrelcomnomatmgsmartneteduelkgovwawsossexbiztgorysejnytychypomorzeboleslawiechomesklepsdscloudunicloudzakopanelegnicarawa-mazbydgoszczswidnikkrasnikwloclawekbielawamragowograjeworealestatebeskidykaszubymalopolskaprzeworskswiebodzinlecznadfirmaszkolawarmiagdyniamiastakazimierz-dolnymalborkswidnicadlugolekaostrolekapodlasieelblagtravelsimplesitezachpomormielecszczecinnieruchomosciwalbrzychlezajsklublinbedzinpoznanwielunmielnooleckostarachowicedkontopowiatwroclawrybniksuwalkileborkslupskgdanskostrowwlkptarnobrzegtourismwegrowkrakowglogowyou2pilanysamailwrocinfoagroautobeepshopprivlapypiszlodzcfolksecommerce-shopmazurypulawyskoczowrzeszowpomorskiezgierzkaliszolkuszlowiczostrowiecsosnowiecmazowszewodzislawbialowiezazgorzeleckatowicepabianicejelenia-gorawolominkarpaczsieradznowarudaczeladzkonskowolaskierniewiceswinoujscieturystykabieszczadycieszynketrzynolsztynbialystokbabia-goraprochowicewarszawastalowa-wolapolkowicegorlicegliwiceponiatowalimanowalubartowaugustowkobierzyceopocznognieznoszczytnokolobrzegshoparenapodhalebielskoklodzkostargardatwithplayitownnamecoorgnetedugovacorgcomproestnetedugovbiznameislaprofinforechtngrokmedaaaacacpaenglawjurbarbarsykeeneticavocatacctcloudnsorgcomsecplonetedugov123paginaweborgcomnetintedugovnomepublidkinbarsygovx443cloudnsorgmilcomnetedugovcooporgmilcomschnetedugovnamecomcannetlibassoaemclantmcontstoreorgcomnomrecwwwbarsyfirminfoshopartsstackitmyddnswebspacelima-cityacincooxorgedugovbarsybrendlyhbvpsvpsspectrumlandinghostingacppmordoviamcprecbgorgmilcomspbnetintedumsknovgovbirrasmcdirmytismircloudvladimirnalchikadygeyamarinepyatigorskmyjinobashkiriaeurodirvladikavkazna4ugroznykustanaikalmykiacldmaildagestaniranbuildcanvaliaravalwixdevelopmentappwritemigrationneedleverceldatabasestackitcodereplravendbonporterlovableaccoorgmilnetgovcoopmedorgcompubschnetedugovservicemecomygovorggovtvmedorgcomnetedugovinfoedgfacbmlonihkutwpsryxzbdtmacfhppmyspreadshopbrandpartiorgcomfhvpress123minsidaitcouldbeworlanbibkommunalforbundfhskiopsyskomvuxkomforbnaturbruksgymnloginlineorgcomnetedugovenscaledeuusentbotdaorgmilcomnetgovnowteleporthashbangplatformlovablebarsyshopwarebasehoplixbarsyonlinemsf5gitappgitpagecofigma-govcaffeinefigmacanvasoltstputerbarsysupportchatgptsquareomniweopensocialcpanelnotionnovecorewpsquaredpreviewjelecyonbyensrhtfastvpspieboxconvexjouwwebheyflowplatformshloginlinemadethissourcecraftclouderaorgorgcomartedugouvunivmeorgcomnetedugovsurveysstatichfheiyuxs4allprojectmyfastubervibehostapp-ionosdeployagentmecoorgcomschnetedugovbizcncostoreorgmilcomneteduembaixadaconsuladokiraranohoprincipesaotomeheliohobarsystorebaseshopwaresellfyabkhaziavologdamordoviapenzalenugsochinavoiexnetspbmsknovnorth-kazakhstanashgabadkareliaarmeniageorgiavladimirnalchikivanovobukharaadygeyakhakassiakalugakrasnodarjambylaktyubinsktroitskbryanskobninskkurganazerbaijanpokrovskbashkiriatselinogradvladikavkazmurmansktulatuvamangyshlaktashkentchimkentgroznykaragandatermezarkhangelskkustanaikalmykiabalashoveast-kazakhstankaracoldagestantogliattibarsyredorgcomgobedumirenknightpointaccoorgjelasticdiscoursecleverappsschacmiincogoornetonlineshopcogoorgmilcomwebnicnetintedugovbiznametestcoorgmilcomnomnetedugovorangecloudpersoindorgcomfinnatnetgovensmincomtourismintlinfox0611oyaorgmilcomnetedugovquickconnectvpnplusnettprequalifymeaddrmyaddrntdllwadlnctvavdrk12orgmilpolbeltelcomwebgennetedutskkepgovbbsbiznameinfocoorgmilcompronetedugovbiznameinfobetter-thanworse-thansakurafromdyndnson-the-webmymailerorgmilurlcomneteduidvgovmydnsgameclubebizmeneacsccogotvorhotelmilmobiinfovodteiflgplkmsmsbcckhincndnvncoztltmkckppzpdprvcvkvlvcrkrkscxuzchernovtsyrivneyaltaodesavolynrovnolutskltdinforgcomnetedugovbizvinnicazhitomirternopilpoltavakropyvnytskyizaporizhzhiasevastopolsebastopoluzhgoroduzhhorodkharkovkharkivvinnytsiakhmelnytskyizaporizhzhecrimeaodessazhytomyrnikolaevcherkassydonetskluganskluhanskkirovogradivano-frankivskchernivtsikrymkievkyivlvivsumyzakarpattiamykolaivcherkasychernigovkhersonchernihivdnipropetrovskdnepropetrovskkhmelnitskiyneacsccogoorusorgmilcomedugovvmdhmyspreadshopadimono-ipbarsybytemarkbarsyonlinelayershiftnh-servretrosnubapicampaignservicelugaffinitylotteryweeklylotteryraffleentrygluglugsmeaccoindependent-inquestnimsitecopropymntltdorgplcschnetgovnhsbarsyindependent-commissionindependent-reviewpolicepublic-inquiryindependent-panelconnhospindependent-inquiryroyal-commissionoraclegovcloudappscck12libccphxcclibpvtparochchtrcck12libcceatonk12coglibtecgendstmusann-arborwashtenawcck12glghcck12sealibforksolympiabainbridge-islkeyporthoquiamyarrow-pointcentraliaport-townsendsequimport-ludlowrentonsilverdalebremertonredmondsheltonbellevueport-orchardport-angeleskingstonchehalisaberdeengig-harborseattlepoulsboidmdndsddemenegacalamaiavawapailalflnmdcncscohnhmihiviwiriinmntnmocoutvtctmtgunjokakwvnvprarorasmskstxwynykyazisadninsnngosrvis-bymircloudservernamepointtoenscaledland-4-salefreeddnsstuff-4-saleazure-apinoipcloudnsgolffanheliohostazurewebsitesgvorgmilcomgubneteducoorgcomnetd0egvorgmilcomnetedugovmydnsiacostoree12orgmilcomnomwebgobbibrectecnetintedugovraremprendefirminfoartseducok12orgcomnethidnsidacaiiosonlahanamhanoicamauhueorgcompronetintedugovbizbacninhtayninhhoabinhnamdinhtravinhhaiphongvinhlonghaiduongquangnamquangtrithuathienhuequangninhbacgianghaugiangquangbinhsoctrangbentrethanhphohochiminhdanangkontumhatinhkhanhhoathanhhoahealthgialailaocaiyenbaibackanngheanlonganphuyenphuthocanthodaklakdongnainameinfovinhphucdongthapkiengiangtiengiangquangngailaichaulangsonlamdongdaknonghagiangangiangcaobangbinhduongninhthuanbinhthuanbaclieuthaibinhninhbinhbinhdinhtuyenquanghungyenbaria-vungtauthainguyendienbienbinhphuocschbizputerimagine-proxyorgcomnetedugovcloud66advisormypetsdyndnsxn--8dbq2axn--4dbgdty6cxn--5dbhl8dxn--hebda8bxn--80auxn--d1atxn--c1avgxn--o1acxn--o1achxn--90azhxn--55qx5dxn--uc0atvxn--od0algxn--wcvs22dxn--gmqw5axn--mxtq1mxn--12c1fe0brxn--h3cuzk1dixn--12co0c3b4evaxn--12cfi8ixb8lxn--o3cyx2axn--m3ch0j3axn--j1adpxn--90amcxn--90a1afxn--h1ahnxn--j1ael8bxn--h1alizxn--c1avgxn--j1aefxn--80aaa0cvacxn--41acaffeineexeopentunnelbotdashtelebitorgtmaccoagricorgmilnomwebnicngonetaltedugovlawnisschoolgrondaraccoorgmilcomschnetedugovbizinfoprg1-zeropstritonstackitlimazeropsaccoorgmilgov\u044F\u0441\u043F\u0431\u043E\u0440\u0433\u043A\u043E\u043C\u043C\u0441\u043A\u0431\u0438\u0437\u043C\u0438\u0440\u0441\u0430\u043C\u0430\u0440\u0430\u043A\u0440\u044B\u043C\u0441\u043E\u0447\u0438\u0430\u043A\u043E\u0434\u043F\u0440\u043E\u0440\u0433\u043E\u0431\u0440\u0443\u043F\u0440\u05E6\u05D4\u05DC\u05DE\u05DE\u05E9\u05DC\u05D9\u05E9\u05D5\u05D1\u05D0\u05E7\u05D3\u05DE\u05D9\u05D4\u0E2D\u0E07\u0E04\u0E4C\u0E01\u0E23\u0E18\u0E38\u0E23\u0E01\u0E34\u0E08\u0E23\u0E31\u0E10\u0E1A\u0E32\u0E25\u0E28\u0E36\u0E01\u0E29\u0E32\u0E17\u0E2B\u0E32\u0E23\u0E40\u0E19\u0E47\u0E15\u6559\u80B2\u7DB2\u7D61\u7D44\u7E54\u516C\u53F8\u653F\u5E9C\u500B\u4EBA\uB2F7\uB137\uD55C\uAD6D\u6FB3\u95E8\u65B0\u95FB\u6FB3\u9580\u8054\u901A\u5BB6\u96FB\u5609\u91CC\u62DB\u8058\u901A\u8CA9\uB2F7\uCEF4\uC0BC\uC131\u30B3\u30E0\u10D2\u10D4\u0431\u0433\u0440\u0444\u0435\u044Eadcdbdgdidmdsdtdaebedeeegeiejekemenepereseveyegabacalamanauavapaqasazacfbfafgfnfpfwftfbgcgagggegkgngmgsgpgvgtgugilmlnlalclglplsltlhmimjmkmmmomambmcmdmfmgmzmpmsmtmgbbblbsbecccacnclcmcvctcscmhkhghchbhthphshlinikifigiaibicivisikninhnmncnbngnsnpnvntnjoionomobocoaofodorosotoptstttytatbtetgtithtmtltrusuvuaucueuguhulumunufjdjbjtjsjlkmkhkfkdkcktkukskpkgpmpnpkpjpgqaqmqiqsvtvcvbvmvlvrwpwtwzwbwcwawgwkwmwtrsrprgrfrercrbrarnrmrlrkrirhrwsusrssspsgsesbsaslsmsissxmxaxcxuypysylymykygybycyuztzsznzmzkzdzczbzaz\u03B5\u03BB\u03B5\u03C5\u4E16\u754C\u53F0\u7063\u8D2D\u7269\u516C\u76CA\u70B9\u770B\u81FA\u7063\u7F51\u7EDC\u66F8\u7C4D\u5728\u7EBF\u7F51\u7AD9\u624B\u673A\u673A\u6784\u5927\u62FF\u6E38\u620F\u4FE1\u606F\u53F0\u6E7E\u8C37\u6B4C\u6148\u5584\u5546\u6807\u9999\u6E2F\u4E2D\u56FD\u9910\u5385\u7F51\u5740\u4E2D\u570B\u5546\u57CE\u98DF\u54C1\u5FAE\u535A\u653F\u52A1\u79FB\u52A8\u96C6\u56E2\u516C\u53F8\u516B\u5366\u5546\u5E97\u5065\u5EB7\u7F51\u5E97\u653F\u5E9C\u65F6\u5C1A\u4F5B\u5C71\u4E2D\u4FE1\u5A31\u4E50\u5E7F\u4E1C\u4F01\u4E1Ahomedepotengineering\u0627\u0645\u0627\u0631\u0627\u062Arepublicankuokgroupversicherungchannelcitadelxn--pgbs0dhxn--b4w605ferdstatebankwebsitexn--mgb9awbf\u4E9A\u9A6C\u900A\u6DE1\u9A6C\u9521alibabaxn--ngbc5azdxn--mgbbh1axn--45br5cyltoshibabuildworldcloudtradeguideplacespacedancemoviephoneprimesmilebiblestyleappleazurestoreskypegripexn--l1accdrivelottehorsehouseleasechasereisestadahondaomegaaetnaamicaninjanokiamediadeltavodkaedekaosakapizzaslingemailgmailtirolshelltmallfinallegaltotalhotelamfamforumrehabmusicciticricohcoachwatchboschearthfaithirishmiamiarchidubaiguccipraxi\u307F\u3093\u306A\u30B9\u30C8\u30A2\u30BB\u30FC\u30EBcanonsalononionnikonepsonkoelngreensevencrownikanoradioaudioweiboglobopromogalloyahoociscorodeovideomangobingotokyovolvolottokyotophotosmartsportquesttrusthyattjetztadultcymrubaidutushuxn--kprw13dubankclickblackmerckgroupsharpcheapnowtvxn--h2brj9c\u05E7\u05D5\u05DD\u0570\u0561\u0575\u043E\u0440\u0433\u0441\u0440\u0431\u043C\u043E\u043D\u043A\u043E\u043C\u0431\u0435\u043B\u043C\u043A\u0434\u049B\u0430\u0437\u0440\u0443\u0441\u0443\u043A\u0440\u0645\u0635\u0631\u0642\u0637\u0631\u0639\u0631\u0628\u0643\u0648\u0645dadcfdmedwedredphdthdbidpidkrdmsdltdiceonewmeglemoerwecfageacbanbambaaaammakianraspacpaaxawtfbcgaegongingaigvigorgdogdhlmilrilonlaolloluoljllcalgalnflafltelsrlfrllplkimibmcamcombommomifmabbjcbscbcabnabtabmlbpubabcbbcnecincpncllcstcwtcpwcnyckfhbzhovhmoiskiobisbitcifyituipinvinwinxincbnbcnmanfangdnmenrenkpnmtnyunrunfununobiojioriohbogmofooboooooacoecoceongoproartistottnttbbtcateatlatvetpetbetnethktmitfitintjothotgotdotbotprueduicujnjyouinknhktdkappsapgapmapdnptopgopllpjmpzipvipripesqtrvdtvitvdevmovgovhivnrwlawsewnewbmwwownowhowdvrftrmtrsfrbarcartvscrseusawsupsubssbsadsddsldssasbmsmlsxxxboxfoxgmxtjxsextaxbuyflydiysoyjoyskypaydaygayxyzanzbizwebersenerpokerlameractortatarsolar\u0EA5\u0EB2\u0EA7\u0E04\u0E2D\u0E21\u0E44\u0E17\u0E22tourslocusnexuslexusgiftsbeatsboatspartspressglassswiss\u0915\u0949\u092E\u0928\u0947\u091Ftiresgivescodeshomesgamestunesshoescardswalesloansvegastoolsdealsautosparis\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3workssucksrocksxeroxforexfedexpartylillymoneystudyrugbytoraytoday\u4E2D\u6587\u7F51xn--unup4y\u5929\u4E3B\u6559\u98DE\u5229\u6D66\u65B0\u52A0\u5761enterprises\u6211\u7231\u4F60\u5609\u91CC\u5927\u9152\u5E97christmasxn--fct429kholdingsxn--8y0a063axn--mgbx4cd0ablifestyleabogadoallstatenetbank\u0643\u0627\u062B\u0648\u0644\u064A\u0643xn--s9brj9cxn--gk3at1ebestbuycharityxn--55qx5dmicrosoftpropertybasketballhomegoodscorsicajewelrygallerygrocerysurgerycountrybrusselsverisignferreroxn--czr694bhdfcbankcommbanksoftbank\u067E\u0627\u0643\u0633\u062A\u0627\u0646\u067E\u0627\u06A9\u0633\u062A\u0627\u0646nextdirect\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0647\u0627\u0644\u0639\u0644\u064A\u0627\u0646xn--h2brj9c8cxn--80adxhksshikshaxn--mgbai9azgqp6jcuisinellabarclayscatholicxn--kpry57dcompanyxn--xhq521bblackfridayxn--mgba3a3ejtsandvikxn--d1acj3bacademydownload\u0645\u0644\u064A\u0633\u064A\u0627xn--j1amhxn--w4r85el8fhu5dnraipirangaathletaxn--fhbeixn--mgbqly7cvafrzuerichxn--c2br7g\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8contractorsxn--io0a7igraphicsinsurancetemasekxn--xkc2al3hye2amotorcyclesphotographydirectoryplumbingxn--vhquvclothingtrainingcleaningwilliamhilllightingxn--mgba3a4f16ashoppingcateringeducationokinawapicturesventuresproductionsxn--9et52uwalmart\u0D2D\u0D3E\u0D30\u0D24\u0D02supportrealestatecapitalonexn--nqv7fs00emaauspostfloristdentistxn--qxamgodaddybradescobargainsmitsubishikerryhotelsxn--9dbq2axn--3pxu8kimmobilienxn--fjq720axn--mgbtx2bholidaymckinseymadridbusinessbuildershelsinkixn--4gbrim\u043C\u043E\u0441\u043A\u0432\u0430\u0627\u0644\u0633\u0639\u0648\u062F\u06CC\u0629coffeedegreelacaixapartnersalsaceofficeabbvievoyageorangegeorgeonlinechromemobilekindlegoogleoraclecircleschulesecureinsurexn--mgba7c0bbn0aestatexn--mgbc0a9azcgcruisehangoutxn--vuq861bxn--42c2d9arexrothfirestoneuniversityxn--nnx388alifeinsuranceextraspace\u043E\u043D\u043B\u0430\u0439\u043Dverm\xF6gensberatersoftwarexn--fiqs8sxn--mgbab2bdxn--w4rs40ltienda\u092D\u093E\u0930\u0924\u092E\u094Dafricatoyotaotsukasakuracameracreditcardnagoyaconsultingnetworkjunipertheatermonsterprogressivepioneerxn--55qw42gracingdatingvotingvikinglivinggivingxn--bck1b9a5dre4cbrotherweatherjoburg\u0641\u0644\u0633\u0637\u064A\u0646lplfinancialxn--clchc0ea0b2g2a9gcdfutbolschoolsocialglobaldentalwoodsidechanelairtelmatteltravelrealtorwebcamstream\u0C2D\u0C3E\u0C30\u0C24\u0C4Dunicomalstomxn--nodexn--6frz82gmuseumfurniturexn--rvc1e0am3exn--mix891faccenturexn--11b4c3dismailineustardiscountquebeccomsecclinicservicesxn--y9a3aqxn--c1avgswatchchurchsearch\u0627\u0644\u0627\u0631\u062F\u0646marketingcontacthealthmonashshoujisanofitaipeiamericanexpresssuzuki\u30A2\u30DE\u30BE\u30F3\u30AF\u30E9\u30A6\u30C9\u30DD\u30A4\u30F3\u30C8bharti\u30B0\u30FC\u30B0\u30EBxn--mgberp4a5d4armemorialxn--1qqw23alondonmormoninstitutevisionbostonnortoncouponmaisonamazonvirginberlindesigndurbanolayannissananquanxihuanhitachikaufengardenreisenbayerntechnologydatsunxn--90a3aclatinocasinostudiophysioxn--ngbe9e0apharmacytattootaobaoaramcoexpertreportabbottdirectselectimamatfairwindspictettargetmarketintuittravelersinsurancecreditdupontryukyusuppliesxn--tckwebnpparibasschmidtmerckmsdyodobashirestaurantbridgestonecricketxn--fpcrj9c3dbostikbroadwayattorneylefrakemerckxn--fiq228c5hscareersfarmerswinnersflowersxn--wgbh1cguitarsxn--54b7fta0ccxn--p1acfmakeupgalluplandroverxn--kcrx77d1x4agoldpointbauhausxn--mgbayh7gpahiphopplaystationxn--mgba3a4fraxn--eckvdtc9dhyundaixn--gckr3f0fistanbulticketsmarketsflightschintaireviewsxn--3e0b707ewindowsxn--fiqz9sfinancialxn--fzys8d69uvgm\u0627\u0628\u0648\u0638\u0628\u064Adiscoverreview\u09AC\u09BE\u0982\u09B2\u09BExn--5su34j936bgsgmoscowobserverapartments\u0434\u0435\u0442\u0438\u0627\u0631\u0627\u0645\u0643\u0648\u0441\u0430\u0439\u0442eurovisionxn--i1b6b1a6a2exn--xkc2dl3a5ee0h\u062A\u0648\u0646\u0633\u0645\u0648\u0642\u0639\u0628\u0627\u0631\u062A\u0680\u0627\u0631\u062A\u0634\u0628\u0643\u0629\u0639\u0645\u0627\u0646\u0628\u064A\u062A\u0643\u0639\u0631\u0627\u0642readkredbondlandbandfundfoodprodgoldfordtubecafesafelifeggeeieeefreefagepagegugezonewinememenamegamesaleablebikenikelikecarecbreherefiresaveloveliveblueartedatesitevotecaseluxebofamodaltdaasdatiaayogasinavanashiaasiajavabbvatevavivadatazaraarpacasavisasncfprofmaifsurfgolfdvagsongbingpingwangkpmggoogblogpohlfailcooldellcalldeallidlsarlfilmteamroomfarmimdbarabclubhdfcicbchsbcgmbhrichtechfishdishcashminiernikddiaudiwikimobitaxicitikiwidesiqponskinloanakdnwienopenporncerntownimmolimoolloinfonicofidolegosaxozeroaerovivoautovotomotofastbestresthostpostnextlgbtchatseatgiftmeetdietreitmintrentgentspotscotguruitausohumenucyoubanklinkpinkdclktalksilkbookseekworkrsvpaarpjeepshopcoophelpcamppccwshowbeerstarruhrflirweirhaircarsparsjprshausplusnewstipstoysjobskidsfanspicsdocsxboxamexsexynavycitysonyarmyallybabyplaydeliverybuzzgbizlamborghiniphilips\u0DBD\u0D82\u0D9A\u0DCF\u0CAD\u0CBE\u0CB0\u0CA4fitnessexpresslanxesspfizercenterwalterlawyersoccercareerkosherbrokerlockerdealerdoctorauthorxn--mgbqly7c0a67fbcverm\xF6gensberatungjaguarxn--pssy2uxn--hxt814eflickrrepairrogersairbusxn--mgbai9a5eva00beventsyachtsxn--t60b56a\u09AD\u09BE\u09F0\u09A4\u09AD\u09BE\u09B0\u09A4\u092D\u093E\u0930\u0924\u092D\u093E\u0930\u094B\u0924viajeshermeshughesxn--j1aef\u0938\u0902\u0917\u0920\u0928villas\u0B2D\u0B3E\u0B30\u0B24claimshotels\u0AAD\u0ABE\u0AB0\u0AA4zapposphotosjuegoscondostatamotorsgratistennis\u0A2D\u0A3E\u0A30\u0A24tkmaxxtjmaxxschaeffleryandexxn--80aswgrealtysafetybeautyluxuryxn--3ds443gsupplyfamilyxn--o3cw4hhockeysydneyxn--90aenissayalipayenergycomputeragencyxn--rovu88b\u96FB\u8A0A\u76C8\u79D1xn--gecrj9cstatefarmaccountantaquarelleolayangroup\u9999\u683C\u91CC\u62C9xn--p1ai\u7EC4\u7EC7\u673A\u6784xn--1ck2e1bxn--mgbt3dhdschwarz\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627abudhabinowruzkomatsufujitsuhospitalxn--80asehdbxn--mgbtf8flxn--j6w193gxn--yfro4i67oprudentialxn--flw351ecruisescoursesrecipesxn--e1a4cferrarixn--ses554gxn--wgbl6awatchesstaplessinglesxn--mgbcpq6gpa1axn--otu796dpropertiescreditunionxn--mgbah1a3hjkrdstockholmhisamitsu\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629stcgroupdomainsoriginscouponsbloombergclubmedfroganslimitedxn--80aqecdr1aexposedinternationalequipmentbarclaycardxn--q7ce6axn--mgbi4ecexpprotectionassociatesconstructionxn--cck2b3bxn--45q11candroidfoundation\u05D9\u05E9\u05E8\u05D0\u05DCxn--mgbca7dzdocliniqueboutiqueengineerxn--qxa6asystemsfirmdalefashionauctionxn--nqv7finfinitirentalsreliancetradingweddingfishinghostinggentingbookingcookingxn--3hcrj9cgraingerxn--czrs0tdemocratsamsungyokohamaxn--h2breg3evexn--nyqy26alundbeckmelbournevacationssolutionsfrontierxn--vermgensberatung-pwbmanagementxn--cg4bkixn--mgb2ddeslincolnhamburgsandvikcoromantblockbusterairforcebarefootxn--4dbrk0ceinvestmentsfeedbackcommunityxn--ngbrx\u0627\u0644\u0628\u062D\u0631\u064A\u0646diamondsamsterdamhealthcareredumbrellaxn--mxtq1mxn--2scrj9cagakhanxn--mgbpl2fh\u043A\u0430\u0442\u043E\u043B\u0438\u043Acaravan\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCDrichardlimortgageamericanfamilyxn--fzc2c9e2cscholarshipssaarlandxn--imr513nvlaanderensamsclubgoodyearkitchen\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBEweatherchannelallfinanzxn--kput3i\u0627\u0644\u0633\u0639\u0648\u062F\u06CC\u06C3xn--90aisxn--efvy88h\u0627\u0644\u062C\u0632\u0627\u0626\u0631xn--mgbaam7a8hexchangejpmorganxn--tiq49xqyjfidelitysecurityxn--mk1bu44cwanggouxn--fiq64bxn--6qq986b3xlxn--mgbbh1a71exn--80ao21amarshallsxn--5tzm5gtravelerspanasoniclatrobeyoutubeaccountantsxn--rhqv96gxn--cckwcxetdanalyticsxn--ygbi2ammx\u0628\u0627\u0632\u0627\u0631\u0628\u06BE\u0627\u0631\u062A\u0633\u0648\u0631\u064A\u0629organicfresenius\u0633\u0648\u0631\u064A\u0627xn--9krt00axn--qcka1pmcxn--jlq480n2rgdeloittesciencefinancexn--jvr189mxn--30rr7yhomesensehotmailbaseballfootballleclercboehringerxn--q9jyb4cxn--mix082f\u0627\u0644\u064A\u0645\u0646\u0647\u0645\u0631\u0627\u0647politie\u0633\u0648\u062F\u0627\u0646\u0627\u064A\u0631\u0627\u0646\u0627\u06CC\u0631\u0627\u0646netflixyamaxunxn--lgbbat1ad8jcollegestoragecapetowncolognekerrypropertiesxn--mgbgu82axn--ogbpf8flxn--czru2dwhoswhociprianilasallexn--g2xx48cforsalebanamexaudiblexn--vermgensberater-ctbxn--zfr164bericssonvanguardxn--45brj9cindustriestheatremarriottxn--3bst00mcomparexn--mgberp4a5d4a87gcapitaldigital\u0627\u0644\u0645\u063A\u0631\u0628barcelonashangrilaxn--d1alfcalvinkleinwwwcitysapporokawasakinagoyasendaikobekitakyushuyokohamackjp";
2906
+ var rulesRoot = 621;
2907
+ var exceptionsRoot = 625;
2908
+
2909
+ // ../../node_modules/.pnpm/tldts@7.4.9/node_modules/tldts/dist/es6/src/suffix-trie.js
2910
+ var numberOfNodes = nodeFlags.length;
2911
+ var numberOfEdges = edgeLength.length;
2912
+ var edgeOffset = new Uint32Array(numberOfEdges);
2913
+ var edgeHash = new Uint32Array(numberOfEdges);
2914
+ var wildcardEdge = new Int32Array(numberOfNodes).fill(-1);
2915
+ for (let node = 0, offset = 0; node < numberOfNodes; node += 1) {
2916
+ for (let edge = edgeStart[node]; edge < edgeStart[node + 1]; edge += 1) {
2917
+ edgeOffset[edge] = offset;
2918
+ const end = offset + edgeLength[edge];
2919
+ let hash = 5381;
2920
+ for (let i = end - 1; i >= offset; i -= 1) {
2921
+ hash = hash * 33 ^ labelText.charCodeAt(i);
2922
+ }
2923
+ edgeHash[edge] = hash >>> 0;
2924
+ if (edgeLength[edge] === 1 && labelText.charCodeAt(offset) === 42) {
2925
+ wildcardEdge[node] = edge;
2926
+ }
2927
+ offset = end;
2928
+ }
2929
+ }
2930
+ var matchNode = -1;
2931
+ var matchStart = 0;
2932
+ var matchEnd = 0;
2933
+ function labelEquals(edge, hostname, start, length) {
2934
+ if (edgeLength[edge] !== length) {
2935
+ return false;
2936
+ }
2937
+ const offset = edgeOffset[edge];
2938
+ for (let i = 0; i < length; i += 1) {
2939
+ if (labelText.charCodeAt(offset + i) !== hostname.charCodeAt(start + i)) {
2940
+ return false;
2941
+ }
2942
+ }
2943
+ return true;
2944
+ }
2945
+ function findEdge(node, hash, hostname, start, length) {
2946
+ let lo = edgeStart[node];
2947
+ let hi = edgeStart[node + 1];
2948
+ while (lo < hi) {
2949
+ const mid = lo + hi >>> 1;
2950
+ const value = edgeHash[mid];
2951
+ if (value < hash) {
2952
+ lo = mid + 1;
2953
+ } else if (value > hash) {
2954
+ hi = mid;
2955
+ } else {
2956
+ for (let e = mid; e >= lo && edgeHash[e] === hash; e -= 1) {
2957
+ if (labelEquals(e, hostname, start, length))
2958
+ return e;
2959
+ }
2960
+ for (let e = mid + 1; e < hi && edgeHash[e] === hash; e += 1) {
2961
+ if (labelEquals(e, hostname, start, length))
2962
+ return e;
2963
+ }
2964
+ return -1;
2965
+ }
2966
+ }
2967
+ return -1;
2968
+ }
2969
+ function walk(hostname, root, allowedMask) {
2970
+ let node = root;
2971
+ let end = hostname.length;
2972
+ let hash = 5381;
2973
+ matchNode = -1;
2974
+ for (let i = hostname.length - 1; i >= 0; i -= 1) {
2975
+ const code = hostname.charCodeAt(i);
2976
+ if (code === 46) {
2977
+ const start = i + 1;
2978
+ let edge2 = findEdge(node, hash >>> 0, hostname, start, end - start);
2979
+ if (edge2 === -1) {
2980
+ edge2 = wildcardEdge[node];
2981
+ }
2982
+ if (edge2 === -1) {
2983
+ return matchNode !== -1;
2984
+ }
2985
+ node = edgeChild[edge2];
2986
+ if ((nodeFlags[node] & allowedMask) !== 0) {
2987
+ matchNode = node;
2988
+ matchStart = start;
2989
+ matchEnd = end;
2990
+ }
2991
+ end = i;
2992
+ hash = 5381;
2993
+ } else {
2994
+ hash = hash * 33 ^ code;
2995
+ }
2996
+ }
2997
+ let edge = findEdge(node, hash >>> 0, hostname, 0, end);
2998
+ if (edge === -1) {
2999
+ edge = wildcardEdge[node];
3000
+ }
3001
+ if (edge !== -1) {
3002
+ node = edgeChild[edge];
3003
+ if ((nodeFlags[node] & allowedMask) !== 0) {
3004
+ matchNode = node;
3005
+ matchStart = 0;
3006
+ matchEnd = end;
3007
+ }
3008
+ }
3009
+ return matchNode !== -1;
3010
+ }
3011
+ function suffixLookup(hostname, options, out) {
3012
+ if (fast_path_default(hostname, options, out)) {
3013
+ return;
3014
+ }
3015
+ const allowedMask = (options.allowPrivateDomains ? 2 : 0) | (options.allowIcannDomains ? 1 : 0);
3016
+ if (walk(hostname, exceptionsRoot, allowedMask)) {
3017
+ out.isIcann = (nodeFlags[matchNode] & 1) !== 0;
3018
+ out.isPrivate = (nodeFlags[matchNode] & 2) !== 0;
3019
+ out.publicSuffix = hostname.slice(matchEnd + 1);
3020
+ return;
3021
+ }
3022
+ if (walk(hostname, rulesRoot, allowedMask)) {
3023
+ out.isIcann = (nodeFlags[matchNode] & 1) !== 0;
3024
+ out.isPrivate = (nodeFlags[matchNode] & 2) !== 0;
3025
+ out.publicSuffix = hostname.slice(matchStart);
3026
+ return;
3027
+ }
3028
+ out.isIcann = false;
3029
+ out.isPrivate = false;
3030
+ const lastDot = hostname.lastIndexOf(".");
3031
+ out.publicSuffix = lastDot === -1 ? hostname : hostname.slice(lastDot + 1);
3032
+ }
3033
+
3034
+ // ../../node_modules/.pnpm/tldts@7.4.9/node_modules/tldts/dist/es6/index.js
3035
+ var RESULT = getEmptyResult();
3036
+ function getHostname(url, options) {
3037
+ resetResult(RESULT);
3038
+ return parseImpl(url, 0, suffixLookup, options, RESULT).hostname;
3039
+ }
3040
+ function getDomain2(url, options) {
3041
+ resetResult(RESULT);
3042
+ return parseImpl(url, 3, suffixLookup, options, RESULT).domain;
3043
+ }
3044
+ function getDomainWithoutSuffix2(url, options) {
3045
+ resetResult(RESULT);
3046
+ return parseImpl(url, 5, suffixLookup, options, RESULT).domainWithoutSuffix;
3047
+ }
3048
+
3049
+ // ../contracts/src/url-normalize.ts
3050
+ var DOMAIN_PARSE_OPTIONS = { allowPrivateDomains: true };
3051
+ var LINKIFY = new LinkifyIt({ fuzzyLink: true, fuzzyEmail: false }).tlds(tlds_default2);
3052
+ var STRIP_KEYS = /* @__PURE__ */ new Set([
3053
+ // Click identifiers
3054
+ "fbclid",
3055
+ "gclid",
3056
+ "msclkid",
3057
+ "ttclid",
3058
+ "li_fat_id",
3059
+ "igshid",
3060
+ "yclid",
3061
+ "dclid",
3062
+ "gbraid",
3063
+ "wbraid",
3064
+ "bingid",
3065
+ // Mailchimp
3066
+ "mc_cid",
3067
+ "mc_eid",
3068
+ // Google Analytics linkers
3069
+ "_ga",
3070
+ "_gl",
3071
+ // Google Tag Manager debug
3072
+ "gtm_latency",
3073
+ "gtm_debug",
3074
+ // WordPress internal noise
3075
+ "preview",
3076
+ "preview_id",
3077
+ "preview_nonce",
3078
+ "_thumbnail_id",
3079
+ // Common cache-busters/versioning
3080
+ "v",
3081
+ "ver",
3082
+ "version"
3083
+ ]);
3084
+ function shouldStrip(key) {
3085
+ if (STRIP_KEYS.has(key)) return true;
3086
+ if (key.startsWith("utm_")) return true;
3087
+ return false;
3088
+ }
3089
+ function parseQuery(query) {
3090
+ if (query === "") return [];
3091
+ return query.split("&").map((pair) => {
3092
+ const eq = pair.indexOf("=");
3093
+ if (eq === -1) return { key: pair, value: null };
3094
+ return { key: pair.slice(0, eq), value: pair.slice(eq + 1) };
3095
+ });
3096
+ }
3097
+ function encodeQuery(pairs) {
3098
+ return pairs.map((p) => p.value === null ? p.key : `${p.key}=${p.value}`).join("&");
3099
+ }
3100
+ function collapseRootIndex(path) {
3101
+ if (path === "/index.html" || path === "/index.php") return "/";
3102
+ return path;
3103
+ }
3104
+ function dropTrailingSlash(path) {
3105
+ if (path.length > 1 && path.endsWith("/")) {
3106
+ return path.replace(/\/+$/, "");
3107
+ }
3108
+ return path;
3109
+ }
3110
+ function absolutizeProjectUrl(url, canonicalDomain) {
3111
+ if (!url) return "";
3112
+ const trimmed = url.trim();
3113
+ if (!trimmed) return "";
3114
+ if (/^https?:\/\//i.test(trimmed)) return trimmed;
3115
+ if (trimmed.startsWith("//")) return `https:${trimmed}`;
3116
+ const host = canonicalDomain.trim().replace(/^https?:\/\//i, "").replace(/\/+$/, "");
3117
+ if (!host) return trimmed;
3118
+ if (trimmed.startsWith("/")) return `https://${host}${trimmed}`;
3119
+ return `https://${host}/${trimmed}`;
3120
+ }
3121
+ function hostOf(value) {
3122
+ if (value == null) return null;
3123
+ const trimmed = value.trim();
3124
+ if (!trimmed) return null;
3125
+ const hostname = getHostname(trimmed);
3126
+ return hostname ? hostname.replace(/^www\./i, "").toLowerCase() : null;
3127
+ }
3128
+ function registrableDomain(value) {
3129
+ if (value == null || value.trim() === "") return "";
3130
+ return getDomain2(value, DOMAIN_PARSE_OPTIONS)?.toLowerCase() ?? "";
3131
+ }
3132
+ function brandLabelFromDomain(value) {
3133
+ if (value == null || value.trim() === "") return "";
3134
+ return getDomainWithoutSuffix2(value, DOMAIN_PARSE_OPTIONS)?.toLowerCase() ?? "";
3135
+ }
3136
+ function hostMatchesDomain(candidate, domain) {
3137
+ const candidateHost = hostOf(candidate);
3138
+ const domainHost = hostOf(domain);
3139
+ if (!candidateHost || !domainHost) return false;
3140
+ return candidateHost === domainHost || candidateHost.endsWith(`.${domainHost}`);
3141
+ }
3142
+ function hostMatchesAnyDomain(candidate, domains) {
3143
+ return domains.some((domain) => hostMatchesDomain(candidate, domain));
3144
+ }
3145
+ function extractDomainsFromText(text) {
3146
+ if (!text) return [];
3147
+ const domains = /* @__PURE__ */ new Set();
3148
+ for (const match of LINKIFY.match(text) ?? []) {
3149
+ if (match.schema === "mailto:") continue;
3150
+ const host = hostOf(match.url);
3151
+ if (!host || !registrableDomain(host)) continue;
3152
+ domains.add(host);
3153
+ }
3154
+ return [...domains];
3155
+ }
3156
+ function textContainsDomain(text, domain) {
3157
+ return extractDomainsFromText(text).some((candidate) => hostMatchesDomain(candidate, domain));
3158
+ }
3159
+ function normalizeUrlPath(input) {
3160
+ if (input == null) return null;
3161
+ let trimmed = input.trim();
3162
+ if (trimmed === "") return null;
3163
+ trimmed = trimmed.replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
3164
+ if (trimmed === "" || trimmed === "/") return "/";
3165
+ if (trimmed === "(not set)") return null;
3166
+ trimmed = trimmed.replace(/([a-z0-9])[).]+$/i, "$1");
3167
+ if (trimmed.startsWith("/)") || trimmed.startsWith("/ ")) {
3168
+ trimmed = "/";
3169
+ }
3170
+ if (trimmed.includes(" ")) {
3171
+ trimmed = trimmed.split(" ")[0];
3172
+ }
3173
+ if (trimmed === "" || trimmed === "/") return "/";
3174
+ let pathPart;
3175
+ let queryPart;
3176
+ if (/^https?:\/\//i.test(trimmed)) {
3177
+ let url;
3178
+ try {
3179
+ url = new URL(trimmed);
3180
+ } catch {
3181
+ return null;
3182
+ }
3183
+ pathPart = url.pathname || "/";
3184
+ queryPart = url.search.startsWith("?") ? url.search.slice(1) : url.search;
3185
+ } else {
3186
+ let raw = trimmed;
3187
+ const hashIdx = raw.indexOf("#");
3188
+ if (hashIdx !== -1) raw = raw.slice(0, hashIdx);
3189
+ const qIdx = raw.indexOf("?");
3190
+ if (qIdx === -1) {
3191
+ pathPart = raw;
3192
+ queryPart = "";
3193
+ } else {
3194
+ pathPart = raw.slice(0, qIdx);
3195
+ queryPart = raw.slice(qIdx + 1);
3196
+ }
3197
+ }
3198
+ if (pathPart === "") pathPart = "/";
3199
+ pathPart = collapseRootIndex(pathPart);
3200
+ pathPart = dropTrailingSlash(pathPart);
3201
+ const pairs = parseQuery(queryPart).filter((p) => !shouldStrip(p.key));
3202
+ pairs.sort((a, b) => {
3203
+ if (a.key < b.key) return -1;
3204
+ if (a.key > b.key) return 1;
3205
+ return 0;
3206
+ });
3207
+ if (pairs.length === 0) return pathPart;
3208
+ return `${pathPart}?${encodeQuery(pairs)}`;
3209
+ }
3210
+
303
3211
  // ../contracts/src/project.ts
304
3212
  var configSourceSchema = z3.enum(["cli", "api", "config-file"]);
305
3213
  function findDuplicateLocationLabels(locations) {
@@ -420,72 +3328,7 @@ var competitorBatchRequestSchema = z3.object({
420
3328
  competitors: z3.array(z3.string().trim().min(1)).min(1)
421
3329
  });
422
3330
  function normalizeProjectDomain(input) {
423
- let domain = input.trim().toLowerCase();
424
- try {
425
- if (domain.includes("://")) {
426
- domain = new URL(domain).hostname.toLowerCase();
427
- }
428
- } catch {
429
- }
430
- return domain.replace(/^www\./, "");
431
- }
432
- var MULTI_LABEL_PUBLIC_SUFFIXES = /* @__PURE__ */ new Set([
433
- "ac.uk",
434
- "co.id",
435
- "co.il",
436
- "co.in",
437
- "co.jp",
438
- "co.kr",
439
- "co.nz",
440
- "co.th",
441
- "co.uk",
442
- "co.za",
443
- "com.au",
444
- "com.br",
445
- "com.cn",
446
- "com.mx",
447
- "com.ph",
448
- "com.sg",
449
- "com.tr",
450
- "edu.au",
451
- "edu.sg",
452
- "gov.au",
453
- "gov.uk",
454
- "me.uk",
455
- "ne.jp",
456
- "net.au",
457
- "net.br",
458
- "net.cn",
459
- "net.in",
460
- "net.tr",
461
- "or.jp",
462
- "or.kr",
463
- "org.au",
464
- "org.br",
465
- "org.in",
466
- "org.nz",
467
- "org.tr",
468
- "org.uk",
469
- "org.za"
470
- ]);
471
- function registrableDomain(input) {
472
- const normalized = normalizeProjectDomain(input);
473
- if (!normalized) return "";
474
- const hostname = normalized.split("/")[0]?.split(":")[0] ?? "";
475
- if (!hostname) return "";
476
- const labels = hostname.split(".").filter(Boolean);
477
- if (labels.length < 2) return "";
478
- if (labels.length === 2) return labels.join(".");
479
- const lastTwo = labels.slice(-2).join(".");
480
- if (MULTI_LABEL_PUBLIC_SUFFIXES.has(lastTwo)) {
481
- return labels.length >= 3 ? labels.slice(-3).join(".") : "";
482
- }
483
- return labels.slice(-2).join(".");
484
- }
485
- function brandLabelFromDomain(input) {
486
- const reg = registrableDomain(input);
487
- if (!reg) return "";
488
- return reg.split(".")[0] ?? "";
3331
+ return hostOf(input) ?? input.trim().toLowerCase().replace(/^www\./, "");
489
3332
  }
490
3333
  function effectiveDomains(project) {
491
3334
  const all = [project.canonicalDomain, ...project.ownedDomains ?? []];
@@ -2575,16 +5418,10 @@ var CATEGORY_LABELS = {
2575
5418
  other: "Independent sites"
2576
5419
  };
2577
5420
  function categorizeSource(uri) {
2578
- let domain;
2579
- try {
2580
- const url = new URL(uri.startsWith("http") ? uri : `https://${uri}`);
2581
- domain = url.hostname.replace(/^www\./, "");
2582
- } catch {
2583
- domain = uri.replace(/^https?:\/\//, "").replace(/^www\./, "").split("/")[0] ?? uri;
2584
- }
5421
+ const domain = hostOf(uri) ?? uri.trim().toLowerCase();
2585
5422
  const domainLower = domain.toLowerCase();
2586
5423
  for (const rule of SOURCE_CATEGORY_RULES) {
2587
- if (domainLower === rule.pattern || domainLower.endsWith(`.${rule.pattern}`) || rule.pattern.startsWith(".") && domainLower.endsWith(rule.pattern)) {
5424
+ if (!rule.pattern.startsWith(".") && hostMatchesDomain(domainLower, rule.pattern) || rule.pattern.startsWith(".") && domainLower.endsWith(rule.pattern)) {
2588
5425
  return { category: rule.category, label: rule.label, domain };
2589
5426
  }
2590
5427
  }
@@ -2607,6 +5444,89 @@ import { z as z20 } from "zod";
2607
5444
  // ../contracts/src/discovery.ts
2608
5445
  import { z as z19 } from "zod";
2609
5446
 
5447
+ // ../contracts/src/brand-matching.ts
5448
+ var WORD_SEGMENTER = new Intl.Segmenter("en", { granularity: "word" });
5449
+ var NON_WORD = /[^\p{L}\p{N}]+/gu;
5450
+ var WORD_RUNS = /[\p{L}\p{N}]+/gu;
5451
+ function normalizeForMatch(value) {
5452
+ return value.normalize("NFKC").toLocaleLowerCase("en");
5453
+ }
5454
+ function wordsOfNormalized(normalized) {
5455
+ const words = [];
5456
+ for (const segment of WORD_SEGMENTER.segment(normalized)) {
5457
+ if (!segment.isWordLike) continue;
5458
+ for (const word of segment.segment.match(WORD_RUNS) ?? []) words.push(word);
5459
+ }
5460
+ return words;
5461
+ }
5462
+ function brandWords(value) {
5463
+ return wordsOfNormalized(normalizeForMatch(value));
5464
+ }
5465
+ function brandKeyFromText(value) {
5466
+ return brandWords(value).join("");
5467
+ }
5468
+ function compileBrandAliases(aliases) {
5469
+ const keys = /* @__PURE__ */ new Set();
5470
+ let longest = 0;
5471
+ for (const alias of aliases) {
5472
+ if (!alias) continue;
5473
+ const key = brandKeyFromText(alias);
5474
+ if (!key) continue;
5475
+ keys.add(key);
5476
+ if (key.length > longest) longest = key.length;
5477
+ }
5478
+ return { keys, longest };
5479
+ }
5480
+ function matcherMatchesText(matcher, text) {
5481
+ if (!text || matcher.keys.size === 0) return false;
5482
+ const normalized = normalizeForMatch(text);
5483
+ const stripped = normalized.replace(NON_WORD, "");
5484
+ let possible = false;
5485
+ for (const key of matcher.keys) {
5486
+ if (stripped.includes(key)) {
5487
+ possible = true;
5488
+ break;
5489
+ }
5490
+ }
5491
+ if (!possible) return false;
5492
+ const words = wordsOfNormalized(normalized);
5493
+ for (let start = 0; start < words.length; start++) {
5494
+ let candidate = "";
5495
+ for (let end = start; end < words.length; end++) {
5496
+ candidate += words[end];
5497
+ if (matcher.keys.has(candidate)) return true;
5498
+ if (candidate.length >= matcher.longest) break;
5499
+ }
5500
+ }
5501
+ return false;
5502
+ }
5503
+ function matchedAliasKeys(matcher, text) {
5504
+ const found = /* @__PURE__ */ new Set();
5505
+ if (!text || matcher.keys.size === 0) return found;
5506
+ const normalized = normalizeForMatch(text);
5507
+ const stripped = normalized.replace(NON_WORD, "");
5508
+ const reachable = [...matcher.keys].filter((key) => stripped.includes(key));
5509
+ if (reachable.length === 0) return found;
5510
+ const words = wordsOfNormalized(normalized);
5511
+ for (let start = 0; start < words.length; start++) {
5512
+ let candidate = "";
5513
+ for (let end = start; end < words.length; end++) {
5514
+ candidate += words[end];
5515
+ if (matcher.keys.has(candidate)) found.add(candidate);
5516
+ if (candidate.length >= matcher.longest) break;
5517
+ }
5518
+ if (found.size === matcher.keys.size) break;
5519
+ }
5520
+ return found;
5521
+ }
5522
+ function textContainsBrandAlias(text, alias) {
5523
+ if (!alias) return false;
5524
+ return matcherMatchesText(compileBrandAliases([alias]), text);
5525
+ }
5526
+ function textContainsAnyBrandAlias(text, aliases) {
5527
+ return matcherMatchesText(compileBrandAliases(aliases), text);
5528
+ }
5529
+
2610
5530
  // ../contracts/src/embeddings.ts
2611
5531
  function cosineSimilarity(a, b) {
2612
5532
  if (a.length === 0 || b.length === 0) {
@@ -2704,139 +5624,6 @@ function computeDedupSimilarityStats(vectors, indexClusters) {
2704
5624
  return { perClusterMinSimilarity, bandPairFraction: round2(inBand / pairsTotal), pairsTotal };
2705
5625
  }
2706
5626
 
2707
- // ../contracts/src/url-normalize.ts
2708
- var STRIP_KEYS = /* @__PURE__ */ new Set([
2709
- // Click identifiers
2710
- "fbclid",
2711
- "gclid",
2712
- "msclkid",
2713
- "ttclid",
2714
- "li_fat_id",
2715
- "igshid",
2716
- "yclid",
2717
- "dclid",
2718
- "gbraid",
2719
- "wbraid",
2720
- "bingid",
2721
- // Mailchimp
2722
- "mc_cid",
2723
- "mc_eid",
2724
- // Google Analytics linkers
2725
- "_ga",
2726
- "_gl",
2727
- // Google Tag Manager debug
2728
- "gtm_latency",
2729
- "gtm_debug",
2730
- // WordPress internal noise
2731
- "preview",
2732
- "preview_id",
2733
- "preview_nonce",
2734
- "_thumbnail_id",
2735
- // Common cache-busters/versioning
2736
- "v",
2737
- "ver",
2738
- "version"
2739
- ]);
2740
- function shouldStrip(key) {
2741
- if (STRIP_KEYS.has(key)) return true;
2742
- if (key.startsWith("utm_")) return true;
2743
- return false;
2744
- }
2745
- function parseQuery(query) {
2746
- if (query === "") return [];
2747
- return query.split("&").map((pair) => {
2748
- const eq = pair.indexOf("=");
2749
- if (eq === -1) return { key: pair, value: null };
2750
- return { key: pair.slice(0, eq), value: pair.slice(eq + 1) };
2751
- });
2752
- }
2753
- function encodeQuery(pairs) {
2754
- return pairs.map((p) => p.value === null ? p.key : `${p.key}=${p.value}`).join("&");
2755
- }
2756
- function collapseRootIndex(path) {
2757
- if (path === "/index.html" || path === "/index.php") return "/";
2758
- return path;
2759
- }
2760
- function dropTrailingSlash(path) {
2761
- if (path.length > 1 && path.endsWith("/")) {
2762
- return path.replace(/\/+$/, "");
2763
- }
2764
- return path;
2765
- }
2766
- function absolutizeProjectUrl(url, canonicalDomain) {
2767
- if (!url) return "";
2768
- const trimmed = url.trim();
2769
- if (!trimmed) return "";
2770
- if (/^https?:\/\//i.test(trimmed)) return trimmed;
2771
- if (trimmed.startsWith("//")) return `https:${trimmed}`;
2772
- const host = canonicalDomain.trim().replace(/^https?:\/\//i, "").replace(/\/+$/, "");
2773
- if (!host) return trimmed;
2774
- if (trimmed.startsWith("/")) return `https://${host}${trimmed}`;
2775
- return `https://${host}/${trimmed}`;
2776
- }
2777
- function hostOf(value) {
2778
- if (value == null) return null;
2779
- const trimmed = value.trim();
2780
- if (!trimmed) return null;
2781
- try {
2782
- const url = trimmed.includes("://") ? new URL(trimmed) : new URL(`https://${trimmed}`);
2783
- return url.hostname.replace(/^www\./, "").toLowerCase();
2784
- } catch {
2785
- return null;
2786
- }
2787
- }
2788
- function normalizeUrlPath(input) {
2789
- if (input == null) return null;
2790
- let trimmed = input.trim();
2791
- if (trimmed === "") return null;
2792
- trimmed = trimmed.replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
2793
- if (trimmed === "" || trimmed === "/") return "/";
2794
- if (trimmed === "(not set)") return null;
2795
- trimmed = trimmed.replace(/([a-z0-9])[).]+$/i, "$1");
2796
- if (trimmed.startsWith("/)") || trimmed.startsWith("/ ")) {
2797
- trimmed = "/";
2798
- }
2799
- if (trimmed.includes(" ")) {
2800
- trimmed = trimmed.split(" ")[0];
2801
- }
2802
- if (trimmed === "" || trimmed === "/") return "/";
2803
- let pathPart;
2804
- let queryPart;
2805
- if (/^https?:\/\//i.test(trimmed)) {
2806
- let url;
2807
- try {
2808
- url = new URL(trimmed);
2809
- } catch {
2810
- return null;
2811
- }
2812
- pathPart = url.pathname || "/";
2813
- queryPart = url.search.startsWith("?") ? url.search.slice(1) : url.search;
2814
- } else {
2815
- let raw = trimmed;
2816
- const hashIdx = raw.indexOf("#");
2817
- if (hashIdx !== -1) raw = raw.slice(0, hashIdx);
2818
- const qIdx = raw.indexOf("?");
2819
- if (qIdx === -1) {
2820
- pathPart = raw;
2821
- queryPart = "";
2822
- } else {
2823
- pathPart = raw.slice(0, qIdx);
2824
- queryPart = raw.slice(qIdx + 1);
2825
- }
2826
- }
2827
- if (pathPart === "") pathPart = "/";
2828
- pathPart = collapseRootIndex(pathPart);
2829
- pathPart = dropTrailingSlash(pathPart);
2830
- const pairs = parseQuery(queryPart).filter((p) => !shouldStrip(p.key));
2831
- pairs.sort((a, b) => {
2832
- if (a.key < b.key) return -1;
2833
- if (a.key > b.key) return 1;
2834
- return 0;
2835
- });
2836
- if (pairs.length === 0) return pathPart;
2837
- return `${pathPart}?${encodeQuery(pairs)}`;
2838
- }
2839
-
2840
5627
  // ../contracts/src/discovery.ts
2841
5628
  var discoveryBucketSchema = z19.enum(["cited", "aspirational", "wasted-surface"]);
2842
5629
  var DiscoveryBuckets = discoveryBucketSchema.enum;
@@ -2965,48 +5752,20 @@ function seedCollapseWarning(input) {
2965
5752
  return `Seed dedup collapsed ${seedCountRaw} raw candidates into ${canonicalCount} canonical ${noun} at threshold ${dedupThreshold}. Distinct intents were likely merged into one cluster; re-run with a higher --dedup-threshold.`;
2966
5753
  }
2967
5754
  function filterBrandedSeedCandidates(input) {
2968
- const tokens = brandMatchTokens(input.brandNames, input.canonicalDomains);
2969
- if (tokens.length === 0) return { kept: [...input.candidates], droppedBranded: [] };
5755
+ const brandAliases = input.brandNames.filter((name) => brandKeyFromText(name).length >= 3);
5756
+ const domains = input.canonicalDomains.filter((domain) => hostOf(domain) !== null);
5757
+ if (brandAliases.length === 0 && domains.length === 0) {
5758
+ return { kept: [...input.candidates], droppedBranded: [] };
5759
+ }
2970
5760
  const kept = [];
2971
5761
  const droppedBranded = [];
2972
5762
  for (const candidate of input.candidates) {
2973
- const normalized = normalizeForBrandMatch(candidate);
2974
- if (tokens.some((token) => containsWholeToken(normalized, token))) droppedBranded.push(candidate);
5763
+ const branded = textContainsAnyBrandAlias(candidate, brandAliases) || domains.some((domain) => textContainsDomain(candidate, domain));
5764
+ if (branded) droppedBranded.push(candidate);
2975
5765
  else kept.push(candidate);
2976
5766
  }
2977
5767
  return { kept, droppedBranded };
2978
5768
  }
2979
- function normalizeForBrandMatch(text) {
2980
- return text.toLowerCase().replace(/\s+/g, " ").trim();
2981
- }
2982
- function brandMatchTokens(brandNames, canonicalDomains) {
2983
- const tokens = /* @__PURE__ */ new Set();
2984
- for (const name of brandNames) {
2985
- const normalized = normalizeForBrandMatch(name);
2986
- if (normalized.length < 3) continue;
2987
- tokens.add(normalized);
2988
- const squashed = normalized.replace(/[^a-z0-9]/g, "");
2989
- if (squashed.length >= 4 && squashed !== normalized) tokens.add(squashed);
2990
- }
2991
- for (const domain of canonicalDomains) {
2992
- const host = hostOf(domain) ?? normalizeForBrandMatch(domain).replace(/^www\./, "");
2993
- if (!host) continue;
2994
- tokens.add(host);
2995
- tokens.add(`www.${host}`);
2996
- }
2997
- return [...tokens];
2998
- }
2999
- function containsWholeToken(normalized, token) {
3000
- let index = normalized.indexOf(token);
3001
- while (index !== -1) {
3002
- const before = index === 0 ? " " : normalized[index - 1];
3003
- const afterIndex = index + token.length;
3004
- const after = afterIndex >= normalized.length ? " " : normalized[afterIndex];
3005
- if (!/[a-z0-9]/.test(before) && !/[a-z0-9]/.test(after)) return true;
3006
- index = normalized.indexOf(token, index + 1);
3007
- }
3008
- return false;
3009
- }
3010
5769
  var DISCOVERY_SEED_PROVIDERS = ["gemini", "openai"];
3011
5770
  var discoverySeedProviderSchema = z19.enum(DISCOVERY_SEED_PROVIDERS);
3012
5771
  var discoveryRunRequestSchema = z19.object({
@@ -3210,9 +5969,8 @@ function buildHarvestAnchorTerms(corpus, domains = []) {
3210
5969
  for (const token of significantHarvestTokens(text)) set.add(token);
3211
5970
  }
3212
5971
  for (const domain of domains) {
3213
- const host = hostOf(domain);
3214
- if (!host) continue;
3215
- const label = host.replace(/\.[a-z0-9]+$/, "");
5972
+ const label = brandLabelFromDomain(domain);
5973
+ if (!label) continue;
3216
5974
  for (const token of significantHarvestTokens(label)) set.add(token);
3217
5975
  }
3218
5976
  return [...set];
@@ -3336,19 +6094,10 @@ function surfaceClassFromCompetitorType(type) {
3336
6094
  return void 0;
3337
6095
  }
3338
6096
  }
3339
- function matchesAnyDomain(candidate, domains) {
3340
- if (!candidate) return false;
3341
- for (const domain of domains) {
3342
- const normalized = normalizeProjectDomain(domain);
3343
- if (!normalized) continue;
3344
- if (candidate === normalized || candidate.endsWith(`.${normalized}`)) return true;
3345
- }
3346
- return false;
3347
- }
3348
6097
  function classifySurfaceFromCategory(domain, category, context, storedClass) {
3349
6098
  const candidate = normalizeProjectDomain(domain);
3350
- if (matchesAnyDomain(candidate, context.projectDomains)) return SurfaceClasses.own;
3351
- if (matchesAnyDomain(candidate, context.competitorDomains)) return SurfaceClasses["direct-competitor"];
6099
+ if (hostMatchesAnyDomain(candidate, context.projectDomains)) return SurfaceClasses.own;
6100
+ if (hostMatchesAnyDomain(candidate, context.competitorDomains)) return SurfaceClasses["direct-competitor"];
3352
6101
  if (storedClass) return storedClass;
3353
6102
  switch (category) {
3354
6103
  case "directory":
@@ -4260,87 +7009,47 @@ var ga4SessionHistoryEntrySchema = z25.object({
4260
7009
  });
4261
7010
 
4262
7011
  // ../contracts/src/answer-visibility.ts
4263
- var GENERIC_TOKENS = /* @__PURE__ */ new Set([
4264
- "agency",
4265
- "app",
4266
- "company",
4267
- "corp",
4268
- "group",
4269
- "health",
4270
- "inc",
4271
- "llc",
4272
- "online",
4273
- "platform",
4274
- "services",
4275
- "site",
4276
- "solutions",
4277
- "software",
4278
- "systems",
4279
- "tech"
4280
- ]);
4281
- var MIN_BRAND_KEY_LENGTH = 6;
4282
- var BUSINESS_SUFFIXES = [
4283
- "incorporated",
4284
- "corporation",
4285
- "limited",
4286
- "company",
4287
- "gmbh",
4288
- "pllc",
4289
- "corp",
4290
- "group",
4291
- "llp",
4292
- "plc",
4293
- "llc",
4294
- "inc",
4295
- "ltd"
4296
- ];
7012
+ var MIN_DOMAIN_BRAND_KEY_LENGTH = 4;
4297
7013
  function extractAnswerMentions(answerText, brandNames, domains) {
4298
7014
  if (!answerText) return { mentioned: false, matchedTerms: [] };
4299
7015
  const matchedTerms = [];
4300
- const lowerAnswer = answerText.toLowerCase();
7016
+ const matchedDomainTerms = /* @__PURE__ */ new Set();
7017
+ const answerDomains = extractDomainsFromText(answerText);
4301
7018
  for (const domain of domains) {
4302
- const normalizedDomain = normalizeProjectDomain(domain);
7019
+ const normalizedDomain = hostOf(domain);
4303
7020
  if (!normalizedDomain || !normalizedDomain.includes(".")) continue;
4304
- if (domainMentioned(lowerAnswer, normalizedDomain)) {
7021
+ if (answerDomains.some((candidate) => hostMatchesDomain(candidate, normalizedDomain))) {
4305
7022
  matchedTerms.push(normalizedDomain);
7023
+ matchedDomainTerms.add(normalizedDomain);
4306
7024
  }
4307
7025
  }
4308
- const answerNormalized = normalizeText(answerText);
4309
- const answerBrandKey = brandKeyFromText(answerText);
7026
+ const candidates = [];
4310
7027
  for (const brandName of brandNames) {
4311
7028
  if (!brandName || !brandName.trim()) continue;
4312
- const normalizedCandidates = brandNormalizedCandidates(brandName);
4313
- const brandKeyCandidates = brandKeyCandidatesForMatch(brandName);
4314
- const matchesNormalized = normalizedCandidates.some(
4315
- (c) => new RegExp(`\\b${escapeRegExp(c)}\\b`).test(answerNormalized)
4316
- );
4317
- const matchesBrandKey = brandKeyCandidates.some(
4318
- (c) => c.length >= MIN_BRAND_KEY_LENGTH && answerBrandKey.includes(c)
4319
- );
4320
- if (matchesNormalized || matchesBrandKey) {
4321
- matchedTerms.push(brandName);
4322
- }
7029
+ const key = brandKeyFromText(brandName);
7030
+ if (key) candidates.push({ term: brandName, key });
4323
7031
  }
4324
- const brandTokens = collectBrandTokens(brandNames, domains);
4325
- const allTokens = [...brandTokens.primary, ...brandTokens.secondary];
4326
- const secondarySet = new Set(brandTokens.secondary);
4327
- let tokenMatches = 0;
4328
- const matchedPrimary = [];
4329
- for (const token of allTokens) {
4330
- if (new RegExp(`\\b${escapeRegExp(token)}\\b`).test(lowerAnswer)) {
4331
- tokenMatches++;
4332
- if (!secondarySet.has(token)) matchedPrimary.push(token);
4333
- }
7032
+ for (const domain of domains) {
7033
+ const brand = brandLabelFromDomain(domain);
7034
+ const key = brandKeyFromText(brand);
7035
+ if (key.length >= MIN_DOMAIN_BRAND_KEY_LENGTH) candidates.push({ term: brand, key });
4334
7036
  }
4335
- const tokenThresholdMet = allTokens.length > 0 && (allTokens.length === 1 && tokenMatches >= 1 || tokenMatches >= Math.min(2, allTokens.length));
4336
- if (tokenThresholdMet) {
4337
- matchedTerms.push(...matchedPrimary);
7037
+ if (candidates.length > 0) {
7038
+ const hits = matchedAliasKeys(
7039
+ compileBrandAliases(candidates.map((c) => c.term)),
7040
+ answerText
7041
+ );
7042
+ for (const candidate of candidates) {
7043
+ if (hits.has(candidate.key)) matchedTerms.push(candidate.term);
7044
+ }
4338
7045
  }
4339
7046
  const unique = [...new Set(matchedTerms)];
4340
- const domainMatches = unique.filter((t) => t.includes("."));
7047
+ const domainBrandKeys = new Set(
7048
+ [...matchedDomainTerms].map((domain) => brandKeyFromText(brandLabelFromDomain(domain))).filter(Boolean)
7049
+ );
4341
7050
  const dedupedFinal = unique.filter((term) => {
4342
- if (term.includes(".")) return true;
4343
- return !domainMatches.some((d) => d.toLowerCase().startsWith(term.toLowerCase() + "."));
7051
+ if (matchedDomainTerms.has(term)) return true;
7052
+ return !domainBrandKeys.has(brandKeyFromText(term));
4344
7053
  });
4345
7054
  return { mentioned: dedupedFinal.length > 0, matchedTerms: dedupedFinal };
4346
7055
  }
@@ -4353,75 +7062,6 @@ function visibilityStateFromAnswerMentioned(answerMentioned) {
4353
7062
  function mentionStateFromAnswerMentioned(answerMentioned) {
4354
7063
  return answerMentioned ? "mentioned" : "not-mentioned";
4355
7064
  }
4356
- function brandKeyFromText(value) {
4357
- return value.toLowerCase().replace(/[^a-z0-9]/g, "");
4358
- }
4359
- function domainMentioned(lowerAnswer, normalizedDomain) {
4360
- const escapedDomain = escapeRegExp(normalizedDomain.toLowerCase());
4361
- const patterns = [
4362
- new RegExp(`(^|[^a-z0-9-])${escapedDomain}($|[^a-z0-9-])`),
4363
- new RegExp(`https?://(?:www\\.)?${escapedDomain}(?:[/:?#]|$)`),
4364
- new RegExp(`www\\.${escapedDomain}(?:[/:?#]|$)`)
4365
- ];
4366
- return patterns.some((pattern) => pattern.test(lowerAnswer));
4367
- }
4368
- function collectBrandTokens(brandNames, domains) {
4369
- const primary = /* @__PURE__ */ new Set();
4370
- const secondary = /* @__PURE__ */ new Set();
4371
- for (const brandName of brandNames) {
4372
- if (!brandName || !brandName.trim()) continue;
4373
- const distinctiveWords = extractDistinctiveTokens(brandName);
4374
- if (distinctiveWords.length > 0) {
4375
- primary.add(distinctiveWords[0]);
4376
- for (let i = 1; i < distinctiveWords.length; i++) {
4377
- secondary.add(distinctiveWords[i]);
4378
- }
4379
- }
4380
- }
4381
- for (const domain of domains) {
4382
- const reg = registrableDomain(domain);
4383
- const brand = reg ? brandLabelFromDomain(reg) : normalizeProjectDomain(domain).split("/")[0]?.split(".")[0] ?? "";
4384
- const token = brand.replace(/[^a-z0-9]/gi, "").toLowerCase();
4385
- if (isDistinctiveToken(token)) primary.add(token);
4386
- }
4387
- for (const t of primary) secondary.delete(t);
4388
- return { primary: [...primary], secondary: [...secondary] };
4389
- }
4390
- function extractDistinctiveTokens(value) {
4391
- return normalizeText(value).split(" ").filter(isDistinctiveToken);
4392
- }
4393
- function isDistinctiveToken(token) {
4394
- if (token.length < 4) return false;
4395
- return !GENERIC_TOKENS.has(token);
4396
- }
4397
- function normalizeText(value) {
4398
- return value.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
4399
- }
4400
- function brandNormalizedCandidates(displayName) {
4401
- const original = normalizeText(displayName);
4402
- if (!original) return [];
4403
- const stripped = stripBusinessSuffix(original, " ");
4404
- if (!stripped || stripped === original) return [original];
4405
- return [original, stripped];
4406
- }
4407
- function brandKeyCandidatesForMatch(displayName) {
4408
- const original = brandKeyFromText(displayName);
4409
- if (!original) return [];
4410
- const stripped = stripBusinessSuffix(original, "");
4411
- return stripped && stripped !== original ? [original, stripped] : [original];
4412
- }
4413
- function stripBusinessSuffix(value, separator) {
4414
- for (const suffix of BUSINESS_SUFFIXES) {
4415
- const trailing = `${separator}${suffix}`;
4416
- if (value.endsWith(trailing) && value.length - trailing.length >= 3) {
4417
- return value.slice(0, -trailing.length);
4418
- }
4419
- }
4420
- return value;
4421
- }
4422
- function escapeRegExp(value) {
4423
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4424
- }
4425
7065
 
4426
7066
  // ../contracts/src/intelligence.ts
4427
7067
  import { z as z26 } from "zod";
@@ -7879,6 +10519,14 @@ export {
7879
10519
  gaMeasurementAnalysisWindowSchema,
7880
10520
  gaMeasurementHostScopeSchema,
7881
10521
  gaMeasurementAnalysisDtoSchema,
10522
+ absolutizeProjectUrl,
10523
+ hostOf,
10524
+ registrableDomain,
10525
+ brandLabelFromDomain,
10526
+ hostMatchesDomain,
10527
+ hostMatchesAnyDomain,
10528
+ textContainsDomain,
10529
+ normalizeUrlPath,
7882
10530
  findDuplicateLocationLabels,
7883
10531
  hasLocationLabel,
7884
10532
  orderLocationsDefaultFirst,
@@ -7894,8 +10542,6 @@ export {
7894
10542
  competitorDtoSchema,
7895
10543
  competitorBatchRequestSchema,
7896
10544
  normalizeProjectDomain,
7897
- registrableDomain,
7898
- brandLabelFromDomain,
7899
10545
  effectiveDomains,
7900
10546
  normalizeProjectAliases,
7901
10547
  effectiveBrandNames,
@@ -8012,13 +10658,13 @@ export {
8012
10658
  categorizeSource,
8013
10659
  categorizeSourceWithCompetitors,
8014
10660
  categoryLabel,
10661
+ brandKeyFromText,
10662
+ textContainsBrandAlias,
10663
+ textContainsAnyBrandAlias,
8015
10664
  cosineSimilarity,
8016
10665
  clusterByCosine,
8017
10666
  pickClusterRepresentative,
8018
10667
  computeDedupSimilarityStats,
8019
- absolutizeProjectUrl,
8020
- hostOf,
8021
- normalizeUrlPath,
8022
10668
  discoveryBucketSchema,
8023
10669
  DiscoveryBuckets,
8024
10670
  DEFAULT_DISCOVERY_PROMOTE_BUCKETS,
@@ -8074,7 +10720,6 @@ export {
8074
10720
  determineAnswerMentioned,
8075
10721
  visibilityStateFromAnswerMentioned,
8076
10722
  mentionStateFromAnswerMentioned,
8077
- brandKeyFromText,
8078
10723
  healthSnapshotDtoSchema,
8079
10724
  agentProvidersResponseDtoSchema,
8080
10725
  MemorySources,