@grainql/analytics-web 2.2.1 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/attribution.d.ts +47 -0
  2. package/dist/attribution.d.ts.map +1 -0
  3. package/dist/attribution.js +228 -0
  4. package/dist/cjs/attribution.d.ts +47 -0
  5. package/dist/cjs/attribution.d.ts.map +1 -0
  6. package/dist/cjs/attribution.js +228 -0
  7. package/dist/cjs/attribution.js.map +1 -0
  8. package/dist/cjs/countries.d.ts +13 -0
  9. package/dist/cjs/countries.d.ts.map +1 -0
  10. package/dist/cjs/countries.js +2907 -0
  11. package/dist/cjs/countries.js.map +1 -0
  12. package/dist/cjs/heartbeat.d.ts +1 -0
  13. package/dist/cjs/heartbeat.d.ts.map +1 -1
  14. package/dist/cjs/heartbeat.js +1 -1
  15. package/dist/cjs/heartbeat.js.map +1 -1
  16. package/dist/cjs/index.d.ts +26 -0
  17. package/dist/cjs/index.d.ts.map +1 -1
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/page-tracking.d.ts +25 -0
  20. package/dist/cjs/page-tracking.d.ts.map +1 -1
  21. package/dist/cjs/page-tracking.js +162 -9
  22. package/dist/cjs/page-tracking.js.map +1 -1
  23. package/dist/countries.d.ts +13 -0
  24. package/dist/countries.d.ts.map +1 -0
  25. package/dist/countries.js +2907 -0
  26. package/dist/esm/attribution.d.ts +47 -0
  27. package/dist/esm/attribution.d.ts.map +1 -0
  28. package/dist/esm/attribution.js +218 -0
  29. package/dist/esm/attribution.js.map +1 -0
  30. package/dist/esm/countries.d.ts +13 -0
  31. package/dist/esm/countries.d.ts.map +1 -0
  32. package/dist/esm/countries.js +2902 -0
  33. package/dist/esm/countries.js.map +1 -0
  34. package/dist/esm/heartbeat.d.ts +1 -0
  35. package/dist/esm/heartbeat.d.ts.map +1 -1
  36. package/dist/esm/heartbeat.js +1 -1
  37. package/dist/esm/heartbeat.js.map +1 -1
  38. package/dist/esm/index.d.ts +26 -0
  39. package/dist/esm/index.d.ts.map +1 -1
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/page-tracking.d.ts +25 -0
  42. package/dist/esm/page-tracking.d.ts.map +1 -1
  43. package/dist/esm/page-tracking.js +162 -9
  44. package/dist/esm/page-tracking.js.map +1 -1
  45. package/dist/heartbeat.d.ts +1 -0
  46. package/dist/heartbeat.d.ts.map +1 -1
  47. package/dist/heartbeat.js +1 -1
  48. package/dist/index.d.ts +26 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.global.dev.js +3361 -11
  51. package/dist/index.global.dev.js.map +3 -3
  52. package/dist/index.global.js +2 -2
  53. package/dist/index.global.js.map +4 -4
  54. package/dist/index.js +162 -1
  55. package/dist/index.mjs +157 -0
  56. package/dist/page-tracking.d.ts +25 -0
  57. package/dist/page-tracking.d.ts.map +1 -1
  58. package/dist/page-tracking.js +162 -9
  59. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /* Grain Analytics Web SDK v2.2.1 | MIT License | Development Build */
1
+ /* Grain Analytics Web SDK v2.4.0 | MIT License | Development Build */
2
2
  "use strict";
3
3
  var Grain = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -23,8 +23,13 @@ var Grain = (() => {
23
23
  var src_exports = {};
24
24
  __export(src_exports, {
25
25
  GrainAnalytics: () => GrainAnalytics,
26
+ categorizeReferrer: () => categorizeReferrer,
26
27
  createGrainAnalytics: () => createGrainAnalytics,
27
- default: () => src_default
28
+ default: () => src_default,
29
+ getCountry: () => getCountry,
30
+ getCountryCodeFromTimezone: () => getCountryCodeFromTimezone,
31
+ getState: () => getState,
32
+ parseUTMParameters: () => parseUTMParameters
28
33
  });
29
34
 
30
35
  // src/consent.ts
@@ -456,7 +461,6 @@ var Grain = (() => {
456
461
  const isActive = this.activityDetector.isActive(6e4);
457
462
  const hasConsent = this.tracker.hasConsent("analytics");
458
463
  const properties = {
459
- type: "heartbeat",
460
464
  heartbeat_type: heartbeatType,
461
465
  status: isActive ? "active" : "inactive",
462
466
  timestamp: now
@@ -466,6 +470,7 @@ var Grain = (() => {
466
470
  if (page) {
467
471
  properties.page = page;
468
472
  }
473
+ properties.session_id = this.tracker.getSessionId();
469
474
  if (heartbeatType === "periodic") {
470
475
  properties.duration = now - this.lastHeartbeatTime;
471
476
  properties.event_count = this.tracker.getEventCountSinceLastHeartbeat();
@@ -495,6 +500,3066 @@ var Grain = (() => {
495
500
  }
496
501
  };
497
502
 
503
+ // src/attribution.ts
504
+ var PAID_SEARCH_PARAMS = [
505
+ "gclid",
506
+ // Google Ads
507
+ "msclkid",
508
+ // Microsoft Ads
509
+ "fbclid",
510
+ // Facebook Ads
511
+ "ttclid",
512
+ // TikTok Ads
513
+ "li_fat_id",
514
+ // LinkedIn Ads
515
+ "twclid",
516
+ // Twitter Ads
517
+ "ScCid"
518
+ // Snapchat Ads
519
+ ];
520
+ var SOCIAL_DOMAINS = [
521
+ "facebook.com",
522
+ "twitter.com",
523
+ "x.com",
524
+ "linkedin.com",
525
+ "instagram.com",
526
+ "pinterest.com",
527
+ "reddit.com",
528
+ "tiktok.com",
529
+ "youtube.com",
530
+ "snapchat.com",
531
+ "t.co",
532
+ // Twitter short links
533
+ "fb.me",
534
+ // Facebook short links
535
+ "lnkd.in"
536
+ // LinkedIn short links
537
+ ];
538
+ var SEARCH_ENGINES = [
539
+ "google.",
540
+ "bing.com",
541
+ "yahoo.com",
542
+ "duckduckgo.com",
543
+ "baidu.com",
544
+ "yandex.com",
545
+ "ecosia.org",
546
+ "ask.com"
547
+ ];
548
+ var EMAIL_DOMAINS = [
549
+ "mail.google.com",
550
+ "outlook.live.com",
551
+ "mail.yahoo.com",
552
+ "mail.aol.com"
553
+ ];
554
+ function extractDomain(url) {
555
+ try {
556
+ const urlObj = new URL(url);
557
+ return urlObj.hostname.toLowerCase();
558
+ } catch {
559
+ return "";
560
+ }
561
+ }
562
+ function hasPaidSearchParams(url) {
563
+ try {
564
+ const urlObj = new URL(url);
565
+ return PAID_SEARCH_PARAMS.some((param) => urlObj.searchParams.has(param));
566
+ } catch {
567
+ return false;
568
+ }
569
+ }
570
+ function categorizeReferrer(referrer, currentUrl = "") {
571
+ if (!referrer || referrer.trim() === "") {
572
+ return "direct";
573
+ }
574
+ const domain = extractDomain(referrer);
575
+ if (currentUrl) {
576
+ const currentDomain = extractDomain(currentUrl);
577
+ if (domain === currentDomain) {
578
+ return "direct";
579
+ }
580
+ }
581
+ if (hasPaidSearchParams(referrer) || hasPaidSearchParams(currentUrl)) {
582
+ return "paid";
583
+ }
584
+ if (EMAIL_DOMAINS.some((emailDomain) => domain.includes(emailDomain))) {
585
+ return "email";
586
+ }
587
+ if (SOCIAL_DOMAINS.some((socialDomain) => domain.includes(socialDomain))) {
588
+ return "social";
589
+ }
590
+ if (SEARCH_ENGINES.some((searchEngine) => domain.includes(searchEngine))) {
591
+ return "organic";
592
+ }
593
+ return "referral";
594
+ }
595
+ function parseUTMParameters(url) {
596
+ try {
597
+ const urlObj = new URL(url);
598
+ const params = {};
599
+ const utmSource = urlObj.searchParams.get("utm_source");
600
+ const utmMedium = urlObj.searchParams.get("utm_medium");
601
+ const utmCampaign = urlObj.searchParams.get("utm_campaign");
602
+ const utmTerm = urlObj.searchParams.get("utm_term");
603
+ const utmContent = urlObj.searchParams.get("utm_content");
604
+ if (utmSource)
605
+ params.utm_source = utmSource;
606
+ if (utmMedium)
607
+ params.utm_medium = utmMedium;
608
+ if (utmCampaign)
609
+ params.utm_campaign = utmCampaign;
610
+ if (utmTerm)
611
+ params.utm_term = utmTerm;
612
+ if (utmContent)
613
+ params.utm_content = utmContent;
614
+ return params;
615
+ } catch {
616
+ return {};
617
+ }
618
+ }
619
+ function getFirstTouchAttribution(tenantId) {
620
+ if (typeof window === "undefined" || typeof localStorage === "undefined") {
621
+ return null;
622
+ }
623
+ try {
624
+ const key = `_grain_first_touch_${tenantId}`;
625
+ const stored = localStorage.getItem(key);
626
+ if (stored) {
627
+ return JSON.parse(stored);
628
+ }
629
+ } catch (error) {
630
+ console.warn("[Grain Attribution] Failed to retrieve first-touch attribution:", error);
631
+ }
632
+ return null;
633
+ }
634
+ function setFirstTouchAttribution(tenantId, attribution) {
635
+ if (typeof window === "undefined" || typeof localStorage === "undefined") {
636
+ return;
637
+ }
638
+ try {
639
+ const key = `_grain_first_touch_${tenantId}`;
640
+ localStorage.setItem(key, JSON.stringify(attribution));
641
+ } catch (error) {
642
+ console.warn("[Grain Attribution] Failed to store first-touch attribution:", error);
643
+ }
644
+ }
645
+ function getOrCreateFirstTouchAttribution(tenantId, referrer, currentUrl, utmParams) {
646
+ const existing = getFirstTouchAttribution(tenantId);
647
+ if (existing) {
648
+ return existing;
649
+ }
650
+ const referrerCategory = categorizeReferrer(referrer, currentUrl);
651
+ const referrerDomain = extractDomain(referrer);
652
+ const firstTouch = {
653
+ source: utmParams.utm_source || referrerDomain || "direct",
654
+ medium: utmParams.utm_medium || referrerCategory,
655
+ campaign: utmParams.utm_campaign || "none",
656
+ referrer: referrer || "direct",
657
+ referrer_category: referrerCategory,
658
+ timestamp: Date.now()
659
+ };
660
+ setFirstTouchAttribution(tenantId, firstTouch);
661
+ return firstTouch;
662
+ }
663
+ var sessionUTMParams = null;
664
+ function getSessionUTMParameters() {
665
+ return sessionUTMParams;
666
+ }
667
+ function setSessionUTMParameters(params) {
668
+ sessionUTMParams = params;
669
+ }
670
+
671
+ // src/countries.ts
672
+ var countries = {
673
+ AD: "Andorra",
674
+ AE: "United Arab Emirates",
675
+ AF: "Afghanistan",
676
+ AG: "Antigua and Barbuda",
677
+ AI: "Anguilla",
678
+ AL: "Albania",
679
+ AM: "Armenia",
680
+ AO: "Angola",
681
+ AQ: "Antarctica",
682
+ AR: "Argentina",
683
+ AS: "American Samoa",
684
+ AT: "Austria",
685
+ AU: "Australia",
686
+ AW: "Aruba",
687
+ AX: "\xC5land Islands",
688
+ AZ: "Azerbaijan",
689
+ BA: "Bosnia and Herzegovina",
690
+ BB: "Barbados",
691
+ BD: "Bangladesh",
692
+ BE: "Belgium",
693
+ BF: "Burkina Faso",
694
+ BG: "Bulgaria",
695
+ BH: "Bahrain",
696
+ BI: "Burundi",
697
+ BJ: "Benin",
698
+ BL: "Saint Barth\xE9lemy",
699
+ BM: "Bermuda",
700
+ BN: "Brunei",
701
+ BO: "Bolivia",
702
+ BQ: "Caribbean Netherlands",
703
+ BR: "Brazil",
704
+ BS: "Bahamas",
705
+ BT: "Bhutan",
706
+ BV: "Bouvet Island",
707
+ BW: "Botswana",
708
+ BY: "Belarus",
709
+ BZ: "Belize",
710
+ CA: "Canada",
711
+ CC: "Cocos Islands",
712
+ CD: "Democratic Republic of the Congo",
713
+ CF: "Central African Republic",
714
+ CG: "Republic of the Congo",
715
+ CH: "Switzerland",
716
+ CI: "Ivory Coast",
717
+ CK: "Cook Islands",
718
+ CL: "Chile",
719
+ CM: "Cameroon",
720
+ CN: "China",
721
+ CO: "Colombia",
722
+ CR: "Costa Rica",
723
+ CU: "Cuba",
724
+ CV: "Cabo Verde",
725
+ CW: "Cura\xE7ao",
726
+ CX: "Christmas Island",
727
+ CY: "Cyprus",
728
+ CZ: "Czechia",
729
+ DE: "Germany",
730
+ DJ: "Djibouti",
731
+ DK: "Denmark",
732
+ DM: "Dominica",
733
+ DO: "Dominican Republic",
734
+ DZ: "Algeria",
735
+ EC: "Ecuador",
736
+ EE: "Estonia",
737
+ EG: "Egypt",
738
+ EH: "Western Sahara",
739
+ ER: "Eritrea",
740
+ ES: "Spain",
741
+ ET: "Ethiopia",
742
+ FI: "Finland",
743
+ FJ: "Fiji",
744
+ FK: "Falkland Islands",
745
+ FM: "Micronesia",
746
+ FO: "Faroe Islands",
747
+ FR: "France",
748
+ GA: "Gabon",
749
+ GB: "United Kingdom",
750
+ GD: "Grenada",
751
+ GE: "Georgia",
752
+ GF: "French Guiana",
753
+ GG: "Guernsey",
754
+ GH: "Ghana",
755
+ GI: "Gibraltar",
756
+ GL: "Greenland",
757
+ GM: "Gambia",
758
+ GN: "Guinea",
759
+ GP: "Guadeloupe",
760
+ GQ: "Equatorial Guinea",
761
+ GR: "Greece",
762
+ GS: "South Georgia and the South Sandwich Islands",
763
+ GT: "Guatemala",
764
+ GU: "Guam",
765
+ GW: "Guinea-Bissau",
766
+ GY: "Guyana",
767
+ HK: "Hong Kong",
768
+ HM: "Heard Island and McDonald Islands",
769
+ HN: "Honduras",
770
+ HR: "Croatia",
771
+ HT: "Haiti",
772
+ HU: "Hungary",
773
+ ID: "Indonesia",
774
+ IE: "Ireland",
775
+ IL: "Israel",
776
+ IM: "Isle of Man",
777
+ IN: "India",
778
+ IO: "British Indian Ocean Territory",
779
+ IQ: "Iraq",
780
+ IR: "Iran",
781
+ IS: "Iceland",
782
+ IT: "Italy",
783
+ JE: "Jersey",
784
+ JM: "Jamaica",
785
+ JO: "Jordan",
786
+ JP: "Japan",
787
+ KE: "Kenya",
788
+ KG: "Kyrgyzstan",
789
+ KH: "Cambodia",
790
+ KI: "Kiribati",
791
+ KM: "Comoros",
792
+ KN: "Saint Kitts and Nevis",
793
+ KP: "North Korea",
794
+ KR: "South Korea",
795
+ KW: "Kuwait",
796
+ KY: "Cayman Islands",
797
+ KZ: "Kazakhstan",
798
+ LA: "Laos",
799
+ LB: "Lebanon",
800
+ LC: "Saint Lucia",
801
+ LI: "Liechtenstein",
802
+ LK: "Sri Lanka",
803
+ LR: "Liberia",
804
+ LS: "Lesotho",
805
+ LT: "Lithuania",
806
+ LU: "Luxembourg",
807
+ LV: "Latvia",
808
+ LY: "Libya",
809
+ MA: "Morocco",
810
+ MC: "Monaco",
811
+ MD: "Moldova",
812
+ ME: "Montenegro",
813
+ MF: "Saint Martin",
814
+ MG: "Madagascar",
815
+ MH: "Marshall Islands",
816
+ MK: "North Macedonia",
817
+ ML: "Mali",
818
+ MM: "Myanmar",
819
+ MN: "Mongolia",
820
+ MO: "Macao",
821
+ MP: "Northern Mariana Islands",
822
+ MQ: "Martinique",
823
+ MR: "Mauritania",
824
+ MS: "Montserrat",
825
+ MT: "Malta",
826
+ MU: "Mauritius",
827
+ MV: "Maldives",
828
+ MW: "Malawi",
829
+ MX: "Mexico",
830
+ MY: "Malaysia",
831
+ MZ: "Mozambique",
832
+ NA: "Namibia",
833
+ NC: "New Caledonia",
834
+ NE: "Niger",
835
+ NF: "Norfolk Island",
836
+ NG: "Nigeria",
837
+ NI: "Nicaragua",
838
+ NL: "Netherlands",
839
+ NO: "Norway",
840
+ NP: "Nepal",
841
+ NR: "Nauru",
842
+ NU: "Niue",
843
+ NZ: "New Zealand",
844
+ OM: "Oman",
845
+ PA: "Panama",
846
+ PE: "Peru",
847
+ PF: "French Polynesia",
848
+ PG: "Papua New Guinea",
849
+ PH: "Philippines",
850
+ PK: "Pakistan",
851
+ PL: "Poland",
852
+ PM: "Saint Pierre and Miquelon",
853
+ PN: "Pitcairn",
854
+ PR: "Puerto Rico",
855
+ PS: "Palestine",
856
+ PT: "Portugal",
857
+ PW: "Palau",
858
+ PY: "Paraguay",
859
+ QA: "Qatar",
860
+ RE: "R\xE9union",
861
+ RO: "Romania",
862
+ RS: "Serbia",
863
+ RU: "Russia",
864
+ RW: "Rwanda",
865
+ SA: "Saudi Arabia",
866
+ SB: "Solomon Islands",
867
+ SC: "Seychelles",
868
+ SD: "Sudan",
869
+ SE: "Sweden",
870
+ SG: "Singapore",
871
+ SH: "Saint Helena, Ascension and Tristan da Cunha",
872
+ SI: "Slovenia",
873
+ SJ: "Svalbard and Jan Mayen",
874
+ SK: "Slovakia",
875
+ SL: "Sierra Leone",
876
+ SM: "San Marino",
877
+ SN: "Senegal",
878
+ SO: "Somalia",
879
+ SR: "Suriname",
880
+ SS: "South Sudan",
881
+ ST: "Sao Tome and Principe",
882
+ SV: "El Salvador",
883
+ SX: "Sint Maarten",
884
+ SY: "Syria",
885
+ SZ: "Eswatini",
886
+ TC: "Turks and Caicos Islands",
887
+ TD: "Chad",
888
+ TF: "French Southern Territories",
889
+ TG: "Togo",
890
+ TH: "Thailand",
891
+ TJ: "Tajikistan",
892
+ TK: "Tokelau",
893
+ TL: "Timor-Leste",
894
+ TM: "Turkmenistan",
895
+ TN: "Tunisia",
896
+ TO: "Tonga",
897
+ TR: "Turkey",
898
+ TT: "Trinidad and Tobago",
899
+ TV: "Tuvalu",
900
+ TW: "Taiwan",
901
+ TZ: "Tanzania",
902
+ UA: "Ukraine",
903
+ UG: "Uganda",
904
+ UM: "United States Minor Outlying Islands",
905
+ US: "United States of America",
906
+ UY: "Uruguay",
907
+ UZ: "Uzbekistan",
908
+ VA: "Holy See",
909
+ VC: "Saint Vincent and the Grenadines",
910
+ VE: "Venezuela",
911
+ VG: "Virgin Islands (UK)",
912
+ VI: "Virgin Islands (US)",
913
+ VN: "Vietnam",
914
+ VU: "Vanuatu",
915
+ WF: "Wallis and Futuna",
916
+ WS: "Samoa",
917
+ YE: "Yemen",
918
+ YT: "Mayotte",
919
+ ZA: "South Africa",
920
+ ZM: "Zambia",
921
+ ZW: "Zimbabwe"
922
+ };
923
+ var timezones = {
924
+ "Africa/Abidjan": {
925
+ u: 0,
926
+ c: ["CI", "BF", "GH", "GM", "GN", "ML", "MR", "SH", "SL", "SN", "TG"]
927
+ },
928
+ "Africa/Accra": {
929
+ a: "Africa/Abidjan",
930
+ c: ["GH"],
931
+ r: 1
932
+ },
933
+ "Africa/Addis_Ababa": {
934
+ a: "Africa/Nairobi",
935
+ c: ["ET"],
936
+ r: 1
937
+ },
938
+ "Africa/Algiers": {
939
+ u: 60,
940
+ c: ["DZ"]
941
+ },
942
+ "Africa/Asmara": {
943
+ a: "Africa/Nairobi",
944
+ c: ["ER"],
945
+ r: 1
946
+ },
947
+ "Africa/Asmera": {
948
+ a: "Africa/Nairobi",
949
+ c: ["ER"],
950
+ r: 1
951
+ },
952
+ "Africa/Bamako": {
953
+ a: "Africa/Abidjan",
954
+ c: ["ML"],
955
+ r: 1
956
+ },
957
+ "Africa/Bangui": {
958
+ a: "Africa/Lagos",
959
+ c: ["CF"],
960
+ r: 1
961
+ },
962
+ "Africa/Banjul": {
963
+ a: "Africa/Abidjan",
964
+ c: ["GM"],
965
+ r: 1
966
+ },
967
+ "Africa/Bissau": {
968
+ u: 0,
969
+ c: ["GW"]
970
+ },
971
+ "Africa/Blantyre": {
972
+ a: "Africa/Maputo",
973
+ c: ["MW"],
974
+ r: 1
975
+ },
976
+ "Africa/Brazzaville": {
977
+ a: "Africa/Lagos",
978
+ c: ["CG"],
979
+ r: 1
980
+ },
981
+ "Africa/Bujumbura": {
982
+ a: "Africa/Maputo",
983
+ c: ["BI"],
984
+ r: 1
985
+ },
986
+ "Africa/Cairo": {
987
+ u: 120,
988
+ c: ["EG"]
989
+ },
990
+ "Africa/Casablanca": {
991
+ u: 60,
992
+ d: 0,
993
+ c: ["MA"]
994
+ },
995
+ "Africa/Ceuta": {
996
+ u: 60,
997
+ d: 120,
998
+ c: ["ES"]
999
+ },
1000
+ "Africa/Conakry": {
1001
+ a: "Africa/Abidjan",
1002
+ c: ["GN"],
1003
+ r: 1
1004
+ },
1005
+ "Africa/Dakar": {
1006
+ a: "Africa/Abidjan",
1007
+ c: ["SN"],
1008
+ r: 1
1009
+ },
1010
+ "Africa/Dar_es_Salaam": {
1011
+ a: "Africa/Nairobi",
1012
+ c: ["TZ"],
1013
+ r: 1
1014
+ },
1015
+ "Africa/Djibouti": {
1016
+ a: "Africa/Nairobi",
1017
+ c: ["DJ"],
1018
+ r: 1
1019
+ },
1020
+ "Africa/Douala": {
1021
+ a: "Africa/Lagos",
1022
+ c: ["CM"],
1023
+ r: 1
1024
+ },
1025
+ "Africa/El_Aaiun": {
1026
+ u: 60,
1027
+ d: 0,
1028
+ c: ["EH"]
1029
+ },
1030
+ "Africa/Freetown": {
1031
+ a: "Africa/Abidjan",
1032
+ c: ["SL"],
1033
+ r: 1
1034
+ },
1035
+ "Africa/Gaborone": {
1036
+ a: "Africa/Maputo",
1037
+ c: ["BW"],
1038
+ r: 1
1039
+ },
1040
+ "Africa/Harare": {
1041
+ a: "Africa/Maputo",
1042
+ c: ["ZW"],
1043
+ r: 1
1044
+ },
1045
+ "Africa/Johannesburg": {
1046
+ u: 120,
1047
+ c: ["ZA", "LS", "SZ"]
1048
+ },
1049
+ "Africa/Juba": {
1050
+ u: 120,
1051
+ c: ["SS"]
1052
+ },
1053
+ "Africa/Kampala": {
1054
+ a: "Africa/Nairobi",
1055
+ c: ["UG"],
1056
+ r: 1
1057
+ },
1058
+ "Africa/Khartoum": {
1059
+ u: 120,
1060
+ c: ["SD"]
1061
+ },
1062
+ "Africa/Kigali": {
1063
+ a: "Africa/Maputo",
1064
+ c: ["RW"],
1065
+ r: 1
1066
+ },
1067
+ "Africa/Kinshasa": {
1068
+ a: "Africa/Lagos",
1069
+ c: ["CD"],
1070
+ r: 1
1071
+ },
1072
+ "Africa/Lagos": {
1073
+ u: 60,
1074
+ c: ["NG", "AO", "BJ", "CD", "CF", "CG", "CM", "GA", "GQ", "NE"]
1075
+ },
1076
+ "Africa/Libreville": {
1077
+ a: "Africa/Lagos",
1078
+ c: ["GA"],
1079
+ r: 1
1080
+ },
1081
+ "Africa/Lome": {
1082
+ a: "Africa/Abidjan",
1083
+ c: ["TG"],
1084
+ r: 1
1085
+ },
1086
+ "Africa/Luanda": {
1087
+ a: "Africa/Lagos",
1088
+ c: ["AO"],
1089
+ r: 1
1090
+ },
1091
+ "Africa/Lubumbashi": {
1092
+ a: "Africa/Maputo",
1093
+ c: ["CD"],
1094
+ r: 1
1095
+ },
1096
+ "Africa/Lusaka": {
1097
+ a: "Africa/Maputo",
1098
+ c: ["ZM"],
1099
+ r: 1
1100
+ },
1101
+ "Africa/Malabo": {
1102
+ a: "Africa/Lagos",
1103
+ c: ["GQ"],
1104
+ r: 1
1105
+ },
1106
+ "Africa/Maputo": {
1107
+ u: 120,
1108
+ c: ["MZ", "BI", "BW", "CD", "MW", "RW", "ZM", "ZW"]
1109
+ },
1110
+ "Africa/Maseru": {
1111
+ a: "Africa/Johannesburg",
1112
+ c: ["LS"],
1113
+ r: 1
1114
+ },
1115
+ "Africa/Mbabane": {
1116
+ a: "Africa/Johannesburg",
1117
+ c: ["SZ"],
1118
+ r: 1
1119
+ },
1120
+ "Africa/Mogadishu": {
1121
+ a: "Africa/Nairobi",
1122
+ c: ["SO"],
1123
+ r: 1
1124
+ },
1125
+ "Africa/Monrovia": {
1126
+ u: 0,
1127
+ c: ["LR"]
1128
+ },
1129
+ "Africa/Nairobi": {
1130
+ u: 180,
1131
+ c: ["KE", "DJ", "ER", "ET", "KM", "MG", "SO", "TZ", "UG", "YT"]
1132
+ },
1133
+ "Africa/Ndjamena": {
1134
+ u: 60,
1135
+ c: ["TD"]
1136
+ },
1137
+ "Africa/Niamey": {
1138
+ a: "Africa/Lagos",
1139
+ c: ["NE"],
1140
+ r: 1
1141
+ },
1142
+ "Africa/Nouakchott": {
1143
+ a: "Africa/Abidjan",
1144
+ c: ["MR"],
1145
+ r: 1
1146
+ },
1147
+ "Africa/Ouagadougou": {
1148
+ a: "Africa/Abidjan",
1149
+ c: ["BF"],
1150
+ r: 1
1151
+ },
1152
+ "Africa/Porto-Novo": {
1153
+ a: "Africa/Lagos",
1154
+ c: ["BJ"],
1155
+ r: 1
1156
+ },
1157
+ "Africa/Sao_Tome": {
1158
+ u: 0,
1159
+ c: ["ST"]
1160
+ },
1161
+ "Africa/Timbuktu": {
1162
+ a: "Africa/Abidjan",
1163
+ c: ["ML"],
1164
+ r: 1
1165
+ },
1166
+ "Africa/Tripoli": {
1167
+ u: 120,
1168
+ c: ["LY"]
1169
+ },
1170
+ "Africa/Tunis": {
1171
+ u: 60,
1172
+ c: ["TN"]
1173
+ },
1174
+ "Africa/Windhoek": {
1175
+ u: 120,
1176
+ c: ["NA"]
1177
+ },
1178
+ "America/Adak": {
1179
+ u: -600,
1180
+ d: -540,
1181
+ c: ["US"]
1182
+ },
1183
+ "America/Anchorage": {
1184
+ u: -540,
1185
+ d: -480,
1186
+ c: ["US"]
1187
+ },
1188
+ "America/Anguilla": {
1189
+ a: "America/Puerto_Rico",
1190
+ c: ["AI"],
1191
+ r: 1
1192
+ },
1193
+ "America/Antigua": {
1194
+ a: "America/Puerto_Rico",
1195
+ c: ["AG"],
1196
+ r: 1
1197
+ },
1198
+ "America/Araguaina": {
1199
+ u: -180,
1200
+ c: ["BR"]
1201
+ },
1202
+ "America/Argentina/Buenos_Aires": {
1203
+ u: -180,
1204
+ c: ["AR"]
1205
+ },
1206
+ "America/Argentina/Catamarca": {
1207
+ u: -180,
1208
+ c: ["AR"]
1209
+ },
1210
+ "America/Argentina/ComodRivadavia": {
1211
+ a: "America/Argentina/Catamarca",
1212
+ r: 1
1213
+ },
1214
+ "America/Argentina/Cordoba": {
1215
+ u: -180,
1216
+ c: ["AR"]
1217
+ },
1218
+ "America/Argentina/Jujuy": {
1219
+ u: -180,
1220
+ c: ["AR"]
1221
+ },
1222
+ "America/Argentina/La_Rioja": {
1223
+ u: -180,
1224
+ c: ["AR"]
1225
+ },
1226
+ "America/Argentina/Mendoza": {
1227
+ u: -180,
1228
+ c: ["AR"]
1229
+ },
1230
+ "America/Argentina/Rio_Gallegos": {
1231
+ u: -180,
1232
+ c: ["AR"]
1233
+ },
1234
+ "America/Argentina/Salta": {
1235
+ u: -180,
1236
+ c: ["AR"]
1237
+ },
1238
+ "America/Argentina/San_Juan": {
1239
+ u: -180,
1240
+ c: ["AR"]
1241
+ },
1242
+ "America/Argentina/San_Luis": {
1243
+ u: -180,
1244
+ c: ["AR"]
1245
+ },
1246
+ "America/Argentina/Tucuman": {
1247
+ u: -180,
1248
+ c: ["AR"]
1249
+ },
1250
+ "America/Argentina/Ushuaia": {
1251
+ u: -180,
1252
+ c: ["AR"]
1253
+ },
1254
+ "America/Aruba": {
1255
+ a: "America/Puerto_Rico",
1256
+ c: ["AW"],
1257
+ r: 1
1258
+ },
1259
+ "America/Asuncion": {
1260
+ u: -240,
1261
+ d: -180,
1262
+ c: ["PY"]
1263
+ },
1264
+ "America/Atikokan": {
1265
+ a: "America/Panama",
1266
+ c: ["CA"],
1267
+ r: 1
1268
+ },
1269
+ "America/Atka": {
1270
+ a: "America/Adak",
1271
+ r: 1
1272
+ },
1273
+ "America/Bahia": {
1274
+ u: -180,
1275
+ c: ["BR"]
1276
+ },
1277
+ "America/Bahia_Banderas": {
1278
+ u: -360,
1279
+ d: -300,
1280
+ c: ["MX"]
1281
+ },
1282
+ "America/Barbados": {
1283
+ u: -240,
1284
+ c: ["BB"]
1285
+ },
1286
+ "America/Belem": {
1287
+ u: -180,
1288
+ c: ["BR"]
1289
+ },
1290
+ "America/Belize": {
1291
+ u: -360,
1292
+ c: ["BZ"]
1293
+ },
1294
+ "America/Blanc-Sablon": {
1295
+ a: "America/Puerto_Rico",
1296
+ c: ["CA"],
1297
+ r: 1
1298
+ },
1299
+ "America/Boa_Vista": {
1300
+ u: -240,
1301
+ c: ["BR"]
1302
+ },
1303
+ "America/Bogota": {
1304
+ u: -300,
1305
+ c: ["CO"]
1306
+ },
1307
+ "America/Boise": {
1308
+ u: -420,
1309
+ d: -360,
1310
+ c: ["US"]
1311
+ },
1312
+ "America/Buenos_Aires": {
1313
+ a: "America/Argentina/Buenos_Aires",
1314
+ r: 1
1315
+ },
1316
+ "America/Cambridge_Bay": {
1317
+ u: -420,
1318
+ d: -360,
1319
+ c: ["CA"]
1320
+ },
1321
+ "America/Campo_Grande": {
1322
+ u: -240,
1323
+ c: ["BR"]
1324
+ },
1325
+ "America/Cancun": {
1326
+ u: -300,
1327
+ c: ["MX"]
1328
+ },
1329
+ "America/Caracas": {
1330
+ u: -240,
1331
+ c: ["VE"]
1332
+ },
1333
+ "America/Catamarca": {
1334
+ a: "America/Argentina/Catamarca",
1335
+ r: 1
1336
+ },
1337
+ "America/Cayenne": {
1338
+ u: -180,
1339
+ c: ["GF"]
1340
+ },
1341
+ "America/Cayman": {
1342
+ a: "America/Panama",
1343
+ c: ["KY"],
1344
+ r: 1
1345
+ },
1346
+ "America/Chicago": {
1347
+ u: -360,
1348
+ d: -300,
1349
+ c: ["US"]
1350
+ },
1351
+ "America/Chihuahua": {
1352
+ u: -420,
1353
+ d: -360,
1354
+ c: ["MX"]
1355
+ },
1356
+ "America/Coral_Harbour": {
1357
+ a: "America/Panama",
1358
+ c: ["CA"],
1359
+ r: 1
1360
+ },
1361
+ "America/Cordoba": {
1362
+ a: "America/Argentina/Cordoba",
1363
+ r: 1
1364
+ },
1365
+ "America/Costa_Rica": {
1366
+ u: -360,
1367
+ c: ["CR"]
1368
+ },
1369
+ "America/Creston": {
1370
+ a: "America/Phoenix",
1371
+ c: ["CA"],
1372
+ r: 1
1373
+ },
1374
+ "America/Cuiaba": {
1375
+ u: -240,
1376
+ c: ["BR"]
1377
+ },
1378
+ "America/Curacao": {
1379
+ a: "America/Puerto_Rico",
1380
+ c: ["CW"],
1381
+ r: 1
1382
+ },
1383
+ "America/Danmarkshavn": {
1384
+ u: 0,
1385
+ c: ["GL"]
1386
+ },
1387
+ "America/Dawson": {
1388
+ u: -420,
1389
+ c: ["CA"]
1390
+ },
1391
+ "America/Dawson_Creek": {
1392
+ u: -420,
1393
+ c: ["CA"]
1394
+ },
1395
+ "America/Denver": {
1396
+ u: -420,
1397
+ d: -360,
1398
+ c: ["US"]
1399
+ },
1400
+ "America/Detroit": {
1401
+ u: -300,
1402
+ d: -240,
1403
+ c: ["US"]
1404
+ },
1405
+ "America/Dominica": {
1406
+ a: "America/Puerto_Rico",
1407
+ c: ["DM"],
1408
+ r: 1
1409
+ },
1410
+ "America/Edmonton": {
1411
+ u: -420,
1412
+ d: -360,
1413
+ c: ["CA"]
1414
+ },
1415
+ "America/Eirunepe": {
1416
+ u: -300,
1417
+ c: ["BR"]
1418
+ },
1419
+ "America/El_Salvador": {
1420
+ u: -360,
1421
+ c: ["SV"]
1422
+ },
1423
+ "America/Ensenada": {
1424
+ a: "America/Tijuana",
1425
+ r: 1
1426
+ },
1427
+ "America/Fort_Nelson": {
1428
+ u: -420,
1429
+ c: ["CA"]
1430
+ },
1431
+ "America/Fort_Wayne": {
1432
+ a: "America/Indiana/Indianapolis",
1433
+ r: 1
1434
+ },
1435
+ "America/Fortaleza": {
1436
+ u: -180,
1437
+ c: ["BR"]
1438
+ },
1439
+ "America/Glace_Bay": {
1440
+ u: -240,
1441
+ d: -180,
1442
+ c: ["CA"]
1443
+ },
1444
+ "America/Godthab": {
1445
+ a: "America/Nuuk",
1446
+ r: 1
1447
+ },
1448
+ "America/Goose_Bay": {
1449
+ u: -240,
1450
+ d: -180,
1451
+ c: ["CA"]
1452
+ },
1453
+ "America/Grand_Turk": {
1454
+ u: -300,
1455
+ d: -240,
1456
+ c: ["TC"]
1457
+ },
1458
+ "America/Grenada": {
1459
+ a: "America/Puerto_Rico",
1460
+ c: ["GD"],
1461
+ r: 1
1462
+ },
1463
+ "America/Guadeloupe": {
1464
+ a: "America/Puerto_Rico",
1465
+ c: ["GP"],
1466
+ r: 1
1467
+ },
1468
+ "America/Guatemala": {
1469
+ u: -360,
1470
+ c: ["GT"]
1471
+ },
1472
+ "America/Guayaquil": {
1473
+ u: -300,
1474
+ c: ["EC"]
1475
+ },
1476
+ "America/Guyana": {
1477
+ u: -240,
1478
+ c: ["GY"]
1479
+ },
1480
+ "America/Halifax": {
1481
+ u: -240,
1482
+ d: -180,
1483
+ c: ["CA"]
1484
+ },
1485
+ "America/Havana": {
1486
+ u: -300,
1487
+ d: -240,
1488
+ c: ["CU"]
1489
+ },
1490
+ "America/Hermosillo": {
1491
+ u: -420,
1492
+ c: ["MX"]
1493
+ },
1494
+ "America/Indiana/Indianapolis": {
1495
+ u: -300,
1496
+ d: -240,
1497
+ c: ["US"]
1498
+ },
1499
+ "America/Indiana/Knox": {
1500
+ u: -360,
1501
+ d: -300,
1502
+ c: ["US"]
1503
+ },
1504
+ "America/Indiana/Marengo": {
1505
+ u: -300,
1506
+ d: -240,
1507
+ c: ["US"]
1508
+ },
1509
+ "America/Indiana/Petersburg": {
1510
+ u: -300,
1511
+ d: -240,
1512
+ c: ["US"]
1513
+ },
1514
+ "America/Indiana/Tell_City": {
1515
+ u: -360,
1516
+ d: -300,
1517
+ c: ["US"]
1518
+ },
1519
+ "America/Indiana/Vevay": {
1520
+ u: -300,
1521
+ d: -240,
1522
+ c: ["US"]
1523
+ },
1524
+ "America/Indiana/Vincennes": {
1525
+ u: -300,
1526
+ d: -240,
1527
+ c: ["US"]
1528
+ },
1529
+ "America/Indiana/Winamac": {
1530
+ u: -300,
1531
+ d: -240,
1532
+ c: ["US"]
1533
+ },
1534
+ "America/Indianapolis": {
1535
+ a: "America/Indiana/Indianapolis",
1536
+ r: 1
1537
+ },
1538
+ "America/Inuvik": {
1539
+ u: -420,
1540
+ d: -360,
1541
+ c: ["CA"]
1542
+ },
1543
+ "America/Iqaluit": {
1544
+ u: -300,
1545
+ d: -240,
1546
+ c: ["CA"]
1547
+ },
1548
+ "America/Jamaica": {
1549
+ u: -300,
1550
+ c: ["JM"]
1551
+ },
1552
+ "America/Jujuy": {
1553
+ a: "America/Argentina/Jujuy",
1554
+ r: 1
1555
+ },
1556
+ "America/Juneau": {
1557
+ u: -540,
1558
+ d: -480,
1559
+ c: ["US"]
1560
+ },
1561
+ "America/Kentucky/Louisville": {
1562
+ u: -300,
1563
+ d: -240,
1564
+ c: ["US"]
1565
+ },
1566
+ "America/Kentucky/Monticello": {
1567
+ u: -300,
1568
+ d: -240,
1569
+ c: ["US"]
1570
+ },
1571
+ "America/Knox_IN": {
1572
+ a: "America/Indiana/Knox",
1573
+ r: 1
1574
+ },
1575
+ "America/Kralendijk": {
1576
+ a: "America/Puerto_Rico",
1577
+ c: ["BQ"],
1578
+ r: 1
1579
+ },
1580
+ "America/La_Paz": {
1581
+ u: -240,
1582
+ c: ["BO"]
1583
+ },
1584
+ "America/Lima": {
1585
+ u: -300,
1586
+ c: ["PE"]
1587
+ },
1588
+ "America/Los_Angeles": {
1589
+ u: -480,
1590
+ d: -420,
1591
+ c: ["US"]
1592
+ },
1593
+ "America/Louisville": {
1594
+ a: "America/Kentucky/Louisville",
1595
+ r: 1
1596
+ },
1597
+ "America/Lower_Princes": {
1598
+ a: "America/Puerto_Rico",
1599
+ c: ["SX"],
1600
+ r: 1
1601
+ },
1602
+ "America/Maceio": {
1603
+ u: -180,
1604
+ c: ["BR"]
1605
+ },
1606
+ "America/Managua": {
1607
+ u: -360,
1608
+ c: ["NI"]
1609
+ },
1610
+ "America/Manaus": {
1611
+ u: -240,
1612
+ c: ["BR"]
1613
+ },
1614
+ "America/Marigot": {
1615
+ a: "America/Puerto_Rico",
1616
+ c: ["MF"],
1617
+ r: 1
1618
+ },
1619
+ "America/Martinique": {
1620
+ u: -240,
1621
+ c: ["MQ"]
1622
+ },
1623
+ "America/Matamoros": {
1624
+ u: -360,
1625
+ d: -300,
1626
+ c: ["MX"]
1627
+ },
1628
+ "America/Mazatlan": {
1629
+ u: -420,
1630
+ d: -360,
1631
+ c: ["MX"]
1632
+ },
1633
+ "America/Mendoza": {
1634
+ a: "America/Argentina/Mendoza",
1635
+ r: 1
1636
+ },
1637
+ "America/Menominee": {
1638
+ u: -360,
1639
+ d: -300,
1640
+ c: ["US"]
1641
+ },
1642
+ "America/Merida": {
1643
+ u: -360,
1644
+ d: -300,
1645
+ c: ["MX"]
1646
+ },
1647
+ "America/Metlakatla": {
1648
+ u: -540,
1649
+ d: -480,
1650
+ c: ["US"]
1651
+ },
1652
+ "America/Mexico_City": {
1653
+ u: -360,
1654
+ d: -300,
1655
+ c: ["MX"]
1656
+ },
1657
+ "America/Miquelon": {
1658
+ u: -180,
1659
+ d: -120,
1660
+ c: ["PM"]
1661
+ },
1662
+ "America/Moncton": {
1663
+ u: -240,
1664
+ d: -180,
1665
+ c: ["CA"]
1666
+ },
1667
+ "America/Monterrey": {
1668
+ u: -360,
1669
+ d: -300,
1670
+ c: ["MX"]
1671
+ },
1672
+ "America/Montevideo": {
1673
+ u: -180,
1674
+ c: ["UY"]
1675
+ },
1676
+ "America/Montreal": {
1677
+ a: "America/Toronto",
1678
+ c: ["CA"],
1679
+ r: 1
1680
+ },
1681
+ "America/Montserrat": {
1682
+ a: "America/Puerto_Rico",
1683
+ c: ["MS"],
1684
+ r: 1
1685
+ },
1686
+ "America/Nassau": {
1687
+ a: "America/Toronto",
1688
+ c: ["BS"],
1689
+ r: 1
1690
+ },
1691
+ "America/New_York": {
1692
+ u: -300,
1693
+ d: -240,
1694
+ c: ["US"]
1695
+ },
1696
+ "America/Nipigon": {
1697
+ u: -300,
1698
+ d: -240,
1699
+ c: ["CA"]
1700
+ },
1701
+ "America/Nome": {
1702
+ u: -540,
1703
+ d: -480,
1704
+ c: ["US"]
1705
+ },
1706
+ "America/Noronha": {
1707
+ u: -120,
1708
+ c: ["BR"]
1709
+ },
1710
+ "America/North_Dakota/Beulah": {
1711
+ u: -360,
1712
+ d: -300,
1713
+ c: ["US"]
1714
+ },
1715
+ "America/North_Dakota/Center": {
1716
+ u: -360,
1717
+ d: -300,
1718
+ c: ["US"]
1719
+ },
1720
+ "America/North_Dakota/New_Salem": {
1721
+ u: -360,
1722
+ d: -300,
1723
+ c: ["US"]
1724
+ },
1725
+ "America/Nuuk": {
1726
+ u: -180,
1727
+ d: -120,
1728
+ c: ["GL"]
1729
+ },
1730
+ "America/Ojinaga": {
1731
+ u: -420,
1732
+ d: -360,
1733
+ c: ["MX"]
1734
+ },
1735
+ "America/Panama": {
1736
+ u: -300,
1737
+ c: ["PA", "CA", "KY"]
1738
+ },
1739
+ "America/Pangnirtung": {
1740
+ u: -300,
1741
+ d: -240,
1742
+ c: ["CA"]
1743
+ },
1744
+ "America/Paramaribo": {
1745
+ u: -180,
1746
+ c: ["SR"]
1747
+ },
1748
+ "America/Phoenix": {
1749
+ u: -420,
1750
+ c: ["US", "CA"]
1751
+ },
1752
+ "America/Port-au-Prince": {
1753
+ u: -300,
1754
+ d: -240,
1755
+ c: ["HT"]
1756
+ },
1757
+ "America/Port_of_Spain": {
1758
+ a: "America/Puerto_Rico",
1759
+ c: ["TT"],
1760
+ r: 1
1761
+ },
1762
+ "America/Porto_Acre": {
1763
+ a: "America/Rio_Branco",
1764
+ r: 1
1765
+ },
1766
+ "America/Porto_Velho": {
1767
+ u: -240,
1768
+ c: ["BR"]
1769
+ },
1770
+ "America/Puerto_Rico": {
1771
+ u: -240,
1772
+ c: [
1773
+ "PR",
1774
+ "AG",
1775
+ "CA",
1776
+ "AI",
1777
+ "AW",
1778
+ "BL",
1779
+ "BQ",
1780
+ "CW",
1781
+ "DM",
1782
+ "GD",
1783
+ "GP",
1784
+ "KN",
1785
+ "LC",
1786
+ "MF",
1787
+ "MS",
1788
+ "SX",
1789
+ "TT",
1790
+ "VC",
1791
+ "VG",
1792
+ "VI"
1793
+ ]
1794
+ },
1795
+ "America/Punta_Arenas": {
1796
+ u: -180,
1797
+ c: ["CL"]
1798
+ },
1799
+ "America/Rainy_River": {
1800
+ u: -360,
1801
+ d: -300,
1802
+ c: ["CA"]
1803
+ },
1804
+ "America/Rankin_Inlet": {
1805
+ u: -360,
1806
+ d: -300,
1807
+ c: ["CA"]
1808
+ },
1809
+ "America/Recife": {
1810
+ u: -180,
1811
+ c: ["BR"]
1812
+ },
1813
+ "America/Regina": {
1814
+ u: -360,
1815
+ c: ["CA"]
1816
+ },
1817
+ "America/Resolute": {
1818
+ u: -360,
1819
+ d: -300,
1820
+ c: ["CA"]
1821
+ },
1822
+ "America/Rio_Branco": {
1823
+ u: -300,
1824
+ c: ["BR"]
1825
+ },
1826
+ "America/Rosario": {
1827
+ a: "America/Argentina/Cordoba",
1828
+ r: 1
1829
+ },
1830
+ "America/Santa_Isabel": {
1831
+ a: "America/Tijuana",
1832
+ r: 1
1833
+ },
1834
+ "America/Santarem": {
1835
+ u: -180,
1836
+ c: ["BR"]
1837
+ },
1838
+ "America/Santiago": {
1839
+ u: -240,
1840
+ d: -180,
1841
+ c: ["CL"]
1842
+ },
1843
+ "America/Santo_Domingo": {
1844
+ u: -240,
1845
+ c: ["DO"]
1846
+ },
1847
+ "America/Sao_Paulo": {
1848
+ u: -180,
1849
+ c: ["BR"]
1850
+ },
1851
+ "America/Scoresbysund": {
1852
+ u: -60,
1853
+ d: 0,
1854
+ c: ["GL"]
1855
+ },
1856
+ "America/Shiprock": {
1857
+ a: "America/Denver",
1858
+ r: 1
1859
+ },
1860
+ "America/Sitka": {
1861
+ u: -540,
1862
+ d: -480,
1863
+ c: ["US"]
1864
+ },
1865
+ "America/St_Barthelemy": {
1866
+ a: "America/Puerto_Rico",
1867
+ c: ["BL"],
1868
+ r: 1
1869
+ },
1870
+ "America/St_Johns": {
1871
+ u: -150,
1872
+ d: -90,
1873
+ c: ["CA"]
1874
+ },
1875
+ "America/St_Kitts": {
1876
+ a: "America/Puerto_Rico",
1877
+ c: ["KN"],
1878
+ r: 1
1879
+ },
1880
+ "America/St_Lucia": {
1881
+ a: "America/Puerto_Rico",
1882
+ c: ["LC"],
1883
+ r: 1
1884
+ },
1885
+ "America/St_Thomas": {
1886
+ a: "America/Puerto_Rico",
1887
+ c: ["VI"],
1888
+ r: 1
1889
+ },
1890
+ "America/St_Vincent": {
1891
+ a: "America/Puerto_Rico",
1892
+ c: ["VC"],
1893
+ r: 1
1894
+ },
1895
+ "America/Swift_Current": {
1896
+ u: -360,
1897
+ c: ["CA"]
1898
+ },
1899
+ "America/Tegucigalpa": {
1900
+ u: -360,
1901
+ c: ["HN"]
1902
+ },
1903
+ "America/Thule": {
1904
+ u: -240,
1905
+ d: -180,
1906
+ c: ["GL"]
1907
+ },
1908
+ "America/Thunder_Bay": {
1909
+ u: -300,
1910
+ d: -240,
1911
+ c: ["CA"]
1912
+ },
1913
+ "America/Tijuana": {
1914
+ u: -480,
1915
+ d: -420,
1916
+ c: ["MX"]
1917
+ },
1918
+ "America/Toronto": {
1919
+ u: -300,
1920
+ d: -240,
1921
+ c: ["CA", "BS"]
1922
+ },
1923
+ "America/Tortola": {
1924
+ a: "America/Puerto_Rico",
1925
+ c: ["VG"],
1926
+ r: 1
1927
+ },
1928
+ "America/Vancouver": {
1929
+ u: -480,
1930
+ d: -420,
1931
+ c: ["CA"]
1932
+ },
1933
+ "America/Virgin": {
1934
+ a: "America/Puerto_Rico",
1935
+ c: ["VI"],
1936
+ r: 1
1937
+ },
1938
+ "America/Whitehorse": {
1939
+ u: -420,
1940
+ c: ["CA"]
1941
+ },
1942
+ "America/Winnipeg": {
1943
+ u: -360,
1944
+ d: -300,
1945
+ c: ["CA"]
1946
+ },
1947
+ "America/Yakutat": {
1948
+ u: -540,
1949
+ d: -480,
1950
+ c: ["US"]
1951
+ },
1952
+ "America/Yellowknife": {
1953
+ u: -420,
1954
+ d: -360,
1955
+ c: ["CA"]
1956
+ },
1957
+ "Antarctica/Casey": {
1958
+ u: 660,
1959
+ c: ["AQ"]
1960
+ },
1961
+ "Antarctica/Davis": {
1962
+ u: 420,
1963
+ c: ["AQ"]
1964
+ },
1965
+ "Antarctica/DumontDUrville": {
1966
+ a: "Pacific/Port_Moresby",
1967
+ c: ["AQ"],
1968
+ r: 1
1969
+ },
1970
+ "Antarctica/Macquarie": {
1971
+ u: 600,
1972
+ d: 660,
1973
+ c: ["AU"]
1974
+ },
1975
+ "Antarctica/Mawson": {
1976
+ u: 300,
1977
+ c: ["AQ"]
1978
+ },
1979
+ "Antarctica/McMurdo": {
1980
+ a: "Pacific/Auckland",
1981
+ c: ["AQ"],
1982
+ r: 1
1983
+ },
1984
+ "Antarctica/Palmer": {
1985
+ u: -180,
1986
+ c: ["AQ"]
1987
+ },
1988
+ "Antarctica/Rothera": {
1989
+ u: -180,
1990
+ c: ["AQ"]
1991
+ },
1992
+ "Antarctica/South_Pole": {
1993
+ a: "Pacific/Auckland",
1994
+ c: ["AQ"],
1995
+ r: 1
1996
+ },
1997
+ "Antarctica/Syowa": {
1998
+ a: "Asia/Riyadh",
1999
+ c: ["AQ"],
2000
+ r: 1
2001
+ },
2002
+ "Antarctica/Troll": {
2003
+ u: 0,
2004
+ d: 120,
2005
+ c: ["AQ"]
2006
+ },
2007
+ "Antarctica/Vostok": {
2008
+ u: 360,
2009
+ c: ["AQ"]
2010
+ },
2011
+ "Arctic/Longyearbyen": {
2012
+ a: "Europe/Oslo",
2013
+ c: ["SJ"],
2014
+ r: 1
2015
+ },
2016
+ "Asia/Aden": {
2017
+ a: "Asia/Riyadh",
2018
+ c: ["YE"],
2019
+ r: 1
2020
+ },
2021
+ "Asia/Almaty": {
2022
+ u: 360,
2023
+ c: ["KZ"]
2024
+ },
2025
+ "Asia/Amman": {
2026
+ u: 120,
2027
+ d: 180,
2028
+ c: ["JO"]
2029
+ },
2030
+ "Asia/Anadyr": {
2031
+ u: 720,
2032
+ c: ["RU"]
2033
+ },
2034
+ "Asia/Aqtau": {
2035
+ u: 300,
2036
+ c: ["KZ"]
2037
+ },
2038
+ "Asia/Aqtobe": {
2039
+ u: 300,
2040
+ c: ["KZ"]
2041
+ },
2042
+ "Asia/Ashgabat": {
2043
+ u: 300,
2044
+ c: ["TM"]
2045
+ },
2046
+ "Asia/Ashkhabad": {
2047
+ a: "Asia/Ashgabat",
2048
+ r: 1
2049
+ },
2050
+ "Asia/Atyrau": {
2051
+ u: 300,
2052
+ c: ["KZ"]
2053
+ },
2054
+ "Asia/Baghdad": {
2055
+ u: 180,
2056
+ c: ["IQ"]
2057
+ },
2058
+ "Asia/Bahrain": {
2059
+ a: "Asia/Qatar",
2060
+ c: ["BH"],
2061
+ r: 1
2062
+ },
2063
+ "Asia/Baku": {
2064
+ u: 240,
2065
+ c: ["AZ"]
2066
+ },
2067
+ "Asia/Bangkok": {
2068
+ u: 420,
2069
+ c: ["TH", "KH", "LA", "VN"]
2070
+ },
2071
+ "Asia/Barnaul": {
2072
+ u: 420,
2073
+ c: ["RU"]
2074
+ },
2075
+ "Asia/Beirut": {
2076
+ u: 120,
2077
+ d: 180,
2078
+ c: ["LB"]
2079
+ },
2080
+ "Asia/Bishkek": {
2081
+ u: 360,
2082
+ c: ["KG"]
2083
+ },
2084
+ "Asia/Brunei": {
2085
+ u: 480,
2086
+ c: ["BN"]
2087
+ },
2088
+ "Asia/Calcutta": {
2089
+ a: "Asia/Kolkata",
2090
+ r: 1
2091
+ },
2092
+ "Asia/Chita": {
2093
+ u: 540,
2094
+ c: ["RU"]
2095
+ },
2096
+ "Asia/Choibalsan": {
2097
+ u: 480,
2098
+ c: ["MN"]
2099
+ },
2100
+ "Asia/Chongqing": {
2101
+ a: "Asia/Shanghai",
2102
+ r: 1
2103
+ },
2104
+ "Asia/Chungking": {
2105
+ a: "Asia/Shanghai",
2106
+ r: 1
2107
+ },
2108
+ "Asia/Colombo": {
2109
+ u: 330,
2110
+ c: ["LK"]
2111
+ },
2112
+ "Asia/Dacca": {
2113
+ a: "Asia/Dhaka",
2114
+ r: 1
2115
+ },
2116
+ "Asia/Damascus": {
2117
+ u: 120,
2118
+ d: 180,
2119
+ c: ["SY"]
2120
+ },
2121
+ "Asia/Dhaka": {
2122
+ u: 360,
2123
+ c: ["BD"]
2124
+ },
2125
+ "Asia/Dili": {
2126
+ u: 540,
2127
+ c: ["TL"]
2128
+ },
2129
+ "Asia/Dubai": {
2130
+ u: 240,
2131
+ c: ["AE", "OM"]
2132
+ },
2133
+ "Asia/Dushanbe": {
2134
+ u: 300,
2135
+ c: ["TJ"]
2136
+ },
2137
+ "Asia/Famagusta": {
2138
+ u: 120,
2139
+ d: 180,
2140
+ c: ["CY"]
2141
+ },
2142
+ "Asia/Gaza": {
2143
+ u: 120,
2144
+ d: 180,
2145
+ c: ["PS"]
2146
+ },
2147
+ "Asia/Harbin": {
2148
+ a: "Asia/Shanghai",
2149
+ r: 1
2150
+ },
2151
+ "Asia/Hebron": {
2152
+ u: 120,
2153
+ d: 180,
2154
+ c: ["PS"]
2155
+ },
2156
+ "Asia/Ho_Chi_Minh": {
2157
+ u: 420,
2158
+ c: ["VN"]
2159
+ },
2160
+ "Asia/Hong_Kong": {
2161
+ u: 480,
2162
+ c: ["HK"]
2163
+ },
2164
+ "Asia/Hovd": {
2165
+ u: 420,
2166
+ c: ["MN"]
2167
+ },
2168
+ "Asia/Irkutsk": {
2169
+ u: 480,
2170
+ c: ["RU"]
2171
+ },
2172
+ "Asia/Istanbul": {
2173
+ a: "Europe/Istanbul",
2174
+ r: 1
2175
+ },
2176
+ "Asia/Jakarta": {
2177
+ u: 420,
2178
+ c: ["ID"]
2179
+ },
2180
+ "Asia/Jayapura": {
2181
+ u: 540,
2182
+ c: ["ID"]
2183
+ },
2184
+ "Asia/Jerusalem": {
2185
+ u: 120,
2186
+ d: 180,
2187
+ c: ["IL"]
2188
+ },
2189
+ "Asia/Kabul": {
2190
+ u: 270,
2191
+ c: ["AF"]
2192
+ },
2193
+ "Asia/Kamchatka": {
2194
+ u: 720,
2195
+ c: ["RU"]
2196
+ },
2197
+ "Asia/Karachi": {
2198
+ u: 300,
2199
+ c: ["PK"]
2200
+ },
2201
+ "Asia/Kashgar": {
2202
+ a: "Asia/Urumqi",
2203
+ r: 1
2204
+ },
2205
+ "Asia/Kathmandu": {
2206
+ u: 345,
2207
+ c: ["NP"]
2208
+ },
2209
+ "Asia/Katmandu": {
2210
+ a: "Asia/Kathmandu",
2211
+ r: 1
2212
+ },
2213
+ "Asia/Khandyga": {
2214
+ u: 540,
2215
+ c: ["RU"]
2216
+ },
2217
+ "Asia/Kolkata": {
2218
+ u: 330,
2219
+ c: ["IN"]
2220
+ },
2221
+ "Asia/Krasnoyarsk": {
2222
+ u: 420,
2223
+ c: ["RU"]
2224
+ },
2225
+ "Asia/Kuala_Lumpur": {
2226
+ u: 480,
2227
+ c: ["MY"]
2228
+ },
2229
+ "Asia/Kuching": {
2230
+ u: 480,
2231
+ c: ["MY"]
2232
+ },
2233
+ "Asia/Kuwait": {
2234
+ a: "Asia/Riyadh",
2235
+ c: ["KW"],
2236
+ r: 1
2237
+ },
2238
+ "Asia/Macao": {
2239
+ a: "Asia/Macau",
2240
+ r: 1
2241
+ },
2242
+ "Asia/Macau": {
2243
+ u: 480,
2244
+ c: ["MO"]
2245
+ },
2246
+ "Asia/Magadan": {
2247
+ u: 660,
2248
+ c: ["RU"]
2249
+ },
2250
+ "Asia/Makassar": {
2251
+ u: 480,
2252
+ c: ["ID"]
2253
+ },
2254
+ "Asia/Manila": {
2255
+ u: 480,
2256
+ c: ["PH"]
2257
+ },
2258
+ "Asia/Muscat": {
2259
+ a: "Asia/Dubai",
2260
+ c: ["OM"],
2261
+ r: 1
2262
+ },
2263
+ "Asia/Nicosia": {
2264
+ u: 120,
2265
+ d: 180,
2266
+ c: ["CY"]
2267
+ },
2268
+ "Asia/Novokuznetsk": {
2269
+ u: 420,
2270
+ c: ["RU"]
2271
+ },
2272
+ "Asia/Novosibirsk": {
2273
+ u: 420,
2274
+ c: ["RU"]
2275
+ },
2276
+ "Asia/Omsk": {
2277
+ u: 360,
2278
+ c: ["RU"]
2279
+ },
2280
+ "Asia/Oral": {
2281
+ u: 300,
2282
+ c: ["KZ"]
2283
+ },
2284
+ "Asia/Phnom_Penh": {
2285
+ a: "Asia/Bangkok",
2286
+ c: ["KH"],
2287
+ r: 1
2288
+ },
2289
+ "Asia/Pontianak": {
2290
+ u: 420,
2291
+ c: ["ID"]
2292
+ },
2293
+ "Asia/Pyongyang": {
2294
+ u: 540,
2295
+ c: ["KP"]
2296
+ },
2297
+ "Asia/Qatar": {
2298
+ u: 180,
2299
+ c: ["QA", "BH"]
2300
+ },
2301
+ "Asia/Qostanay": {
2302
+ u: 360,
2303
+ c: ["KZ"]
2304
+ },
2305
+ "Asia/Qyzylorda": {
2306
+ u: 300,
2307
+ c: ["KZ"]
2308
+ },
2309
+ "Asia/Rangoon": {
2310
+ a: "Asia/Yangon",
2311
+ r: 1
2312
+ },
2313
+ "Asia/Riyadh": {
2314
+ u: 180,
2315
+ c: ["SA", "AQ", "KW", "YE"]
2316
+ },
2317
+ "Asia/Saigon": {
2318
+ a: "Asia/Ho_Chi_Minh",
2319
+ r: 1
2320
+ },
2321
+ "Asia/Sakhalin": {
2322
+ u: 660,
2323
+ c: ["RU"]
2324
+ },
2325
+ "Asia/Samarkand": {
2326
+ u: 300,
2327
+ c: ["UZ"]
2328
+ },
2329
+ "Asia/Seoul": {
2330
+ u: 540,
2331
+ c: ["KR"]
2332
+ },
2333
+ "Asia/Shanghai": {
2334
+ u: 480,
2335
+ c: ["CN"]
2336
+ },
2337
+ "Asia/Singapore": {
2338
+ u: 480,
2339
+ c: ["SG", "MY"]
2340
+ },
2341
+ "Asia/Srednekolymsk": {
2342
+ u: 660,
2343
+ c: ["RU"]
2344
+ },
2345
+ "Asia/Taipei": {
2346
+ u: 480,
2347
+ c: ["TW"]
2348
+ },
2349
+ "Asia/Tashkent": {
2350
+ u: 300,
2351
+ c: ["UZ"]
2352
+ },
2353
+ "Asia/Tbilisi": {
2354
+ u: 240,
2355
+ c: ["GE"]
2356
+ },
2357
+ "Asia/Tehran": {
2358
+ u: 210,
2359
+ d: 270,
2360
+ c: ["IR"]
2361
+ },
2362
+ "Asia/Tel_Aviv": {
2363
+ a: "Asia/Jerusalem",
2364
+ r: 1
2365
+ },
2366
+ "Asia/Thimbu": {
2367
+ a: "Asia/Thimphu",
2368
+ r: 1
2369
+ },
2370
+ "Asia/Thimphu": {
2371
+ u: 360,
2372
+ c: ["BT"]
2373
+ },
2374
+ "Asia/Tokyo": {
2375
+ u: 540,
2376
+ c: ["JP"]
2377
+ },
2378
+ "Asia/Tomsk": {
2379
+ u: 420,
2380
+ c: ["RU"]
2381
+ },
2382
+ "Asia/Ujung_Pandang": {
2383
+ a: "Asia/Makassar",
2384
+ r: 1
2385
+ },
2386
+ "Asia/Ulaanbaatar": {
2387
+ u: 480,
2388
+ c: ["MN"]
2389
+ },
2390
+ "Asia/Ulan_Bator": {
2391
+ a: "Asia/Ulaanbaatar",
2392
+ r: 1
2393
+ },
2394
+ "Asia/Urumqi": {
2395
+ u: 360,
2396
+ c: ["CN"]
2397
+ },
2398
+ "Asia/Ust-Nera": {
2399
+ u: 600,
2400
+ c: ["RU"]
2401
+ },
2402
+ "Asia/Vientiane": {
2403
+ a: "Asia/Bangkok",
2404
+ c: ["LA"],
2405
+ r: 1
2406
+ },
2407
+ "Asia/Vladivostok": {
2408
+ u: 600,
2409
+ c: ["RU"]
2410
+ },
2411
+ "Asia/Yakutsk": {
2412
+ u: 540,
2413
+ c: ["RU"]
2414
+ },
2415
+ "Asia/Yangon": {
2416
+ u: 390,
2417
+ c: ["MM"]
2418
+ },
2419
+ "Asia/Yekaterinburg": {
2420
+ u: 300,
2421
+ c: ["RU"]
2422
+ },
2423
+ "Asia/Yerevan": {
2424
+ u: 240,
2425
+ c: ["AM"]
2426
+ },
2427
+ "Atlantic/Azores": {
2428
+ u: -60,
2429
+ d: 0,
2430
+ c: ["PT"]
2431
+ },
2432
+ "Atlantic/Bermuda": {
2433
+ u: -240,
2434
+ d: -180,
2435
+ c: ["BM"]
2436
+ },
2437
+ "Atlantic/Canary": {
2438
+ u: 0,
2439
+ d: 60,
2440
+ c: ["ES"]
2441
+ },
2442
+ "Atlantic/Cape_Verde": {
2443
+ u: -60,
2444
+ c: ["CV"]
2445
+ },
2446
+ "Atlantic/Faeroe": {
2447
+ a: "Atlantic/Faroe",
2448
+ r: 1
2449
+ },
2450
+ "Atlantic/Faroe": {
2451
+ u: 0,
2452
+ d: 60,
2453
+ c: ["FO"]
2454
+ },
2455
+ "Atlantic/Jan_Mayen": {
2456
+ a: "Europe/Oslo",
2457
+ c: ["SJ"],
2458
+ r: 1
2459
+ },
2460
+ "Atlantic/Madeira": {
2461
+ u: 0,
2462
+ d: 60,
2463
+ c: ["PT"]
2464
+ },
2465
+ "Atlantic/Reykjavik": {
2466
+ u: 0,
2467
+ c: ["IS"]
2468
+ },
2469
+ "Atlantic/South_Georgia": {
2470
+ u: -120,
2471
+ c: ["GS"]
2472
+ },
2473
+ "Atlantic/St_Helena": {
2474
+ a: "Africa/Abidjan",
2475
+ c: ["SH"],
2476
+ r: 1
2477
+ },
2478
+ "Atlantic/Stanley": {
2479
+ u: -180,
2480
+ c: ["FK"]
2481
+ },
2482
+ "Australia/ACT": {
2483
+ a: "Australia/Sydney",
2484
+ r: 1
2485
+ },
2486
+ "Australia/Adelaide": {
2487
+ u: 570,
2488
+ d: 630,
2489
+ c: ["AU"]
2490
+ },
2491
+ "Australia/Brisbane": {
2492
+ u: 600,
2493
+ c: ["AU"]
2494
+ },
2495
+ "Australia/Broken_Hill": {
2496
+ u: 570,
2497
+ d: 630,
2498
+ c: ["AU"]
2499
+ },
2500
+ "Australia/Canberra": {
2501
+ a: "Australia/Sydney",
2502
+ r: 1
2503
+ },
2504
+ "Australia/Currie": {
2505
+ a: "Australia/Hobart",
2506
+ r: 1
2507
+ },
2508
+ "Australia/Darwin": {
2509
+ u: 570,
2510
+ c: ["AU"]
2511
+ },
2512
+ "Australia/Eucla": {
2513
+ u: 525,
2514
+ c: ["AU"]
2515
+ },
2516
+ "Australia/Hobart": {
2517
+ u: 600,
2518
+ d: 660,
2519
+ c: ["AU"]
2520
+ },
2521
+ "Australia/LHI": {
2522
+ a: "Australia/Lord_Howe",
2523
+ r: 1
2524
+ },
2525
+ "Australia/Lindeman": {
2526
+ u: 600,
2527
+ c: ["AU"]
2528
+ },
2529
+ "Australia/Lord_Howe": {
2530
+ u: 630,
2531
+ d: 660,
2532
+ c: ["AU"]
2533
+ },
2534
+ "Australia/Melbourne": {
2535
+ u: 600,
2536
+ d: 660,
2537
+ c: ["AU"]
2538
+ },
2539
+ "Australia/NSW": {
2540
+ a: "Australia/Sydney",
2541
+ r: 1
2542
+ },
2543
+ "Australia/North": {
2544
+ a: "Australia/Darwin",
2545
+ r: 1
2546
+ },
2547
+ "Australia/Perth": {
2548
+ u: 480,
2549
+ c: ["AU"]
2550
+ },
2551
+ "Australia/Queensland": {
2552
+ a: "Australia/Brisbane",
2553
+ r: 1
2554
+ },
2555
+ "Australia/South": {
2556
+ a: "Australia/Adelaide",
2557
+ r: 1
2558
+ },
2559
+ "Australia/Sydney": {
2560
+ u: 600,
2561
+ d: 660,
2562
+ c: ["AU"]
2563
+ },
2564
+ "Australia/Tasmania": {
2565
+ a: "Australia/Hobart",
2566
+ r: 1
2567
+ },
2568
+ "Australia/Victoria": {
2569
+ a: "Australia/Melbourne",
2570
+ r: 1
2571
+ },
2572
+ "Australia/West": {
2573
+ a: "Australia/Perth",
2574
+ r: 1
2575
+ },
2576
+ "Australia/Yancowinna": {
2577
+ a: "Australia/Broken_Hill",
2578
+ r: 1
2579
+ },
2580
+ "Brazil/Acre": {
2581
+ a: "America/Rio_Branco",
2582
+ r: 1
2583
+ },
2584
+ "Brazil/DeNoronha": {
2585
+ a: "America/Noronha",
2586
+ r: 1
2587
+ },
2588
+ "Brazil/East": {
2589
+ a: "America/Sao_Paulo",
2590
+ r: 1
2591
+ },
2592
+ "Brazil/West": {
2593
+ a: "America/Manaus",
2594
+ r: 1
2595
+ },
2596
+ CET: {
2597
+ u: 60,
2598
+ d: 120
2599
+ },
2600
+ CST6CDT: {
2601
+ u: -360,
2602
+ d: -300
2603
+ },
2604
+ "Canada/Atlantic": {
2605
+ a: "America/Halifax",
2606
+ r: 1
2607
+ },
2608
+ "Canada/Central": {
2609
+ a: "America/Winnipeg",
2610
+ r: 1
2611
+ },
2612
+ "Canada/Eastern": {
2613
+ a: "America/Toronto",
2614
+ c: ["CA"],
2615
+ r: 1
2616
+ },
2617
+ "Canada/Mountain": {
2618
+ a: "America/Edmonton",
2619
+ r: 1
2620
+ },
2621
+ "Canada/Newfoundland": {
2622
+ a: "America/St_Johns",
2623
+ r: 1
2624
+ },
2625
+ "Canada/Pacific": {
2626
+ a: "America/Vancouver",
2627
+ r: 1
2628
+ },
2629
+ "Canada/Saskatchewan": {
2630
+ a: "America/Regina",
2631
+ r: 1
2632
+ },
2633
+ "Canada/Yukon": {
2634
+ a: "America/Whitehorse",
2635
+ r: 1
2636
+ },
2637
+ "Chile/Continental": {
2638
+ a: "America/Santiago",
2639
+ r: 1
2640
+ },
2641
+ "Chile/EasterIsland": {
2642
+ a: "Pacific/Easter",
2643
+ r: 1
2644
+ },
2645
+ Cuba: {
2646
+ a: "America/Havana",
2647
+ r: 1
2648
+ },
2649
+ EET: {
2650
+ u: 120,
2651
+ d: 180
2652
+ },
2653
+ EST: {
2654
+ u: -300
2655
+ },
2656
+ EST5EDT: {
2657
+ u: -300,
2658
+ d: -240
2659
+ },
2660
+ Egypt: {
2661
+ a: "Africa/Cairo",
2662
+ r: 1
2663
+ },
2664
+ Eire: {
2665
+ a: "Europe/Dublin",
2666
+ r: 1
2667
+ },
2668
+ "Etc/GMT": {
2669
+ u: 0
2670
+ },
2671
+ "Etc/GMT+0": {
2672
+ a: "Etc/GMT",
2673
+ r: 1
2674
+ },
2675
+ "Etc/GMT+1": {
2676
+ u: -60
2677
+ },
2678
+ "Etc/GMT+10": {
2679
+ u: -600
2680
+ },
2681
+ "Etc/GMT+11": {
2682
+ u: -660
2683
+ },
2684
+ "Etc/GMT+12": {
2685
+ u: -720
2686
+ },
2687
+ "Etc/GMT+2": {
2688
+ u: -120
2689
+ },
2690
+ "Etc/GMT+3": {
2691
+ u: -180
2692
+ },
2693
+ "Etc/GMT+4": {
2694
+ u: -240
2695
+ },
2696
+ "Etc/GMT+5": {
2697
+ u: -300
2698
+ },
2699
+ "Etc/GMT+6": {
2700
+ u: -360
2701
+ },
2702
+ "Etc/GMT+7": {
2703
+ u: -420
2704
+ },
2705
+ "Etc/GMT+8": {
2706
+ u: -480
2707
+ },
2708
+ "Etc/GMT+9": {
2709
+ u: -540
2710
+ },
2711
+ "Etc/GMT-0": {
2712
+ a: "Etc/GMT",
2713
+ r: 1
2714
+ },
2715
+ "Etc/GMT-1": {
2716
+ u: 60
2717
+ },
2718
+ "Etc/GMT-10": {
2719
+ u: 600
2720
+ },
2721
+ "Etc/GMT-11": {
2722
+ u: 660
2723
+ },
2724
+ "Etc/GMT-12": {
2725
+ u: 720
2726
+ },
2727
+ "Etc/GMT-13": {
2728
+ u: 780
2729
+ },
2730
+ "Etc/GMT-14": {
2731
+ u: 840
2732
+ },
2733
+ "Etc/GMT-2": {
2734
+ u: 120
2735
+ },
2736
+ "Etc/GMT-3": {
2737
+ u: 180
2738
+ },
2739
+ "Etc/GMT-4": {
2740
+ u: 240
2741
+ },
2742
+ "Etc/GMT-5": {
2743
+ u: 300
2744
+ },
2745
+ "Etc/GMT-6": {
2746
+ u: 360
2747
+ },
2748
+ "Etc/GMT-7": {
2749
+ u: 420
2750
+ },
2751
+ "Etc/GMT-8": {
2752
+ u: 480
2753
+ },
2754
+ "Etc/GMT-9": {
2755
+ u: 540
2756
+ },
2757
+ "Etc/GMT0": {
2758
+ a: "Etc/GMT",
2759
+ r: 1
2760
+ },
2761
+ "Etc/Greenwich": {
2762
+ a: "Etc/GMT",
2763
+ r: 1
2764
+ },
2765
+ "Etc/UCT": {
2766
+ a: "Etc/UTC",
2767
+ r: 1
2768
+ },
2769
+ "Etc/UTC": {
2770
+ u: 0
2771
+ },
2772
+ "Etc/Universal": {
2773
+ a: "Etc/UTC",
2774
+ r: 1
2775
+ },
2776
+ "Etc/Zulu": {
2777
+ a: "Etc/UTC",
2778
+ r: 1
2779
+ },
2780
+ "Europe/Amsterdam": {
2781
+ u: 60,
2782
+ d: 120,
2783
+ c: ["NL"]
2784
+ },
2785
+ "Europe/Andorra": {
2786
+ u: 60,
2787
+ d: 120,
2788
+ c: ["AD"]
2789
+ },
2790
+ "Europe/Astrakhan": {
2791
+ u: 240,
2792
+ c: ["RU"]
2793
+ },
2794
+ "Europe/Athens": {
2795
+ u: 120,
2796
+ d: 180,
2797
+ c: ["GR"]
2798
+ },
2799
+ "Europe/Belfast": {
2800
+ a: "Europe/London",
2801
+ c: ["GB"],
2802
+ r: 1
2803
+ },
2804
+ "Europe/Belgrade": {
2805
+ u: 60,
2806
+ d: 120,
2807
+ c: ["RS", "BA", "HR", "ME", "MK", "SI"]
2808
+ },
2809
+ "Europe/Berlin": {
2810
+ u: 60,
2811
+ d: 120,
2812
+ c: ["DE"]
2813
+ },
2814
+ "Europe/Bratislava": {
2815
+ a: "Europe/Prague",
2816
+ c: ["SK"],
2817
+ r: 1
2818
+ },
2819
+ "Europe/Brussels": {
2820
+ u: 60,
2821
+ d: 120,
2822
+ c: ["BE"]
2823
+ },
2824
+ "Europe/Bucharest": {
2825
+ u: 120,
2826
+ d: 180,
2827
+ c: ["RO"]
2828
+ },
2829
+ "Europe/Budapest": {
2830
+ u: 60,
2831
+ d: 120,
2832
+ c: ["HU"]
2833
+ },
2834
+ "Europe/Busingen": {
2835
+ a: "Europe/Zurich",
2836
+ c: ["DE"],
2837
+ r: 1
2838
+ },
2839
+ "Europe/Chisinau": {
2840
+ u: 120,
2841
+ d: 180,
2842
+ c: ["MD"]
2843
+ },
2844
+ "Europe/Copenhagen": {
2845
+ u: 60,
2846
+ d: 120,
2847
+ c: ["DK"]
2848
+ },
2849
+ "Europe/Dublin": {
2850
+ u: 60,
2851
+ d: 0,
2852
+ c: ["IE"]
2853
+ },
2854
+ "Europe/Gibraltar": {
2855
+ u: 60,
2856
+ d: 120,
2857
+ c: ["GI"]
2858
+ },
2859
+ "Europe/Guernsey": {
2860
+ a: "Europe/London",
2861
+ c: ["GG"],
2862
+ r: 1
2863
+ },
2864
+ "Europe/Helsinki": {
2865
+ u: 120,
2866
+ d: 180,
2867
+ c: ["FI", "AX"]
2868
+ },
2869
+ "Europe/Isle_of_Man": {
2870
+ a: "Europe/London",
2871
+ c: ["IM"],
2872
+ r: 1
2873
+ },
2874
+ "Europe/Istanbul": {
2875
+ u: 180,
2876
+ c: ["TR"]
2877
+ },
2878
+ "Europe/Jersey": {
2879
+ a: "Europe/London",
2880
+ c: ["JE"],
2881
+ r: 1
2882
+ },
2883
+ "Europe/Kaliningrad": {
2884
+ u: 120,
2885
+ c: ["RU"]
2886
+ },
2887
+ "Europe/Kiev": {
2888
+ u: 120,
2889
+ d: 180,
2890
+ c: ["UA"]
2891
+ },
2892
+ "Europe/Kirov": {
2893
+ u: 180,
2894
+ c: ["RU"]
2895
+ },
2896
+ "Europe/Lisbon": {
2897
+ u: 0,
2898
+ d: 60,
2899
+ c: ["PT"]
2900
+ },
2901
+ "Europe/Ljubljana": {
2902
+ a: "Europe/Belgrade",
2903
+ c: ["SI"],
2904
+ r: 1
2905
+ },
2906
+ "Europe/London": {
2907
+ u: 0,
2908
+ d: 60,
2909
+ c: ["GB", "GG", "IM", "JE"]
2910
+ },
2911
+ "Europe/Luxembourg": {
2912
+ u: 60,
2913
+ d: 120,
2914
+ c: ["LU"]
2915
+ },
2916
+ "Europe/Madrid": {
2917
+ u: 60,
2918
+ d: 120,
2919
+ c: ["ES"]
2920
+ },
2921
+ "Europe/Malta": {
2922
+ u: 60,
2923
+ d: 120,
2924
+ c: ["MT"]
2925
+ },
2926
+ "Europe/Mariehamn": {
2927
+ a: "Europe/Helsinki",
2928
+ c: ["AX"],
2929
+ r: 1
2930
+ },
2931
+ "Europe/Minsk": {
2932
+ u: 180,
2933
+ c: ["BY"]
2934
+ },
2935
+ "Europe/Monaco": {
2936
+ u: 60,
2937
+ d: 120,
2938
+ c: ["MC"]
2939
+ },
2940
+ "Europe/Moscow": {
2941
+ u: 180,
2942
+ c: ["RU"]
2943
+ },
2944
+ "Europe/Nicosia": {
2945
+ a: "Asia/Nicosia",
2946
+ r: 1
2947
+ },
2948
+ "Europe/Oslo": {
2949
+ u: 60,
2950
+ d: 120,
2951
+ c: ["NO", "SJ", "BV"]
2952
+ },
2953
+ "Europe/Paris": {
2954
+ u: 60,
2955
+ d: 120,
2956
+ c: ["FR"]
2957
+ },
2958
+ "Europe/Podgorica": {
2959
+ a: "Europe/Belgrade",
2960
+ c: ["ME"],
2961
+ r: 1
2962
+ },
2963
+ "Europe/Prague": {
2964
+ u: 60,
2965
+ d: 120,
2966
+ c: ["CZ", "SK"]
2967
+ },
2968
+ "Europe/Riga": {
2969
+ u: 120,
2970
+ d: 180,
2971
+ c: ["LV"]
2972
+ },
2973
+ "Europe/Rome": {
2974
+ u: 60,
2975
+ d: 120,
2976
+ c: ["IT", "SM", "VA"]
2977
+ },
2978
+ "Europe/Samara": {
2979
+ u: 240,
2980
+ c: ["RU"]
2981
+ },
2982
+ "Europe/San_Marino": {
2983
+ a: "Europe/Rome",
2984
+ c: ["SM"],
2985
+ r: 1
2986
+ },
2987
+ "Europe/Sarajevo": {
2988
+ a: "Europe/Belgrade",
2989
+ c: ["BA"],
2990
+ r: 1
2991
+ },
2992
+ "Europe/Saratov": {
2993
+ u: 240,
2994
+ c: ["RU"]
2995
+ },
2996
+ "Europe/Simferopol": {
2997
+ u: 180,
2998
+ c: ["RU", "UA"]
2999
+ },
3000
+ "Europe/Skopje": {
3001
+ a: "Europe/Belgrade",
3002
+ c: ["MK"],
3003
+ r: 1
3004
+ },
3005
+ "Europe/Sofia": {
3006
+ u: 120,
3007
+ d: 180,
3008
+ c: ["BG"]
3009
+ },
3010
+ "Europe/Stockholm": {
3011
+ u: 60,
3012
+ d: 120,
3013
+ c: ["SE"]
3014
+ },
3015
+ "Europe/Tallinn": {
3016
+ u: 120,
3017
+ d: 180,
3018
+ c: ["EE"]
3019
+ },
3020
+ "Europe/Tirane": {
3021
+ u: 60,
3022
+ d: 120,
3023
+ c: ["AL"]
3024
+ },
3025
+ "Europe/Tiraspol": {
3026
+ a: "Europe/Chisinau",
3027
+ r: 1
3028
+ },
3029
+ "Europe/Ulyanovsk": {
3030
+ u: 240,
3031
+ c: ["RU"]
3032
+ },
3033
+ "Europe/Uzhgorod": {
3034
+ u: 120,
3035
+ d: 180,
3036
+ c: ["UA"]
3037
+ },
3038
+ "Europe/Vaduz": {
3039
+ a: "Europe/Zurich",
3040
+ c: ["LI"],
3041
+ r: 1
3042
+ },
3043
+ "Europe/Vatican": {
3044
+ a: "Europe/Rome",
3045
+ c: ["VA"],
3046
+ r: 1
3047
+ },
3048
+ "Europe/Vienna": {
3049
+ u: 60,
3050
+ d: 120,
3051
+ c: ["AT"]
3052
+ },
3053
+ "Europe/Vilnius": {
3054
+ u: 120,
3055
+ d: 180,
3056
+ c: ["LT"]
3057
+ },
3058
+ "Europe/Volgograd": {
3059
+ u: 180,
3060
+ c: ["RU"]
3061
+ },
3062
+ "Europe/Warsaw": {
3063
+ u: 60,
3064
+ d: 120,
3065
+ c: ["PL"]
3066
+ },
3067
+ "Europe/Zagreb": {
3068
+ a: "Europe/Belgrade",
3069
+ c: ["HR"],
3070
+ r: 1
3071
+ },
3072
+ "Europe/Zaporozhye": {
3073
+ u: 120,
3074
+ d: 180,
3075
+ c: ["UA"]
3076
+ },
3077
+ "Europe/Zurich": {
3078
+ u: 60,
3079
+ d: 120,
3080
+ c: ["CH", "DE", "LI"]
3081
+ },
3082
+ Factory: {
3083
+ u: 0
3084
+ },
3085
+ GB: {
3086
+ a: "Europe/London",
3087
+ c: ["GB"],
3088
+ r: 1
3089
+ },
3090
+ "GB-Eire": {
3091
+ a: "Europe/London",
3092
+ c: ["GB"],
3093
+ r: 1
3094
+ },
3095
+ GMT: {
3096
+ a: "Etc/GMT",
3097
+ r: 1
3098
+ },
3099
+ "GMT+0": {
3100
+ a: "Etc/GMT",
3101
+ r: 1
3102
+ },
3103
+ "GMT-0": {
3104
+ a: "Etc/GMT",
3105
+ r: 1
3106
+ },
3107
+ GMT0: {
3108
+ a: "Etc/GMT",
3109
+ r: 1
3110
+ },
3111
+ Greenwich: {
3112
+ a: "Etc/GMT",
3113
+ r: 1
3114
+ },
3115
+ HST: {
3116
+ u: -600
3117
+ },
3118
+ Hongkong: {
3119
+ a: "Asia/Hong_Kong",
3120
+ r: 1
3121
+ },
3122
+ Iceland: {
3123
+ a: "Atlantic/Reykjavik",
3124
+ r: 1
3125
+ },
3126
+ "Indian/Antananarivo": {
3127
+ a: "Africa/Nairobi",
3128
+ c: ["MG"],
3129
+ r: 1
3130
+ },
3131
+ "Indian/Chagos": {
3132
+ u: 360,
3133
+ c: ["IO"]
3134
+ },
3135
+ "Indian/Christmas": {
3136
+ u: 420,
3137
+ c: ["CX"]
3138
+ },
3139
+ "Indian/Cocos": {
3140
+ u: 390,
3141
+ c: ["CC"]
3142
+ },
3143
+ "Indian/Comoro": {
3144
+ a: "Africa/Nairobi",
3145
+ c: ["KM"],
3146
+ r: 1
3147
+ },
3148
+ "Indian/Kerguelen": {
3149
+ u: 300,
3150
+ c: ["TF", "HM"]
3151
+ },
3152
+ "Indian/Mahe": {
3153
+ u: 240,
3154
+ c: ["SC"]
3155
+ },
3156
+ "Indian/Maldives": {
3157
+ u: 300,
3158
+ c: ["MV"]
3159
+ },
3160
+ "Indian/Mauritius": {
3161
+ u: 240,
3162
+ c: ["MU"]
3163
+ },
3164
+ "Indian/Mayotte": {
3165
+ a: "Africa/Nairobi",
3166
+ c: ["YT"],
3167
+ r: 1
3168
+ },
3169
+ "Indian/Reunion": {
3170
+ u: 240,
3171
+ c: ["RE", "TF"]
3172
+ },
3173
+ Iran: {
3174
+ a: "Asia/Tehran",
3175
+ r: 1
3176
+ },
3177
+ Israel: {
3178
+ a: "Asia/Jerusalem",
3179
+ r: 1
3180
+ },
3181
+ Jamaica: {
3182
+ a: "America/Jamaica",
3183
+ r: 1
3184
+ },
3185
+ Japan: {
3186
+ a: "Asia/Tokyo",
3187
+ r: 1
3188
+ },
3189
+ Kwajalein: {
3190
+ a: "Pacific/Kwajalein",
3191
+ r: 1
3192
+ },
3193
+ Libya: {
3194
+ a: "Africa/Tripoli",
3195
+ r: 1
3196
+ },
3197
+ MET: {
3198
+ u: 60,
3199
+ d: 120
3200
+ },
3201
+ MST: {
3202
+ u: -420
3203
+ },
3204
+ MST7MDT: {
3205
+ u: -420,
3206
+ d: -360
3207
+ },
3208
+ "Mexico/BajaNorte": {
3209
+ a: "America/Tijuana",
3210
+ r: 1
3211
+ },
3212
+ "Mexico/BajaSur": {
3213
+ a: "America/Mazatlan",
3214
+ r: 1
3215
+ },
3216
+ "Mexico/General": {
3217
+ a: "America/Mexico_City",
3218
+ r: 1
3219
+ },
3220
+ NZ: {
3221
+ a: "Pacific/Auckland",
3222
+ c: ["NZ"],
3223
+ r: 1
3224
+ },
3225
+ "NZ-CHAT": {
3226
+ a: "Pacific/Chatham",
3227
+ r: 1
3228
+ },
3229
+ Navajo: {
3230
+ a: "America/Denver",
3231
+ r: 1
3232
+ },
3233
+ PRC: {
3234
+ a: "Asia/Shanghai",
3235
+ r: 1
3236
+ },
3237
+ PST8PDT: {
3238
+ u: -480,
3239
+ d: -420
3240
+ },
3241
+ "Pacific/Apia": {
3242
+ u: 780,
3243
+ c: ["WS"]
3244
+ },
3245
+ "Pacific/Auckland": {
3246
+ u: 720,
3247
+ d: 780,
3248
+ c: ["NZ", "AQ"]
3249
+ },
3250
+ "Pacific/Bougainville": {
3251
+ u: 660,
3252
+ c: ["PG"]
3253
+ },
3254
+ "Pacific/Chatham": {
3255
+ u: 765,
3256
+ d: 825,
3257
+ c: ["NZ"]
3258
+ },
3259
+ "Pacific/Chuuk": {
3260
+ u: 600,
3261
+ c: ["FM"]
3262
+ },
3263
+ "Pacific/Easter": {
3264
+ u: -360,
3265
+ d: -300,
3266
+ c: ["CL"]
3267
+ },
3268
+ "Pacific/Efate": {
3269
+ u: 660,
3270
+ c: ["VU"]
3271
+ },
3272
+ "Pacific/Enderbury": {
3273
+ a: "Pacific/Kanton",
3274
+ r: 1
3275
+ },
3276
+ "Pacific/Fakaofo": {
3277
+ u: 780,
3278
+ c: ["TK"]
3279
+ },
3280
+ "Pacific/Fiji": {
3281
+ u: 720,
3282
+ d: 780,
3283
+ c: ["FJ"]
3284
+ },
3285
+ "Pacific/Funafuti": {
3286
+ u: 720,
3287
+ c: ["TV"]
3288
+ },
3289
+ "Pacific/Galapagos": {
3290
+ u: -360,
3291
+ c: ["EC"]
3292
+ },
3293
+ "Pacific/Gambier": {
3294
+ u: -540,
3295
+ c: ["PF"]
3296
+ },
3297
+ "Pacific/Guadalcanal": {
3298
+ u: 660,
3299
+ c: ["SB"]
3300
+ },
3301
+ "Pacific/Guam": {
3302
+ u: 600,
3303
+ c: ["GU", "MP"]
3304
+ },
3305
+ "Pacific/Honolulu": {
3306
+ u: -600,
3307
+ c: ["US", "UM"]
3308
+ },
3309
+ "Pacific/Johnston": {
3310
+ a: "Pacific/Honolulu",
3311
+ c: ["UM"],
3312
+ r: 1
3313
+ },
3314
+ "Pacific/Kanton": {
3315
+ u: 780,
3316
+ c: ["KI"]
3317
+ },
3318
+ "Pacific/Kiritimati": {
3319
+ u: 840,
3320
+ c: ["KI"]
3321
+ },
3322
+ "Pacific/Kosrae": {
3323
+ u: 660,
3324
+ c: ["FM"]
3325
+ },
3326
+ "Pacific/Kwajalein": {
3327
+ u: 720,
3328
+ c: ["MH"]
3329
+ },
3330
+ "Pacific/Majuro": {
3331
+ u: 720,
3332
+ c: ["MH"]
3333
+ },
3334
+ "Pacific/Marquesas": {
3335
+ u: -510,
3336
+ c: ["PF"]
3337
+ },
3338
+ "Pacific/Midway": {
3339
+ a: "Pacific/Pago_Pago",
3340
+ c: ["UM"],
3341
+ r: 1
3342
+ },
3343
+ "Pacific/Nauru": {
3344
+ u: 720,
3345
+ c: ["NR"]
3346
+ },
3347
+ "Pacific/Niue": {
3348
+ u: -660,
3349
+ c: ["NU"]
3350
+ },
3351
+ "Pacific/Norfolk": {
3352
+ u: 660,
3353
+ d: 720,
3354
+ c: ["NF"]
3355
+ },
3356
+ "Pacific/Noumea": {
3357
+ u: 660,
3358
+ c: ["NC"]
3359
+ },
3360
+ "Pacific/Pago_Pago": {
3361
+ u: -660,
3362
+ c: ["AS", "UM"]
3363
+ },
3364
+ "Pacific/Palau": {
3365
+ u: 540,
3366
+ c: ["PW"]
3367
+ },
3368
+ "Pacific/Pitcairn": {
3369
+ u: -480,
3370
+ c: ["PN"]
3371
+ },
3372
+ "Pacific/Pohnpei": {
3373
+ u: 660,
3374
+ c: ["FM"]
3375
+ },
3376
+ "Pacific/Ponape": {
3377
+ a: "Pacific/Pohnpei",
3378
+ r: 1
3379
+ },
3380
+ "Pacific/Port_Moresby": {
3381
+ u: 600,
3382
+ c: ["PG", "AQ"]
3383
+ },
3384
+ "Pacific/Rarotonga": {
3385
+ u: -600,
3386
+ c: ["CK"]
3387
+ },
3388
+ "Pacific/Saipan": {
3389
+ a: "Pacific/Guam",
3390
+ c: ["MP"],
3391
+ r: 1
3392
+ },
3393
+ "Pacific/Samoa": {
3394
+ a: "Pacific/Pago_Pago",
3395
+ c: ["WS"],
3396
+ r: 1
3397
+ },
3398
+ "Pacific/Tahiti": {
3399
+ u: -600,
3400
+ c: ["PF"]
3401
+ },
3402
+ "Pacific/Tarawa": {
3403
+ u: 720,
3404
+ c: ["KI"]
3405
+ },
3406
+ "Pacific/Tongatapu": {
3407
+ u: 780,
3408
+ c: ["TO"]
3409
+ },
3410
+ "Pacific/Truk": {
3411
+ a: "Pacific/Chuuk",
3412
+ r: 1
3413
+ },
3414
+ "Pacific/Wake": {
3415
+ u: 720,
3416
+ c: ["UM"]
3417
+ },
3418
+ "Pacific/Wallis": {
3419
+ u: 720,
3420
+ c: ["WF"]
3421
+ },
3422
+ "Pacific/Yap": {
3423
+ a: "Pacific/Chuuk",
3424
+ r: 1
3425
+ },
3426
+ Poland: {
3427
+ a: "Europe/Warsaw",
3428
+ r: 1
3429
+ },
3430
+ Portugal: {
3431
+ a: "Europe/Lisbon",
3432
+ r: 1
3433
+ },
3434
+ ROC: {
3435
+ a: "Asia/Taipei",
3436
+ r: 1
3437
+ },
3438
+ ROK: {
3439
+ a: "Asia/Seoul",
3440
+ r: 1
3441
+ },
3442
+ Singapore: {
3443
+ a: "Asia/Singapore",
3444
+ c: ["SG"],
3445
+ r: 1
3446
+ },
3447
+ Turkey: {
3448
+ a: "Europe/Istanbul",
3449
+ r: 1
3450
+ },
3451
+ UCT: {
3452
+ a: "Etc/UTC",
3453
+ r: 1
3454
+ },
3455
+ "US/Alaska": {
3456
+ a: "America/Anchorage",
3457
+ r: 1
3458
+ },
3459
+ "US/Aleutian": {
3460
+ a: "America/Adak",
3461
+ r: 1
3462
+ },
3463
+ "US/Arizona": {
3464
+ a: "America/Phoenix",
3465
+ c: ["US"],
3466
+ r: 1
3467
+ },
3468
+ "US/Central": {
3469
+ a: "America/Chicago",
3470
+ r: 1
3471
+ },
3472
+ "US/East-Indiana": {
3473
+ a: "America/Indiana/Indianapolis",
3474
+ r: 1
3475
+ },
3476
+ "US/Eastern": {
3477
+ a: "America/New_York",
3478
+ r: 1
3479
+ },
3480
+ "US/Hawaii": {
3481
+ a: "Pacific/Honolulu",
3482
+ c: ["US"],
3483
+ r: 1
3484
+ },
3485
+ "US/Indiana-Starke": {
3486
+ a: "America/Indiana/Knox",
3487
+ r: 1
3488
+ },
3489
+ "US/Michigan": {
3490
+ a: "America/Detroit",
3491
+ r: 1
3492
+ },
3493
+ "US/Mountain": {
3494
+ a: "America/Denver",
3495
+ r: 1
3496
+ },
3497
+ "US/Pacific": {
3498
+ a: "America/Los_Angeles",
3499
+ r: 1
3500
+ },
3501
+ "US/Samoa": {
3502
+ a: "Pacific/Pago_Pago",
3503
+ c: ["WS"],
3504
+ r: 1
3505
+ },
3506
+ UTC: {
3507
+ a: "Etc/UTC",
3508
+ r: 1
3509
+ },
3510
+ Universal: {
3511
+ a: "Etc/UTC",
3512
+ r: 1
3513
+ },
3514
+ "W-SU": {
3515
+ a: "Europe/Moscow",
3516
+ r: 1
3517
+ },
3518
+ WET: {
3519
+ u: 0,
3520
+ d: 60
3521
+ },
3522
+ Zulu: {
3523
+ a: "Etc/UTC",
3524
+ r: 1
3525
+ }
3526
+ };
3527
+ function getCountry() {
3528
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
3529
+ if (timezone === "" || !timezone) {
3530
+ return null;
3531
+ }
3532
+ try {
3533
+ const _country = timezones[timezone]?.c?.[0];
3534
+ if (!_country)
3535
+ return null;
3536
+ const country = countries[_country];
3537
+ return country || null;
3538
+ } catch {
3539
+ return null;
3540
+ }
3541
+ }
3542
+ function getCountryCodeFromTimezone() {
3543
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
3544
+ if (timezone === "" || !timezone) {
3545
+ return "Unknown";
3546
+ }
3547
+ try {
3548
+ const countryCode = timezones[timezone]?.c?.[0];
3549
+ return countryCode || "Unknown";
3550
+ } catch {
3551
+ return "Unknown";
3552
+ }
3553
+ }
3554
+ function getState() {
3555
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
3556
+ if (timezone === "" || !timezone) {
3557
+ return null;
3558
+ }
3559
+ const state = timezone.split("/")[1]?.replace("_", " ");
3560
+ return state || null;
3561
+ }
3562
+
498
3563
  // src/page-tracking.ts
499
3564
  var PageTrackingManager = class {
500
3565
  constructor(tracker, config) {
@@ -502,6 +3567,9 @@ var Grain = (() => {
502
3567
  this.currentPath = null;
503
3568
  this.originalPushState = null;
504
3569
  this.originalReplaceState = null;
3570
+ this.previousPage = null;
3571
+ this.landingPage = null;
3572
+ this.pageViewCount = 0;
505
3573
  /**
506
3574
  * Handle popstate event (back/forward navigation)
507
3575
  */
@@ -520,7 +3588,7 @@ var Grain = (() => {
520
3588
  };
521
3589
  this.tracker = tracker;
522
3590
  this.config = config;
523
- this.trackCurrentPage();
3591
+ this.trackCurrentPage(true);
524
3592
  this.setupHistoryListeners();
525
3593
  this.setupHashChangeListener();
526
3594
  }
@@ -553,29 +3621,150 @@ var Grain = (() => {
553
3621
  /**
554
3622
  * Track the current page
555
3623
  */
556
- trackCurrentPage() {
3624
+ trackCurrentPage(isLanding = false) {
557
3625
  if (this.isDestroyed || typeof window === "undefined")
558
3626
  return;
559
3627
  const page = this.extractPath(window.location.href);
560
- if (page === this.currentPath) {
3628
+ if (!isLanding && page === this.currentPath) {
561
3629
  return;
562
3630
  }
3631
+ if (this.currentPath) {
3632
+ this.previousPage = this.currentPath;
3633
+ }
563
3634
  this.currentPath = page;
3635
+ this.pageViewCount++;
3636
+ if (isLanding) {
3637
+ this.landingPage = page;
3638
+ }
564
3639
  const hasConsent = this.tracker.hasConsent("analytics");
3640
+ const currentUrl = window.location.href;
3641
+ const referrer = document.referrer || "";
3642
+ const utmParams = parseUTMParameters(currentUrl);
3643
+ if (Object.keys(utmParams).length > 0) {
3644
+ const existing = getSessionUTMParameters();
3645
+ if (!existing || isLanding) {
3646
+ setSessionUTMParameters(utmParams);
3647
+ }
3648
+ }
3649
+ const sessionUTMs = getSessionUTMParameters() || {};
3650
+ const firstTouch = getOrCreateFirstTouchAttribution(
3651
+ this.config.tenantId,
3652
+ referrer,
3653
+ currentUrl,
3654
+ sessionUTMs
3655
+ );
565
3656
  const properties = {
566
3657
  page,
567
3658
  timestamp: Date.now()
568
3659
  };
569
3660
  if (hasConsent) {
570
- properties.referrer = document.referrer || "";
571
3661
  properties.title = document.title || "";
572
- properties.full_url = window.location.href;
3662
+ properties.full_url = currentUrl;
3663
+ properties.session_id = this.tracker.getSessionId();
3664
+ if (referrer) {
3665
+ properties.referrer = referrer;
3666
+ properties.referrer_domain = this.extractDomain(referrer);
3667
+ properties.referrer_category = categorizeReferrer(referrer, currentUrl);
3668
+ }
3669
+ if (this.landingPage && !isLanding) {
3670
+ properties.landing_page = this.landingPage;
3671
+ }
3672
+ if (this.previousPage) {
3673
+ properties.previous_page = this.previousPage;
3674
+ }
3675
+ if (sessionUTMs.utm_source)
3676
+ properties.utm_source = sessionUTMs.utm_source;
3677
+ if (sessionUTMs.utm_medium)
3678
+ properties.utm_medium = sessionUTMs.utm_medium;
3679
+ if (sessionUTMs.utm_campaign)
3680
+ properties.utm_campaign = sessionUTMs.utm_campaign;
3681
+ if (sessionUTMs.utm_term)
3682
+ properties.utm_term = sessionUTMs.utm_term;
3683
+ if (sessionUTMs.utm_content)
3684
+ properties.utm_content = sessionUTMs.utm_content;
3685
+ properties.first_touch_source = firstTouch.source;
3686
+ properties.first_touch_medium = firstTouch.medium;
3687
+ properties.first_touch_campaign = firstTouch.campaign;
3688
+ properties.first_touch_referrer_category = firstTouch.referrer_category;
3689
+ properties.device = this.getDeviceType();
3690
+ properties.browser = this.getBrowser();
3691
+ properties.os = this.getOS();
3692
+ properties.language = navigator.language || "";
3693
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
3694
+ properties.timezone = timezone;
3695
+ properties.country = getCountryCodeFromTimezone();
3696
+ properties.screen_resolution = `${screen.width}x${screen.height}`;
3697
+ properties.viewport = `${window.innerWidth}x${window.innerHeight}`;
573
3698
  }
574
3699
  this.tracker.trackSystemEvent("page_view", properties);
575
3700
  if (this.config.debug) {
576
3701
  console.log("[Page Tracking] Tracked page view:", properties);
577
3702
  }
578
3703
  }
3704
+ /**
3705
+ * Extract domain from URL
3706
+ */
3707
+ extractDomain(url) {
3708
+ try {
3709
+ const urlObj = new URL(url);
3710
+ return urlObj.hostname;
3711
+ } catch {
3712
+ return "";
3713
+ }
3714
+ }
3715
+ /**
3716
+ * Detect browser name
3717
+ */
3718
+ getBrowser() {
3719
+ const ua = navigator.userAgent;
3720
+ if (ua.includes("Firefox/"))
3721
+ return "Firefox";
3722
+ if (ua.includes("Edg/"))
3723
+ return "Edge";
3724
+ if (ua.includes("Chrome/"))
3725
+ return "Chrome";
3726
+ if (ua.includes("Safari/") && !ua.includes("Chrome/"))
3727
+ return "Safari";
3728
+ if (ua.includes("Opera/") || ua.includes("OPR/"))
3729
+ return "Opera";
3730
+ return "Unknown";
3731
+ }
3732
+ /**
3733
+ * Detect operating system
3734
+ */
3735
+ getOS() {
3736
+ const ua = navigator.userAgent;
3737
+ if (ua.includes("Win"))
3738
+ return "Windows";
3739
+ if (ua.includes("Mac"))
3740
+ return "macOS";
3741
+ if (ua.includes("Linux"))
3742
+ return "Linux";
3743
+ if (ua.includes("Android"))
3744
+ return "Android";
3745
+ if (ua.includes("iOS") || ua.includes("iPhone") || ua.includes("iPad"))
3746
+ return "iOS";
3747
+ return "Unknown";
3748
+ }
3749
+ /**
3750
+ * Detect device type (Mobile, Tablet, Desktop)
3751
+ */
3752
+ getDeviceType() {
3753
+ const ua = navigator.userAgent;
3754
+ const width = window.innerWidth;
3755
+ if (ua.includes("iPad") || ua.includes("Android") && !ua.includes("Mobile")) {
3756
+ return "Tablet";
3757
+ }
3758
+ if (ua.includes("Mobile") || ua.includes("iPhone") || ua.includes("Android")) {
3759
+ return "Mobile";
3760
+ }
3761
+ if (width < 768) {
3762
+ return "Mobile";
3763
+ } else if (width >= 768 && width < 1024) {
3764
+ return "Tablet";
3765
+ }
3766
+ return "Desktop";
3767
+ }
579
3768
  /**
580
3769
  * Extract path from URL, optionally stripping query parameters
581
3770
  */
@@ -612,22 +3801,37 @@ var Grain = (() => {
612
3801
  timestamp: Date.now(),
613
3802
  ...properties
614
3803
  };
615
- if (hasConsent && typeof document !== "undefined") {
3804
+ if (hasConsent && typeof document !== "undefined" && typeof window !== "undefined") {
616
3805
  if (!baseProperties.referrer) {
617
3806
  baseProperties.referrer = document.referrer || "";
618
3807
  }
619
3808
  if (!baseProperties.title) {
620
3809
  baseProperties.title = document.title || "";
621
3810
  }
622
- if (!baseProperties.full_url && typeof window !== "undefined") {
3811
+ if (!baseProperties.full_url) {
623
3812
  baseProperties.full_url = window.location.href;
624
3813
  }
3814
+ if (!baseProperties.session_id) {
3815
+ baseProperties.session_id = this.tracker.getSessionId();
3816
+ }
3817
+ if (!baseProperties.browser) {
3818
+ baseProperties.browser = this.getBrowser();
3819
+ }
3820
+ if (!baseProperties.os) {
3821
+ baseProperties.os = this.getOS();
3822
+ }
625
3823
  }
626
3824
  this.tracker.trackSystemEvent("page_view", baseProperties);
627
3825
  if (this.config.debug) {
628
3826
  console.log("[Page Tracking] Manually tracked page:", baseProperties);
629
3827
  }
630
3828
  }
3829
+ /**
3830
+ * Get page view count for current session
3831
+ */
3832
+ getPageViewCount() {
3833
+ return this.pageViewCount;
3834
+ }
631
3835
  /**
632
3836
  * Destroy the page tracker
633
3837
  */
@@ -674,6 +3878,9 @@ var Grain = (() => {
674
3878
  this.pageTrackingManager = null;
675
3879
  this.ephemeralSessionId = null;
676
3880
  this.eventCountSinceLastHeartbeat = 0;
3881
+ // Session tracking
3882
+ this.sessionStartTime = Date.now();
3883
+ this.sessionEventCount = 0;
677
3884
  this.config = {
678
3885
  apiUrl: "https://api.grainql.com",
679
3886
  authStrategy: "NONE",
@@ -727,6 +3934,7 @@ var Grain = (() => {
727
3934
  this.ephemeralSessionId = this.generateUUID();
728
3935
  if (typeof window !== "undefined") {
729
3936
  this.initializeAutomaticTracking();
3937
+ this.trackSessionStart();
730
3938
  }
731
3939
  this.consentManager.addListener((state) => {
732
3940
  if (state.granted) {
@@ -1127,6 +4335,7 @@ var Grain = (() => {
1127
4335
  if (typeof window === "undefined")
1128
4336
  return;
1129
4337
  const handleBeforeUnload = () => {
4338
+ this.trackSessionEnd();
1130
4339
  if (this.eventQueue.length > 0) {
1131
4340
  const eventsToSend = [...this.eventQueue];
1132
4341
  this.eventQueue = [];
@@ -1178,7 +4387,8 @@ var Grain = (() => {
1178
4387
  this,
1179
4388
  {
1180
4389
  stripQueryParams: this.config.stripQueryParams,
1181
- debug: this.config.debug
4390
+ debug: this.config.debug,
4391
+ tenantId: this.config.tenantId
1182
4392
  }
1183
4393
  );
1184
4394
  this.log("Auto page view tracking initialized");
@@ -1187,6 +4397,145 @@ var Grain = (() => {
1187
4397
  }
1188
4398
  }
1189
4399
  }
4400
+ /**
4401
+ * Track session start event
4402
+ */
4403
+ trackSessionStart() {
4404
+ if (typeof window === "undefined")
4405
+ return;
4406
+ const hasConsent = this.consentManager.hasConsent("analytics");
4407
+ const properties = {
4408
+ session_id: this.getSessionId(),
4409
+ timestamp: this.sessionStartTime
4410
+ };
4411
+ if (hasConsent) {
4412
+ const referrer = document.referrer || "";
4413
+ const currentUrl = window.location.href;
4414
+ const utmParams = parseUTMParameters(currentUrl);
4415
+ const sessionUTMs = getSessionUTMParameters() || utmParams;
4416
+ const firstTouch = getOrCreateFirstTouchAttribution(
4417
+ this.config.tenantId,
4418
+ referrer,
4419
+ currentUrl,
4420
+ sessionUTMs
4421
+ );
4422
+ properties.landing_page = window.location.pathname;
4423
+ if (referrer) {
4424
+ properties.referrer = referrer;
4425
+ properties.referrer_domain = new URL(referrer).hostname;
4426
+ properties.referrer_category = categorizeReferrer(referrer, currentUrl);
4427
+ } else {
4428
+ properties.referrer_category = "direct";
4429
+ }
4430
+ if (sessionUTMs.utm_source)
4431
+ properties.utm_source = sessionUTMs.utm_source;
4432
+ if (sessionUTMs.utm_medium)
4433
+ properties.utm_medium = sessionUTMs.utm_medium;
4434
+ if (sessionUTMs.utm_campaign)
4435
+ properties.utm_campaign = sessionUTMs.utm_campaign;
4436
+ if (sessionUTMs.utm_term)
4437
+ properties.utm_term = sessionUTMs.utm_term;
4438
+ if (sessionUTMs.utm_content)
4439
+ properties.utm_content = sessionUTMs.utm_content;
4440
+ properties.first_touch_source = firstTouch.source;
4441
+ properties.first_touch_medium = firstTouch.medium;
4442
+ properties.first_touch_campaign = firstTouch.campaign;
4443
+ properties.first_touch_referrer_category = firstTouch.referrer_category;
4444
+ properties.device = this.getDeviceType();
4445
+ properties.screen_resolution = `${screen.width}x${screen.height}`;
4446
+ properties.viewport = `${window.innerWidth}x${window.innerHeight}`;
4447
+ properties.browser = this.getBrowser();
4448
+ properties.os = this.getOS();
4449
+ properties.language = navigator.language || "";
4450
+ properties.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4451
+ }
4452
+ this.trackSystemEvent("_grain_session_start", properties);
4453
+ this.log("Session started:", properties);
4454
+ }
4455
+ /**
4456
+ * Track session end event
4457
+ */
4458
+ trackSessionEnd() {
4459
+ if (typeof window === "undefined")
4460
+ return;
4461
+ const hasConsent = this.consentManager.hasConsent("analytics");
4462
+ const sessionDuration = Date.now() - this.sessionStartTime;
4463
+ const properties = {
4464
+ session_id: this.getSessionId(),
4465
+ session_duration: Math.floor(sessionDuration / 1e3),
4466
+ // In seconds for easier querying
4467
+ duration: sessionDuration,
4468
+ // Keep for backward compatibility
4469
+ event_count: this.sessionEventCount,
4470
+ timestamp: Date.now()
4471
+ };
4472
+ if (hasConsent && this.pageTrackingManager) {
4473
+ const pageCount = this.pageTrackingManager.getPageViewCount();
4474
+ properties.pages_per_session = pageCount;
4475
+ properties.page_count = pageCount;
4476
+ }
4477
+ this.trackSystemEvent("_grain_session_end", properties);
4478
+ this.log("Session ended:", properties);
4479
+ }
4480
+ /**
4481
+ * Detect browser name
4482
+ */
4483
+ getBrowser() {
4484
+ if (typeof navigator === "undefined")
4485
+ return "Unknown";
4486
+ const ua = navigator.userAgent;
4487
+ if (ua.includes("Firefox/"))
4488
+ return "Firefox";
4489
+ if (ua.includes("Edg/"))
4490
+ return "Edge";
4491
+ if (ua.includes("Chrome/"))
4492
+ return "Chrome";
4493
+ if (ua.includes("Safari/") && !ua.includes("Chrome/"))
4494
+ return "Safari";
4495
+ if (ua.includes("Opera/") || ua.includes("OPR/"))
4496
+ return "Opera";
4497
+ return "Unknown";
4498
+ }
4499
+ /**
4500
+ * Detect operating system
4501
+ */
4502
+ getOS() {
4503
+ if (typeof navigator === "undefined")
4504
+ return "Unknown";
4505
+ const ua = navigator.userAgent;
4506
+ if (ua.includes("Win"))
4507
+ return "Windows";
4508
+ if (ua.includes("Mac"))
4509
+ return "macOS";
4510
+ if (ua.includes("Linux"))
4511
+ return "Linux";
4512
+ if (ua.includes("Android"))
4513
+ return "Android";
4514
+ if (ua.includes("iOS") || ua.includes("iPhone") || ua.includes("iPad"))
4515
+ return "iOS";
4516
+ return "Unknown";
4517
+ }
4518
+ /**
4519
+ * Detect device type (Mobile, Tablet, Desktop)
4520
+ */
4521
+ getDeviceType() {
4522
+ if (typeof window === "undefined" || typeof navigator === "undefined")
4523
+ return "Unknown";
4524
+ const ua = navigator.userAgent;
4525
+ const width = window.innerWidth;
4526
+ if (ua.includes("iPad") || ua.includes("Android") && !ua.includes("Mobile")) {
4527
+ return "Tablet";
4528
+ }
4529
+ if (ua.includes("Mobile") || ua.includes("iPhone") || ua.includes("Android")) {
4530
+ return "Mobile";
4531
+ }
4532
+ if (width < 768) {
4533
+ return "Mobile";
4534
+ } else if (width >= 768 && width < 1024) {
4535
+ return "Tablet";
4536
+ }
4537
+ return "Desktop";
4538
+ }
1190
4539
  /**
1191
4540
  * Handle consent granted - upgrade ephemeral session to persistent user
1192
4541
  */
@@ -1312,6 +4661,7 @@ var Grain = (() => {
1312
4661
  }
1313
4662
  this.eventQueue.push(formattedEvent);
1314
4663
  this.eventCountSinceLastHeartbeat++;
4664
+ this.sessionEventCount++;
1315
4665
  this.log(`Queued event: ${event.eventName}`, event.properties);
1316
4666
  if (opts.flush || this.eventQueue.length >= this.config.batchSize) {
1317
4667
  await this.flush();