From 8798e378eee00e08b1ded9cfb255c32422c4dbcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Almli?= Date: Sun, 18 Dec 2022 08:05:42 +0100 Subject: [PATCH] TypeScript --- .eslintrc.json | 5 +- .homeychangelog.json | 3 + .npmrc | 3 + README.md | 4 + app.js | 189 -- app.ts | 191 ++ drivers/HeatingController/device.js | 654 ----- drivers/HeatingController/device.ts | 418 +++ drivers/HeatingController/driver.js | 30 - drivers/HeatingController/driver.ts | 28 + image.xcf | Bin 544681 -> 0 bytes lib/countries.js | 130 - lib/days.js | 11 - lib/heating.js | 58 - lib/holidays.js | 22 - lib/holidays_list.js | 1678 ----------- lib/moment-timezone-with-data.js | 1545 ---------- lib/moment.min.js | 2 - lib/nordpool.js | 70 - lib/prices.js | 374 --- package-lock.json | 4032 +++++++++++++++++++++++++-- package.json | 23 +- scripts/.gitignore | 1 - scripts/create.js | 40 - scripts/package-lock.json | 263 -- scripts/package.json | 12 - test/calc_date.js | 26 - test/dates_1.js | 17 - test/dates_2.js | 17 - test/heating_1.js | 1567 ----------- test/holiday_no_2022.js | 84 - test/prices_1.js | 581 ---- test/prices_2.js | 410 --- test/prices_3.js | 607 ---- test/prices_4.js | 487 ---- test/prices_5.js | 256 -- test/prices_6.js | 705 ----- test/prices_7.js | 618 ---- test/prices_8.js | 384 --- test/prices_9.js | 373 --- test2/nordpool_test.js | 13 +- tsconfig.json | 12 + 42 files changed, 4426 insertions(+), 11517 deletions(-) create mode 100644 .npmrc delete mode 100644 app.js create mode 100644 app.ts delete mode 100644 drivers/HeatingController/device.js create mode 100644 drivers/HeatingController/device.ts delete mode 100644 drivers/HeatingController/driver.js create mode 100644 drivers/HeatingController/driver.ts delete mode 100644 image.xcf delete mode 100644 lib/countries.js delete mode 100644 lib/days.js delete mode 100644 lib/heating.js delete mode 100644 lib/holidays.js delete mode 100644 lib/holidays_list.js delete mode 100644 lib/moment-timezone-with-data.js delete mode 100644 lib/moment.min.js delete mode 100644 lib/nordpool.js delete mode 100644 lib/prices.js delete mode 100644 scripts/.gitignore delete mode 100644 scripts/create.js delete mode 100644 scripts/package-lock.json delete mode 100644 scripts/package.json delete mode 100644 test/calc_date.js delete mode 100644 test/dates_1.js delete mode 100644 test/dates_2.js delete mode 100644 test/heating_1.js delete mode 100644 test/holiday_no_2022.js delete mode 100644 test/prices_1.js delete mode 100644 test/prices_2.js delete mode 100644 test/prices_3.js delete mode 100644 test/prices_4.js delete mode 100644 test/prices_5.js delete mode 100644 test/prices_6.js delete mode 100644 test/prices_7.js delete mode 100644 test/prices_8.js delete mode 100644 test/prices_9.js create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json index 15d2efd..8893149 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,3 @@ { - "parserOptions": { - "ecmaVersion": 2017, - "sourceType": "module" - } + "extends": "athom" } \ No newline at end of file diff --git a/.homeychangelog.json b/.homeychangelog.json index fdbc7cb..4d61162 100644 --- a/.homeychangelog.json +++ b/.homeychangelog.json @@ -1,4 +1,7 @@ { + "1.12.0": { + "en": ". " + }, "1.11.1": { "en": "Bug fix for the 'Holiday today' / 'Not a holiday today' action. Added 'Use automatic holiday' action to go back to automatic holidays. " }, diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..1ec82fc --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +registry=https://registry.npmjs.org + +@balmli:registry=https://npm.pkg.github.com diff --git a/README.md b/README.md index 2e50649..4a89dfc 100644 --- a/README.md +++ b/README.md @@ -274,6 +274,10 @@ Please report issues on the [community forum page](https://community.homey.app/t ### Release Notes: +#### 1.12.0 + +- + #### 1.11.1 - Bug fix for the 'Holiday today' / 'Not a holiday today' action diff --git a/app.js b/app.js deleted file mode 100644 index 19ee22d..0000000 --- a/app.js +++ /dev/null @@ -1,189 +0,0 @@ -'use strict'; - -const Homey = require('homey'); -const moment = require('./lib/moment-timezone-with-data'); -const days = require('./lib/days'); -const holidays = require('./lib/holidays'); - -class HeatingControllerApp extends Homey.App { - - async onInit() { - days.setTimeZone(this.homey.clock.getTimezone()); - this.utilityBillApi = this.homey.api.getApiApp('no.almli.utilitycost'); - await this._initFlows(); - this.log('HeatingControllerApp is running...'); - } - - async _initFlows() { - this.homey.flow.getConditionCard('is_public_holiday') - .registerRunListener((args) => this.check(args, { 'public': true })); - this.homey.flow.getConditionCard('is_bank_holiday') - .registerRunListener((args) => this.check(args, { 'bank': true })); - this.homey.flow.getConditionCard('is_observance_holiday') - .registerRunListener((args) => this.check(args, { 'observance': true })); - this.homey.flow.getConditionCard('is_holiday') - .registerRunListener((args) => this.check(args, { 'public': true, 'bank': true, 'observance': true })); - - this.homey.flow.getConditionCard('is_workingday') - .registerRunListener((args) => { - const theDay = holidays.calcDate(moment(), args.condition); - return theDay.day() >= 1 && theDay.day() <= 5 && !this.check(args, { - 'public': true, - 'bank': true, - 'observance': true - }); - }); - - this.homey.flow.getDeviceTriggerCard('high_x_hours_of_day') - .registerRunListener((args, state) => args.device._heatingOffHighPriceComparer(args, state)); - this.homey.flow.getDeviceTriggerCard('low_x_hours_of_day') - .registerRunListener((args, state) => args.device._lowHoursComparer(args, state)); - - this.homey.flow.getConditionCard('is_home') - .registerRunListener((args, state) => args.device.getCapabilityValue('onoff')); - this.homey.flow.getConditionCard('is_home_override') - .registerRunListener((args, state) => args.device.getCapabilityValue('home_override')); - this.homey.flow.getConditionCard('is_night') - .registerRunListener((args, state) => args.device.getCapabilityValue('night')); - this.homey.flow.getConditionCard('is_at_work') - .registerRunListener((args, state) => args.device.getCapabilityValue('at_work')); - this.homey.flow.getConditionCard('is_heating_on') - .registerRunListener((args, state) => args.device.getCapabilityValue('heating')); - this.homey.flow.getConditionCard('current_price_below') - .registerRunListener(args => args.device._lastPrice && (args.price > args.device._lastPrice.price)); - - this.homey.flow.getConditionCard('high_x_hours_of_day_condition') - .registerRunListener((args, state) => { - state.high_price = true; - return args.device._highHoursComparer(args, state); - }); - - this.homey.flow.getConditionCard('low_x_hours_of_day_condition') - .registerRunListener((args, state) => { - state.low_price = true; - return args.device._lowHoursComparer(args, state); - }); - - this.homey.flow.getConditionCard('price_below_avg_condition') - .registerRunListener((args, state) => { - state.below = true; - return args.device._priceAvgComparer(args, state); - }); - - this.homey.flow.getConditionCard('price_below_avg_next_hours_condition') - .registerRunListener((args, state) => { - state.below = true; - return args.device._priceAvgComparer(args, state); - }); - - this.homey.flow.getConditionCard('price_above_avg_condition') - .registerRunListener((args, state) => { - state.below = false; - return args.device._priceAvgComparer(args, state); - }); - - this.homey.flow.getConditionCard('price_above_avg_next_hours_condition') - .registerRunListener((args, state) => { - state.below = false; - return args.device._priceAvgComparer(args, state); - }); - - this.homey.flow.getConditionCard('prices_among_lowest_condition') - .registerRunListener((args, state) => args.device._priceAmongLowestComparer(args, state)); - - this.homey.flow.getConditionCard('prices_among_highest_condition') - .registerRunListener((args, state) => args.device._priceAmongHighestComparer(args, state)); - - this.homey.flow.getConditionCard('price_lowest_among_in_period') - .registerRunListener((args, state) => args.device._priceLowestInPeriodComparer(args, state)); - - this.homey.flow.getConditionCard('price_highest_among_in_period') - .registerRunListener((args, state) => args.device._priceHighestInPeriodComparer(args, state)); - - this.homey.flow.getConditionCard('price_lower_next_hours') - .registerRunListener((args, state) => args.device._priceLowerNextHoursComparer(args, state)); - - this.homey.flow.getConditionCard('price_higher_next_hours') - .registerRunListener((args, state) => args.device._priceHigherNextHoursComparer(args, state)); - - this.homey.flow.getConditionCard('prices_lowest_next_hours') - .registerRunListener((args, state) => args.device._priceLowestNextHoursComparer(args, state)); - - this.homey.flow.getConditionCard('prices_highest_next_hours') - .registerRunListener((args, state) => args.device._priceHighestNextHoursComparer(args, state)); - - this.homey.flow.getConditionCard('price_diff_high_low') - .registerRunListener((args, state) => args.device._priceDiffHighLowComparer(args, state)); - - this.homey.flow.getConditionCard('price_diff_high_low2') - .registerRunListener((args, state) => args.device._priceDiffHighLowComparer2(args, state)); - - this.homey.flow.getActionCard('set_at_home_on') - .registerRunListener((args, state) => args.device.onActionSetAtHomeOn()); - - this.homey.flow.getActionCard('set_at_home_off') - .registerRunListener((args, state) => args.device.onActionSetAtHomeOff()); - - this.homey.flow.getActionCard('set_at_home_off_auto') - .registerRunListener((args, state) => args.device.onActionSetAtHomeOffAuto()); - - this.homey.flow.getActionCard('set_home_override_on') - .registerRunListener((args, state) => args.device.onActionSetHomeOverrideOn()); - - this.homey.flow.getActionCard('set_home_override_on_auto') - .registerRunListener((args, state) => args.device.onActionSetHomeOverrideOnAuto()); - - this.homey.flow.getActionCard('set_home_override_off') - .registerRunListener((args, state) => args.device.onActionSetHomeOverrideOff()); - - this.homey.flow.getActionCard('set_holiday_today') - .registerRunListener((args, state) => args.device.onActionSetHolidayToday(args)); - - this.homey.flow.getActionCard('clear_holiday_today') - .registerRunListener((args, state) => args.device.onActionClearHolidayToday()); - } - - check(args, types) { - if (!args.country || !args.condition) { - return false; - } - let hd; - try { - hd = holidays.isHoliday(args.country, moment(), args.condition); - } catch (err) { - console.error(err); - } - return hd && hd.type && hd.type in types; - } - - async _checkApi() { - try { - const isInstalled = await this.utilityBillApi.getInstalled(); - const version = await this.utilityBillApi.getVersion(); - if (isInstalled && !!version) { - const split = version.split('.'); - let apiOk = (Number(split[0]) >= 1 && Number(split[1]) >= 4); - this.log(`Utility Bill: ${version} installed${apiOk ? ' and ready' : ', but not ready'}`, split); - return apiOk; - } else { - this.log(`Utility Bill: not installed`); - } - } catch (err) { - this.log(`Checking Utility Bill API: ${err.message}`); - } - return false; - } - - async fetchPrices() { - if (await this._checkApi()) { - try { - return await this.utilityBillApi.get('/prices'); - } catch (err) { - this.log('Fetching prices from the Utility Bill app failed: ', err); - } - } - } - -} - -module.exports = HeatingControllerApp; diff --git a/app.ts b/app.ts new file mode 100644 index 0000000..64f04aa --- /dev/null +++ b/app.ts @@ -0,0 +1,191 @@ +import Homey from 'homey'; +import moment from 'moment-timezone'; + +import {holidays, Holiday} from '@balmli/homey-public-holidays' + +module.exports = class HeatingControllerApp extends Homey.App { + + utilityBillApi: any; + + async onInit() { + moment.tz.setDefault(this.homey.clock.getTimezone()); + this.utilityBillApi = this.homey.api.getApiApp('no.almli.utilitycost'); + await this._initFlows(); + this.log('HeatingControllerApp is running...'); + } + + async _initFlows() { + this.homey.flow.getConditionCard('is_public_holiday') + .registerRunListener((args) => this.check(args, {'public': true})); + this.homey.flow.getConditionCard('is_bank_holiday') + .registerRunListener((args) => this.check(args, {'bank': true})); + this.homey.flow.getConditionCard('is_observance_holiday') + .registerRunListener((args) => this.check(args, {'observance': true})); + this.homey.flow.getConditionCard('is_holiday') + .registerRunListener((args) => this.check(args, {'public': true, 'bank': true, 'observance': true})); + + this.homey.flow.getConditionCard('is_workingday') + .registerRunListener((args) => { + const theDay = holidays.calcDate(moment().toDate(), args.condition); + return theDay.getDay() >= 1 && theDay.getDay() <= 5 && !this.check(args, { + 'public': true, + 'bank': true, + 'observance': true + }); + }); + + this.homey.flow.getDeviceTriggerCard('high_x_hours_of_day') + .registerRunListener((args, state) => args.device.priceComparer.heatingOffHighPriceComparer(args, state)); + this.homey.flow.getDeviceTriggerCard('low_x_hours_of_day') + .registerRunListener((args, state) => args.device.priceComparer.lowHoursComparer(args, state)); + + this.homey.flow.getConditionCard('is_home') + .registerRunListener((args, state) => args.device.getCapabilityValue('onoff')); + this.homey.flow.getConditionCard('is_home_override') + .registerRunListener((args, state) => args.device.getCapabilityValue('home_override')); + this.homey.flow.getConditionCard('is_night') + .registerRunListener((args, state) => args.device.getCapabilityValue('night')); + this.homey.flow.getConditionCard('is_at_work') + .registerRunListener((args, state) => args.device.getCapabilityValue('at_work')); + this.homey.flow.getConditionCard('is_heating_on') + .registerRunListener((args, state) => args.device.getCapabilityValue('heating')); + this.homey.flow.getConditionCard('current_price_below') + .registerRunListener(args => args.device._lastPrice && (args.price > args.device._lastPrice.price)); + + this.homey.flow.getConditionCard('high_x_hours_of_day_condition') + .registerRunListener((args, state) => { + state.high_price = true; + return args.device.priceComparer.highHoursComparer(args, state); + }); + + this.homey.flow.getConditionCard('low_x_hours_of_day_condition') + .registerRunListener((args, state) => { + state.low_price = true; + return args.device.priceComparer.lowHoursComparer(args, state); + }); + + this.homey.flow.getConditionCard('price_below_avg_condition') + .registerRunListener((args, state) => { + state.below = true; + return args.device.priceComparer.priceAvgComparer(args, state); + }); + + this.homey.flow.getConditionCard('price_below_avg_next_hours_condition') + .registerRunListener((args, state) => { + state.below = true; + return args.device.priceComparer.priceAvgComparer(args, state); + }); + + this.homey.flow.getConditionCard('price_above_avg_condition') + .registerRunListener((args, state) => { + state.below = false; + return args.device.priceComparer.priceAvgComparer(args, state); + }); + + this.homey.flow.getConditionCard('price_above_avg_next_hours_condition') + .registerRunListener((args, state) => { + state.below = false; + return args.device.priceComparer.priceAvgComparer(args, state); + }); + + this.homey.flow.getConditionCard('prices_among_lowest_condition') + .registerRunListener((args, state) => args.device.priceComparer.priceAmongLowestComparer(args, state)); + + this.homey.flow.getConditionCard('prices_among_highest_condition') + .registerRunListener((args, state) => args.device.priceComparer.priceAmongHighestComparer(args, state)); + + this.homey.flow.getConditionCard('price_lowest_among_in_period') + .registerRunListener((args, state) => args.device.priceComparer.priceLowestInPeriodComparer(args, state)); + + this.homey.flow.getConditionCard('price_highest_among_in_period') + .registerRunListener((args, state) => args.device.priceComparer.priceHighestInPeriodComparer(args, state)); + + this.homey.flow.getConditionCard('price_lower_next_hours') + .registerRunListener((args, state) => args.device.priceComparer.priceLowerNextHoursComparer(args, state)); + + this.homey.flow.getConditionCard('price_higher_next_hours') + .registerRunListener((args, state) => args.device.priceComparer.priceHigherNextHoursComparer(args, state)); + + this.homey.flow.getConditionCard('prices_lowest_next_hours') + .registerRunListener((args, state) => args.device.priceComparer.priceLowestNextHoursComparer(args, state)); + + this.homey.flow.getConditionCard('prices_highest_next_hours') + .registerRunListener((args, state) => args.device.priceComparer.priceHighestNextHoursComparer(args, state)); + + this.homey.flow.getConditionCard('price_diff_high_low') + .registerRunListener((args, state) => args.device.priceComparer.priceDiffHighLowComparer(args, state)); + + this.homey.flow.getConditionCard('price_diff_high_low2') + .registerRunListener((args, state) => args.device.priceComparer.priceDiffHighLowComparer2(args, state)); + + this.homey.flow.getActionCard('set_at_home_on') + .registerRunListener((args, state) => args.device.onActionSetAtHomeOn()); + + this.homey.flow.getActionCard('set_at_home_off') + .registerRunListener((args, state) => args.device.onActionSetAtHomeOff()); + + this.homey.flow.getActionCard('set_at_home_off_auto') + .registerRunListener((args, state) => args.device.onActionSetAtHomeOffAuto()); + + this.homey.flow.getActionCard('set_home_override_on') + .registerRunListener((args, state) => args.device.onActionSetHomeOverrideOn()); + + this.homey.flow.getActionCard('set_home_override_on_auto') + .registerRunListener((args, state) => args.device.onActionSetHomeOverrideOnAuto()); + + this.homey.flow.getActionCard('set_home_override_off') + .registerRunListener((args, state) => args.device.onActionSetHomeOverrideOff()); + + this.homey.flow.getActionCard('set_holiday_today') + .registerRunListener((args, state) => args.device.onActionSetHolidayToday(args)); + + this.homey.flow.getActionCard('clear_holiday_today') + .registerRunListener((args, state) => args.device.onActionClearHolidayToday()); + } + + check(args: any, types: any) { + if (!args.country || !args.condition) { + return false; + } + let hd; + try { + hd = holidays.isHoliday(args.country, moment().toDate(), args.condition); + } catch (err) { + console.error(err); + } + if (hd == false) { + return false; + } + const hdd = hd as Holiday; + return hdd.type in types; + } + + async _checkApi() { + try { + const isInstalled = await this.utilityBillApi.getInstalled(); + const version = await this.utilityBillApi.getVersion(); + if (isInstalled && !!version) { + const split = version.split('.'); + let apiOk = (Number(split[0]) >= 1 && Number(split[1]) >= 4); + this.log(`Utility Bill: ${version} installed${apiOk ? ' and ready' : ', but not ready'}`, split); + return apiOk; + } else { + this.log(`Utility Bill: not installed`); + } + } catch (err: any) { + this.log(`Checking Utility Bill API: ${err.message}`); + } + return false; + } + + async fetchPrices() { + if (await this._checkApi()) { + try { + return await this.utilityBillApi.get('/prices'); + } catch (err) { + this.log('Fetching prices from the Utility Bill app failed: ', err); + } + } + } + +} diff --git a/drivers/HeatingController/device.js b/drivers/HeatingController/device.js deleted file mode 100644 index e5aac4f..0000000 --- a/drivers/HeatingController/device.js +++ /dev/null @@ -1,654 +0,0 @@ -'use strict'; - -const Homey = require('homey'); -const moment = require('../../lib/moment-timezone-with-data'); -const pricesLib = require('../../lib/prices'); -const nordpool = require('../../lib/nordpool'); -const heating = require('../../lib/heating'); - -module.exports = class HeatingControllerDevice extends Homey.Device { - - async onInit() { - await this.migrate(); - await this.fixPrice(this.getSetting('currency')); - this._at_home = undefined; - this._home_override = undefined; - this._home_on_next_period = false; - this._ho_off_next_period = false; - - this._lastFetchData = undefined; - this._lastPrice = undefined; - this._prices = undefined; - - this.registerCapabilityListener('onoff', async (value, opts) => { - this.log(this.getName() + ' -> onoff changed: ', value, opts); - await this.checkTime({ onoff: value }); - if (value) { - this.homey.flow.getDeviceTriggerCard('home_was_set_on').trigger(this, {}).catch(this.error); - } else { - this.homey.flow.getDeviceTriggerCard('home_was_set_off').trigger(this, {}).catch(this.error); - } - }); - - this.scheduleCheckTime(5); - this.log(this.getName() + ' -> device initialized'); - } - - async migrate() { - try { - if (!this.hasCapability('price_ratio')) { - await this.addCapability('price_ratio'); - } - this.log(this.getName() + ' -> migrated OK'); - } catch (err) { - this.error(err); - } - } - - async fixPrice(selectedCurrency) { - try { - if (this.hasCapability('price')) { - await this.removeCapability('price'); - } - for (let currency of ['DKK', 'EUR', 'NOK', 'SEK']) { - if (currency !== selectedCurrency && - this.hasCapability(`price_${currency}`)) { - await this.removeCapability(`price_${currency}`); - } - } - if (!this.hasCapability(`price_${selectedCurrency}`)) { - await this.addCapability(`price_${selectedCurrency}`); - } - } catch (err) { - this.error(err); - } - } - - async onSettings({ oldSettings, newSettings, changedKeys }) { - if (changedKeys.includes('currency') || changedKeys.includes('pricesFromUtilityBill')) { - await this.fixPrice(newSettings.currency); - this._lastFetchData = undefined; - this._lastPrice = undefined; - this.scheduleCheckTime(5); - } - } - - async onActionSetAtHomeOn() { - await this.setCapabilityValue('onoff', true).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('home_was_set_on').trigger(this, {}).catch(this.error); - return this.checkTime({ onoff: true }); - } - - async onActionSetAtHomeOff() { - this._home_on_next_period = false; - await this.setCapabilityValue('onoff', false).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('home_was_set_off').trigger(this, {}).catch(this.error); - return this.checkTime({ onoff: false }); - } - - async onActionSetAtHomeOffAuto() { - this._home_on_next_period = true; - await this.setCapabilityValue('onoff', false).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('home_was_set_off').trigger(this, {}).catch(this.error); - return this.checkTime({ onoff: false }); - } - - async onActionSetHomeOverrideOn() { - this._ho_off_next_period = false; - await this.setCapabilityValue('home_override', true).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('homeoverride_set_on').trigger(this, {}).catch(this.error); - return this.checkTime({ home_override: true}); - } - - async onActionSetHomeOverrideOnAuto() { - this._ho_off_next_period = true; - await this.setCapabilityValue('home_override', true).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('homeoverride_set_on').trigger(this, {}).catch(this.error); - return this.checkTime({ home_override: true}); - } - - async onActionSetHomeOverrideOff() { - await this.setCapabilityValue('home_override', false).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('home_override_set_off').trigger(this, {}).catch(this.error); - return this.checkTime({ home_override: false}); - } - - async onActionSetHolidayToday(args) { - await this.setSettings({ holiday_today: args.holiday }).catch(this.error); - return this.checkTime(); - } - - async onActionClearHolidayToday() { - await this.setSettings({ holiday_today: '' }).catch(this.error); - return this.checkTime(); - } - - onAdded() { - this.log(this.getName() + ' -> device added', this.getData().id); - } - - onDeleted() { - this._deleted = true; - this.clearCheckTime(); - this.log(this.getName() + ' -> device deleted'); - } - - clearCheckTime() { - if (this.curTimeout) { - this.homey.clearTimeout(this.curTimeout); - this.curTimeout = undefined; - } - } - - scheduleCheckTime(seconds = 60) { - if (this._deleted) { - return; - } - this.clearCheckTime(); - this.log(`Checking time in ${seconds} seconds`); - this.curTimeout = this.homey.setTimeout(this.checkTime.bind(this), seconds * 1000); - } - - async checkTime(props = {}) { - const onoff = props.onoff; - const home_override = props.home_override; - if (this._deleted) { - return; - } - try { - this.log('Checking: ', this.getData().id); - this.clearCheckTime(); - - if (onoff === false || onoff === true) { - this._at_home = onoff; - } else { - this._at_home = this.getCapabilityValue('onoff'); - } - if (this._at_home === undefined || this._at_home === null) { - this._at_home = true; - await this.setCapabilityValue('onoff', this._at_home).catch(this.error); - } - - if (home_override === false || home_override === true) { - this._home_override = home_override; - } else { - this._home_override = this.getCapabilityValue('home_override'); - } - if (this._home_override === undefined || this._home_override === null) { - this._home_override = false; - await this.setCapabilityValue('home_override', this._home_override).catch(this.error); - } - if (this.shallFetchData()) { - await this.fetchData(); - } - if (this._prices) { - await this.onData(); - } - } catch (err) { - this.error(err); - } finally { - this.scheduleCheckTime(); - } - } - - async fetchData() { - try { - const settings = this.getSettings(); - if (settings.pricesFromUtilityBill) { - const pricesUtilityBill = await this.homey.app.fetchPrices(); - this._lastFetchData = moment(); - this._prices = pricesUtilityBill ? pricesUtilityBill - .map(p => { - return { - startsAt: moment(p.time * 1000), - time: p.time, - price: p.price, - } - }) : undefined; - this.log('Got prices from the Utility Bill app:', this._prices ? this._prices.length : 0); - } else { - const priceArea = settings.priceArea || 'Oslo'; - const currency = settings.currency || 'EUR'; - this.log('Will fetch prices:', this.getData().id, priceArea, currency); - const localTime = moment().startOf('day'); - const prices = await nordpool.fetchPrices(localTime, { priceArea, currency }); - this._lastFetchData = moment(); - this._prices = prices; - this.log('Got prices:', this.getData().id, prices.length); - } - } catch (err) { - this.error(err); - } - } - - shallFetchData() { - return !this._prices - || !this._lastFetchData - || pricesLib.toHour(this._lastFetchData) !== pricesLib.toHour(moment()); - } - - async onData() { - try { - const localTime = moment(); - const heatingOptions = this._getHeatingOptions(); - let calcHeating = heating.calcHeating(localTime, this._at_home, this._home_override, heatingOptions); - this.log('Heating:', calcHeating); - - const curNight = this.getCapabilityValue('night'); - let nightChanged = false; - if (curNight === undefined || curNight === null || calcHeating.night !== curNight) { - nightChanged = true; - await this.setCapabilityValue('night', calcHeating.night).catch(this.error); - } - - const curAtWork = this.getCapabilityValue('at_work'); - let atWorkChanged = false; - if (curAtWork === undefined || curAtWork === null || calcHeating.atWork !== curAtWork) { - atWorkChanged = true; - await this.setCapabilityValue('at_work', calcHeating.atWork).catch(this.error); - } - - if (nightChanged || atWorkChanged) { - let recalcHeating = false; - if (this._home_on_next_period) { - recalcHeating = true; - this._home_on_next_period = false; - this._at_home = true; - await this.setCapabilityValue('onoff', true).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('home_was_set_on').trigger(this, {}).catch(this.error); - this.log('Automatically set home mode'); - } - if (this._ho_off_next_period) { - recalcHeating = true; - this._ho_off_next_period = false; - this._home_override = false; - await this.setCapabilityValue('home_override', false).catch(this.error); - await this.homey.flow.getDeviceTriggerCard('home_override_set_off').trigger(this, {}).catch(this.error); - this.log('Automatically set home override off'); - } - if (recalcHeating) { - calcHeating = heating.calcHeating(localTime, this._at_home, this._home_override, heatingOptions); - this.log('Heating recalculated:', calcHeating); - } - } - - const curHeating = this.getCapabilityValue('heating'); - const heatChanged = curHeating === undefined || curHeating === null || calcHeating.heating !== curHeating; - if (heatChanged) { - await this.setCapabilityValue('heating', calcHeating.heating).catch(this.error); - } - - const currentPrice = pricesLib.currentPrice(this._prices, localTime); - const startAtHour = currentPrice ? pricesLib.toHour(currentPrice.startsAt) : undefined; - const priceRatio = pricesLib.priceRatio(this._prices, localTime); - const price = currentPrice ? currentPrice.price : undefined; - let priceChanged = false; - - if (currentPrice) { - this.log('Current price:', startAtHour, price); - - priceChanged = !this._lastPrice || startAtHour !== pricesLib.toHour(this._lastPrice.startsAt); - this._lastPrice = currentPrice; - const priceCapability = `price_${this.getSetting('currency')}`; - if (this.hasCapability(priceCapability)) { - await this.setCapabilityValue(priceCapability, price).catch(this.error); - } - if (priceRatio !== undefined && this.hasCapability('price_ratio')) { - await this.setCapabilityValue('price_ratio', priceRatio).catch(this.error); - } - } - - if (nightChanged) { - if (calcHeating.night) { - await this.homey.flow.getDeviceTriggerCard('night_starts').trigger(this, {}).catch(this.error); - this.log('Night starts trigger'); - } else { - await this.homey.flow.getDeviceTriggerCard('night_ends').trigger(this, {}).catch(this.error); - this.log('Night ends trigger'); - } - } - - if (atWorkChanged) { - if (calcHeating.atWork) { - await this.homey.flow.getDeviceTriggerCard('at_work_starts').trigger(this, {}).catch(this.error); - this.log('At work starts trigger'); - } else { - await this.homey.flow.getDeviceTriggerCard('at_work_ends').trigger(this, {}).catch(this.error); - this.log('At work ends trigger'); - } - } - - if (heatChanged) { - if (calcHeating.heating) { - await this.homey.flow.getDeviceTriggerCard('comfort_mode').trigger(this, {}).catch(this.error); - this.log('Comfort mode trigger'); - } else { - await this.homey.flow.getDeviceTriggerCard('eco_mode').trigger(this, {}).catch(this.error); - this.log('ECO mode trigger'); - } - } - - if (priceChanged) { - const sorted = pricesLib.pricesSorted(this._prices, localTime); - const priceMin = sorted.length > 0 ? sorted[0].price : undefined; - const priceMax = sorted.length > 0 ? sorted[sorted.length - 1].price : undefined; - const priceLevel = pricesLib.priceLevel(this._prices, localTime); - await this.homey.flow.getDeviceTriggerCard('price_changed').trigger(this, { - price, - heating: calcHeating.heating, - priceRatio, - priceMin, - priceMax, - priceLevel: priceLevel ? priceLevel.code : '', - priceLevelDescr: priceLevel ? priceLevel.description : '', - }).catch(this.error); - this.log('Price changed trigger', startAtHour, price, priceRatio); - } - - if (priceChanged || heatChanged) { - await this.homey.flow.getDeviceTriggerCard('high_x_hours_of_day').trigger(this, { - heating: calcHeating.heating, - high_price: true - }, { - atHome: this._at_home, - homeOverride: this._home_override, - high_price: true, - heatingOptions: heatingOptions - }).catch(this.error); - - await this.homey.flow.getDeviceTriggerCard('high_x_hours_of_day').trigger(this, { - heating: calcHeating.heating, - high_price: false - }, { - atHome: this._at_home, - homeOverride: this._home_override, - high_price: false, - heatingOptions: heatingOptions - }).catch(this.error); - - await this.homey.flow.getDeviceTriggerCard('low_x_hours_of_day').trigger(this, { - heating: calcHeating.heating, - low_price: true - }, { - low_price: true - }).catch(this.error); - - await this.homey.flow.getDeviceTriggerCard('low_x_hours_of_day').trigger(this, { - heating: calcHeating.heating, - low_price: false - }, { - low_price: false - }).catch(this.error); - } - } catch (err) { - this.error(err); - } - } - - async _heatingOffHighPriceComparer(args, state) { - if (!args.high_hours - || args.high_hours <= 0 - || args.high_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - - // Finds prices starting at 00:00 today - const pricesNextHours = pricesLib.pricesStarting(this._prices, localTime, 0, 24); - if (pricesNextHours.length === 0) { - return false; - } - - // Check if high price now. Must be ECO mode, and will skip consecutive hours. - const highPriceNow = pricesLib.checkHighPrice2(pricesNextHours, args.high_hours, localTime, state); - - return state.high_price === false && highPriceNow.length === 0 || state.high_price === true && highPriceNow.length === 1; - } - - async _highHoursComparer(args, state) { - if (!args.high_hours - || args.high_hours <= 0 - || args.high_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - - // Finds prices starting at 00:00 today - const pricesNextHours = pricesLib.pricesStarting(this._prices, localTime, 0, 24); - if (pricesNextHours.length === 0) { - return false; - } - - // Check if high price now. - const highPriceNow = pricesLib.checkHighPrice(pricesNextHours, args.high_hours, localTime); - - return state.high_price === false && highPriceNow.length === 0 || state.high_price === true && highPriceNow.length === 1; - } - - async _lowHoursComparer(args, state) { - if (!args.low_hours - || args.low_hours <= 0 - || args.low_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - - // Finds prices starting at 00:00 today - const pricesNextHours = pricesLib.pricesStarting(this._prices, localTime, 0, 24); - if (pricesNextHours.length === 0) { - return false; - } - - // Check if low price now - const lowPriceNow = pricesLib.checkLowPrice(pricesNextHours, args.low_hours, localTime); - - return state.low_price === true && lowPriceNow.length === 1 || state.low_price === false && lowPriceNow.length === 0; - } - - async _priceAvgComparer(args, state) { - if (!args.percentage - || args.percentage <= 0 - || args.percentage >= 100 - || !this._prices) { - return false; - } - const localTime = moment(); - let startHour = 0; - let numHours = 24; - if (args.hours) { - startHour = localTime.hour(); - numHours = args.hours; - } - - const currentPrice = pricesLib.currentPrice(this._prices, localTime); - - // Finds average of prices - const averagePrice = pricesLib.averagePricesStarting(this._prices, localTime, startHour, numHours); - if (!averagePrice) { - return false; - } - - return pricesLib.checkAveragePrice(currentPrice.price, averagePrice, state.below, args.percentage); - } - - async _priceAmongLowestComparer(args, state) { - if (!args.low_hours - || args.low_hours <= 0 - || args.low_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - let startHour = 0; - let numHours = 24; - let numLowestHours = 1; - if (args.hours) { - startHour = localTime.hour(); - numHours = args.hours; - numLowestHours = args.low_hours; - } - - return pricesLib.pricesAmongLowest(this._prices, localTime, startHour, numHours, numLowestHours); - } - - async _priceAmongHighestComparer(args, state) { - if (!args.high_hours - || args.high_hours <= 0 - || args.high_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - let startHour = 0; - let numHours = 24; - let numHighestHours = 1; - if (args.hours) { - startHour = localTime.hour(); - numHours = args.hours; - numHighestHours = args.high_hours; - } - - return pricesLib.pricesAmongHighest(this._prices, localTime, startHour, numHours, numHighestHours); - } - - async _priceLowestInPeriodComparer(args, state) { - if (args.start === undefined - || args.end === undefined - || !args.low_hours - || args.low_hours <= 0 - || args.low_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, args.start, args.end); - return pricesLib.pricesLowestInPeriod(this._prices, localTime, startTs, endTs, args.low_hours); - } - - async _priceHighestInPeriodComparer(args, state) { - if (args.start === undefined - || args.end === undefined - || !args.high_hours - || args.high_hours <= 0 - || args.high_hours >= 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, args.start, args.end); - return pricesLib.pricesHighestInPeriod(this._prices, localTime, startTs, endTs, args.high_hours); - } - - _priceLowestNextHoursComparer(args, state) { - if (args.start === undefined - || args.end === undefined - || !args.hours - || args.hours <= 0 - || args.hours > 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, args.start, args.end); - const sumPrice = pricesLib.checkSumPrices(this._prices, localTime, startTs, endTs, args.hours, true); - return !!sumPrice; - } - - _priceHighestNextHoursComparer(args, state) { - if (args.start === undefined - || args.end === undefined - || !args.hours - || args.hours <= 0 - || args.hours > 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, args.start, args.end); - const sumPrice = pricesLib.checkSumPrices(this._prices, localTime, startTs, endTs, args.hours, false); - return !!sumPrice; - } - - _priceDiffHighLowComparer(args, state) { - if (!args.percentage - || args.percentage < 0 - || args.percentage > 9999 - || !this._prices) { - return false; - } - - const localTime = moment(); - const diffCheck = pricesLib.priceHighLow(this._prices, localTime); - return diffCheck.diffPercentage < args.percentage; - } - - _priceDiffHighLowComparer2(args, state) { - if (!args.amount - || args.amount < 0 - || args.amount > 9999 - || !this._prices) { - return false; - } - - const localTime = moment(); - const diffCheck = pricesLib.priceHighLow(this._prices, localTime); - return diffCheck.diffAmount < args.amount; - } - - _priceLowerNextHoursComparer(args, state) { - if (!args.hours - || args.hours <= 0 - || args.hours > 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - return pricesLib.currentPriceLowerThanNext(this._prices, localTime, args.hours); - } - - _priceHigherNextHoursComparer(args, state) { - if (!args.hours - || args.hours <= 0 - || args.hours > 24 - || !this._prices) { - return false; - } - - const localTime = moment(); - return pricesLib.currentPriceHigherThanNext(this._prices, localTime, args.hours); - } - - _getHeatingOptions() { - const settings = this.getSettings(); - return { - workday: { - startHour: settings.workdayStartHour || 5, - endHour: settings.workdayEndHour || 22.5, - }, - notWorkday: { - startHour: settings.notWorkdayStartHour || 7, - endHour: settings.notWorkdayEndHour || 23, - }, - workHours: { - startHour: settings.workHoursStartHour || 7, - endHour: settings.workHoursEndHour || 14 - }, - country: settings.country, - holiday_today: settings.holiday_today - }; - } - -}; diff --git a/drivers/HeatingController/device.ts b/drivers/HeatingController/device.ts new file mode 100644 index 0000000..210b115 --- /dev/null +++ b/drivers/HeatingController/device.ts @@ -0,0 +1,418 @@ +const Homey = require('homey'); +import moment from 'moment-timezone'; + +import {heating, HeatingOptions, HolidayToday, NordpoolApi, PriceApi, PriceComparer} from '@balmli/homey-utility-prices' + +module.exports = class HeatingControllerDevice extends Homey.Device { + + priceApi = new PriceApi() + nordpool = new NordpoolApi() + priceComparer = new PriceComparer(this.priceApi) + + async onInit() { + await this.migrate(); + await this.fixPrice(this.getSetting('currency')); + this._at_home = undefined; + this._home_override = undefined; + this._home_on_next_period = false; + this._ho_off_next_period = false; + + this._lastFetchData = undefined; + this._lastPrice = undefined; + this._prices = undefined; + + this.registerCapabilityListener('onoff', async (value: any, opts: any) => { + this.log(this.getName() + ' -> onoff changed: ', value, opts); + await this.checkTime({onoff: value}); + if (value) { + this.homey.flow.getDeviceTriggerCard('home_was_set_on').trigger(this, {}).catch(this.error); + } else { + this.homey.flow.getDeviceTriggerCard('home_was_set_off').trigger(this, {}).catch(this.error); + } + }); + + this.scheduleCheckTime(5); + this.log(this.getName() + ' -> device initialized'); + } + + async migrate() { + try { + if (!this.hasCapability('price_ratio')) { + await this.addCapability('price_ratio'); + } + this.log(this.getName() + ' -> migrated OK'); + } catch (err) { + this.error(err); + } + } + + async fixPrice(selectedCurrency: string): Promise { + try { + if (this.hasCapability('price')) { + await this.removeCapability('price'); + } + for (let currency of ['DKK', 'EUR', 'NOK', 'SEK']) { + if (currency !== selectedCurrency && + this.hasCapability(`price_${currency}`)) { + await this.removeCapability(`price_${currency}`); + } + } + if (!this.hasCapability(`price_${selectedCurrency}`)) { + await this.addCapability(`price_${selectedCurrency}`); + } + } catch (err) { + this.error(err); + } + } + + async onSettings({oldSettings, newSettings, changedKeys}: { + oldSettings: any; + newSettings: any; + changedKeys: string[]; + }): Promise { + if (changedKeys.includes('currency') || changedKeys.includes('pricesFromUtilityBill')) { + await this.fixPrice(newSettings.currency); + this._lastFetchData = undefined; + this._lastPrice = undefined; + this.scheduleCheckTime(5); + } + } + + async onActionSetAtHomeOn() { + await this.setCapabilityValue('onoff', true).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('home_was_set_on').trigger(this, {}).catch(this.error); + return this.checkTime({onoff: true}); + } + + async onActionSetAtHomeOff() { + this._home_on_next_period = false; + await this.setCapabilityValue('onoff', false).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('home_was_set_off').trigger(this, {}).catch(this.error); + return this.checkTime({onoff: false}); + } + + async onActionSetAtHomeOffAuto() { + this._home_on_next_period = true; + await this.setCapabilityValue('onoff', false).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('home_was_set_off').trigger(this, {}).catch(this.error); + return this.checkTime({onoff: false}); + } + + async onActionSetHomeOverrideOn() { + this._ho_off_next_period = false; + await this.setCapabilityValue('home_override', true).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('homeoverride_set_on').trigger(this, {}).catch(this.error); + return this.checkTime({home_override: true}); + } + + async onActionSetHomeOverrideOnAuto() { + this._ho_off_next_period = true; + await this.setCapabilityValue('home_override', true).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('homeoverride_set_on').trigger(this, {}).catch(this.error); + return this.checkTime({home_override: true}); + } + + async onActionSetHomeOverrideOff() { + await this.setCapabilityValue('home_override', false).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('home_override_set_off').trigger(this, {}).catch(this.error); + return this.checkTime({home_override: false}); + } + + async onActionSetHolidayToday(args: any) { + await this.setSettings({holiday_today: args.holiday}).catch(this.error); + return this.checkTime(); + } + + async onActionClearHolidayToday() { + await this.setSettings({holiday_today: ''}).catch(this.error); + return this.checkTime(); + } + + onAdded() { + this.log(this.getName() + ' -> device added', this.getData().id); + } + + onDeleted() { + this._deleted = true; + this.clearCheckTime(); + this.log(this.getName() + ' -> device deleted'); + } + + clearCheckTime() { + if (this.curTimeout) { + this.homey.clearTimeout(this.curTimeout); + this.curTimeout = undefined; + } + } + + scheduleCheckTime(seconds = 60) { + if (this._deleted) { + return; + } + this.clearCheckTime(); + this.log(`Checking time in ${seconds} seconds`); + this.curTimeout = this.homey.setTimeout(this.checkTime.bind(this), seconds * 1000); + } + + async checkTime(props: any = {}) { + const onoff = props.onoff; + const home_override = props.home_override; + if (this._deleted) { + return; + } + try { + this.log('Checking: ', this.getData().id); + this.clearCheckTime(); + + if (onoff === false || onoff === true) { + this._at_home = onoff; + } else { + this._at_home = this.getCapabilityValue('onoff'); + } + if (this._at_home === undefined || this._at_home === null) { + this._at_home = true; + await this.setCapabilityValue('onoff', this._at_home).catch(this.error); + } + + if (home_override === false || home_override === true) { + this._home_override = home_override; + } else { + this._home_override = this.getCapabilityValue('home_override'); + } + if (this._home_override === undefined || this._home_override === null) { + this._home_override = false; + await this.setCapabilityValue('home_override', this._home_override).catch(this.error); + } + if (this.shallFetchData()) { + await this.fetchData(); + } + if (this._prices) { + await this.onData(); + } + } catch (err) { + this.error(err); + } finally { + this.scheduleCheckTime(); + } + } + + async fetchData() { + try { + const settings = this.getSettings(); + if (settings.pricesFromUtilityBill) { + const pricesUtilityBill = await this.homey.app.fetchPrices(); + this._lastFetchData = moment(); + this._prices = pricesUtilityBill ? pricesUtilityBill + .map((p: any) => { + return { + startsAt: moment(p.time * 1000), + time: p.time, + price: p.price, + } + }) : undefined; + this.priceComparer.updatePrices(this._prices); + this.log('Got prices from the Utility Bill app:', this._prices ? this._prices.length : 0); + } else { + const priceArea = settings.priceArea || 'Oslo'; + const currency = settings.currency || 'EUR'; + this.log('Will fetch prices:', this.getData().id, priceArea, currency); + const localTime = moment().startOf('day'); + const prices = await this.nordpool.fetchPrices(localTime, {priceArea, currency}); + this._lastFetchData = moment(); + this._prices = prices; + this.priceComparer.updatePrices(this._prices); + this.log('Got prices:', this.getData().id, prices.length); + } + } catch (err) { + this.error(err); + } + } + + shallFetchData() { + return !this._prices + || this._prices.length == 0 + || !this._lastFetchData + || this.priceApi.toHour(this._lastFetchData) !== this.priceApi.toHour(moment()); + } + + async onData() { + try { + const localTime = moment(); + const heatingOptions = this._getHeatingOptions(); + let calcHeating = heating.calcHeating(localTime, this._at_home, this._home_override, heatingOptions); + this.log('Heating:', calcHeating); + + const curNight = this.getCapabilityValue('night'); + let nightChanged = false; + if (curNight === undefined || curNight === null || calcHeating.night !== curNight) { + nightChanged = true; + await this.setCapabilityValue('night', calcHeating.night).catch(this.error); + } + + const curAtWork = this.getCapabilityValue('at_work'); + let atWorkChanged = false; + if (curAtWork === undefined || curAtWork === null || calcHeating.atWork !== curAtWork) { + atWorkChanged = true; + await this.setCapabilityValue('at_work', calcHeating.atWork).catch(this.error); + } + + if (nightChanged || atWorkChanged) { + let recalcHeating = false; + if (this._home_on_next_period) { + recalcHeating = true; + this._home_on_next_period = false; + this._at_home = true; + await this.setCapabilityValue('onoff', true).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('home_was_set_on').trigger(this, {}).catch(this.error); + this.log('Automatically set home mode'); + } + if (this._ho_off_next_period) { + recalcHeating = true; + this._ho_off_next_period = false; + this._home_override = false; + await this.setCapabilityValue('home_override', false).catch(this.error); + await this.homey.flow.getDeviceTriggerCard('home_override_set_off').trigger(this, {}).catch(this.error); + this.log('Automatically set home override off'); + } + if (recalcHeating) { + calcHeating = heating.calcHeating(localTime, this._at_home, this._home_override, heatingOptions); + this.log('Heating recalculated:', calcHeating); + } + } + + const curHeating = this.getCapabilityValue('heating'); + const heatChanged = curHeating === undefined || curHeating === null || calcHeating.heating !== curHeating; + if (heatChanged) { + await this.setCapabilityValue('heating', calcHeating.heating).catch(this.error); + } + + const currentPrice = this.priceApi.currentPrice(this._prices, localTime); + const startAtHour = currentPrice ? this.priceApi.toHour(currentPrice.startsAt) : undefined; + const priceRatio = this.priceApi.priceRatio(this._prices, localTime); + const price = currentPrice ? currentPrice.price : undefined; + let priceChanged = false; + + if (currentPrice) { + this.log('Current price:', startAtHour, price); + + priceChanged = !this._lastPrice || startAtHour !== this.priceApi.toHour(this._lastPrice.startsAt); + this._lastPrice = currentPrice; + const priceCapability = `price_${this.getSetting('currency')}`; + if (this.hasCapability(priceCapability)) { + await this.setCapabilityValue(priceCapability, price).catch(this.error); + } + if (priceRatio !== undefined && this.hasCapability('price_ratio')) { + await this.setCapabilityValue('price_ratio', priceRatio).catch(this.error); + } + } + + if (nightChanged) { + if (calcHeating.night) { + await this.homey.flow.getDeviceTriggerCard('night_starts').trigger(this, {}).catch(this.error); + this.log('Night starts trigger'); + } else { + await this.homey.flow.getDeviceTriggerCard('night_ends').trigger(this, {}).catch(this.error); + this.log('Night ends trigger'); + } + } + + if (atWorkChanged) { + if (calcHeating.atWork) { + await this.homey.flow.getDeviceTriggerCard('at_work_starts').trigger(this, {}).catch(this.error); + this.log('At work starts trigger'); + } else { + await this.homey.flow.getDeviceTriggerCard('at_work_ends').trigger(this, {}).catch(this.error); + this.log('At work ends trigger'); + } + } + + if (heatChanged) { + if (calcHeating.heating) { + await this.homey.flow.getDeviceTriggerCard('comfort_mode').trigger(this, {}).catch(this.error); + this.log('Comfort mode trigger'); + } else { + await this.homey.flow.getDeviceTriggerCard('eco_mode').trigger(this, {}).catch(this.error); + this.log('ECO mode trigger'); + } + } + + if (priceChanged) { + const sorted = this.priceApi.pricesSorted(this._prices, localTime); + const priceMin = sorted.length > 0 ? sorted[0].price : undefined; + const priceMax = sorted.length > 0 ? sorted[sorted.length - 1].price : undefined; + const priceLevel = this.priceApi.priceLevel(this._prices, localTime); + await this.homey.flow.getDeviceTriggerCard('price_changed').trigger(this, { + price, + heating: calcHeating.heating, + priceRatio, + priceMin, + priceMax, + priceLevel: priceLevel ? priceLevel.code : '', + priceLevelDescr: priceLevel ? priceLevel.description : '', + }).catch(this.error); + this.log('Price changed trigger', startAtHour, price, priceRatio); + } + + if (priceChanged || heatChanged) { + await this.homey.flow.getDeviceTriggerCard('high_x_hours_of_day').trigger(this, { + heating: calcHeating.heating, + high_price: true + }, { + atHome: this._at_home, + homeOverride: this._home_override, + high_price: true, + heatingOptions: heatingOptions + }).catch(this.error); + + await this.homey.flow.getDeviceTriggerCard('high_x_hours_of_day').trigger(this, { + heating: calcHeating.heating, + high_price: false + }, { + atHome: this._at_home, + homeOverride: this._home_override, + high_price: false, + heatingOptions: heatingOptions + }).catch(this.error); + + await this.homey.flow.getDeviceTriggerCard('low_x_hours_of_day').trigger(this, { + heating: calcHeating.heating, + low_price: true + }, { + low_price: true + }).catch(this.error); + + await this.homey.flow.getDeviceTriggerCard('low_x_hours_of_day').trigger(this, { + heating: calcHeating.heating, + low_price: false + }, { + low_price: false + }).catch(this.error); + } + } catch (err) { + this.error(err); + } + } + + _getHeatingOptions(): HeatingOptions { + const settings = this.getSettings(); + return { + workday: { + startHour: settings.workdayStartHour || 5, + endHour: settings.workdayEndHour || 22.5, + }, + notWorkday: { + startHour: settings.notWorkdayStartHour || 7, + endHour: settings.notWorkdayEndHour || 23, + }, + workHours: { + startHour: settings.workHoursStartHour || 7, + endHour: settings.workHoursEndHour || 14 + }, + country: settings.country, + holiday_today: settings.holiday_today === 'holiday' ? HolidayToday.holiday : + settings.holiday_today === 'not_holiday' ? HolidayToday.not_holiday : + HolidayToday.automatic + }; + } + +}; diff --git a/drivers/HeatingController/driver.js b/drivers/HeatingController/driver.js deleted file mode 100644 index c3fbdde..0000000 --- a/drivers/HeatingController/driver.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -const Homey = require('homey'); - -module.exports = class HeatingControllerDriver extends Homey.Driver { - - async onInit() { - this.log('HeatingControllerDriver driver has been initialized'); - } - - async onPairListDevices() { - return [ - { - "name": "Heating Controller", - "data": { - "id": guid() - } - } - ]; - } - -}; - -function guid() { - function s4() { - return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); - } - - return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); -} diff --git a/drivers/HeatingController/driver.ts b/drivers/HeatingController/driver.ts new file mode 100644 index 0000000..1ecc184 --- /dev/null +++ b/drivers/HeatingController/driver.ts @@ -0,0 +1,28 @@ +const Homey = require('homey'); + +module.exports = class HeatingControllerDriver extends Homey.Driver { + + async onInit() { + this.log('HeatingControllerDriver driver has been initialized'); + } + + async onPairListDevices() { + return [ + { + "name": "Heating Controller", + "data": { + "id": guid() + } + } + ]; + } + +}; + +function guid() { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + } + + return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); +} diff --git a/image.xcf b/image.xcf deleted file mode 100644 index 8fd1ce10d88a6c8aedc60a83f49694b66423979e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544681 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

T7H3=#&i3&EUulLINc%jAP4~@?Td})z;P4)uI1W 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

1U2OiWvw0UMP>C}v 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�!WBxU%`*;mz{2lEam7B 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�IGm@rT}a$o|c-W_RI*e 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 diff --git a/lib/countries.js b/lib/countries.js deleted file mode 100644 index d86e0d1..0000000 --- a/lib/countries.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict'; - -const countries = [ - { - "id": "AU", - "name": "Australia" - }, - { - "id": "AT", - "name": "Austria" - }, - { - "id": "BE", - "name": "Belgium" - }, - { - "id": "BG", - "name": "Bulgaria" - }, - { - "id": "CZ", - "name": "Czech Republic" - }, - { - "id": "DK", - "name": "Denmark" - }, - { - "id": "EE", - "name": "Estonia" - }, - { - "id": "FI", - "name": "Finland" - }, - { - "id": "FR", - "name": "France" - }, - { - "id": "DE", - "name": "Germany" - }, - { - "id": "HU", - "name": "Hungary" - }, - { - "id": "IS", - "name": "Iceland" - }, - { - "id": "IE", - "name": "Ireland" - }, - { - "id": "IT", - "name": "Italy" - }, - { - "id": "LV", - "name": "Latvia" - }, - { - "id": "LI", - "name": "Lichtenstein" - }, - { - "id": "LT", - "name": "Lithuania" - }, - { - "id": "LU", - "name": "Luxembourg" - }, - { - "id": "NL", - "name": "Netherlands" - }, - { - "id": "NO", - "name": "Norway" - }, - { - "id": "PL", - "name": "Poland" - }, - { - "id": "PT", - "name": "Portugal" - }, - { - "id": "RO", - "name": "Romania" - }, - { - "id": "RU", - "name": "Russia" - }, - { - "id": "SG", - "name": "Singapore" - }, - { - "id": "SK", - "name": "Slovakia" - }, - { - "id": "SI", - "name": "Slovenia" - }, - { - "id": "ES", - "name": "Spain" - }, - { - "id": "SE", - "name": "Sweden" - }, - { - "id": "CH", - "name": "Switzerland" - }, - { - "id": "GB", - "name": "United Kingdom" - } -]; - -module.exports = countries; diff --git a/lib/days.js b/lib/days.js deleted file mode 100644 index 87ede7a..0000000 --- a/lib/days.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -const moment = require('./moment-timezone-with-data'); - -const setTimeZone = (tz) => { - moment.tz.setDefault(tz); -}; - -module.exports = { - setTimeZone -}; diff --git a/lib/heating.js b/lib/heating.js deleted file mode 100644 index aa010e4..0000000 --- a/lib/heating.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -const moment = require('./moment-timezone-with-data'); -const holidays = require('./holidays'); - -const isDay = function (aDate, opts) { - let hour = aDate.hour() + aDate.minute() / 60 + aDate.second() / 3600; - let workdayToday = isWorkDay(aDate, opts); - let workdayTomorrow = isWorkDay(moment(aDate).add(1, 'day'), opts); - let startHour = workdayToday ? opts.workday.startHour : opts.notWorkday.startHour; - let endHour = workdayToday ? opts.workday.endHour : opts.notWorkday.endHour; - let endHour1 = startHour <= endHour ? 0 : endHour; - let endHour2 = workdayTomorrow ? (opts.workday.startHour <= opts.workday.endHour ? opts.workday.endHour : 24) : - (opts.notWorkday.startHour <= opts.notWorkday.endHour ? opts.notWorkday.endHour : 24); - - return hour < endHour1 || hour >= startHour && hour < endHour2; -}; - -const isWorkDay = function (aDate, opts) { - return !isHoliday(aDate, opts) && aDate.day() >= 1 && aDate.day() <= 5; -}; - -const isWorkTime = function (aDate, opts) { - let hour = aDate.hour() + aDate.minute() / 60 + aDate.second() / 3600; - return isWorkDay(aDate, opts) && - (opts.workHours.startHour <= opts.workHours.endHour ? - hour >= opts.workHours.startHour && hour < opts.workHours.endHour : - hour >= opts.workHours.startHour || hour < opts.workHours.endHour); -}; - -const isHoliday = function (aDate, opts) { - if (opts && (opts.holiday_today === 'holiday' || opts.holiday_today === 'not_holiday')) { - return opts.holiday_today === 'holiday'; - } - let hd = holidays.isHoliday(opts.country || 'NO', aDate); - return hd && (hd.type === 'public' || hd.type === 'bank'); -}; - -const calcHeating = function (aDate, atHome, homeOverride, opts) { - let day = isDay(aDate, opts); - let night = !day; - let atWork = isWorkTime(aDate, opts); - return { - date: aDate.toISOString(), - lDate: aDate.format('YYYY-MM-DDTHH:mm:ss'), - atHome: atHome, - homeOverride: homeOverride, - day: day, - night: night, - atWork: atWork, - heating: atHome === true && night === false && atWork === false || homeOverride === true && night === false - } -}; - -module.exports = { - calcHeating -}; - diff --git a/lib/holidays.js b/lib/holidays.js deleted file mode 100644 index b3630f3..0000000 --- a/lib/holidays.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -const holidays_list = require('./holidays_list'); - -const calcDate = function (aDate, condition) { - if (condition === 'yesterday') { - return aDate.add(-1, 'day'); - } else if (condition === 'tomorrow') { - return aDate.add(1, 'day'); - } - return aDate; -}; - -const isHoliday = function (country, aDate, condition) { - const holi = holidays_list[`${country}-${calcDate(aDate, condition).format('YYYY-MM-DD')}`]; - return !holi ? false : holi; -}; - -module.exports = { - calcDate, - isHoliday -}; diff --git a/lib/holidays_list.js b/lib/holidays_list.js deleted file mode 100644 index 36c461c..0000000 --- a/lib/holidays_list.js +++ /dev/null @@ -1,1678 +0,0 @@ -'use strict'; -const holidays_list = { -"AU-2021-01-01":{"type":"public","name":"New Year's Day"}, -"AU-2021-01-26":{"type":"public","name":"Australia Day"}, -"AU-2021-04-02":{"type":"public","name":"Good Friday"}, -"AU-2021-04-03":{"type":"public","name":"Easter Saturday"}, -"AU-2021-04-04":{"type":"public","name":"Easter Sunday"}, -"AU-2021-04-05":{"type":"public","name":"Easter Monday"}, -"AU-2021-04-25":{"type":"public","name":"Anzac Day"}, -"AU-2021-12-25":{"type":"public","name":"Christmas Day"}, -"AU-2021-12-26":{"type":"public","name":"Boxing Day"}, -"AU-2021-12-27":{"type":"public","name":"Christmas Day (substitute day)"}, -"AU-2021-12-28":{"type":"public","name":"Boxing Day (substitute day)"}, -"AU-2022-01-01":{"type":"public","name":"New Year's Day"}, -"AU-2022-01-03":{"type":"public","name":"New Year's Day"}, -"AU-2022-01-26":{"type":"public","name":"Australia Day"}, -"AU-2022-04-15":{"type":"public","name":"Good Friday"}, -"AU-2022-04-16":{"type":"public","name":"Easter Saturday"}, -"AU-2022-04-17":{"type":"public","name":"Easter Sunday"}, -"AU-2022-04-18":{"type":"public","name":"Easter Monday"}, -"AU-2022-04-25":{"type":"public","name":"Anzac Day"}, -"AU-2022-12-25":{"type":"public","name":"Christmas Day"}, -"AU-2022-12-26":{"type":"public","name":"Boxing Day"}, -"AU-2022-12-27":{"type":"public","name":"Christmas Day (substitute day)"}, -"AU-2023-01-01":{"type":"public","name":"New Year's Day"}, -"AU-2023-01-02":{"type":"public","name":"New Year's Day"}, -"AU-2023-01-26":{"type":"public","name":"Australia Day"}, -"AU-2023-04-07":{"type":"public","name":"Good Friday"}, -"AU-2023-04-08":{"type":"public","name":"Easter Saturday"}, -"AU-2023-04-09":{"type":"public","name":"Easter Sunday"}, -"AU-2023-04-10":{"type":"public","name":"Easter Monday"}, -"AU-2023-04-25":{"type":"public","name":"Anzac Day"}, -"AU-2023-12-25":{"type":"public","name":"Christmas Day"}, -"AU-2023-12-26":{"type":"public","name":"Boxing Day"}, -"AT-2021-01-01":{"type":"public","name":"Neujahr"}, -"AT-2021-01-06":{"type":"public","name":"Heilige Drei Könige"}, -"AT-2021-04-02":{"type":"optional","name":"Karfreitag"}, -"AT-2021-04-03":{"type":"observance","name":"Karsamstag"}, -"AT-2021-04-04":{"type":"public","name":"Ostersonntag"}, -"AT-2021-04-05":{"type":"public","name":"Ostermontag"}, -"AT-2021-05-01":{"type":"public","name":"Staatsfeiertag"}, -"AT-2021-05-09":{"type":"observance","name":"Muttertag"}, -"AT-2021-05-13":{"type":"public","name":"Christi Himmelfahrt"}, -"AT-2021-05-23":{"type":"public","name":"Pfingstsonntag"}, -"AT-2021-05-24":{"type":"public","name":"Pfingstmontag"}, -"AT-2021-06-03":{"type":"public","name":"Fronleichnam"}, -"AT-2021-08-15":{"type":"public","name":"Mariä Himmelfahrt"}, -"AT-2021-10-26":{"type":"public","name":"Nationalfeiertag"}, -"AT-2021-11-01":{"type":"public","name":"Allerheiligen"}, -"AT-2021-12-08":{"type":"public","name":"Mariä Empfängnis"}, -"AT-2021-12-24":{"type":"bank","name":"Heiliger Abend"}, -"AT-2021-12-25":{"type":"public","name":"Christtag"}, -"AT-2021-12-26":{"type":"public","name":"Stefanitag"}, -"AT-2021-12-31":{"type":"bank","name":"Silvester"}, -"AT-2022-01-01":{"type":"public","name":"Neujahr"}, -"AT-2022-01-06":{"type":"public","name":"Heilige Drei Könige"}, -"AT-2022-04-15":{"type":"optional","name":"Karfreitag"}, -"AT-2022-04-16":{"type":"observance","name":"Karsamstag"}, -"AT-2022-04-17":{"type":"public","name":"Ostersonntag"}, -"AT-2022-04-18":{"type":"public","name":"Ostermontag"}, -"AT-2022-05-01":{"type":"public","name":"Staatsfeiertag"}, -"AT-2022-05-08":{"type":"observance","name":"Muttertag"}, -"AT-2022-05-26":{"type":"public","name":"Christi Himmelfahrt"}, -"AT-2022-06-05":{"type":"public","name":"Pfingstsonntag"}, -"AT-2022-06-06":{"type":"public","name":"Pfingstmontag"}, -"AT-2022-06-16":{"type":"public","name":"Fronleichnam"}, -"AT-2022-08-15":{"type":"public","name":"Mariä Himmelfahrt"}, -"AT-2022-10-26":{"type":"public","name":"Nationalfeiertag"}, -"AT-2022-11-01":{"type":"public","name":"Allerheiligen"}, -"AT-2022-12-08":{"type":"public","name":"Mariä Empfängnis"}, -"AT-2022-12-24":{"type":"bank","name":"Heiliger Abend"}, -"AT-2022-12-25":{"type":"public","name":"Christtag"}, -"AT-2022-12-26":{"type":"public","name":"Stefanitag"}, -"AT-2022-12-31":{"type":"bank","name":"Silvester"}, -"AT-2023-01-01":{"type":"public","name":"Neujahr"}, -"AT-2023-01-06":{"type":"public","name":"Heilige Drei Könige"}, -"AT-2023-04-07":{"type":"optional","name":"Karfreitag"}, -"AT-2023-04-08":{"type":"observance","name":"Karsamstag"}, -"AT-2023-04-09":{"type":"public","name":"Ostersonntag"}, -"AT-2023-04-10":{"type":"public","name":"Ostermontag"}, -"AT-2023-05-01":{"type":"public","name":"Staatsfeiertag"}, -"AT-2023-05-14":{"type":"observance","name":"Muttertag"}, -"AT-2023-05-18":{"type":"public","name":"Christi Himmelfahrt"}, -"AT-2023-05-28":{"type":"public","name":"Pfingstsonntag"}, -"AT-2023-05-29":{"type":"public","name":"Pfingstmontag"}, -"AT-2023-06-08":{"type":"public","name":"Fronleichnam"}, -"AT-2023-08-15":{"type":"public","name":"Mariä Himmelfahrt"}, -"AT-2023-10-26":{"type":"public","name":"Nationalfeiertag"}, -"AT-2023-11-01":{"type":"public","name":"Allerheiligen"}, -"AT-2023-12-08":{"type":"public","name":"Mariä Empfängnis"}, -"AT-2023-12-24":{"type":"bank","name":"Heiliger Abend"}, -"AT-2023-12-25":{"type":"public","name":"Christtag"}, -"AT-2023-12-26":{"type":"public","name":"Stefanitag"}, -"AT-2023-12-31":{"type":"bank","name":"Silvester"}, -"BE-2021-01-01":{"type":"public","name":"Nouvel An"}, -"BE-2021-01-06":{"type":"observance","name":"l'Épiphanie"}, -"BE-2021-02-14":{"type":"observance","name":"Saint-Valentin"}, -"BE-2021-04-04":{"type":"public","name":"Pâques"}, -"BE-2021-04-05":{"type":"public","name":"Lundi de Pâques"}, -"BE-2021-05-01":{"type":"public","name":"Fête du travail"}, -"BE-2021-05-09":{"type":"observance","name":"Fête des Mères"}, -"BE-2021-05-13":{"type":"public","name":"Ascension"}, -"BE-2021-05-23":{"type":"public","name":"Pentecôte"}, -"BE-2021-05-24":{"type":"public","name":"Lundi de Pentecôte"}, -"BE-2021-07-21":{"type":"public","name":"Fête nationale"}, -"BE-2021-08-15":{"type":"public","name":"Assomption"}, -"BE-2021-11-01":{"type":"public","name":"Toussaint"}, -"BE-2021-11-02":{"type":"observance","name":"Fête des morts"}, -"BE-2021-11-11":{"type":"public","name":"Armistice"}, -"BE-2021-11-15":{"type":"observance","name":"Fête du Roi"}, -"BE-2021-12-06":{"type":"observance","name":"Saint-Nicolas"}, -"BE-2021-12-25":{"type":"public","name":"Noël"}, -"BE-2022-01-01":{"type":"public","name":"Nouvel An"}, -"BE-2022-01-06":{"type":"observance","name":"l'Épiphanie"}, -"BE-2022-02-14":{"type":"observance","name":"Saint-Valentin"}, -"BE-2022-04-17":{"type":"public","name":"Pâques"}, -"BE-2022-04-18":{"type":"public","name":"Lundi de Pâques"}, -"BE-2022-05-01":{"type":"public","name":"Fête du travail"}, -"BE-2022-05-08":{"type":"observance","name":"Fête des Mères"}, -"BE-2022-05-26":{"type":"public","name":"Ascension"}, -"BE-2022-06-05":{"type":"public","name":"Pentecôte"}, -"BE-2022-06-06":{"type":"public","name":"Lundi de Pentecôte"}, -"BE-2022-07-21":{"type":"public","name":"Fête nationale"}, -"BE-2022-08-15":{"type":"public","name":"Assomption"}, -"BE-2022-11-01":{"type":"public","name":"Toussaint"}, -"BE-2022-11-02":{"type":"observance","name":"Fête des morts"}, -"BE-2022-11-11":{"type":"public","name":"Armistice"}, -"BE-2022-11-15":{"type":"observance","name":"Fête du Roi"}, -"BE-2022-12-06":{"type":"observance","name":"Saint-Nicolas"}, -"BE-2022-12-25":{"type":"public","name":"Noël"}, -"BE-2023-01-01":{"type":"public","name":"Nouvel An"}, -"BE-2023-01-06":{"type":"observance","name":"l'Épiphanie"}, -"BE-2023-02-14":{"type":"observance","name":"Saint-Valentin"}, -"BE-2023-04-09":{"type":"public","name":"Pâques"}, -"BE-2023-04-10":{"type":"public","name":"Lundi de Pâques"}, -"BE-2023-05-01":{"type":"public","name":"Fête du travail"}, -"BE-2023-05-14":{"type":"observance","name":"Fête des Mères"}, -"BE-2023-05-18":{"type":"public","name":"Ascension"}, -"BE-2023-05-28":{"type":"public","name":"Pentecôte"}, -"BE-2023-05-29":{"type":"public","name":"Lundi de Pentecôte"}, -"BE-2023-07-21":{"type":"public","name":"Fête nationale"}, -"BE-2023-08-15":{"type":"public","name":"Assomption"}, -"BE-2023-11-01":{"type":"public","name":"Toussaint"}, -"BE-2023-11-02":{"type":"observance","name":"Fête des morts"}, -"BE-2023-11-11":{"type":"public","name":"Armistice"}, -"BE-2023-11-15":{"type":"observance","name":"Fête du Roi"}, -"BE-2023-12-06":{"type":"observance","name":"Saint-Nicolas"}, -"BE-2023-12-25":{"type":"public","name":"Noël"}, -"BG-2021-01-01":{"type":"public","name":"Нова Година"}, -"BG-2021-03-01":{"type":"observance","name":"Баба Марта"}, -"BG-2021-03-03":{"type":"public","name":"Ден на Освобождението на България от Османската Империя"}, -"BG-2021-03-08":{"type":"observance","name":"Ден на жената"}, -"BG-2021-04-30":{"type":"public","name":"Разпети петък"}, -"BG-2021-05-01":{"type":"public","name":"Ден на труда"}, -"BG-2021-05-02":{"type":"public","name":"Великден"}, -"BG-2021-05-03":{"type":"public","name":"Велики понеделник"}, -"BG-2021-05-06":{"type":"public","name":"Гергьовден"}, -"BG-2021-05-07":{"type":"observance","name":"Ден на радиото и телевизията"}, -"BG-2021-05-24":{"type":"public","name":"Ден на азбуката, културата и просветата"}, -"BG-2021-09-06":{"type":"public","name":"Ден на съединението"}, -"BG-2021-09-22":{"type":"public","name":"Ден на независимостта"}, -"BG-2021-11-01":{"type":"school","name":"Ден на народните будители"}, -"BG-2021-12-24":{"type":"public","name":"Бъдни вечер"}, -"BG-2021-12-25":{"type":"public","name":"Коледа"}, -"BG-2021-12-26":{"type":"observance","name":"2-ри ден на Коледа"}, -"BG-2022-01-01":{"type":"public","name":"Нова Година"}, -"BG-2022-03-01":{"type":"observance","name":"Баба Марта"}, -"BG-2022-03-03":{"type":"public","name":"Ден на Освобождението на България от Османската Империя"}, -"BG-2022-03-08":{"type":"observance","name":"Ден на жената"}, -"BG-2022-04-22":{"type":"public","name":"Разпети петък"}, -"BG-2022-04-24":{"type":"public","name":"Великден"}, -"BG-2022-04-25":{"type":"public","name":"Велики понеделник"}, -"BG-2022-05-01":{"type":"public","name":"Ден на труда"}, -"BG-2022-05-06":{"type":"public","name":"Гергьовден"}, -"BG-2022-05-07":{"type":"observance","name":"Ден на радиото и телевизията"}, -"BG-2022-05-24":{"type":"public","name":"Ден на азбуката, културата и просветата"}, -"BG-2022-09-06":{"type":"public","name":"Ден на съединението"}, -"BG-2022-09-22":{"type":"public","name":"Ден на независимостта"}, -"BG-2022-11-01":{"type":"school","name":"Ден на народните будители"}, -"BG-2022-12-24":{"type":"public","name":"Бъдни вечер"}, -"BG-2022-12-25":{"type":"public","name":"Коледа"}, -"BG-2022-12-26":{"type":"observance","name":"2-ри ден на Коледа"}, -"BG-2023-01-01":{"type":"public","name":"Нова Година"}, -"BG-2023-03-01":{"type":"observance","name":"Баба Марта"}, -"BG-2023-03-03":{"type":"public","name":"Ден на Освобождението на България от Османската Империя"}, -"BG-2023-03-08":{"type":"observance","name":"Ден на жената"}, -"BG-2023-04-14":{"type":"public","name":"Разпети петък"}, -"BG-2023-04-16":{"type":"public","name":"Великден"}, -"BG-2023-04-17":{"type":"public","name":"Велики понеделник"}, -"BG-2023-05-01":{"type":"public","name":"Ден на труда"}, -"BG-2023-05-06":{"type":"public","name":"Гергьовден"}, -"BG-2023-05-07":{"type":"observance","name":"Ден на радиото и телевизията"}, -"BG-2023-05-24":{"type":"public","name":"Ден на азбуката, културата и просветата"}, -"BG-2023-09-06":{"type":"public","name":"Ден на съединението"}, -"BG-2023-09-22":{"type":"public","name":"Ден на независимостта"}, -"BG-2023-11-01":{"type":"school","name":"Ден на народните будители"}, -"BG-2023-12-24":{"type":"public","name":"Бъдни вечер"}, -"BG-2023-12-25":{"type":"public","name":"Коледа"}, -"BG-2023-12-26":{"type":"observance","name":"2-ри ден на Коледа"}, -"CZ-2021-01-01":{"type":"public","name":"Nový rok a Den obnovy samostatného českého státu"}, -"CZ-2021-03-31":{"type":"observance","name":"Škaredá středa"}, -"CZ-2021-04-01":{"type":"observance","name":"Zelený čtvrtek"}, -"CZ-2021-04-02":{"type":"public","name":"Velký pátek"}, -"CZ-2021-04-03":{"type":"observance","name":"Bílá sobota"}, -"CZ-2021-04-04":{"type":"observance","name":"Velikonoční neděle"}, -"CZ-2021-04-05":{"type":"public","name":"Velikonoční pondělí"}, -"CZ-2021-05-01":{"type":"public","name":"Svátek práce"}, -"CZ-2021-05-08":{"type":"public","name":"Den vítězství"}, -"CZ-2021-05-09":{"type":"observance","name":"Den matek"}, -"CZ-2021-07-05":{"type":"public","name":"Den slovanských věrozvěstů Cyrila a Metoděje"}, -"CZ-2021-07-06":{"type":"public","name":"Den upálení mistra Jana Husa"}, -"CZ-2021-09-28":{"type":"public","name":"Den české státnosti"}, -"CZ-2021-10-28":{"type":"public","name":"Den vzniku samostatného československého státu"}, -"CZ-2021-11-17":{"type":"public","name":"Den boje za svobodu a demokracii"}, -"CZ-2021-12-24":{"type":"public","name":"Štědrý den"}, -"CZ-2021-12-25":{"type":"public","name":"1. svátek vánoční"}, -"CZ-2021-12-26":{"type":"public","name":"2. svátek vánoční"}, -"CZ-2022-01-01":{"type":"public","name":"Nový rok a Den obnovy samostatného českého státu"}, -"CZ-2022-04-13":{"type":"observance","name":"Škaredá středa"}, -"CZ-2022-04-14":{"type":"observance","name":"Zelený čtvrtek"}, -"CZ-2022-04-15":{"type":"public","name":"Velký pátek"}, -"CZ-2022-04-16":{"type":"observance","name":"Bílá sobota"}, -"CZ-2022-04-17":{"type":"observance","name":"Velikonoční neděle"}, -"CZ-2022-04-18":{"type":"public","name":"Velikonoční pondělí"}, -"CZ-2022-05-01":{"type":"public","name":"Svátek práce"}, -"CZ-2022-05-08":{"type":"public","name":"Den vítězství"}, -"CZ-2022-07-05":{"type":"public","name":"Den slovanských věrozvěstů Cyrila a Metoděje"}, -"CZ-2022-07-06":{"type":"public","name":"Den upálení mistra Jana Husa"}, -"CZ-2022-09-28":{"type":"public","name":"Den české státnosti"}, -"CZ-2022-10-28":{"type":"public","name":"Den vzniku samostatného československého státu"}, -"CZ-2022-11-17":{"type":"public","name":"Den boje za svobodu a demokracii"}, -"CZ-2022-12-24":{"type":"public","name":"Štědrý den"}, -"CZ-2022-12-25":{"type":"public","name":"1. svátek vánoční"}, -"CZ-2022-12-26":{"type":"public","name":"2. svátek vánoční"}, -"CZ-2023-01-01":{"type":"public","name":"Nový rok a Den obnovy samostatného českého státu"}, -"CZ-2023-04-05":{"type":"observance","name":"Škaredá středa"}, -"CZ-2023-04-06":{"type":"observance","name":"Zelený čtvrtek"}, -"CZ-2023-04-07":{"type":"public","name":"Velký pátek"}, -"CZ-2023-04-08":{"type":"observance","name":"Bílá sobota"}, -"CZ-2023-04-09":{"type":"observance","name":"Velikonoční neděle"}, -"CZ-2023-04-10":{"type":"public","name":"Velikonoční pondělí"}, -"CZ-2023-05-01":{"type":"public","name":"Svátek práce"}, -"CZ-2023-05-08":{"type":"public","name":"Den vítězství"}, -"CZ-2023-05-14":{"type":"observance","name":"Den matek"}, -"CZ-2023-07-05":{"type":"public","name":"Den slovanských věrozvěstů Cyrila a Metoděje"}, -"CZ-2023-07-06":{"type":"public","name":"Den upálení mistra Jana Husa"}, -"CZ-2023-09-28":{"type":"public","name":"Den české státnosti"}, -"CZ-2023-10-28":{"type":"public","name":"Den vzniku samostatného československého státu"}, -"CZ-2023-11-17":{"type":"public","name":"Den boje za svobodu a demokracii"}, -"CZ-2023-12-24":{"type":"public","name":"Štědrý den"}, -"CZ-2023-12-25":{"type":"public","name":"1. svátek vánoční"}, -"CZ-2023-12-26":{"type":"public","name":"2. svátek vánoční"}, -"DK-2021-01-01":{"type":"public","name":"Nytår"}, -"DK-2021-02-15":{"type":"observance","name":"Fastelavn"}, -"DK-2021-04-01":{"type":"public","name":"Skærtorsdag"}, -"DK-2021-04-02":{"type":"public","name":"Langfredag"}, -"DK-2021-04-04":{"type":"public","name":"Påskesøndag"}, -"DK-2021-04-05":{"type":"public","name":"Anden påskedag"}, -"DK-2021-04-30":{"type":"public","name":"Store Bededag"}, -"DK-2021-05-01":{"type":"observance","name":"1. maj"}, -"DK-2021-05-09":{"type":"observance","name":"Mors Dag"}, -"DK-2021-05-13":{"type":"public","name":"Kristi Himmelfartsdag"}, -"DK-2021-05-23":{"type":"public","name":"Pinsedag"}, -"DK-2021-05-24":{"type":"public","name":"Anden Pinsedag"}, -"DK-2021-06-05":{"type":"observance","name":"Grundlovsdag"}, -"DK-2021-12-24":{"type":"observance","name":"Juleaften"}, -"DK-2021-12-25":{"type":"public","name":"Juledag"}, -"DK-2021-12-26":{"type":"public","name":"Anden Juledag"}, -"DK-2022-01-01":{"type":"public","name":"Nytår"}, -"DK-2022-02-28":{"type":"observance","name":"Fastelavn"}, -"DK-2022-04-14":{"type":"public","name":"Skærtorsdag"}, -"DK-2022-04-15":{"type":"public","name":"Langfredag"}, -"DK-2022-04-17":{"type":"public","name":"Påskesøndag"}, -"DK-2022-04-18":{"type":"public","name":"Anden påskedag"}, -"DK-2022-05-01":{"type":"observance","name":"1. maj"}, -"DK-2022-05-08":{"type":"observance","name":"Mors Dag"}, -"DK-2022-05-13":{"type":"public","name":"Store Bededag"}, -"DK-2022-05-26":{"type":"public","name":"Kristi Himmelfartsdag"}, -"DK-2022-06-05":{"type":"public","name":"Pinsedag"}, -"DK-2022-06-06":{"type":"public","name":"Anden Pinsedag"}, -"DK-2022-12-24":{"type":"observance","name":"Juleaften"}, -"DK-2022-12-25":{"type":"public","name":"Juledag"}, -"DK-2022-12-26":{"type":"public","name":"Anden Juledag"}, -"DK-2023-01-01":{"type":"public","name":"Nytår"}, -"DK-2023-02-20":{"type":"observance","name":"Fastelavn"}, -"DK-2023-04-06":{"type":"public","name":"Skærtorsdag"}, -"DK-2023-04-07":{"type":"public","name":"Langfredag"}, -"DK-2023-04-09":{"type":"public","name":"Påskesøndag"}, -"DK-2023-04-10":{"type":"public","name":"Anden påskedag"}, -"DK-2023-05-01":{"type":"observance","name":"1. maj"}, -"DK-2023-05-05":{"type":"public","name":"Store Bededag"}, -"DK-2023-05-14":{"type":"observance","name":"Mors Dag"}, -"DK-2023-05-18":{"type":"public","name":"Kristi Himmelfartsdag"}, -"DK-2023-05-28":{"type":"public","name":"Pinsedag"}, -"DK-2023-05-29":{"type":"public","name":"Anden Pinsedag"}, -"DK-2023-06-05":{"type":"observance","name":"Grundlovsdag"}, -"DK-2023-12-24":{"type":"observance","name":"Juleaften"}, -"DK-2023-12-25":{"type":"public","name":"Juledag"}, -"DK-2023-12-26":{"type":"public","name":"Anden Juledag"}, -"EE-2021-01-01":{"type":"public","name":"uusaasta"}, -"EE-2021-01-06":{"type":"observance","name":"kolmekuningapäev"}, -"EE-2021-02-02":{"type":"observance","name":"Tartu rahulepingu aastapäev"}, -"EE-2021-02-24":{"type":"public","name":"iseseisvuspäev"}, -"EE-2021-03-14":{"type":"observance","name":"emakeelepäev"}, -"EE-2021-04-02":{"type":"public","name":"suur reede"}, -"EE-2021-04-04":{"type":"public","name":"lihavõtted"}, -"EE-2021-05-01":{"type":"public","name":"kevadpüha"}, -"EE-2021-05-09":{"type":"observance","name":"emadepäev"}, -"EE-2021-05-23":{"type":"public","name":"nelipühade 1. püha"}, -"EE-2021-06-04":{"type":"observance","name":"Eesti lipu päev"}, -"EE-2021-06-14":{"type":"observance","name":"leinapäev"}, -"EE-2021-06-23":{"type":"public","name":"võidupüha"}, -"EE-2021-06-24":{"type":"public","name":"jaanipäev"}, -"EE-2021-08-20":{"type":"public","name":"taasiseseisvumispäev"}, -"EE-2021-08-23":{"type":"observance","name":"kommunismi ja natsismi ohvrite mälestuspäev"}, -"EE-2021-09-12":{"type":"observance","name":"vanavanemate päev"}, -"EE-2021-09-22":{"type":"observance","name":"vastupanuvõitluse päev"}, -"EE-2021-11-02":{"type":"observance","name":"hingedepäev"}, -"EE-2021-11-14":{"type":"observance","name":"isadepäev"}, -"EE-2021-11-16":{"type":"observance","name":"taassünni päev"}, -"EE-2021-12-24":{"type":"public","name":"jõululaupäev"}, -"EE-2021-12-25":{"type":"public","name":"esimene jõulupüha"}, -"EE-2021-12-26":{"type":"public","name":"teine jõulupüha"}, -"EE-2022-01-01":{"type":"public","name":"uusaasta"}, -"EE-2022-01-06":{"type":"observance","name":"kolmekuningapäev"}, -"EE-2022-02-02":{"type":"observance","name":"Tartu rahulepingu aastapäev"}, -"EE-2022-02-24":{"type":"public","name":"iseseisvuspäev"}, -"EE-2022-03-14":{"type":"observance","name":"emakeelepäev"}, -"EE-2022-04-15":{"type":"public","name":"suur reede"}, -"EE-2022-04-17":{"type":"public","name":"lihavõtted"}, -"EE-2022-05-01":{"type":"public","name":"kevadpüha"}, -"EE-2022-05-08":{"type":"observance","name":"emadepäev"}, -"EE-2022-06-04":{"type":"observance","name":"Eesti lipu päev"}, -"EE-2022-06-05":{"type":"public","name":"nelipühade 1. püha"}, -"EE-2022-06-14":{"type":"observance","name":"leinapäev"}, -"EE-2022-06-23":{"type":"public","name":"võidupüha"}, -"EE-2022-06-24":{"type":"public","name":"jaanipäev"}, -"EE-2022-08-20":{"type":"public","name":"taasiseseisvumispäev"}, -"EE-2022-08-23":{"type":"observance","name":"kommunismi ja natsismi ohvrite mälestuspäev"}, -"EE-2022-09-11":{"type":"observance","name":"vanavanemate päev"}, -"EE-2022-09-22":{"type":"observance","name":"vastupanuvõitluse päev"}, -"EE-2022-11-02":{"type":"observance","name":"hingedepäev"}, -"EE-2022-11-13":{"type":"observance","name":"isadepäev"}, -"EE-2022-11-16":{"type":"observance","name":"taassünni päev"}, -"EE-2022-12-24":{"type":"public","name":"jõululaupäev"}, -"EE-2022-12-25":{"type":"public","name":"esimene jõulupüha"}, -"EE-2022-12-26":{"type":"public","name":"teine jõulupüha"}, -"EE-2023-01-01":{"type":"public","name":"uusaasta"}, -"EE-2023-01-06":{"type":"observance","name":"kolmekuningapäev"}, -"EE-2023-02-02":{"type":"observance","name":"Tartu rahulepingu aastapäev"}, -"EE-2023-02-24":{"type":"public","name":"iseseisvuspäev"}, -"EE-2023-03-14":{"type":"observance","name":"emakeelepäev"}, -"EE-2023-04-07":{"type":"public","name":"suur reede"}, -"EE-2023-04-09":{"type":"public","name":"lihavõtted"}, -"EE-2023-05-01":{"type":"public","name":"kevadpüha"}, -"EE-2023-05-14":{"type":"observance","name":"emadepäev"}, -"EE-2023-05-28":{"type":"public","name":"nelipühade 1. püha"}, -"EE-2023-06-04":{"type":"observance","name":"Eesti lipu päev"}, -"EE-2023-06-14":{"type":"observance","name":"leinapäev"}, -"EE-2023-06-23":{"type":"public","name":"võidupüha"}, -"EE-2023-06-24":{"type":"public","name":"jaanipäev"}, -"EE-2023-08-20":{"type":"public","name":"taasiseseisvumispäev"}, -"EE-2023-08-23":{"type":"observance","name":"kommunismi ja natsismi ohvrite mälestuspäev"}, -"EE-2023-09-10":{"type":"observance","name":"vanavanemate päev"}, -"EE-2023-09-22":{"type":"observance","name":"vastupanuvõitluse päev"}, -"EE-2023-11-02":{"type":"observance","name":"hingedepäev"}, -"EE-2023-11-12":{"type":"observance","name":"isadepäev"}, -"EE-2023-11-16":{"type":"observance","name":"taassünni päev"}, -"EE-2023-12-24":{"type":"public","name":"jõululaupäev"}, -"EE-2023-12-25":{"type":"public","name":"esimene jõulupüha"}, -"EE-2023-12-26":{"type":"public","name":"teine jõulupüha"}, -"FI-2021-01-01":{"type":"public","name":"Uudenvuodenpäivä"}, -"FI-2021-01-06":{"type":"public","name":"Loppiainen"}, -"FI-2021-04-02":{"type":"public","name":"Pitkäperjantai"}, -"FI-2021-04-04":{"type":"public","name":"Pääsiäispäivä"}, -"FI-2021-04-05":{"type":"public","name":"2. pääsiäispäivä"}, -"FI-2021-05-01":{"type":"public","name":"Vappu"}, -"FI-2021-05-09":{"type":"observance","name":"Äitienpäivä"}, -"FI-2021-05-13":{"type":"public","name":"Helatorstai"}, -"FI-2021-05-23":{"type":"public","name":"Helluntaipäivä"}, -"FI-2021-06-25":{"type":"bank","name":"Juhannusaatto"}, -"FI-2021-06-26":{"type":"public","name":"Juhannuspäivä"}, -"FI-2021-11-06":{"type":"public","name":"Pyhäinpäivä"}, -"FI-2021-11-14":{"type":"observance","name":"Isänpäivä"}, -"FI-2021-12-06":{"type":"public","name":"Itsenäisyyspäivä"}, -"FI-2021-12-24":{"type":"bank","name":"Jouluaatto"}, -"FI-2021-12-25":{"type":"public","name":"Joulupäivä"}, -"FI-2021-12-26":{"type":"public","name":"2. joulupäivä"}, -"FI-2021-12-31":{"type":"bank","name":"Uudenvuodenaatto"}, -"FI-2022-01-01":{"type":"public","name":"Uudenvuodenpäivä"}, -"FI-2022-01-06":{"type":"public","name":"Loppiainen"}, -"FI-2022-04-15":{"type":"public","name":"Pitkäperjantai"}, -"FI-2022-04-17":{"type":"public","name":"Pääsiäispäivä"}, -"FI-2022-04-18":{"type":"public","name":"2. pääsiäispäivä"}, -"FI-2022-05-01":{"type":"public","name":"Vappu"}, -"FI-2022-05-08":{"type":"observance","name":"Äitienpäivä"}, -"FI-2022-05-26":{"type":"public","name":"Helatorstai"}, -"FI-2022-06-05":{"type":"public","name":"Helluntaipäivä"}, -"FI-2022-06-24":{"type":"bank","name":"Juhannusaatto"}, -"FI-2022-06-25":{"type":"public","name":"Juhannuspäivä"}, -"FI-2022-11-05":{"type":"public","name":"Pyhäinpäivä"}, -"FI-2022-11-13":{"type":"observance","name":"Isänpäivä"}, -"FI-2022-12-06":{"type":"public","name":"Itsenäisyyspäivä"}, -"FI-2022-12-24":{"type":"bank","name":"Jouluaatto"}, -"FI-2022-12-25":{"type":"public","name":"Joulupäivä"}, -"FI-2022-12-26":{"type":"public","name":"2. joulupäivä"}, -"FI-2022-12-31":{"type":"bank","name":"Uudenvuodenaatto"}, -"FI-2023-01-01":{"type":"public","name":"Uudenvuodenpäivä"}, -"FI-2023-01-06":{"type":"public","name":"Loppiainen"}, -"FI-2023-04-07":{"type":"public","name":"Pitkäperjantai"}, -"FI-2023-04-09":{"type":"public","name":"Pääsiäispäivä"}, -"FI-2023-04-10":{"type":"public","name":"2. pääsiäispäivä"}, -"FI-2023-05-01":{"type":"public","name":"Vappu"}, -"FI-2023-05-14":{"type":"observance","name":"Äitienpäivä"}, -"FI-2023-05-18":{"type":"public","name":"Helatorstai"}, -"FI-2023-05-28":{"type":"public","name":"Helluntaipäivä"}, -"FI-2023-06-23":{"type":"bank","name":"Juhannusaatto"}, -"FI-2023-06-24":{"type":"public","name":"Juhannuspäivä"}, -"FI-2023-11-04":{"type":"public","name":"Pyhäinpäivä"}, -"FI-2023-11-12":{"type":"observance","name":"Isänpäivä"}, -"FI-2023-12-06":{"type":"public","name":"Itsenäisyyspäivä"}, -"FI-2023-12-24":{"type":"bank","name":"Jouluaatto"}, -"FI-2023-12-25":{"type":"public","name":"Joulupäivä"}, -"FI-2023-12-26":{"type":"public","name":"2. joulupäivä"}, -"FI-2023-12-31":{"type":"bank","name":"Uudenvuodenaatto"}, -"FR-2021-01-01":{"type":"public","name":"Nouvel An"}, -"FR-2021-04-05":{"type":"public","name":"Lundi de Pâques"}, -"FR-2021-05-01":{"type":"public","name":"Fête du travail"}, -"FR-2021-05-08":{"type":"public","name":"Fête de la Victoire 1945"}, -"FR-2021-05-13":{"type":"public","name":"Ascension"}, -"FR-2021-05-23":{"type":"observance","name":"Pentecôte"}, -"FR-2021-05-24":{"type":"public","name":"Lundi de Pentecôte"}, -"FR-2021-05-30":{"type":"observance","name":"Fête des Mères"}, -"FR-2021-07-14":{"type":"public","name":"Fête Nationale de la France"}, -"FR-2021-08-15":{"type":"public","name":"Assomption"}, -"FR-2021-11-01":{"type":"public","name":"Toussaint"}, -"FR-2021-11-11":{"type":"public","name":"Armistice 1918"}, -"FR-2021-12-25":{"type":"public","name":"Noël"}, -"FR-2022-01-01":{"type":"public","name":"Nouvel An"}, -"FR-2022-04-18":{"type":"public","name":"Lundi de Pâques"}, -"FR-2022-05-01":{"type":"public","name":"Fête du travail"}, -"FR-2022-05-08":{"type":"public","name":"Fête de la Victoire 1945"}, -"FR-2022-05-26":{"type":"public","name":"Ascension"}, -"FR-2022-05-29":{"type":"observance","name":"Fête des Mères"}, -"FR-2022-06-05":{"type":"observance","name":"Pentecôte"}, -"FR-2022-06-06":{"type":"public","name":"Lundi de Pentecôte"}, -"FR-2022-07-14":{"type":"public","name":"Fête Nationale de la France"}, -"FR-2022-08-15":{"type":"public","name":"Assomption"}, -"FR-2022-11-01":{"type":"public","name":"Toussaint"}, -"FR-2022-11-11":{"type":"public","name":"Armistice 1918"}, -"FR-2022-12-25":{"type":"public","name":"Noël"}, -"FR-2023-01-01":{"type":"public","name":"Nouvel An"}, -"FR-2023-04-10":{"type":"public","name":"Lundi de Pâques"}, -"FR-2023-05-01":{"type":"public","name":"Fête du travail"}, -"FR-2023-05-08":{"type":"public","name":"Fête de la Victoire 1945"}, -"FR-2023-05-18":{"type":"public","name":"Ascension"}, -"FR-2023-05-28":{"type":"observance","name":"Fête des Mères"}, -"FR-2023-05-29":{"type":"public","name":"Lundi de Pentecôte"}, -"FR-2023-07-14":{"type":"public","name":"Fête Nationale de la France"}, -"FR-2023-08-15":{"type":"public","name":"Assomption"}, -"FR-2023-11-01":{"type":"public","name":"Toussaint"}, -"FR-2023-11-11":{"type":"public","name":"Armistice 1918"}, -"FR-2023-12-25":{"type":"public","name":"Noël"}, -"DE-2021-01-01":{"type":"public","name":"Neujahr"}, -"DE-2021-02-11":{"type":"observance","name":"Weiberfastnacht"}, -"DE-2021-02-14":{"type":"observance","name":"Valentinstag"}, -"DE-2021-02-15":{"type":"observance","name":"Rosenmontag"}, -"DE-2021-02-16":{"type":"observance","name":"Faschingsdienstag"}, -"DE-2021-02-17":{"type":"observance","name":"Aschermittwoch"}, -"DE-2021-04-01":{"type":"observance","name":"Gründonnerstag"}, -"DE-2021-04-02":{"type":"public","name":"Karfreitag"}, -"DE-2021-04-04":{"type":"observance","name":"Ostersonntag"}, -"DE-2021-04-05":{"type":"public","name":"Ostermontag"}, -"DE-2021-05-01":{"type":"public","name":"Maifeiertag"}, -"DE-2021-05-09":{"type":"observance","name":"Muttertag"}, -"DE-2021-05-13":{"type":"public","name":"Christi Himmelfahrt"}, -"DE-2021-05-23":{"type":"observance","name":"Pfingstsonntag"}, -"DE-2021-05-24":{"type":"public","name":"Pfingstmontag"}, -"DE-2021-10-03":{"type":"public","name":"Tag der Deutschen Einheit"}, -"DE-2021-11-01":{"type":"observance","name":"Allerheiligen"}, -"DE-2021-11-02":{"type":"observance","name":"Allerseelen"}, -"DE-2021-11-11":{"type":"observance","name":"Sankt Martin (Faschingsbeginn)"}, -"DE-2021-11-14":{"type":"observance","name":"Volkstrauertag"}, -"DE-2021-11-17":{"type":"observance","name":"Buß- und Bettag"}, -"DE-2021-11-21":{"type":"observance","name":"Totensonntag"}, -"DE-2021-11-28":{"type":"observance","name":"1. Advent"}, -"DE-2021-12-05":{"type":"observance","name":"2. Advent"}, -"DE-2021-12-12":{"type":"observance","name":"3. Advent"}, -"DE-2021-12-19":{"type":"observance","name":"4. Advent"}, -"DE-2021-12-24":{"type":"bank","name":"Heiliger Abend"}, -"DE-2021-12-25":{"type":"public","name":"1. Weihnachtstag"}, -"DE-2021-12-26":{"type":"public","name":"2. Weihnachtstag"}, -"DE-2021-12-31":{"type":"bank","name":"Silvester"}, -"DE-2022-01-01":{"type":"public","name":"Neujahr"}, -"DE-2022-02-14":{"type":"observance","name":"Valentinstag"}, -"DE-2022-02-24":{"type":"observance","name":"Weiberfastnacht"}, -"DE-2022-02-28":{"type":"observance","name":"Rosenmontag"}, -"DE-2022-03-01":{"type":"observance","name":"Faschingsdienstag"}, -"DE-2022-03-02":{"type":"observance","name":"Aschermittwoch"}, -"DE-2022-04-14":{"type":"observance","name":"Gründonnerstag"}, -"DE-2022-04-15":{"type":"public","name":"Karfreitag"}, -"DE-2022-04-17":{"type":"observance","name":"Ostersonntag"}, -"DE-2022-04-18":{"type":"public","name":"Ostermontag"}, -"DE-2022-05-01":{"type":"public","name":"Maifeiertag"}, -"DE-2022-05-08":{"type":"observance","name":"Muttertag"}, -"DE-2022-05-26":{"type":"public","name":"Christi Himmelfahrt"}, -"DE-2022-06-05":{"type":"observance","name":"Pfingstsonntag"}, -"DE-2022-06-06":{"type":"public","name":"Pfingstmontag"}, -"DE-2022-10-03":{"type":"public","name":"Tag der Deutschen Einheit"}, -"DE-2022-11-01":{"type":"observance","name":"Allerheiligen"}, -"DE-2022-11-02":{"type":"observance","name":"Allerseelen"}, -"DE-2022-11-11":{"type":"observance","name":"Sankt Martin (Faschingsbeginn)"}, -"DE-2022-11-13":{"type":"observance","name":"Volkstrauertag"}, -"DE-2022-11-16":{"type":"observance","name":"Buß- und Bettag"}, -"DE-2022-11-20":{"type":"observance","name":"Totensonntag"}, -"DE-2022-11-27":{"type":"observance","name":"1. Advent"}, -"DE-2022-12-04":{"type":"observance","name":"2. Advent"}, -"DE-2022-12-11":{"type":"observance","name":"3. Advent"}, -"DE-2022-12-18":{"type":"observance","name":"4. Advent"}, -"DE-2022-12-24":{"type":"bank","name":"Heiliger Abend"}, -"DE-2022-12-25":{"type":"public","name":"1. Weihnachtstag"}, -"DE-2022-12-26":{"type":"public","name":"2. Weihnachtstag"}, -"DE-2022-12-31":{"type":"bank","name":"Silvester"}, -"DE-2023-01-01":{"type":"public","name":"Neujahr"}, -"DE-2023-02-14":{"type":"observance","name":"Valentinstag"}, -"DE-2023-02-16":{"type":"observance","name":"Weiberfastnacht"}, -"DE-2023-02-20":{"type":"observance","name":"Rosenmontag"}, -"DE-2023-02-21":{"type":"observance","name":"Faschingsdienstag"}, -"DE-2023-02-22":{"type":"observance","name":"Aschermittwoch"}, -"DE-2023-04-06":{"type":"observance","name":"Gründonnerstag"}, -"DE-2023-04-07":{"type":"public","name":"Karfreitag"}, -"DE-2023-04-09":{"type":"observance","name":"Ostersonntag"}, -"DE-2023-04-10":{"type":"public","name":"Ostermontag"}, -"DE-2023-05-01":{"type":"public","name":"Maifeiertag"}, -"DE-2023-05-14":{"type":"observance","name":"Muttertag"}, -"DE-2023-05-18":{"type":"public","name":"Christi Himmelfahrt"}, -"DE-2023-05-28":{"type":"observance","name":"Pfingstsonntag"}, -"DE-2023-05-29":{"type":"public","name":"Pfingstmontag"}, -"DE-2023-10-03":{"type":"public","name":"Tag der Deutschen Einheit"}, -"DE-2023-11-01":{"type":"observance","name":"Allerheiligen"}, -"DE-2023-11-02":{"type":"observance","name":"Allerseelen"}, -"DE-2023-11-11":{"type":"observance","name":"Sankt Martin (Faschingsbeginn)"}, -"DE-2023-11-19":{"type":"observance","name":"Volkstrauertag"}, -"DE-2023-11-22":{"type":"observance","name":"Buß- und Bettag"}, -"DE-2023-11-26":{"type":"observance","name":"Totensonntag"}, -"DE-2023-12-03":{"type":"observance","name":"1. Advent"}, -"DE-2023-12-10":{"type":"observance","name":"2. Advent"}, -"DE-2023-12-17":{"type":"observance","name":"3. Advent"}, -"DE-2023-12-24":{"type":"observance","name":"4. Advent"}, -"DE-2023-12-25":{"type":"public","name":"1. Weihnachtstag"}, -"DE-2023-12-26":{"type":"public","name":"2. Weihnachtstag"}, -"DE-2023-12-31":{"type":"bank","name":"Silvester"}, -"HU-2021-01-01":{"type":"public","name":"Újév"}, -"HU-2021-02-01":{"type":"observance","name":"A köztársaság emléknapja"}, -"HU-2021-02-25":{"type":"observance","name":"A kommunista diktatúrák áldozatainak emléknapja"}, -"HU-2021-03-08":{"type":"observance","name":"Nemzetközi nőnap"}, -"HU-2021-03-15":{"type":"public","name":"1948-as forradalom"}, -"HU-2021-04-04":{"type":"public","name":"Húsvétvasárnap"}, -"HU-2021-04-05":{"type":"public","name":"Húsvéthétfő"}, -"HU-2021-04-16":{"type":"observance","name":"A holokauszt áldozatainak emléknapja"}, -"HU-2021-05-01":{"type":"public","name":"A munka ünnepe"}, -"HU-2021-05-02":{"type":"observance","name":"Anyák napja"}, -"HU-2021-05-21":{"type":"observance","name":"Honvédelmi nap"}, -"HU-2021-05-23":{"type":"public","name":"Pünkösdvasárnap"}, -"HU-2021-05-24":{"type":"public","name":"Pünkösdhétfő"}, -"HU-2021-06-04":{"type":"observance","name":"A nemzeti összetartozás napja"}, -"HU-2021-06-19":{"type":"observance","name":"A független Magyarország napja"}, -"HU-2021-08-20":{"type":"public","name":"Szent István ünnepe"}, -"HU-2021-10-06":{"type":"observance","name":"Az aradi vértanúk emléknapja"}, -"HU-2021-10-23":{"type":"public","name":"1956-os forradalom"}, -"HU-2021-11-01":{"type":"public","name":"Mindenszentek"}, -"HU-2021-12-06":{"type":"observance","name":"Mikulás"}, -"HU-2021-12-24":{"type":"optional","name":"Szenteste"}, -"HU-2021-12-25":{"type":"public","name":"Karácsony"}, -"HU-2021-12-26":{"type":"public","name":"Karácsony másnapja"}, -"HU-2021-12-31":{"type":"observance","name":"Szilveszter"}, -"HU-2022-01-01":{"type":"public","name":"Újév"}, -"HU-2022-02-01":{"type":"observance","name":"A köztársaság emléknapja"}, -"HU-2022-02-25":{"type":"observance","name":"A kommunista diktatúrák áldozatainak emléknapja"}, -"HU-2022-03-08":{"type":"observance","name":"Nemzetközi nőnap"}, -"HU-2022-03-15":{"type":"public","name":"1948-as forradalom"}, -"HU-2022-04-16":{"type":"observance","name":"A holokauszt áldozatainak emléknapja"}, -"HU-2022-04-17":{"type":"public","name":"Húsvétvasárnap"}, -"HU-2022-04-18":{"type":"public","name":"Húsvéthétfő"}, -"HU-2022-05-01":{"type":"public","name":"A munka ünnepe"}, -"HU-2022-05-21":{"type":"observance","name":"Honvédelmi nap"}, -"HU-2022-06-04":{"type":"observance","name":"A nemzeti összetartozás napja"}, -"HU-2022-06-05":{"type":"public","name":"Pünkösdvasárnap"}, -"HU-2022-06-06":{"type":"public","name":"Pünkösdhétfő"}, -"HU-2022-06-19":{"type":"observance","name":"A független Magyarország napja"}, -"HU-2022-08-20":{"type":"public","name":"Szent István ünnepe"}, -"HU-2022-10-06":{"type":"observance","name":"Az aradi vértanúk emléknapja"}, -"HU-2022-10-23":{"type":"public","name":"1956-os forradalom"}, -"HU-2022-11-01":{"type":"public","name":"Mindenszentek"}, -"HU-2022-12-06":{"type":"observance","name":"Mikulás"}, -"HU-2022-12-24":{"type":"optional","name":"Szenteste"}, -"HU-2022-12-25":{"type":"public","name":"Karácsony"}, -"HU-2022-12-26":{"type":"public","name":"Karácsony másnapja"}, -"HU-2022-12-31":{"type":"observance","name":"Szilveszter"}, -"HU-2023-01-01":{"type":"public","name":"Újév"}, -"HU-2023-02-01":{"type":"observance","name":"A köztársaság emléknapja"}, -"HU-2023-02-25":{"type":"observance","name":"A kommunista diktatúrák áldozatainak emléknapja"}, -"HU-2023-03-08":{"type":"observance","name":"Nemzetközi nőnap"}, -"HU-2023-03-15":{"type":"public","name":"1948-as forradalom"}, -"HU-2023-04-09":{"type":"public","name":"Húsvétvasárnap"}, -"HU-2023-04-10":{"type":"public","name":"Húsvéthétfő"}, -"HU-2023-04-16":{"type":"observance","name":"A holokauszt áldozatainak emléknapja"}, -"HU-2023-05-01":{"type":"public","name":"A munka ünnepe"}, -"HU-2023-05-07":{"type":"observance","name":"Anyák napja"}, -"HU-2023-05-21":{"type":"observance","name":"Honvédelmi nap"}, -"HU-2023-05-28":{"type":"public","name":"Pünkösdvasárnap"}, -"HU-2023-05-29":{"type":"public","name":"Pünkösdhétfő"}, -"HU-2023-06-04":{"type":"observance","name":"A nemzeti összetartozás napja"}, -"HU-2023-06-19":{"type":"observance","name":"A független Magyarország napja"}, -"HU-2023-08-20":{"type":"public","name":"Szent István ünnepe"}, -"HU-2023-10-06":{"type":"observance","name":"Az aradi vértanúk emléknapja"}, -"HU-2023-10-23":{"type":"public","name":"1956-os forradalom"}, -"HU-2023-11-01":{"type":"public","name":"Mindenszentek"}, -"HU-2023-12-06":{"type":"observance","name":"Mikulás"}, -"HU-2023-12-24":{"type":"optional","name":"Szenteste"}, -"HU-2023-12-25":{"type":"public","name":"Karácsony"}, -"HU-2023-12-26":{"type":"public","name":"Karácsony másnapja"}, -"HU-2023-12-31":{"type":"observance","name":"Szilveszter"}, -"IS-2021-01-01":{"type":"public","name":"Nýársdagur"}, -"IS-2021-01-06":{"type":"observance","name":"Þrettándinn"}, -"IS-2021-01-22":{"type":"observance","name":"Bóndadagur"}, -"IS-2021-02-15":{"type":"observance","name":"Bolludagur"}, -"IS-2021-02-16":{"type":"observance","name":"Sprengidagur"}, -"IS-2021-02-17":{"type":"observance","name":"Öskudagur"}, -"IS-2021-02-18":{"type":"observance","name":"Konudagur"}, -"IS-2021-03-28":{"type":"observance","name":"Pálmasunnudagur"}, -"IS-2021-04-01":{"type":"public","name":"Skírdagur"}, -"IS-2021-04-02":{"type":"public","name":"Föstudagurinn langi"}, -"IS-2021-04-04":{"type":"public","name":"Páskadagur"}, -"IS-2021-04-05":{"type":"public","name":"Annar í páskum"}, -"IS-2021-04-22":{"type":"public","name":"Sumardagurinn fyrsti"}, -"IS-2021-05-01":{"type":"public","name":"Hátíðisdagur Verkamanna"}, -"IS-2021-05-09":{"type":"observance","name":"Mæðradagurinn"}, -"IS-2021-05-13":{"type":"public","name":"Uppstigningardagur"}, -"IS-2021-05-23":{"type":"public","name":"Hvítasunnudagur"}, -"IS-2021-05-24":{"type":"public","name":"Annar í hvítasunnu"}, -"IS-2021-06-06":{"type":"observance","name":"Sjómannadagurinn"}, -"IS-2021-06-17":{"type":"public","name":"Íslenski þjóðhátíðardagurinn"}, -"IS-2021-08-02":{"type":"public","name":"Frídagur verslunarmanna"}, -"IS-2021-10-23":{"type":"observance","name":"Fyrsti vetrardagur"}, -"IS-2021-11-16":{"type":"observance","name":"Dagur íslenskrar tungu"}, -"IS-2021-12-23":{"type":"observance","name":"Þorláksmessa"}, -"IS-2021-12-24":{"type":"public","name":"Aðfangadagur"}, -"IS-2021-12-25":{"type":"public","name":"Jóladagur"}, -"IS-2021-12-26":{"type":"public","name":"Annar í jólum"}, -"IS-2021-12-31":{"type":"public","name":"Gamlársdagur"}, -"IS-2022-01-01":{"type":"public","name":"Nýársdagur"}, -"IS-2022-01-06":{"type":"observance","name":"Þrettándinn"}, -"IS-2022-01-21":{"type":"observance","name":"Bóndadagur"}, -"IS-2022-02-18":{"type":"observance","name":"Konudagur"}, -"IS-2022-02-28":{"type":"observance","name":"Bolludagur"}, -"IS-2022-03-01":{"type":"observance","name":"Sprengidagur"}, -"IS-2022-03-02":{"type":"observance","name":"Öskudagur"}, -"IS-2022-04-10":{"type":"observance","name":"Pálmasunnudagur"}, -"IS-2022-04-14":{"type":"public","name":"Skírdagur"}, -"IS-2022-04-15":{"type":"public","name":"Föstudagurinn langi"}, -"IS-2022-04-17":{"type":"public","name":"Páskadagur"}, -"IS-2022-04-18":{"type":"public","name":"Annar í páskum"}, -"IS-2022-04-21":{"type":"public","name":"Sumardagurinn fyrsti"}, -"IS-2022-05-01":{"type":"public","name":"Hátíðisdagur Verkamanna"}, -"IS-2022-05-08":{"type":"observance","name":"Mæðradagurinn"}, -"IS-2022-05-26":{"type":"public","name":"Uppstigningardagur"}, -"IS-2022-06-05":{"type":"public","name":"Hvítasunnudagur"}, -"IS-2022-06-06":{"type":"public","name":"Annar í hvítasunnu"}, -"IS-2022-06-17":{"type":"public","name":"Íslenski þjóðhátíðardagurinn"}, -"IS-2022-08-01":{"type":"public","name":"Frídagur verslunarmanna"}, -"IS-2022-10-22":{"type":"observance","name":"Fyrsti vetrardagur"}, -"IS-2022-11-16":{"type":"observance","name":"Dagur íslenskrar tungu"}, -"IS-2022-12-23":{"type":"observance","name":"Þorláksmessa"}, -"IS-2022-12-24":{"type":"public","name":"Aðfangadagur"}, -"IS-2022-12-25":{"type":"public","name":"Jóladagur"}, -"IS-2022-12-26":{"type":"public","name":"Annar í jólum"}, -"IS-2022-12-31":{"type":"public","name":"Gamlársdagur"}, -"IS-2023-01-01":{"type":"public","name":"Nýársdagur"}, -"IS-2023-01-06":{"type":"observance","name":"Þrettándinn"}, -"IS-2023-01-20":{"type":"observance","name":"Bóndadagur"}, -"IS-2023-02-18":{"type":"observance","name":"Konudagur"}, -"IS-2023-02-20":{"type":"observance","name":"Bolludagur"}, -"IS-2023-02-21":{"type":"observance","name":"Sprengidagur"}, -"IS-2023-02-22":{"type":"observance","name":"Öskudagur"}, -"IS-2023-04-02":{"type":"observance","name":"Pálmasunnudagur"}, -"IS-2023-04-06":{"type":"public","name":"Skírdagur"}, -"IS-2023-04-07":{"type":"public","name":"Föstudagurinn langi"}, -"IS-2023-04-09":{"type":"public","name":"Páskadagur"}, -"IS-2023-04-10":{"type":"public","name":"Annar í páskum"}, -"IS-2023-04-20":{"type":"public","name":"Sumardagurinn fyrsti"}, -"IS-2023-05-01":{"type":"public","name":"Hátíðisdagur Verkamanna"}, -"IS-2023-05-14":{"type":"observance","name":"Mæðradagurinn"}, -"IS-2023-05-18":{"type":"public","name":"Uppstigningardagur"}, -"IS-2023-05-28":{"type":"public","name":"Hvítasunnudagur"}, -"IS-2023-05-29":{"type":"public","name":"Annar í hvítasunnu"}, -"IS-2023-06-04":{"type":"observance","name":"Sjómannadagurinn"}, -"IS-2023-06-17":{"type":"public","name":"Íslenski þjóðhátíðardagurinn"}, -"IS-2023-08-07":{"type":"public","name":"Frídagur verslunarmanna"}, -"IS-2023-10-21":{"type":"observance","name":"Fyrsti vetrardagur"}, -"IS-2023-11-16":{"type":"observance","name":"Dagur íslenskrar tungu"}, -"IS-2023-12-23":{"type":"observance","name":"Þorláksmessa"}, -"IS-2023-12-24":{"type":"public","name":"Aðfangadagur"}, -"IS-2023-12-25":{"type":"public","name":"Jóladagur"}, -"IS-2023-12-26":{"type":"public","name":"Annar í jólum"}, -"IS-2023-12-31":{"type":"public","name":"Gamlársdagur"}, -"IE-2021-01-01":{"type":"public","name":"New Year's Day"}, -"IE-2021-03-14":{"type":"observance","name":"Mother's Day"}, -"IE-2021-03-17":{"type":"public","name":"St. Patrick’s Day"}, -"IE-2021-04-02":{"type":"bank","name":"Good Friday"}, -"IE-2021-04-04":{"type":"public","name":"Easter Sunday"}, -"IE-2021-04-05":{"type":"public","name":"Easter Monday"}, -"IE-2021-05-03":{"type":"public","name":"May Day"}, -"IE-2021-06-07":{"type":"public","name":"First Monday in June"}, -"IE-2021-08-02":{"type":"public","name":"First Monday in August"}, -"IE-2021-10-25":{"type":"public","name":"October Bank Holiday"}, -"IE-2021-12-25":{"type":"public","name":"Christmas Day"}, -"IE-2021-12-26":{"type":"public","name":"St. Stephen's Day"}, -"IE-2021-12-27":{"type":"bank","name":"St. Stephen's Day (substitute day)"}, -"IE-2022-01-01":{"type":"public","name":"New Year's Day"}, -"IE-2022-03-17":{"type":"public","name":"St. Patrick’s Day"}, -"IE-2022-03-27":{"type":"observance","name":"Mother's Day"}, -"IE-2022-04-15":{"type":"bank","name":"Good Friday"}, -"IE-2022-04-17":{"type":"public","name":"Easter Sunday"}, -"IE-2022-04-18":{"type":"public","name":"Easter Monday"}, -"IE-2022-05-02":{"type":"public","name":"May Day"}, -"IE-2022-06-06":{"type":"public","name":"First Monday in June"}, -"IE-2022-08-01":{"type":"public","name":"First Monday in August"}, -"IE-2022-10-24":{"type":"public","name":"October Bank Holiday"}, -"IE-2022-12-25":{"type":"public","name":"Christmas Day"}, -"IE-2022-12-26":{"type":"public","name":"St. Stephen's Day"}, -"IE-2022-12-27":{"type":"bank","name":"Christmas Bank Holiday"}, -"IE-2023-01-01":{"type":"public","name":"New Year's Day"}, -"IE-2023-03-17":{"type":"public","name":"St. Patrick’s Day"}, -"IE-2023-03-19":{"type":"observance","name":"Mother's Day"}, -"IE-2023-04-07":{"type":"bank","name":"Good Friday"}, -"IE-2023-04-09":{"type":"public","name":"Easter Sunday"}, -"IE-2023-04-10":{"type":"public","name":"Easter Monday"}, -"IE-2023-05-01":{"type":"public","name":"May Day"}, -"IE-2023-06-05":{"type":"public","name":"First Monday in June"}, -"IE-2023-08-07":{"type":"public","name":"First Monday in August"}, -"IE-2023-10-30":{"type":"public","name":"October Bank Holiday"}, -"IE-2023-12-25":{"type":"public","name":"Christmas Day"}, -"IE-2023-12-26":{"type":"public","name":"St. Stephen's Day"}, -"IE-2023-12-27":{"type":"bank","name":"Christmas Bank Holiday"}, -"IT-2021-01-01":{"type":"public","name":"Capodanno"}, -"IT-2021-01-06":{"type":"public","name":"Befana"}, -"IT-2021-04-04":{"type":"public","name":"Domenica di Pasqua"}, -"IT-2021-04-05":{"type":"public","name":"Lunedì dell’Angelo"}, -"IT-2021-04-25":{"type":"public","name":"Anniversario della Liberazione"}, -"IT-2021-05-01":{"type":"public","name":"Festa del Lavoro"}, -"IT-2021-05-09":{"type":"observance","name":"Festa della mamma"}, -"IT-2021-06-02":{"type":"public","name":"Festa della Repubblica"}, -"IT-2021-08-15":{"type":"public","name":"Ferragosto"}, -"IT-2021-11-01":{"type":"public","name":"Ognissanti"}, -"IT-2021-12-08":{"type":"public","name":"Immacolata Concezione"}, -"IT-2021-12-25":{"type":"public","name":"Natale"}, -"IT-2021-12-26":{"type":"public","name":"Santo Stefano"}, -"IT-2022-01-01":{"type":"public","name":"Capodanno"}, -"IT-2022-01-06":{"type":"public","name":"Befana"}, -"IT-2022-04-17":{"type":"public","name":"Domenica di Pasqua"}, -"IT-2022-04-18":{"type":"public","name":"Lunedì dell’Angelo"}, -"IT-2022-04-25":{"type":"public","name":"Anniversario della Liberazione"}, -"IT-2022-05-01":{"type":"public","name":"Festa del Lavoro"}, -"IT-2022-05-08":{"type":"observance","name":"Festa della mamma"}, -"IT-2022-06-02":{"type":"public","name":"Festa della Repubblica"}, -"IT-2022-08-15":{"type":"public","name":"Ferragosto"}, -"IT-2022-11-01":{"type":"public","name":"Ognissanti"}, -"IT-2022-12-08":{"type":"public","name":"Immacolata Concezione"}, -"IT-2022-12-25":{"type":"public","name":"Natale"}, -"IT-2022-12-26":{"type":"public","name":"Santo Stefano"}, -"IT-2023-01-01":{"type":"public","name":"Capodanno"}, -"IT-2023-01-06":{"type":"public","name":"Befana"}, -"IT-2023-04-09":{"type":"public","name":"Domenica di Pasqua"}, -"IT-2023-04-10":{"type":"public","name":"Lunedì dell’Angelo"}, -"IT-2023-04-25":{"type":"public","name":"Anniversario della Liberazione"}, -"IT-2023-05-01":{"type":"public","name":"Festa del Lavoro"}, -"IT-2023-05-14":{"type":"observance","name":"Festa della mamma"}, -"IT-2023-06-02":{"type":"public","name":"Festa della Repubblica"}, -"IT-2023-08-15":{"type":"public","name":"Ferragosto"}, -"IT-2023-11-01":{"type":"public","name":"Ognissanti"}, -"IT-2023-12-08":{"type":"public","name":"Immacolata Concezione"}, -"IT-2023-12-25":{"type":"public","name":"Natale"}, -"IT-2023-12-26":{"type":"public","name":"Santo Stefano"}, -"LV-2021-01-01":{"type":"public","name":"Jaunais Gads"}, -"LV-2021-04-02":{"type":"public","name":"Lielā Piektdiena"}, -"LV-2021-04-04":{"type":"public","name":"Lieldienas"}, -"LV-2021-04-05":{"type":"public","name":"Otrās Lieldienas"}, -"LV-2021-05-01":{"type":"public","name":"Darba svētki"}, -"LV-2021-05-04":{"type":"public","name":"Latvijas Republikas Neatkarības atjaunošanas diena"}, -"LV-2021-05-09":{"type":"observance","name":"Mātes diena"}, -"LV-2021-06-23":{"type":"public","name":"Līgo Diena"}, -"LV-2021-06-24":{"type":"public","name":"Jāņi"}, -"LV-2021-11-18":{"type":"public","name":"Latvijas Republikas proklamēšanas diena"}, -"LV-2021-12-24":{"type":"public","name":"Ziemassvētku vakars"}, -"LV-2021-12-25":{"type":"public","name":"Ziemassvētki"}, -"LV-2021-12-26":{"type":"public","name":"Otrie Ziemassvētki"}, -"LV-2021-12-31":{"type":"public","name":"Vecgada vakars"}, -"LV-2022-01-01":{"type":"public","name":"Jaunais Gads"}, -"LV-2022-04-15":{"type":"public","name":"Lielā Piektdiena"}, -"LV-2022-04-17":{"type":"public","name":"Lieldienas"}, -"LV-2022-04-18":{"type":"public","name":"Otrās Lieldienas"}, -"LV-2022-05-01":{"type":"public","name":"Darba svētki"}, -"LV-2022-05-04":{"type":"public","name":"Latvijas Republikas Neatkarības atjaunošanas diena"}, -"LV-2022-05-08":{"type":"observance","name":"Mātes diena"}, -"LV-2022-06-23":{"type":"public","name":"Līgo Diena"}, -"LV-2022-06-24":{"type":"public","name":"Jāņi"}, -"LV-2022-11-18":{"type":"public","name":"Latvijas Republikas proklamēšanas diena"}, -"LV-2022-12-24":{"type":"public","name":"Ziemassvētku vakars"}, -"LV-2022-12-25":{"type":"public","name":"Ziemassvētki"}, -"LV-2022-12-26":{"type":"public","name":"Otrie Ziemassvētki"}, -"LV-2022-12-31":{"type":"public","name":"Vecgada vakars"}, -"LV-2023-01-01":{"type":"public","name":"Jaunais Gads"}, -"LV-2023-04-07":{"type":"public","name":"Lielā Piektdiena"}, -"LV-2023-04-09":{"type":"public","name":"Lieldienas"}, -"LV-2023-04-10":{"type":"public","name":"Otrās Lieldienas"}, -"LV-2023-05-01":{"type":"public","name":"Darba svētki"}, -"LV-2023-05-04":{"type":"public","name":"Latvijas Republikas Neatkarības atjaunošanas diena"}, -"LV-2023-05-14":{"type":"observance","name":"Mātes diena"}, -"LV-2023-06-23":{"type":"public","name":"Līgo Diena"}, -"LV-2023-06-24":{"type":"public","name":"Jāņi"}, -"LV-2023-11-18":{"type":"public","name":"Latvijas Republikas proklamēšanas diena"}, -"LV-2023-11-20":{"type":"public","name":"Latvijas Republikas proklamēšanas diena (aizstājējs diena)"}, -"LV-2023-12-24":{"type":"public","name":"Ziemassvētku vakars"}, -"LV-2023-12-25":{"type":"public","name":"Ziemassvētki"}, -"LV-2023-12-26":{"type":"public","name":"Otrie Ziemassvētki"}, -"LV-2023-12-31":{"type":"public","name":"Vecgada vakars"}, -"LI-2021-01-01":{"type":"public","name":"Neujahr"}, -"LI-2021-01-02":{"type":"bank","name":"Berchtoldstag"}, -"LI-2021-01-06":{"type":"public","name":"Heilige Drei Könige"}, -"LI-2021-02-02":{"type":"observance","name":"Lichtmess"}, -"LI-2021-02-16":{"type":"bank","name":"Faschingsdienstag"}, -"LI-2021-03-19":{"type":"observance","name":"Josefstag"}, -"LI-2021-04-02":{"type":"public","name":"Karfreitag"}, -"LI-2021-04-04":{"type":"observance","name":"Ostersonntag"}, -"LI-2021-04-05":{"type":"public","name":"Ostermontag"}, -"LI-2021-05-01":{"type":"public","name":"Tag der Arbeit"}, -"LI-2021-05-09":{"type":"observance","name":"Muttertag"}, -"LI-2021-05-13":{"type":"public","name":"Auffahrt"}, -"LI-2021-05-14":{"type":"public","name":"Feiertagsbrücke"}, -"LI-2021-05-23":{"type":"observance","name":"Pfingstsonntag"}, -"LI-2021-05-24":{"type":"public","name":"Pfingstmontag"}, -"LI-2021-06-03":{"type":"public","name":"Fronleichnam"}, -"LI-2021-06-04":{"type":"public","name":"Feiertagsbrücke"}, -"LI-2021-08-15":{"type":"observance","name":"Staatsfeiertag"}, -"LI-2021-09-08":{"type":"public","name":"Mariä Geburt"}, -"LI-2021-11-01":{"type":"observance","name":"Allerheiligen"}, -"LI-2021-12-08":{"type":"public","name":"Mariä Empfängnis"}, -"LI-2021-12-24":{"type":"bank","name":"Heiliger Abend"}, -"LI-2021-12-25":{"type":"public","name":"Weihnachten"}, -"LI-2021-12-26":{"type":"public","name":"Stephanstag"}, -"LI-2021-12-31":{"type":"bank","name":"Silvester"}, -"LI-2022-01-01":{"type":"public","name":"Neujahr"}, -"LI-2022-01-02":{"type":"bank","name":"Berchtoldstag"}, -"LI-2022-01-06":{"type":"public","name":"Heilige Drei Könige"}, -"LI-2022-02-02":{"type":"observance","name":"Lichtmess"}, -"LI-2022-03-01":{"type":"bank","name":"Faschingsdienstag"}, -"LI-2022-03-19":{"type":"observance","name":"Josefstag"}, -"LI-2022-04-15":{"type":"public","name":"Karfreitag"}, -"LI-2022-04-17":{"type":"observance","name":"Ostersonntag"}, -"LI-2022-04-18":{"type":"public","name":"Ostermontag"}, -"LI-2022-05-01":{"type":"public","name":"Tag der Arbeit"}, -"LI-2022-05-08":{"type":"observance","name":"Muttertag"}, -"LI-2022-05-26":{"type":"public","name":"Auffahrt"}, -"LI-2022-05-27":{"type":"public","name":"Feiertagsbrücke"}, -"LI-2022-06-05":{"type":"observance","name":"Pfingstsonntag"}, -"LI-2022-06-06":{"type":"public","name":"Pfingstmontag"}, -"LI-2022-06-16":{"type":"public","name":"Fronleichnam"}, -"LI-2022-06-17":{"type":"public","name":"Feiertagsbrücke"}, -"LI-2022-08-15":{"type":"observance","name":"Staatsfeiertag"}, -"LI-2022-09-08":{"type":"public","name":"Mariä Geburt"}, -"LI-2022-11-01":{"type":"observance","name":"Allerheiligen"}, -"LI-2022-12-08":{"type":"public","name":"Mariä Empfängnis"}, -"LI-2022-12-24":{"type":"bank","name":"Heiliger Abend"}, -"LI-2022-12-25":{"type":"public","name":"Weihnachten"}, -"LI-2022-12-26":{"type":"public","name":"Stephanstag"}, -"LI-2022-12-31":{"type":"bank","name":"Silvester"}, -"LI-2023-01-01":{"type":"public","name":"Neujahr"}, -"LI-2023-01-02":{"type":"bank","name":"Berchtoldstag"}, -"LI-2023-01-06":{"type":"public","name":"Heilige Drei Könige"}, -"LI-2023-02-02":{"type":"observance","name":"Lichtmess"}, -"LI-2023-02-21":{"type":"bank","name":"Faschingsdienstag"}, -"LI-2023-03-19":{"type":"observance","name":"Josefstag"}, -"LI-2023-04-07":{"type":"public","name":"Karfreitag"}, -"LI-2023-04-09":{"type":"observance","name":"Ostersonntag"}, -"LI-2023-04-10":{"type":"public","name":"Ostermontag"}, -"LI-2023-05-01":{"type":"public","name":"Tag der Arbeit"}, -"LI-2023-05-14":{"type":"observance","name":"Muttertag"}, -"LI-2023-05-18":{"type":"public","name":"Auffahrt"}, -"LI-2023-05-19":{"type":"public","name":"Feiertagsbrücke"}, -"LI-2023-05-28":{"type":"observance","name":"Pfingstsonntag"}, -"LI-2023-05-29":{"type":"public","name":"Pfingstmontag"}, -"LI-2023-06-08":{"type":"public","name":"Fronleichnam"}, -"LI-2023-06-09":{"type":"public","name":"Feiertagsbrücke"}, -"LI-2023-08-15":{"type":"observance","name":"Staatsfeiertag"}, -"LI-2023-09-08":{"type":"public","name":"Mariä Geburt"}, -"LI-2023-11-01":{"type":"observance","name":"Allerheiligen"}, -"LI-2023-12-08":{"type":"public","name":"Mariä Empfängnis"}, -"LI-2023-12-24":{"type":"bank","name":"Heiliger Abend"}, -"LI-2023-12-25":{"type":"public","name":"Weihnachten"}, -"LI-2023-12-26":{"type":"public","name":"Stephanstag"}, -"LI-2023-12-31":{"type":"bank","name":"Silvester"}, -"LT-2021-01-01":{"type":"public","name":"Naujieji metai"}, -"LT-2021-02-16":{"type":"public","name":"Lietuvos valstybės atkūrimo diena"}, -"LT-2021-03-11":{"type":"public","name":"Lietuvos nepriklausomybės atkūrimo diena"}, -"LT-2021-04-04":{"type":"public","name":"Velykos"}, -"LT-2021-05-01":{"type":"public","name":"Tarptautinė darbo diena"}, -"LT-2021-05-02":{"type":"observance","name":"Motinos diena"}, -"LT-2021-06-06":{"type":"observance","name":"Tėvo diena"}, -"LT-2021-06-24":{"type":"public","name":"Joninės, Rasos"}, -"LT-2021-07-06":{"type":"public","name":"Valstybės diena"}, -"LT-2021-08-15":{"type":"public","name":"Žolinė"}, -"LT-2021-11-01":{"type":"public","name":"Visų šventųjų diena"}, -"LT-2021-11-02":{"type":"public","name":"Vėlinės"}, -"LT-2021-12-24":{"type":"public","name":"Šv. Kūčios"}, -"LT-2021-12-25":{"type":"public","name":"Šv. Kalėdos"}, -"LT-2021-12-26":{"type":"public","name":"2. Kalėdų diena"}, -"LT-2022-01-01":{"type":"public","name":"Naujieji metai"}, -"LT-2022-02-16":{"type":"public","name":"Lietuvos valstybės atkūrimo diena"}, -"LT-2022-03-11":{"type":"public","name":"Lietuvos nepriklausomybės atkūrimo diena"}, -"LT-2022-04-17":{"type":"public","name":"Velykos"}, -"LT-2022-05-01":{"type":"public","name":"Tarptautinė darbo diena"}, -"LT-2022-06-05":{"type":"observance","name":"Tėvo diena"}, -"LT-2022-06-24":{"type":"public","name":"Joninės, Rasos"}, -"LT-2022-07-06":{"type":"public","name":"Valstybės diena"}, -"LT-2022-08-15":{"type":"public","name":"Žolinė"}, -"LT-2022-11-01":{"type":"public","name":"Visų šventųjų diena"}, -"LT-2022-11-02":{"type":"public","name":"Vėlinės"}, -"LT-2022-12-24":{"type":"public","name":"Šv. Kūčios"}, -"LT-2022-12-25":{"type":"public","name":"Šv. Kalėdos"}, -"LT-2022-12-26":{"type":"public","name":"2. Kalėdų diena"}, -"LT-2023-01-01":{"type":"public","name":"Naujieji metai"}, -"LT-2023-02-16":{"type":"public","name":"Lietuvos valstybės atkūrimo diena"}, -"LT-2023-03-11":{"type":"public","name":"Lietuvos nepriklausomybės atkūrimo diena"}, -"LT-2023-04-09":{"type":"public","name":"Velykos"}, -"LT-2023-05-01":{"type":"public","name":"Tarptautinė darbo diena"}, -"LT-2023-05-07":{"type":"observance","name":"Motinos diena"}, -"LT-2023-06-04":{"type":"observance","name":"Tėvo diena"}, -"LT-2023-06-24":{"type":"public","name":"Joninės, Rasos"}, -"LT-2023-07-06":{"type":"public","name":"Valstybės diena"}, -"LT-2023-08-15":{"type":"public","name":"Žolinė"}, -"LT-2023-11-01":{"type":"public","name":"Visų šventųjų diena"}, -"LT-2023-11-02":{"type":"public","name":"Vėlinės"}, -"LT-2023-12-24":{"type":"public","name":"Šv. Kūčios"}, -"LT-2023-12-25":{"type":"public","name":"Šv. Kalėdos"}, -"LT-2023-12-26":{"type":"public","name":"2. Kalėdų diena"}, -"LU-2021-01-01":{"type":"public","name":"Nouvel An"}, -"LU-2021-04-02":{"type":"observance","name":"Vendredi saint"}, -"LU-2021-04-04":{"type":"observance","name":"Pâques"}, -"LU-2021-04-05":{"type":"public","name":"Lundi de Pâques"}, -"LU-2021-05-01":{"type":"public","name":"1er mai"}, -"LU-2021-05-09":{"type":"public","name":"Journée de l'Europe"}, -"LU-2021-05-13":{"type":"public","name":"Ascension"}, -"LU-2021-05-24":{"type":"public","name":"Lundi de Pentecôte"}, -"LU-2021-06-23":{"type":"public","name":"L’anniversaire du Grand-Duc"}, -"LU-2021-08-15":{"type":"public","name":"Assomption"}, -"LU-2021-11-01":{"type":"public","name":"Toussaint"}, -"LU-2021-12-25":{"type":"public","name":"Noël"}, -"LU-2021-12-26":{"type":"public","name":"Lendemain de Noël"}, -"LU-2022-01-01":{"type":"public","name":"Nouvel An"}, -"LU-2022-04-15":{"type":"observance","name":"Vendredi saint"}, -"LU-2022-04-17":{"type":"observance","name":"Pâques"}, -"LU-2022-04-18":{"type":"public","name":"Lundi de Pâques"}, -"LU-2022-05-01":{"type":"public","name":"1er mai"}, -"LU-2022-05-09":{"type":"public","name":"Journée de l'Europe"}, -"LU-2022-05-26":{"type":"public","name":"Ascension"}, -"LU-2022-06-06":{"type":"public","name":"Lundi de Pentecôte"}, -"LU-2022-06-23":{"type":"public","name":"L’anniversaire du Grand-Duc"}, -"LU-2022-08-15":{"type":"public","name":"Assomption"}, -"LU-2022-11-01":{"type":"public","name":"Toussaint"}, -"LU-2022-12-25":{"type":"public","name":"Noël"}, -"LU-2022-12-26":{"type":"public","name":"Lendemain de Noël"}, -"LU-2023-01-01":{"type":"public","name":"Nouvel An"}, -"LU-2023-04-07":{"type":"observance","name":"Vendredi saint"}, -"LU-2023-04-09":{"type":"observance","name":"Pâques"}, -"LU-2023-04-10":{"type":"public","name":"Lundi de Pâques"}, -"LU-2023-05-01":{"type":"public","name":"1er mai"}, -"LU-2023-05-09":{"type":"public","name":"Journée de l'Europe"}, -"LU-2023-05-18":{"type":"public","name":"Ascension"}, -"LU-2023-05-29":{"type":"public","name":"Lundi de Pentecôte"}, -"LU-2023-06-23":{"type":"public","name":"L’anniversaire du Grand-Duc"}, -"LU-2023-08-15":{"type":"public","name":"Assomption"}, -"LU-2023-11-01":{"type":"public","name":"Toussaint"}, -"LU-2023-12-25":{"type":"public","name":"Noël"}, -"LU-2023-12-26":{"type":"public","name":"Lendemain de Noël"}, -"NL-2021-01-01":{"type":"public","name":"Nieuwjaar"}, -"NL-2021-04-02":{"type":"public","name":"Goede Vrijdag"}, -"NL-2021-04-04":{"type":"public","name":"Pasen"}, -"NL-2021-04-05":{"type":"public","name":"Tweede paasdag"}, -"NL-2021-04-27":{"type":"public","name":"Koningsdag"}, -"NL-2021-05-04":{"type":"observance","name":"Nationale Dodenherdenking"}, -"NL-2021-05-05":{"type":"public","name":"Bevrijdingsdag"}, -"NL-2021-05-09":{"type":"observance","name":"Moederdag"}, -"NL-2021-05-13":{"type":"public","name":"O.L.H. Hemelvaart"}, -"NL-2021-05-23":{"type":"public","name":"Pinksteren"}, -"NL-2021-05-24":{"type":"public","name":"Tweede pinksterdag"}, -"NL-2021-06-20":{"type":"observance","name":"Vaderdag"}, -"NL-2021-09-21":{"type":"observance","name":"Prinsjesdag"}, -"NL-2021-11-11":{"type":"observance","name":"Sint Maarten"}, -"NL-2021-12-05":{"type":"observance","name":"Sinterklaasavond"}, -"NL-2021-12-15":{"type":"observance","name":"Koninkrijksdag"}, -"NL-2021-12-25":{"type":"public","name":"Kerstmis"}, -"NL-2021-12-26":{"type":"public","name":"Tweede kerstdag"}, -"NL-2021-12-31":{"type":"bank","name":"Oudejaarsavond"}, -"NL-2022-01-01":{"type":"public","name":"Nieuwjaar"}, -"NL-2022-04-15":{"type":"public","name":"Goede Vrijdag"}, -"NL-2022-04-17":{"type":"public","name":"Pasen"}, -"NL-2022-04-18":{"type":"public","name":"Tweede paasdag"}, -"NL-2022-04-27":{"type":"public","name":"Koningsdag"}, -"NL-2022-05-04":{"type":"observance","name":"Nationale Dodenherdenking"}, -"NL-2022-05-05":{"type":"public","name":"Bevrijdingsdag"}, -"NL-2022-05-08":{"type":"observance","name":"Moederdag"}, -"NL-2022-05-26":{"type":"public","name":"O.L.H. Hemelvaart"}, -"NL-2022-06-05":{"type":"public","name":"Pinksteren"}, -"NL-2022-06-06":{"type":"public","name":"Tweede pinksterdag"}, -"NL-2022-06-19":{"type":"observance","name":"Vaderdag"}, -"NL-2022-09-20":{"type":"observance","name":"Prinsjesdag"}, -"NL-2022-11-11":{"type":"observance","name":"Sint Maarten"}, -"NL-2022-12-05":{"type":"observance","name":"Sinterklaasavond"}, -"NL-2022-12-15":{"type":"observance","name":"Koninkrijksdag"}, -"NL-2022-12-25":{"type":"public","name":"Kerstmis"}, -"NL-2022-12-26":{"type":"public","name":"Tweede kerstdag"}, -"NL-2022-12-31":{"type":"bank","name":"Oudejaarsavond"}, -"NL-2023-01-01":{"type":"public","name":"Nieuwjaar"}, -"NL-2023-04-07":{"type":"public","name":"Goede Vrijdag"}, -"NL-2023-04-09":{"type":"public","name":"Pasen"}, -"NL-2023-04-10":{"type":"public","name":"Tweede paasdag"}, -"NL-2023-04-27":{"type":"public","name":"Koningsdag"}, -"NL-2023-05-04":{"type":"observance","name":"Nationale Dodenherdenking"}, -"NL-2023-05-05":{"type":"public","name":"Bevrijdingsdag"}, -"NL-2023-05-14":{"type":"observance","name":"Moederdag"}, -"NL-2023-05-18":{"type":"public","name":"O.L.H. Hemelvaart"}, -"NL-2023-05-28":{"type":"public","name":"Pinksteren"}, -"NL-2023-05-29":{"type":"public","name":"Tweede pinksterdag"}, -"NL-2023-06-18":{"type":"observance","name":"Vaderdag"}, -"NL-2023-09-19":{"type":"observance","name":"Prinsjesdag"}, -"NL-2023-11-11":{"type":"observance","name":"Sint Maarten"}, -"NL-2023-12-05":{"type":"observance","name":"Sinterklaasavond"}, -"NL-2023-12-15":{"type":"observance","name":"Koninkrijksdag"}, -"NL-2023-12-25":{"type":"public","name":"Kerstmis"}, -"NL-2023-12-26":{"type":"public","name":"Tweede kerstdag"}, -"NL-2023-12-31":{"type":"bank","name":"Oudejaarsavond"}, -"NO-2021-01-01":{"type":"public","name":"Første nyttårsdag"}, -"NO-2021-02-14":{"type":"observance","name":"Morsdag"}, -"NO-2021-03-28":{"type":"observance","name":"Palmesøndag"}, -"NO-2021-04-01":{"type":"public","name":"Skjærtorsdag"}, -"NO-2021-04-02":{"type":"public","name":"Langfredag"}, -"NO-2021-04-03":{"type":"public","name":"Påskeaften"}, -"NO-2021-04-04":{"type":"public","name":"Første påskedag"}, -"NO-2021-04-05":{"type":"public","name":"Andre påskedag"}, -"NO-2021-05-01":{"type":"public","name":"Arbeidernes dag"}, -"NO-2021-05-08":{"type":"observance","name":"Frigjøringsdagen"}, -"NO-2021-05-13":{"type":"public","name":"Kristi himmelfartsdag"}, -"NO-2021-05-17":{"type":"public","name":"17. mai"}, -"NO-2021-05-23":{"type":"public","name":"Første pinsedag"}, -"NO-2021-05-24":{"type":"public","name":"Andre pinsedag"}, -"NO-2021-06-23":{"type":"observance","name":"Sankthansaften"}, -"NO-2021-11-14":{"type":"observance","name":"Farsdag"}, -"NO-2021-11-28":{"type":"observance","name":"Første søndag i advent"}, -"NO-2021-12-05":{"type":"observance","name":"Andre søndag i advent"}, -"NO-2021-12-12":{"type":"observance","name":"Tredje søndag i advent"}, -"NO-2021-12-19":{"type":"observance","name":"Fjerde søndag i advent"}, -"NO-2021-12-24":{"type":"bank","name":"Julaften"}, -"NO-2021-12-25":{"type":"public","name":"Første Juledag"}, -"NO-2021-12-26":{"type":"public","name":"Andre juledag"}, -"NO-2021-12-31":{"type":"bank","name":"Nyttårsaften"}, -"NO-2022-01-01":{"type":"public","name":"Første nyttårsdag"}, -"NO-2022-02-13":{"type":"observance","name":"Morsdag"}, -"NO-2022-02-27":{"type":"observance","name":"Fastelavn"}, -"NO-2022-04-10":{"type":"observance","name":"Palmesøndag"}, -"NO-2022-04-14":{"type":"public","name":"Skjærtorsdag"}, -"NO-2022-04-15":{"type":"public","name":"Langfredag"}, -"NO-2022-04-16":{"type":"public","name":"Påskeaften"}, -"NO-2022-04-17":{"type":"public","name":"Første påskedag"}, -"NO-2022-04-18":{"type":"public","name":"Andre påskedag"}, -"NO-2022-05-01":{"type":"public","name":"Arbeidernes dag"}, -"NO-2022-05-08":{"type":"observance","name":"Frigjøringsdagen"}, -"NO-2022-05-17":{"type":"public","name":"17. mai"}, -"NO-2022-05-26":{"type":"public","name":"Kristi himmelfartsdag"}, -"NO-2022-06-05":{"type":"public","name":"Første pinsedag"}, -"NO-2022-06-06":{"type":"public","name":"Andre pinsedag"}, -"NO-2022-06-23":{"type":"observance","name":"Sankthansaften"}, -"NO-2022-11-13":{"type":"observance","name":"Farsdag"}, -"NO-2022-11-27":{"type":"observance","name":"Første søndag i advent"}, -"NO-2022-12-04":{"type":"observance","name":"Andre søndag i advent"}, -"NO-2022-12-11":{"type":"observance","name":"Tredje søndag i advent"}, -"NO-2022-12-18":{"type":"observance","name":"Fjerde søndag i advent"}, -"NO-2022-12-24":{"type":"bank","name":"Julaften"}, -"NO-2022-12-25":{"type":"public","name":"Første Juledag"}, -"NO-2022-12-26":{"type":"public","name":"Andre juledag"}, -"NO-2022-12-31":{"type":"bank","name":"Nyttårsaften"}, -"NO-2023-01-01":{"type":"public","name":"Første nyttårsdag"}, -"NO-2023-02-12":{"type":"observance","name":"Morsdag"}, -"NO-2023-02-19":{"type":"observance","name":"Fastelavn"}, -"NO-2023-04-02":{"type":"observance","name":"Palmesøndag"}, -"NO-2023-04-06":{"type":"public","name":"Skjærtorsdag"}, -"NO-2023-04-07":{"type":"public","name":"Langfredag"}, -"NO-2023-04-08":{"type":"public","name":"Påskeaften"}, -"NO-2023-04-09":{"type":"public","name":"Første påskedag"}, -"NO-2023-04-10":{"type":"public","name":"Andre påskedag"}, -"NO-2023-05-01":{"type":"public","name":"Arbeidernes dag"}, -"NO-2023-05-08":{"type":"observance","name":"Frigjøringsdagen"}, -"NO-2023-05-17":{"type":"public","name":"17. mai"}, -"NO-2023-05-18":{"type":"public","name":"Kristi himmelfartsdag"}, -"NO-2023-05-28":{"type":"public","name":"Første pinsedag"}, -"NO-2023-05-29":{"type":"public","name":"Andre pinsedag"}, -"NO-2023-06-23":{"type":"observance","name":"Sankthansaften"}, -"NO-2023-11-12":{"type":"observance","name":"Farsdag"}, -"NO-2023-11-26":{"type":"observance","name":"Første søndag i advent"}, -"NO-2023-12-03":{"type":"observance","name":"Andre søndag i advent"}, -"NO-2023-12-10":{"type":"observance","name":"Tredje søndag i advent"}, -"NO-2023-12-17":{"type":"observance","name":"Fjerde søndag i advent"}, -"NO-2023-12-24":{"type":"bank","name":"Julaften"}, -"NO-2023-12-25":{"type":"public","name":"Første Juledag"}, -"NO-2023-12-26":{"type":"public","name":"Andre juledag"}, -"NO-2023-12-31":{"type":"bank","name":"Nyttårsaften"}, -"PL-2021-01-01":{"type":"public","name":"Nowy Rok"}, -"PL-2021-01-06":{"type":"public","name":"Święto Trzech Króli"}, -"PL-2021-04-04":{"type":"public","name":"Niedziela Wielkanocna"}, -"PL-2021-04-05":{"type":"public","name":"Drugi dzień Wielkanocy"}, -"PL-2021-05-01":{"type":"public","name":"Święto Państwowe; Święto Pracy"}, -"PL-2021-05-03":{"type":"public","name":"Święto Narodowe Trzeciego Maja"}, -"PL-2021-05-23":{"type":"public","name":"Zielone Świątki"}, -"PL-2021-05-26":{"type":"observance","name":"Dzień Matki"}, -"PL-2021-06-03":{"type":"public","name":"Dzień Bożego Ciała"}, -"PL-2021-08-15":{"type":"public","name":"Wniebowzięcie Najświętszej Maryi Panny"}, -"PL-2021-11-01":{"type":"public","name":"Wszystkich Świętych"}, -"PL-2021-11-11":{"type":"public","name":"Narodowe Święto Niepodległości"}, -"PL-2021-12-25":{"type":"public","name":"Pierwszy dzień Bożego Narodzenia"}, -"PL-2021-12-26":{"type":"public","name":"Drugi dzień Bożego Narodzenia"}, -"PL-2022-01-01":{"type":"public","name":"Nowy Rok"}, -"PL-2022-01-06":{"type":"public","name":"Święto Trzech Króli"}, -"PL-2022-04-17":{"type":"public","name":"Niedziela Wielkanocna"}, -"PL-2022-04-18":{"type":"public","name":"Drugi dzień Wielkanocy"}, -"PL-2022-05-01":{"type":"public","name":"Święto Państwowe; Święto Pracy"}, -"PL-2022-05-03":{"type":"public","name":"Święto Narodowe Trzeciego Maja"}, -"PL-2022-05-26":{"type":"observance","name":"Dzień Matki"}, -"PL-2022-06-05":{"type":"public","name":"Zielone Świątki"}, -"PL-2022-06-16":{"type":"public","name":"Dzień Bożego Ciała"}, -"PL-2022-08-15":{"type":"public","name":"Wniebowzięcie Najświętszej Maryi Panny"}, -"PL-2022-11-01":{"type":"public","name":"Wszystkich Świętych"}, -"PL-2022-11-11":{"type":"public","name":"Narodowe Święto Niepodległości"}, -"PL-2022-12-25":{"type":"public","name":"Pierwszy dzień Bożego Narodzenia"}, -"PL-2022-12-26":{"type":"public","name":"Drugi dzień Bożego Narodzenia"}, -"PL-2023-01-01":{"type":"public","name":"Nowy Rok"}, -"PL-2023-01-06":{"type":"public","name":"Święto Trzech Króli"}, -"PL-2023-04-09":{"type":"public","name":"Niedziela Wielkanocna"}, -"PL-2023-04-10":{"type":"public","name":"Drugi dzień Wielkanocy"}, -"PL-2023-05-01":{"type":"public","name":"Święto Państwowe; Święto Pracy"}, -"PL-2023-05-03":{"type":"public","name":"Święto Narodowe Trzeciego Maja"}, -"PL-2023-05-26":{"type":"observance","name":"Dzień Matki"}, -"PL-2023-05-28":{"type":"public","name":"Zielone Świątki"}, -"PL-2023-06-08":{"type":"public","name":"Dzień Bożego Ciała"}, -"PL-2023-08-15":{"type":"public","name":"Wniebowzięcie Najświętszej Maryi Panny"}, -"PL-2023-11-01":{"type":"public","name":"Wszystkich Świętych"}, -"PL-2023-11-11":{"type":"public","name":"Narodowe Święto Niepodległości"}, -"PL-2023-12-25":{"type":"public","name":"Pierwszy dzień Bożego Narodzenia"}, -"PL-2023-12-26":{"type":"public","name":"Drugi dzień Bożego Narodzenia"}, -"PT-2021-01-01":{"type":"public","name":"Ano Novo"}, -"PT-2021-02-16":{"type":"observance","name":"Carnaval"}, -"PT-2021-04-02":{"type":"public","name":"Sexta-Feira Santa"}, -"PT-2021-04-04":{"type":"public","name":"Páscoa"}, -"PT-2021-04-25":{"type":"public","name":"Dia da Liberdade"}, -"PT-2021-05-01":{"type":"public","name":"Dia do trabalhador"}, -"PT-2021-05-02":{"type":"observance","name":"Dia das Mães"}, -"PT-2021-06-03":{"type":"public","name":"Corpo de Deus"}, -"PT-2021-06-10":{"type":"public","name":"Dia de Portugal"}, -"PT-2021-08-15":{"type":"public","name":"Assunção de Maria"}, -"PT-2021-10-05":{"type":"public","name":"Implantação da República"}, -"PT-2021-11-01":{"type":"public","name":"Todos os santos"}, -"PT-2021-12-01":{"type":"public","name":"Restauração da Independência"}, -"PT-2021-12-08":{"type":"public","name":"Imaculada Conceição"}, -"PT-2021-12-24":{"type":"observance","name":"Noite de Natal"}, -"PT-2021-12-25":{"type":"public","name":"Natal"}, -"PT-2021-12-31":{"type":"observance","name":"Véspera de Ano Novo"}, -"PT-2022-01-01":{"type":"public","name":"Ano Novo"}, -"PT-2022-03-01":{"type":"observance","name":"Carnaval"}, -"PT-2022-04-15":{"type":"public","name":"Sexta-Feira Santa"}, -"PT-2022-04-17":{"type":"public","name":"Páscoa"}, -"PT-2022-04-25":{"type":"public","name":"Dia da Liberdade"}, -"PT-2022-05-01":{"type":"public","name":"Dia do trabalhador"}, -"PT-2022-06-10":{"type":"public","name":"Dia de Portugal"}, -"PT-2022-06-16":{"type":"public","name":"Corpo de Deus"}, -"PT-2022-08-15":{"type":"public","name":"Assunção de Maria"}, -"PT-2022-10-05":{"type":"public","name":"Implantação da República"}, -"PT-2022-11-01":{"type":"public","name":"Todos os santos"}, -"PT-2022-12-01":{"type":"public","name":"Restauração da Independência"}, -"PT-2022-12-08":{"type":"public","name":"Imaculada Conceição"}, -"PT-2022-12-24":{"type":"observance","name":"Noite de Natal"}, -"PT-2022-12-25":{"type":"public","name":"Natal"}, -"PT-2022-12-31":{"type":"observance","name":"Véspera de Ano Novo"}, -"PT-2023-01-01":{"type":"public","name":"Ano Novo"}, -"PT-2023-02-21":{"type":"observance","name":"Carnaval"}, -"PT-2023-04-07":{"type":"public","name":"Sexta-Feira Santa"}, -"PT-2023-04-09":{"type":"public","name":"Páscoa"}, -"PT-2023-04-25":{"type":"public","name":"Dia da Liberdade"}, -"PT-2023-05-01":{"type":"public","name":"Dia do trabalhador"}, -"PT-2023-05-07":{"type":"observance","name":"Dia das Mães"}, -"PT-2023-06-08":{"type":"public","name":"Corpo de Deus"}, -"PT-2023-06-10":{"type":"public","name":"Dia de Portugal"}, -"PT-2023-08-15":{"type":"public","name":"Assunção de Maria"}, -"PT-2023-10-05":{"type":"public","name":"Implantação da República"}, -"PT-2023-11-01":{"type":"public","name":"Todos os santos"}, -"PT-2023-12-01":{"type":"public","name":"Restauração da Independência"}, -"PT-2023-12-08":{"type":"public","name":"Imaculada Conceição"}, -"PT-2023-12-24":{"type":"observance","name":"Noite de Natal"}, -"PT-2023-12-25":{"type":"public","name":"Natal"}, -"PT-2023-12-31":{"type":"observance","name":"Véspera de Ano Novo"}, -"RO-2021-01-01":{"type":"public","name":"Anul nou"}, -"RO-2021-01-24":{"type":"public","name":"Ziua Unirii"}, -"RO-2021-03-08":{"type":"observance","name":"Ziua Mamei"}, -"RO-2021-04-30":{"type":"public","name":"Vinerea Mare"}, -"RO-2021-05-01":{"type":"public","name":"Ziua muncii"}, -"RO-2021-05-02":{"type":"public","name":"Paștele"}, -"RO-2021-05-03":{"type":"public","name":"Două zi de Pasti"}, -"RO-2021-06-01":{"type":"public","name":"Ziua Copilului"}, -"RO-2021-06-10":{"type":"observance","name":"Ziua Eroilor"}, -"RO-2021-06-20":{"type":"public","name":"Rusaliile"}, -"RO-2021-06-21":{"type":"public","name":"Două zi de Rusalii"}, -"RO-2021-06-26":{"type":"observance","name":"Ziua drapelului national"}, -"RO-2021-07-29":{"type":"observance","name":"Ziua Imnului național"}, -"RO-2021-08-15":{"type":"public","name":"Adormirea Maicii Domnului"}, -"RO-2021-11-30":{"type":"public","name":"Sfântul Andrei"}, -"RO-2021-12-01":{"type":"public","name":"Ziua națională, Ziua Marii Uniri"}, -"RO-2021-12-08":{"type":"observance","name":"Ziua Constituției"}, -"RO-2021-12-25":{"type":"public","name":"Crăciunul"}, -"RO-2021-12-26":{"type":"public","name":"Două zi de Crăciun"}, -"RO-2022-01-01":{"type":"public","name":"Anul nou"}, -"RO-2022-01-24":{"type":"public","name":"Ziua Unirii"}, -"RO-2022-03-08":{"type":"observance","name":"Ziua Mamei"}, -"RO-2022-04-22":{"type":"public","name":"Vinerea Mare"}, -"RO-2022-04-24":{"type":"public","name":"Paștele"}, -"RO-2022-04-25":{"type":"public","name":"Două zi de Pasti"}, -"RO-2022-05-01":{"type":"public","name":"Ziua muncii"}, -"RO-2022-06-01":{"type":"public","name":"Ziua Copilului"}, -"RO-2022-06-02":{"type":"observance","name":"Ziua Eroilor"}, -"RO-2022-06-12":{"type":"public","name":"Rusaliile"}, -"RO-2022-06-13":{"type":"public","name":"Două zi de Rusalii"}, -"RO-2022-06-26":{"type":"observance","name":"Ziua drapelului national"}, -"RO-2022-07-29":{"type":"observance","name":"Ziua Imnului național"}, -"RO-2022-08-15":{"type":"public","name":"Adormirea Maicii Domnului"}, -"RO-2022-11-30":{"type":"public","name":"Sfântul Andrei"}, -"RO-2022-12-01":{"type":"public","name":"Ziua națională, Ziua Marii Uniri"}, -"RO-2022-12-08":{"type":"observance","name":"Ziua Constituției"}, -"RO-2022-12-25":{"type":"public","name":"Crăciunul"}, -"RO-2022-12-26":{"type":"public","name":"Două zi de Crăciun"}, -"RO-2023-01-01":{"type":"public","name":"Anul nou"}, -"RO-2023-01-24":{"type":"public","name":"Ziua Unirii"}, -"RO-2023-03-08":{"type":"observance","name":"Ziua Mamei"}, -"RO-2023-04-14":{"type":"public","name":"Vinerea Mare"}, -"RO-2023-04-16":{"type":"public","name":"Paștele"}, -"RO-2023-04-17":{"type":"public","name":"Două zi de Pasti"}, -"RO-2023-05-01":{"type":"public","name":"Ziua muncii"}, -"RO-2023-05-07":{"type":"observance","name":"Ziua Mamei"}, -"RO-2023-05-25":{"type":"observance","name":"Ziua Eroilor"}, -"RO-2023-06-01":{"type":"public","name":"Ziua Copilului"}, -"RO-2023-06-04":{"type":"public","name":"Rusaliile"}, -"RO-2023-06-05":{"type":"public","name":"Două zi de Rusalii"}, -"RO-2023-06-26":{"type":"observance","name":"Ziua drapelului national"}, -"RO-2023-07-29":{"type":"observance","name":"Ziua Imnului național"}, -"RO-2023-08-15":{"type":"public","name":"Adormirea Maicii Domnului"}, -"RO-2023-11-30":{"type":"public","name":"Sfântul Andrei"}, -"RO-2023-12-01":{"type":"public","name":"Ziua națională, Ziua Marii Uniri"}, -"RO-2023-12-08":{"type":"observance","name":"Ziua Constituției"}, -"RO-2023-12-25":{"type":"public","name":"Crăciunul"}, -"RO-2023-12-26":{"type":"public","name":"Două zi de Crăciun"}, -"RU-2021-01-01":{"type":"public","name":"Новый год"}, -"RU-2021-01-02":{"type":"public","name":"Новогодние каникулы"}, -"RU-2021-01-07":{"type":"public","name":"Рождество Христово"}, -"RU-2021-01-08":{"type":"public","name":"Новогодние каникулы"}, -"RU-2021-02-23":{"type":"public","name":"День защитника Отечества"}, -"RU-2021-03-08":{"type":"public","name":"Международный женский день"}, -"RU-2021-05-01":{"type":"public","name":"День весны и труда"}, -"RU-2021-05-09":{"type":"public","name":"День Победы"}, -"RU-2021-06-12":{"type":"public","name":"День России"}, -"RU-2021-08-22":{"type":"public","name":"День Государственного флага"}, -"RU-2021-11-04":{"type":"public","name":"День народного единства"}, -"RU-2022-01-01":{"type":"public","name":"Новый год"}, -"RU-2022-01-02":{"type":"public","name":"Новогодние каникулы"}, -"RU-2022-01-07":{"type":"public","name":"Рождество Христово"}, -"RU-2022-01-08":{"type":"public","name":"Новогодние каникулы"}, -"RU-2022-02-23":{"type":"public","name":"День защитника Отечества"}, -"RU-2022-03-08":{"type":"public","name":"Международный женский день"}, -"RU-2022-05-01":{"type":"public","name":"День весны и труда"}, -"RU-2022-05-09":{"type":"public","name":"День Победы"}, -"RU-2022-06-12":{"type":"public","name":"День России"}, -"RU-2022-08-22":{"type":"public","name":"День Государственного флага"}, -"RU-2022-11-04":{"type":"public","name":"День народного единства"}, -"RU-2023-01-01":{"type":"public","name":"Новый год"}, -"RU-2023-01-02":{"type":"public","name":"Новогодние каникулы"}, -"RU-2023-01-07":{"type":"public","name":"Рождество Христово"}, -"RU-2023-01-08":{"type":"public","name":"Новогодние каникулы"}, -"RU-2023-02-23":{"type":"public","name":"День защитника Отечества"}, -"RU-2023-03-08":{"type":"public","name":"Международный женский день"}, -"RU-2023-05-01":{"type":"public","name":"День весны и труда"}, -"RU-2023-05-09":{"type":"public","name":"День Победы"}, -"RU-2023-06-12":{"type":"public","name":"День России"}, -"RU-2023-08-22":{"type":"public","name":"День Государственного флага"}, -"RU-2023-11-04":{"type":"public","name":"День народного единства"}, -"SG-2021-01-01":{"type":"public","name":"New Year's Day"}, -"SG-2021-02-12":{"type":"public","name":"Chinese New Year"}, -"SG-2021-02-13":{"type":"public","name":"Chinese New Year"}, -"SG-2021-04-02":{"type":"public","name":"Good Friday"}, -"SG-2021-05-01":{"type":"public","name":"Labour Day"}, -"SG-2021-05-13":{"type":"public","name":"Hari Raya Puasa"}, -"SG-2021-05-26":{"type":"public","name":"Vesak Day"}, -"SG-2021-07-20":{"type":"public","name":"Hari Raya Haji"}, -"SG-2021-08-09":{"type":"public","name":"National Day"}, -"SG-2021-11-04":{"type":"public","name":"Deepavali"}, -"SG-2021-12-25":{"type":"public","name":"Christmas Day"}, -"SG-2022-01-01":{"type":"public","name":"New Year's Day"}, -"SG-2022-02-01":{"type":"public","name":"Chinese New Year"}, -"SG-2022-02-02":{"type":"public","name":"Chinese New Year"}, -"SG-2022-04-15":{"type":"public","name":"Good Friday"}, -"SG-2022-05-01":{"type":"public","name":"Labour Day"}, -"SG-2022-05-02":{"type":"public","name":"Labour Day (substitute day)"}, -"SG-2022-05-15":{"type":"public","name":"Vesak Day"}, -"SG-2022-05-16":{"type":"public","name":"Vesak Day"}, -"SG-2022-07-09":{"type":"public","name":"Hari Raya Haji"}, -"SG-2022-08-09":{"type":"public","name":"National Day"}, -"SG-2022-10-24":{"type":"public","name":"Deepavali"}, -"SG-2022-12-25":{"type":"public","name":"Christmas Day"}, -"SG-2022-12-26":{"type":"public","name":"Christmas Day (substitute day)"}, -"SG-2023-01-01":{"type":"public","name":"New Year's Day"}, -"SG-2023-01-02":{"type":"public","name":"New Year's Day (substitute day)"}, -"SG-2023-01-22":{"type":"public","name":"Chinese New Year"}, -"SG-2023-01-23":{"type":"public","name":"Chinese New Year"}, -"SG-2023-01-24":{"type":"public","name":"Chinese New Year (substitute day)"}, -"SG-2023-04-07":{"type":"public","name":"Good Friday"}, -"SG-2023-04-21":{"type":"public","name":"Hari Raya Puasa"}, -"SG-2023-05-01":{"type":"public","name":"Labour Day"}, -"SG-2023-05-05":{"type":"public","name":"Vesak Day"}, -"SG-2023-06-28":{"type":"public","name":"Hari Raya Haji"}, -"SG-2023-08-09":{"type":"public","name":"National Day"}, -"SG-2023-11-13":{"type":"public","name":"Deepavali"}, -"SG-2023-12-25":{"type":"public","name":"Christmas Day"}, -"SK-2021-01-01":{"type":"public","name":"Deň vzniku Slovenskej republiky"}, -"SK-2021-01-06":{"type":"public","name":"Zjavenie Pána"}, -"SK-2021-04-02":{"type":"public","name":"Veľkonočný piatok"}, -"SK-2021-04-04":{"type":"observance","name":"Veľká noc"}, -"SK-2021-04-05":{"type":"public","name":"Veľkonočný pondelok"}, -"SK-2021-05-01":{"type":"public","name":"Sviatok práce"}, -"SK-2021-05-08":{"type":"public","name":"Deň víťazstva nad fašizmom"}, -"SK-2021-05-09":{"type":"observance","name":"Mother's Day"}, -"SK-2021-07-05":{"type":"public","name":"Sviatok svätého Cyrila a Metoda"}, -"SK-2021-08-29":{"type":"public","name":"Výročie Slovenského národného povstania"}, -"SK-2021-09-01":{"type":"public","name":"Deň Ústavy"}, -"SK-2021-09-15":{"type":"public","name":"Sviatok Panny Márie Sedembolestnej"}, -"SK-2021-11-01":{"type":"public","name":"Sviatok všetkých svätých"}, -"SK-2021-11-17":{"type":"public","name":"Deň boja za slobodu a demokraciu"}, -"SK-2021-12-24":{"type":"public","name":"Štedrý deň"}, -"SK-2021-12-25":{"type":"public","name":"Prvý sviatok vianočný"}, -"SK-2021-12-26":{"type":"public","name":"Druhý sviatok vianočný"}, -"SK-2022-01-01":{"type":"public","name":"Deň vzniku Slovenskej republiky"}, -"SK-2022-01-06":{"type":"public","name":"Zjavenie Pána"}, -"SK-2022-04-15":{"type":"public","name":"Veľkonočný piatok"}, -"SK-2022-04-17":{"type":"observance","name":"Veľká noc"}, -"SK-2022-04-18":{"type":"public","name":"Veľkonočný pondelok"}, -"SK-2022-05-01":{"type":"public","name":"Sviatok práce"}, -"SK-2022-05-08":{"type":"public","name":"Deň víťazstva nad fašizmom"}, -"SK-2022-07-05":{"type":"public","name":"Sviatok svätého Cyrila a Metoda"}, -"SK-2022-08-29":{"type":"public","name":"Výročie Slovenského národného povstania"}, -"SK-2022-09-01":{"type":"public","name":"Deň Ústavy"}, -"SK-2022-09-15":{"type":"public","name":"Sviatok Panny Márie Sedembolestnej"}, -"SK-2022-11-01":{"type":"public","name":"Sviatok všetkých svätých"}, -"SK-2022-11-17":{"type":"public","name":"Deň boja za slobodu a demokraciu"}, -"SK-2022-12-24":{"type":"public","name":"Štedrý deň"}, -"SK-2022-12-25":{"type":"public","name":"Prvý sviatok vianočný"}, -"SK-2022-12-26":{"type":"public","name":"Druhý sviatok vianočný"}, -"SK-2023-01-01":{"type":"public","name":"Deň vzniku Slovenskej republiky"}, -"SK-2023-01-06":{"type":"public","name":"Zjavenie Pána"}, -"SK-2023-04-07":{"type":"public","name":"Veľkonočný piatok"}, -"SK-2023-04-09":{"type":"observance","name":"Veľká noc"}, -"SK-2023-04-10":{"type":"public","name":"Veľkonočný pondelok"}, -"SK-2023-05-01":{"type":"public","name":"Sviatok práce"}, -"SK-2023-05-08":{"type":"public","name":"Deň víťazstva nad fašizmom"}, -"SK-2023-05-14":{"type":"observance","name":"Mother's Day"}, -"SK-2023-07-05":{"type":"public","name":"Sviatok svätého Cyrila a Metoda"}, -"SK-2023-08-29":{"type":"public","name":"Výročie Slovenského národného povstania"}, -"SK-2023-09-01":{"type":"public","name":"Deň Ústavy"}, -"SK-2023-09-15":{"type":"public","name":"Sviatok Panny Márie Sedembolestnej"}, -"SK-2023-11-01":{"type":"public","name":"Sviatok všetkých svätých"}, -"SK-2023-11-17":{"type":"public","name":"Deň boja za slobodu a demokraciu"}, -"SK-2023-12-24":{"type":"public","name":"Štedrý deň"}, -"SK-2023-12-25":{"type":"public","name":"Prvý sviatok vianočný"}, -"SK-2023-12-26":{"type":"public","name":"Druhý sviatok vianočný"}, -"SI-2021-01-01":{"type":"public","name":"novo leto"}, -"SI-2021-01-02":{"type":"public","name":"novo leto"}, -"SI-2021-02-08":{"type":"public","name":"Prešernov dan"}, -"SI-2021-02-14":{"type":"observance","name":"pust"}, -"SI-2021-03-08":{"type":"observance","name":"Mednarodni dan žena"}, -"SI-2021-04-04":{"type":"public","name":"velika noč"}, -"SI-2021-04-05":{"type":"public","name":"Velikonočni ponedeljek"}, -"SI-2021-04-23":{"type":"observance","name":"jurjevanje"}, -"SI-2021-04-27":{"type":"public","name":"dan upora proti okupatorju"}, -"SI-2021-05-01":{"type":"public","name":"praznik dela"}, -"SI-2021-05-02":{"type":"public","name":"praznik dela"}, -"SI-2021-05-23":{"type":"public","name":"binkošti"}, -"SI-2021-06-08":{"type":"public","name":"dan Primoža Trubarja"}, -"SI-2021-06-25":{"type":"public","name":"dan državnosti"}, -"SI-2021-07-22":{"type":"observance","name":"dan vstaje"}, -"SI-2021-08-15":{"type":"public","name":"Marijino vnebovzetje"}, -"SI-2021-08-17":{"type":"observance","name":"združitev prekmurskih Slovencev z matičnim narodom"}, -"SI-2021-09-15":{"type":"observance","name":"vrnitev Primorske k matični domovini"}, -"SI-2021-10-25":{"type":"observance","name":"dan suverenosti"}, -"SI-2021-10-31":{"type":"public","name":"dan reformacije"}, -"SI-2021-11-01":{"type":"public","name":"dan spomina na mrtve or dan mrtvih"}, -"SI-2021-11-11":{"type":"observance","name":"martinovanje"}, -"SI-2021-11-23":{"type":"observance","name":"dan Rudolfa Maistra"}, -"SI-2021-12-06":{"type":"observance","name":"miklavž"}, -"SI-2021-12-25":{"type":"public","name":"božič"}, -"SI-2021-12-26":{"type":"public","name":"dan samostojnosti in enotnosti"}, -"SI-2022-01-01":{"type":"public","name":"novo leto"}, -"SI-2022-01-02":{"type":"public","name":"novo leto"}, -"SI-2022-02-08":{"type":"public","name":"Prešernov dan"}, -"SI-2022-02-27":{"type":"observance","name":"pust"}, -"SI-2022-03-08":{"type":"observance","name":"Mednarodni dan žena"}, -"SI-2022-04-17":{"type":"public","name":"velika noč"}, -"SI-2022-04-18":{"type":"public","name":"Velikonočni ponedeljek"}, -"SI-2022-04-23":{"type":"observance","name":"jurjevanje"}, -"SI-2022-04-27":{"type":"public","name":"dan upora proti okupatorju"}, -"SI-2022-05-01":{"type":"public","name":"praznik dela"}, -"SI-2022-05-02":{"type":"public","name":"praznik dela"}, -"SI-2022-06-05":{"type":"public","name":"binkošti"}, -"SI-2022-06-08":{"type":"public","name":"dan Primoža Trubarja"}, -"SI-2022-06-25":{"type":"public","name":"dan državnosti"}, -"SI-2022-07-22":{"type":"observance","name":"dan vstaje"}, -"SI-2022-08-15":{"type":"public","name":"Marijino vnebovzetje"}, -"SI-2022-08-17":{"type":"observance","name":"združitev prekmurskih Slovencev z matičnim narodom"}, -"SI-2022-09-15":{"type":"observance","name":"vrnitev Primorske k matični domovini"}, -"SI-2022-10-25":{"type":"observance","name":"dan suverenosti"}, -"SI-2022-10-31":{"type":"public","name":"dan reformacije"}, -"SI-2022-11-01":{"type":"public","name":"dan spomina na mrtve or dan mrtvih"}, -"SI-2022-11-11":{"type":"observance","name":"martinovanje"}, -"SI-2022-11-23":{"type":"observance","name":"dan Rudolfa Maistra"}, -"SI-2022-12-06":{"type":"observance","name":"miklavž"}, -"SI-2022-12-25":{"type":"public","name":"božič"}, -"SI-2022-12-26":{"type":"public","name":"dan samostojnosti in enotnosti"}, -"SI-2023-01-01":{"type":"public","name":"novo leto"}, -"SI-2023-01-02":{"type":"public","name":"novo leto"}, -"SI-2023-02-08":{"type":"public","name":"Prešernov dan"}, -"SI-2023-02-19":{"type":"observance","name":"pust"}, -"SI-2023-03-08":{"type":"observance","name":"Mednarodni dan žena"}, -"SI-2023-04-09":{"type":"public","name":"velika noč"}, -"SI-2023-04-10":{"type":"public","name":"Velikonočni ponedeljek"}, -"SI-2023-04-23":{"type":"observance","name":"jurjevanje"}, -"SI-2023-04-27":{"type":"public","name":"dan upora proti okupatorju"}, -"SI-2023-05-01":{"type":"public","name":"praznik dela"}, -"SI-2023-05-02":{"type":"public","name":"praznik dela"}, -"SI-2023-05-28":{"type":"public","name":"binkošti"}, -"SI-2023-06-08":{"type":"public","name":"dan Primoža Trubarja"}, -"SI-2023-06-25":{"type":"public","name":"dan državnosti"}, -"SI-2023-07-22":{"type":"observance","name":"dan vstaje"}, -"SI-2023-08-15":{"type":"public","name":"Marijino vnebovzetje"}, -"SI-2023-08-17":{"type":"observance","name":"združitev prekmurskih Slovencev z matičnim narodom"}, -"SI-2023-09-15":{"type":"observance","name":"vrnitev Primorske k matični domovini"}, -"SI-2023-10-25":{"type":"observance","name":"dan suverenosti"}, -"SI-2023-10-31":{"type":"public","name":"dan reformacije"}, -"SI-2023-11-01":{"type":"public","name":"dan spomina na mrtve or dan mrtvih"}, -"SI-2023-11-11":{"type":"observance","name":"martinovanje"}, -"SI-2023-11-23":{"type":"observance","name":"dan Rudolfa Maistra"}, -"SI-2023-12-06":{"type":"observance","name":"miklavž"}, -"SI-2023-12-25":{"type":"public","name":"božič"}, -"SI-2023-12-26":{"type":"public","name":"dan samostojnosti in enotnosti"}, -"ES-2021-01-01":{"type":"public","name":"Año Nuevo"}, -"ES-2021-01-06":{"type":"public","name":"Día de los Reyes Magos"}, -"ES-2021-03-19":{"type":"observance","name":"San José"}, -"ES-2021-04-01":{"type":"observance","name":"Jueves Santo"}, -"ES-2021-04-02":{"type":"public","name":"Viernes Santo"}, -"ES-2021-04-04":{"type":"observance","name":"Pascua"}, -"ES-2021-05-01":{"type":"public","name":"Fiesta del trabajo"}, -"ES-2021-05-02":{"type":"observance","name":"Día de la Madre"}, -"ES-2021-05-23":{"type":"observance","name":"Pentecostés"}, -"ES-2021-07-25":{"type":"observance","name":"Santiago Apostol"}, -"ES-2021-08-15":{"type":"public","name":"Asunción"}, -"ES-2021-08-16":{"type":"observance","name":"Asunción (día sustituto)"}, -"ES-2021-10-12":{"type":"public","name":"Fiesta Nacional de España"}, -"ES-2021-11-01":{"type":"public","name":"Todos los Santos"}, -"ES-2021-12-06":{"type":"public","name":"Día de la Constitución Española"}, -"ES-2021-12-08":{"type":"public","name":"La inmaculada concepción"}, -"ES-2021-12-25":{"type":"public","name":"Navidad"}, -"ES-2022-01-01":{"type":"public","name":"Año Nuevo"}, -"ES-2022-01-06":{"type":"public","name":"Día de los Reyes Magos"}, -"ES-2022-03-19":{"type":"observance","name":"San José"}, -"ES-2022-04-14":{"type":"observance","name":"Jueves Santo"}, -"ES-2022-04-15":{"type":"public","name":"Viernes Santo"}, -"ES-2022-04-17":{"type":"observance","name":"Pascua"}, -"ES-2022-05-01":{"type":"public","name":"Fiesta del trabajo"}, -"ES-2022-05-02":{"type":"observance","name":"Fiesta del trabajo (día sustituto)"}, -"ES-2022-06-05":{"type":"observance","name":"Pentecostés"}, -"ES-2022-07-25":{"type":"observance","name":"Santiago Apostol"}, -"ES-2022-08-15":{"type":"public","name":"Asunción"}, -"ES-2022-10-12":{"type":"public","name":"Fiesta Nacional de España"}, -"ES-2022-11-01":{"type":"public","name":"Todos los Santos"}, -"ES-2022-12-06":{"type":"public","name":"Día de la Constitución Española"}, -"ES-2022-12-08":{"type":"public","name":"La inmaculada concepción"}, -"ES-2022-12-25":{"type":"public","name":"Navidad"}, -"ES-2022-12-26":{"type":"observance","name":"Navidad (día sustituto)"}, -"ES-2023-01-01":{"type":"public","name":"Año Nuevo"}, -"ES-2023-01-02":{"type":"observance","name":"Año Nuevo (día sustituto)"}, -"ES-2023-01-06":{"type":"public","name":"Día de los Reyes Magos"}, -"ES-2023-03-19":{"type":"observance","name":"San José"}, -"ES-2023-04-06":{"type":"observance","name":"Jueves Santo"}, -"ES-2023-04-07":{"type":"public","name":"Viernes Santo"}, -"ES-2023-04-09":{"type":"observance","name":"Pascua"}, -"ES-2023-05-01":{"type":"public","name":"Fiesta del trabajo"}, -"ES-2023-05-07":{"type":"observance","name":"Día de la Madre"}, -"ES-2023-05-28":{"type":"observance","name":"Pentecostés"}, -"ES-2023-07-25":{"type":"observance","name":"Santiago Apostol"}, -"ES-2023-08-15":{"type":"public","name":"Asunción"}, -"ES-2023-10-12":{"type":"public","name":"Fiesta Nacional de España"}, -"ES-2023-11-01":{"type":"public","name":"Todos los Santos"}, -"ES-2023-12-06":{"type":"public","name":"Día de la Constitución Española"}, -"ES-2023-12-08":{"type":"public","name":"La inmaculada concepción"}, -"ES-2023-12-25":{"type":"public","name":"Navidad"}, -"SE-2021-01-01":{"type":"public","name":"Nyårsdagen"}, -"SE-2021-01-05":{"type":"public","name":"Trettondagsafton"}, -"SE-2021-01-06":{"type":"public","name":"Trettondedag jul"}, -"SE-2021-01-13":{"type":"observance","name":"Tjugondag Knut"}, -"SE-2021-03-07":{"type":"observance","name":"Vasaloppet"}, -"SE-2021-03-25":{"type":"observance","name":"Marie Bebådelsedag"}, -"SE-2021-04-01":{"type":"observance","name":"Skärtorsdagen"}, -"SE-2021-04-02":{"type":"public","name":"Långfredagen"}, -"SE-2021-04-03":{"type":"public","name":"Påskafton"}, -"SE-2021-04-04":{"type":"observance","name":"Påskdagen"}, -"SE-2021-04-05":{"type":"public","name":"Annandag påsk"}, -"SE-2021-04-30":{"type":"observance","name":"Valborgsmässoafton"}, -"SE-2021-05-01":{"type":"public","name":"Första Maj"}, -"SE-2021-05-13":{"type":"public","name":"Kristi himmelfärds dag"}, -"SE-2021-05-22":{"type":"public","name":"Pingstafton"}, -"SE-2021-05-23":{"type":"public","name":"Pingstdagen"}, -"SE-2021-05-24":{"type":"observance","name":"Annandag pingst"}, -"SE-2021-05-30":{"type":"observance","name":"Mors dag"}, -"SE-2021-06-06":{"type":"public","name":"Sveriges nationaldag"}, -"SE-2021-06-25":{"type":"bank","name":"Midsommarafton"}, -"SE-2021-06-26":{"type":"public","name":"Midsommardagen"}, -"SE-2021-11-05":{"type":"observance","name":"Allhelgonaafton"}, -"SE-2021-11-06":{"type":"public","name":"Alla Helgons dag"}, -"SE-2021-11-11":{"type":"observance","name":"Mårtensgås"}, -"SE-2021-12-10":{"type":"observance","name":"Nobeldagen"}, -"SE-2021-12-13":{"type":"observance","name":"Luciadagen"}, -"SE-2021-12-24":{"type":"bank","name":"Julafton"}, -"SE-2021-12-25":{"type":"public","name":"Juldagen"}, -"SE-2021-12-26":{"type":"public","name":"Annandag jul"}, -"SE-2021-12-31":{"type":"bank","name":"Nyårsafton"}, -"SE-2022-01-01":{"type":"public","name":"Nyårsdagen"}, -"SE-2022-01-05":{"type":"public","name":"Trettondagsafton"}, -"SE-2022-01-06":{"type":"public","name":"Trettondedag jul"}, -"SE-2022-01-13":{"type":"observance","name":"Tjugondag Knut"}, -"SE-2022-03-06":{"type":"observance","name":"Vasaloppet"}, -"SE-2022-03-25":{"type":"observance","name":"Marie Bebådelsedag"}, -"SE-2022-04-14":{"type":"observance","name":"Skärtorsdagen"}, -"SE-2022-04-15":{"type":"public","name":"Långfredagen"}, -"SE-2022-04-16":{"type":"public","name":"Påskafton"}, -"SE-2022-04-17":{"type":"observance","name":"Påskdagen"}, -"SE-2022-04-18":{"type":"public","name":"Annandag påsk"}, -"SE-2022-04-30":{"type":"observance","name":"Valborgsmässoafton"}, -"SE-2022-05-01":{"type":"public","name":"Första Maj"}, -"SE-2022-05-26":{"type":"public","name":"Kristi himmelfärds dag"}, -"SE-2022-05-29":{"type":"observance","name":"Mors dag"}, -"SE-2022-06-04":{"type":"public","name":"Pingstafton"}, -"SE-2022-06-05":{"type":"public","name":"Pingstdagen"}, -"SE-2022-06-06":{"type":"public","name":"Sveriges nationaldag"}, -"SE-2022-06-24":{"type":"bank","name":"Midsommarafton"}, -"SE-2022-06-25":{"type":"public","name":"Midsommardagen"}, -"SE-2022-11-04":{"type":"observance","name":"Allhelgonaafton"}, -"SE-2022-11-05":{"type":"public","name":"Alla Helgons dag"}, -"SE-2022-11-06":{"type":"observance","name":"Gustav-Adolf-dagen"}, -"SE-2022-11-11":{"type":"observance","name":"Mårtensgås"}, -"SE-2022-12-10":{"type":"observance","name":"Nobeldagen"}, -"SE-2022-12-13":{"type":"observance","name":"Luciadagen"}, -"SE-2022-12-24":{"type":"bank","name":"Julafton"}, -"SE-2022-12-25":{"type":"public","name":"Juldagen"}, -"SE-2022-12-26":{"type":"public","name":"Annandag jul"}, -"SE-2022-12-31":{"type":"bank","name":"Nyårsafton"}, -"SE-2023-01-01":{"type":"public","name":"Nyårsdagen"}, -"SE-2023-01-05":{"type":"public","name":"Trettondagsafton"}, -"SE-2023-01-06":{"type":"public","name":"Trettondedag jul"}, -"SE-2023-01-13":{"type":"observance","name":"Tjugondag Knut"}, -"SE-2023-03-05":{"type":"observance","name":"Vasaloppet"}, -"SE-2023-03-25":{"type":"observance","name":"Marie Bebådelsedag"}, -"SE-2023-04-06":{"type":"observance","name":"Skärtorsdagen"}, -"SE-2023-04-07":{"type":"public","name":"Långfredagen"}, -"SE-2023-04-08":{"type":"public","name":"Påskafton"}, -"SE-2023-04-09":{"type":"observance","name":"Påskdagen"}, -"SE-2023-04-10":{"type":"public","name":"Annandag påsk"}, -"SE-2023-04-30":{"type":"observance","name":"Valborgsmässoafton"}, -"SE-2023-05-01":{"type":"public","name":"Första Maj"}, -"SE-2023-05-18":{"type":"public","name":"Kristi himmelfärds dag"}, -"SE-2023-05-27":{"type":"public","name":"Pingstafton"}, -"SE-2023-05-28":{"type":"public","name":"Pingstdagen"}, -"SE-2023-05-29":{"type":"observance","name":"Annandag pingst"}, -"SE-2023-06-06":{"type":"public","name":"Sveriges nationaldag"}, -"SE-2023-06-23":{"type":"bank","name":"Midsommarafton"}, -"SE-2023-06-24":{"type":"public","name":"Midsommardagen"}, -"SE-2023-11-03":{"type":"observance","name":"Allhelgonaafton"}, -"SE-2023-11-04":{"type":"public","name":"Alla Helgons dag"}, -"SE-2023-11-06":{"type":"observance","name":"Gustav-Adolf-dagen"}, -"SE-2023-11-11":{"type":"observance","name":"Mårtensgås"}, -"SE-2023-12-10":{"type":"observance","name":"Nobeldagen"}, -"SE-2023-12-13":{"type":"observance","name":"Luciadagen"}, -"SE-2023-12-24":{"type":"bank","name":"Julafton"}, -"SE-2023-12-25":{"type":"public","name":"Juldagen"}, -"SE-2023-12-26":{"type":"public","name":"Annandag jul"}, -"SE-2023-12-31":{"type":"bank","name":"Nyårsafton"}, -"CH-2021-01-01":{"type":"public","name":"Neujahr"}, -"CH-2021-04-02":{"type":"public","name":"Karfreitag"}, -"CH-2021-04-04":{"type":"public","name":"Ostersonntag"}, -"CH-2021-04-05":{"type":"public","name":"Ostermontag"}, -"CH-2021-05-09":{"type":"observance","name":"Muttertag"}, -"CH-2021-05-13":{"type":"public","name":"Auffahrt"}, -"CH-2021-05-23":{"type":"public","name":"Pfingstsonntag"}, -"CH-2021-05-24":{"type":"public","name":"Pfingstmontag"}, -"CH-2021-06-06":{"type":"observance","name":"Vätertag"}, -"CH-2021-08-01":{"type":"public","name":"Bundesfeiertag"}, -"CH-2021-09-19":{"type":"public","name":"Eidg. Dank-, Buss- und Bettag"}, -"CH-2021-12-25":{"type":"public","name":"Weihnachtstag"}, -"CH-2021-12-26":{"type":"public","name":"Stephanstag"}, -"CH-2022-01-01":{"type":"public","name":"Neujahr"}, -"CH-2022-04-15":{"type":"public","name":"Karfreitag"}, -"CH-2022-04-17":{"type":"public","name":"Ostersonntag"}, -"CH-2022-04-18":{"type":"public","name":"Ostermontag"}, -"CH-2022-05-08":{"type":"observance","name":"Muttertag"}, -"CH-2022-05-26":{"type":"public","name":"Auffahrt"}, -"CH-2022-06-05":{"type":"public","name":"Pfingstsonntag"}, -"CH-2022-06-06":{"type":"public","name":"Pfingstmontag"}, -"CH-2022-08-01":{"type":"public","name":"Bundesfeiertag"}, -"CH-2022-09-18":{"type":"public","name":"Eidg. Dank-, Buss- und Bettag"}, -"CH-2022-12-25":{"type":"public","name":"Weihnachtstag"}, -"CH-2022-12-26":{"type":"public","name":"Stephanstag"}, -"CH-2023-01-01":{"type":"public","name":"Neujahr"}, -"CH-2023-04-07":{"type":"public","name":"Karfreitag"}, -"CH-2023-04-09":{"type":"public","name":"Ostersonntag"}, -"CH-2023-04-10":{"type":"public","name":"Ostermontag"}, -"CH-2023-05-14":{"type":"observance","name":"Muttertag"}, -"CH-2023-05-18":{"type":"public","name":"Auffahrt"}, -"CH-2023-05-28":{"type":"public","name":"Pfingstsonntag"}, -"CH-2023-05-29":{"type":"public","name":"Pfingstmontag"}, -"CH-2023-06-04":{"type":"observance","name":"Vätertag"}, -"CH-2023-08-01":{"type":"public","name":"Bundesfeiertag"}, -"CH-2023-09-17":{"type":"public","name":"Eidg. Dank-, Buss- und Bettag"}, -"CH-2023-12-25":{"type":"public","name":"Weihnachtstag"}, -"CH-2023-12-26":{"type":"public","name":"Stephanstag"}, -"GB-2021-01-01":{"type":"public","name":"New Year's Day"}, -"GB-2021-03-14":{"type":"observance","name":"Mother's Day"}, -"GB-2021-04-02":{"type":"public","name":"Good Friday"}, -"GB-2021-04-04":{"type":"public","name":"Easter Sunday"}, -"GB-2021-04-05":{"type":"public","name":"Easter Monday"}, -"GB-2021-05-03":{"type":"public","name":"Early May bank holiday"}, -"GB-2021-05-31":{"type":"public","name":"Spring bank holiday"}, -"GB-2021-12-25":{"type":"public","name":"Christmas Day"}, -"GB-2021-12-26":{"type":"public","name":"Boxing Day"}, -"GB-2021-12-27":{"type":"public","name":"Christmas Day (substitute day)"}, -"GB-2021-12-28":{"type":"public","name":"Boxing Day (substitute day)"}, -"GB-2022-01-01":{"type":"public","name":"New Year's Day"}, -"GB-2022-01-03":{"type":"public","name":"New Year's Day (substitute day)"}, -"GB-2022-03-27":{"type":"observance","name":"Mother's Day"}, -"GB-2022-04-15":{"type":"public","name":"Good Friday"}, -"GB-2022-04-17":{"type":"public","name":"Easter Sunday"}, -"GB-2022-04-18":{"type":"public","name":"Easter Monday"}, -"GB-2022-05-02":{"type":"public","name":"Early May bank holiday"}, -"GB-2022-06-02":{"type":"public","name":"Queen’s Platinum Jubilee"}, -"GB-2022-06-03":{"type":"public","name":"Queen’s Platinum Jubilee"}, -"GB-2022-12-25":{"type":"public","name":"Christmas Day"}, -"GB-2022-12-26":{"type":"public","name":"Boxing Day"}, -"GB-2022-12-27":{"type":"public","name":"Christmas Day (substitute day)"}, -"GB-2023-01-01":{"type":"public","name":"New Year's Day"}, -"GB-2023-01-02":{"type":"public","name":"New Year's Day (substitute day)"}, -"GB-2023-03-19":{"type":"observance","name":"Mother's Day"}, -"GB-2023-04-07":{"type":"public","name":"Good Friday"}, -"GB-2023-04-09":{"type":"public","name":"Easter Sunday"}, -"GB-2023-04-10":{"type":"public","name":"Easter Monday"}, -"GB-2023-05-01":{"type":"public","name":"Early May bank holiday"}, -"GB-2023-05-29":{"type":"public","name":"Spring bank holiday"}, -"GB-2023-12-25":{"type":"public","name":"Christmas Day"}, -"GB-2023-12-26":{"type":"public","name":"Boxing Day"}, -}; -module.exports = holidays_list; diff --git a/lib/moment-timezone-with-data.js b/lib/moment-timezone-with-data.js deleted file mode 100644 index 1592f07..0000000 --- a/lib/moment-timezone-with-data.js +++ /dev/null @@ -1,1545 +0,0 @@ -//! moment-timezone.js -//! version : 0.5.33 -//! Copyright (c) JS Foundation and other contributors -//! license : MIT -//! github.com/moment/moment-timezone - -(function (root, factory) { - "use strict"; - - /*global define*/ - if (typeof module === 'object' && module.exports) { - module.exports = factory(require('./moment.min')); // Node - } else if (typeof define === 'function' && define.amd) { - define(['moment'], factory); // AMD - } else { - factory(root.moment); // Browser - } -}(this, function (moment) { - "use strict"; - - // Resolves es6 module loading issue - if (moment.version === undefined && moment.default) { - moment = moment.default; - } - - // Do not load moment-timezone a second time. - // if (moment.tz !== undefined) { - // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); - // return moment; - // } - - var VERSION = "0.5.33", - zones = {}, - links = {}, - countries = {}, - names = {}, - guesses = {}, - cachedGuess; - - if (!moment || typeof moment.version !== 'string') { - logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/'); - } - - var momentVersion = moment.version.split('.'), - major = +momentVersion[0], - minor = +momentVersion[1]; - - // Moment.js version check - if (major < 2 || (major === 2 && minor < 6)) { - logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); - } - - /************************************ - Unpacking - ************************************/ - - function charCodeToInt(charCode) { - if (charCode > 96) { - return charCode - 87; - } else if (charCode > 64) { - return charCode - 29; - } - return charCode - 48; - } - - function unpackBase60(string) { - var i = 0, - parts = string.split('.'), - whole = parts[0], - fractional = parts[1] || '', - multiplier = 1, - num, - out = 0, - sign = 1; - - // handle negative numbers - if (string.charCodeAt(0) === 45) { - i = 1; - sign = -1; - } - - // handle digits before the decimal - for (i; i < whole.length; i++) { - num = charCodeToInt(whole.charCodeAt(i)); - out = 60 * out + num; - } - - // handle digits after the decimal - for (i = 0; i < fractional.length; i++) { - multiplier = multiplier / 60; - num = charCodeToInt(fractional.charCodeAt(i)); - out += num * multiplier; - } - - return out * sign; - } - - function arrayToInt (array) { - for (var i = 0; i < array.length; i++) { - array[i] = unpackBase60(array[i]); - } - } - - function intToUntil (array, length) { - for (var i = 0; i < length; i++) { - array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds - } - - array[length - 1] = Infinity; - } - - function mapIndices (source, indices) { - var out = [], i; - - for (i = 0; i < indices.length; i++) { - out[i] = source[indices[i]]; - } - - return out; - } - - function unpack (string) { - var data = string.split('|'), - offsets = data[2].split(' '), - indices = data[3].split(''), - untils = data[4].split(' '); - - arrayToInt(offsets); - arrayToInt(indices); - arrayToInt(untils); - - intToUntil(untils, indices.length); - - return { - name : data[0], - abbrs : mapIndices(data[1].split(' '), indices), - offsets : mapIndices(offsets, indices), - untils : untils, - population : data[5] | 0 - }; - } - - /************************************ - Zone object - ************************************/ - - function Zone (packedString) { - if (packedString) { - this._set(unpack(packedString)); - } - } - - Zone.prototype = { - _set : function (unpacked) { - this.name = unpacked.name; - this.abbrs = unpacked.abbrs; - this.untils = unpacked.untils; - this.offsets = unpacked.offsets; - this.population = unpacked.population; - }, - - _index : function (timestamp) { - var target = +timestamp, - untils = this.untils, - i; - - for (i = 0; i < untils.length; i++) { - if (target < untils[i]) { - return i; - } - } - }, - - countries : function () { - var zone_name = this.name; - return Object.keys(countries).filter(function (country_code) { - return countries[country_code].zones.indexOf(zone_name) !== -1; - }); - }, - - parse : function (timestamp) { - var target = +timestamp, - offsets = this.offsets, - untils = this.untils, - max = untils.length - 1, - offset, offsetNext, offsetPrev, i; - - for (i = 0; i < max; i++) { - offset = offsets[i]; - offsetNext = offsets[i + 1]; - offsetPrev = offsets[i ? i - 1 : i]; - - if (offset < offsetNext && tz.moveAmbiguousForward) { - offset = offsetNext; - } else if (offset > offsetPrev && tz.moveInvalidForward) { - offset = offsetPrev; - } - - if (target < untils[i] - (offset * 60000)) { - return offsets[i]; - } - } - - return offsets[max]; - }, - - abbr : function (mom) { - return this.abbrs[this._index(mom)]; - }, - - offset : function (mom) { - logError("zone.offset has been deprecated in favor of zone.utcOffset"); - return this.offsets[this._index(mom)]; - }, - - utcOffset : function (mom) { - return this.offsets[this._index(mom)]; - } - }; - - /************************************ - Country object - ************************************/ - - function Country (country_name, zone_names) { - this.name = country_name; - this.zones = zone_names; - } - - /************************************ - Current Timezone - ************************************/ - - function OffsetAt(at) { - var timeString = at.toTimeString(); - var abbr = timeString.match(/\([a-z ]+\)/i); - if (abbr && abbr[0]) { - // 17:56:31 GMT-0600 (CST) - // 17:56:31 GMT-0600 (Central Standard Time) - abbr = abbr[0].match(/[A-Z]/g); - abbr = abbr ? abbr.join('') : undefined; - } else { - // 17:56:31 CST - // 17:56:31 GMT+0800 (台北標準時間) - abbr = timeString.match(/[A-Z]{3,5}/g); - abbr = abbr ? abbr[0] : undefined; - } - - if (abbr === 'GMT') { - abbr = undefined; - } - - this.at = +at; - this.abbr = abbr; - this.offset = at.getTimezoneOffset(); - } - - function ZoneScore(zone) { - this.zone = zone; - this.offsetScore = 0; - this.abbrScore = 0; - } - - ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { - this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset); - if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { - this.abbrScore++; - } - }; - - function findChange(low, high) { - var mid, diff; - - while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { - mid = new OffsetAt(new Date(low.at + diff)); - if (mid.offset === low.offset) { - low = mid; - } else { - high = mid; - } - } - - return low; - } - - function userOffsets() { - var startYear = new Date().getFullYear() - 2, - last = new OffsetAt(new Date(startYear, 0, 1)), - offsets = [last], - change, next, i; - - for (i = 1; i < 48; i++) { - next = new OffsetAt(new Date(startYear, i, 1)); - if (next.offset !== last.offset) { - change = findChange(last, next); - offsets.push(change); - offsets.push(new OffsetAt(new Date(change.at + 6e4))); - } - last = next; - } - - for (i = 0; i < 4; i++) { - offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); - offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); - } - - return offsets; - } - - function sortZoneScores (a, b) { - if (a.offsetScore !== b.offsetScore) { - return a.offsetScore - b.offsetScore; - } - if (a.abbrScore !== b.abbrScore) { - return a.abbrScore - b.abbrScore; - } - if (a.zone.population !== b.zone.population) { - return b.zone.population - a.zone.population; - } - return b.zone.name.localeCompare(a.zone.name); - } - - function addToGuesses (name, offsets) { - var i, offset; - arrayToInt(offsets); - for (i = 0; i < offsets.length; i++) { - offset = offsets[i]; - guesses[offset] = guesses[offset] || {}; - guesses[offset][name] = true; - } - } - - function guessesForUserOffsets (offsets) { - var offsetsLength = offsets.length, - filteredGuesses = {}, - out = [], - i, j, guessesOffset; - - for (i = 0; i < offsetsLength; i++) { - guessesOffset = guesses[offsets[i].offset] || {}; - for (j in guessesOffset) { - if (guessesOffset.hasOwnProperty(j)) { - filteredGuesses[j] = true; - } - } - } - - for (i in filteredGuesses) { - if (filteredGuesses.hasOwnProperty(i)) { - out.push(names[i]); - } - } - - return out; - } - - function rebuildGuess () { - - // use Intl API when available and returning valid time zone - try { - var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; - if (intlName && intlName.length > 3) { - var name = names[normalizeName(intlName)]; - if (name) { - return name; - } - logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); - } - } catch (e) { - // Intl unavailable, fall back to manual guessing. - } - - var offsets = userOffsets(), - offsetsLength = offsets.length, - guesses = guessesForUserOffsets(offsets), - zoneScores = [], - zoneScore, i, j; - - for (i = 0; i < guesses.length; i++) { - zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); - for (j = 0; j < offsetsLength; j++) { - zoneScore.scoreOffsetAt(offsets[j]); - } - zoneScores.push(zoneScore); - } - - zoneScores.sort(sortZoneScores); - - return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; - } - - function guess (ignoreCache) { - if (!cachedGuess || ignoreCache) { - cachedGuess = rebuildGuess(); - } - return cachedGuess; - } - - /************************************ - Global Methods - ************************************/ - - function normalizeName (name) { - return (name || '').toLowerCase().replace(/\//g, '_'); - } - - function addZone (packed) { - var i, name, split, normalized; - - if (typeof packed === "string") { - packed = [packed]; - } - - for (i = 0; i < packed.length; i++) { - split = packed[i].split('|'); - name = split[0]; - normalized = normalizeName(name); - zones[normalized] = packed[i]; - names[normalized] = name; - addToGuesses(normalized, split[2].split(' ')); - } - } - - function getZone (name, caller) { - - name = normalizeName(name); - - var zone = zones[name]; - var link; - - if (zone instanceof Zone) { - return zone; - } - - if (typeof zone === 'string') { - zone = new Zone(zone); - zones[name] = zone; - return zone; - } - - // Pass getZone to prevent recursion more than 1 level deep - if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { - zone = zones[name] = new Zone(); - zone._set(link); - zone.name = names[name]; - return zone; - } - - return null; - } - - function getNames () { - var i, out = []; - - for (i in names) { - if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { - out.push(names[i]); - } - } - - return out.sort(); - } - - function getCountryNames () { - return Object.keys(countries); - } - - function addLink (aliases) { - var i, alias, normal0, normal1; - - if (typeof aliases === "string") { - aliases = [aliases]; - } - - for (i = 0; i < aliases.length; i++) { - alias = aliases[i].split('|'); - - normal0 = normalizeName(alias[0]); - normal1 = normalizeName(alias[1]); - - links[normal0] = normal1; - names[normal0] = alias[0]; - - links[normal1] = normal0; - names[normal1] = alias[1]; - } - } - - function addCountries (data) { - var i, country_code, country_zones, split; - if (!data || !data.length) return; - for (i = 0; i < data.length; i++) { - split = data[i].split('|'); - country_code = split[0].toUpperCase(); - country_zones = split[1].split(' '); - countries[country_code] = new Country( - country_code, - country_zones - ); - } - } - - function getCountry (name) { - name = name.toUpperCase(); - return countries[name] || null; - } - - function zonesForCountry(country, with_offset) { - country = getCountry(country); - - if (!country) return null; - - var zones = country.zones.sort(); - - if (with_offset) { - return zones.map(function (zone_name) { - var zone = getZone(zone_name); - return { - name: zone_name, - offset: zone.utcOffset(new Date()) - }; - }); - } - - return zones; - } - - function loadData (data) { - addZone(data.zones); - addLink(data.links); - addCountries(data.countries); - tz.dataVersion = data.version; - } - - function zoneExists (name) { - if (!zoneExists.didShowError) { - zoneExists.didShowError = true; - logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); - } - return !!getZone(name); - } - - function needsOffset (m) { - var isUnixTimestamp = (m._f === 'X' || m._f === 'x'); - return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp); - } - - function logError (message) { - if (typeof console !== 'undefined' && typeof console.error === 'function') { - console.error(message); - } - } - - /************************************ - moment.tz namespace - ************************************/ - - function tz (input) { - var args = Array.prototype.slice.call(arguments, 0, -1), - name = arguments[arguments.length - 1], - zone = getZone(name), - out = moment.utc.apply(null, args); - - if (zone && !moment.isMoment(input) && needsOffset(out)) { - out.add(zone.parse(out), 'minutes'); - } - - out.tz(name); - - return out; - } - - tz.version = VERSION; - tz.dataVersion = ''; - tz._zones = zones; - tz._links = links; - tz._names = names; - tz._countries = countries; - tz.add = addZone; - tz.link = addLink; - tz.load = loadData; - tz.zone = getZone; - tz.zoneExists = zoneExists; // deprecated in 0.1.0 - tz.guess = guess; - tz.names = getNames; - tz.Zone = Zone; - tz.unpack = unpack; - tz.unpackBase60 = unpackBase60; - tz.needsOffset = needsOffset; - tz.moveInvalidForward = true; - tz.moveAmbiguousForward = false; - tz.countries = getCountryNames; - tz.zonesForCountry = zonesForCountry; - - /************************************ - Interface with Moment.js - ************************************/ - - var fn = moment.fn; - - moment.tz = tz; - - moment.defaultZone = null; - - moment.updateOffset = function (mom, keepTime) { - var zone = moment.defaultZone, - offset; - - if (mom._z === undefined) { - if (zone && needsOffset(mom) && !mom._isUTC) { - mom._d = moment.utc(mom._a)._d; - mom.utc().add(zone.parse(mom), 'minutes'); - } - mom._z = zone; - } - if (mom._z) { - offset = mom._z.utcOffset(mom); - if (Math.abs(offset) < 16) { - offset = offset / 60; - } - if (mom.utcOffset !== undefined) { - var z = mom._z; - mom.utcOffset(-offset, keepTime); - mom._z = z; - } else { - mom.zone(offset, keepTime); - } - } - }; - - fn.tz = function (name, keepTime) { - if (name) { - if (typeof name !== 'string') { - throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']'); - } - this._z = getZone(name); - if (this._z) { - moment.updateOffset(this, keepTime); - } else { - logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); - } - return this; - } - if (this._z) { return this._z.name; } - }; - - function abbrWrap (old) { - return function () { - if (this._z) { return this._z.abbr(this); } - return old.call(this); - }; - } - - function resetZoneWrap (old) { - return function () { - this._z = null; - return old.apply(this, arguments); - }; - } - - function resetZoneWrap2 (old) { - return function () { - if (arguments.length > 0) this._z = null; - return old.apply(this, arguments); - }; - } - - fn.zoneName = abbrWrap(fn.zoneName); - fn.zoneAbbr = abbrWrap(fn.zoneAbbr); - fn.utc = resetZoneWrap(fn.utc); - fn.local = resetZoneWrap(fn.local); - fn.utcOffset = resetZoneWrap2(fn.utcOffset); - - moment.tz.setDefault = function(name) { - if (major < 2 || (major === 2 && minor < 9)) { - logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); - } - moment.defaultZone = name ? getZone(name) : null; - return moment; - }; - - // Cloning a moment should include the _z property. - var momentProperties = moment.momentProperties; - if (Object.prototype.toString.call(momentProperties) === '[object Array]') { - // moment 2.8.1+ - momentProperties.push('_z'); - momentProperties.push('_a'); - } else if (momentProperties) { - // moment 2.7.0 - momentProperties._z = null; - } - - loadData({ - "version": "2021a", - "zones": [ - "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5", - "Africa/Accra|LMT GMT +0020 +0030|.Q 0 -k -u|01212121212121212121212121212121212121212121212131313131313131|-2bRzX.8 9RbX.8 fdE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE 1BAk MLE 1Bck MLE 1Bck MLE 1Bck MLE Mok 1BXE M0k 1BXE fak 9vbu bjCu MLu 1Bcu MLu 1BAu MLu 1Bcu MLu 1Bcu MLu 1Bcu MLu|41e5", - "Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5", - "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5", - "Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6", - "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4", - "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5", - "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", - "Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|32e5", - "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3", - "Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|20e4", - "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5", - "Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|", - "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5", - "Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5", - "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5", - "Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|0121|-2le00 4i6N0 2q00|", - "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5", - "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5", - "Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4", - "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", - "America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", - "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3", - "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4", - "America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|", - "America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", - "America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|", - "America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|", - "America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", - "America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|", - "America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", - "America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|", - "America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|", - "America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|", - "America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|", - "America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|", - "America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4", - "America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", - "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2", - "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", - "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5", - "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4", - "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5", - "America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3", - "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2", - "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2", - "America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5", - "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4", - "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2", - "America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4", - "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", - "America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5", - "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3", - "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5", - "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", - "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", - "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5", - "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2", - "America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4", - "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8", - "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3", - "America/Dawson|YST YDT YWT YPT YDDT PST PDT MST|90 80 80 80 70 80 70 70|010102304056565656565656565656565656565656565656565656565656565656565656565656565656565656567|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2", - "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", - "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5", - "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5", - "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3", - "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5", - "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5", - "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", - "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5", - "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", - "America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", - "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", - "America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212132121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", - "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5", - "America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5", - "America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4", - "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", - "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", - "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4", - "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010401054541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2", - "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2", - "America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4", - "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3", - "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5", - "America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6", - "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", - "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4", - "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5", - "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5", - "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4", - "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4", - "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4", - "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2", - "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5", - "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|01203030303030303030303030303030304545450454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", - "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", - "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", - "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3", - "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5", - "America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", - "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5", - "America/Nassau|LMT EST EWT EPT EDT|59.u 50 40 40 40|01212314141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2kNuO.u 1drbO.u 6tX0 cp0 1hS0 pF0 J630 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4", - "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", - "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2", - "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2", - "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2", - "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", - "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", - "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4", - "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5", - "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", - "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4", - "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4", - "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5", - "America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|", - "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842", - "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2", - "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5", - "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4", - "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229", - "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4", - "America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|62e5", - "America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5", - "America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6", - "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", - "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2", - "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", - "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3", - "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5", - "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656", - "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", - "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", - "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT MST|90 80 80 80 70 80 70 70|010102304056565656565656565656565656565656565656565656565656565656565656565656565656565656567|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3", - "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4", - "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642", - "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", - "Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212121212|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10", - "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70", - "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80", - "Antarctica/Macquarie|AEST AEDT -00|-a0 -b0 0|010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|1", - "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60", - "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", - "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40", - "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130", - "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20", - "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", - "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25", - "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4", - "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5", - "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5", - "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5", - "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3", - "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4", - "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4", - "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4", - "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|", - "Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5", - "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4", - "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", - "Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6", - "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|", - "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", - "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4", - "Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4", - "Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6", - "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4", - "Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3", - "Asia/Shanghai|CST CDT|-80 -90|01010101010101010101010101010|-23uw0 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6", - "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5", - "Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6", - "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5", - "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4", - "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5", - "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4", - "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", - "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101010123232323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2o0 MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5", - "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101012323232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2o0 MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", - "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5", - "Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5", - "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3", - "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", - "Europe/Istanbul|IMT EET EEST +03 +04|-1U.U -20 -30 -30 -40|0121212121212121212121212121212121212121212121234312121212121212121212121212121212121212121212121212121212121212123|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", - "Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6", - "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4", - "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212121321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", - "Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5", - "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4", - "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6", - "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5", - "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5", - "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2", - "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", - "Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5", - "Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4", - "Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4", - "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3", - "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5", - "Asia/Manila|PST PDT JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6", - "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4", - "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4", - "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5", - "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5", - "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4", - "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4", - "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5", - "Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|", - "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4", - "Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5", - "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4", - "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4", - "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6", - "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2", - "Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5", - "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5", - "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5", - "Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", - "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3", - "Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6", - "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5", - "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5", - "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2", - "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", - "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4", - "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5", - "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5", - "Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", - "Atlantic/Bermuda|BMT BST AST ADT|4j.i 3j.i 40 30|010102323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28p7E.G 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3", - "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", - "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4", - "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3", - "Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4", - "Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4", - "Atlantic/South_Georgia|-02|20|0||30", - "Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2", - "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", - "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293ju xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", - "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5", - "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293ju xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3", - "Australia/Hobart|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4", - "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293ju xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4", - "Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293iJ xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368", - "Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", - "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10", - "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293k0 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5", - "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293i0 xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5", - "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", - "Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|30e2", - "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", - "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", - "EST|EST|50|0||", - "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "Etc/GMT-0|GMT|0|0||", - "Etc/GMT-1|+01|-10|0||", - "Pacific/Port_Moresby|+10|-a0|0||25e4", - "Etc/GMT-11|+11|-b0|0||", - "Pacific/Tarawa|+12|-c0|0||29e3", - "Etc/GMT-13|+13|-d0|0||", - "Etc/GMT-14|+14|-e0|0||", - "Etc/GMT-2|+02|-20|0||", - "Etc/GMT-3|+03|-30|0||", - "Etc/GMT-4|+04|-40|0||", - "Etc/GMT-5|+05|-50|0||", - "Etc/GMT-6|+06|-60|0||", - "Indian/Christmas|+07|-70|0||21e2", - "Etc/GMT-8|+08|-80|0||", - "Pacific/Palau|+09|-90|0||21e3", - "Etc/GMT+1|-01|10|0||", - "Etc/GMT+10|-10|a0|0||", - "Etc/GMT+11|-11|b0|0||", - "Etc/GMT+12|-12|c0|0||", - "Etc/GMT+3|-03|30|0||", - "Etc/GMT+4|-04|40|0||", - "Etc/GMT+5|-05|50|0||", - "Etc/GMT+6|-06|60|0||", - "Etc/GMT+7|-07|70|0||", - "Etc/GMT+8|-08|80|0||", - "Etc/GMT+9|-09|90|0||", - "Etc/UTC|UTC|0|0||", - "Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5", - "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3", - "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5", - "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", - "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", - "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", - "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5", - "Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5", - "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5", - "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5", - "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", - "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4", - "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", - "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", - "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3", - "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", - "Europe/Kaliningrad|CET CEST EET EEST MSK MSD +03|-10 -20 -20 -30 -30 -40 -30|01010101010101232454545454545454543232323232323232323232323232323232323232323262|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4", - "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5", - "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4", - "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", - "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", - "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5", - "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", - "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5", - "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2n5c9.l cFX9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3", - "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6", - "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", - "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4", - "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5", - "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5", - "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|", - "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", - "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", - "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5", - "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4", - "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", - "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5", - "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4", - "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5", - "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", - "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|0123232323232323212121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5", - "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", - "Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4", - "HST|HST|a0|0||", - "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2", - "Indian/Cocos|+0630|-6u|0||596", - "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130", - "Indian/Mahe|LMT +04|-3F.M -40|01|-2xorF.M|79e3", - "Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4", - "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4", - "Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4", - "Pacific/Kwajalein|+11 +10 +09 -12 +12|-b0 -a0 -90 c0 -c0|012034|-1kln0 akp0 6Up0 12ry0 Wan0|14e3", - "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", - "MST|MST|70|0||", - "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", - "Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", - "Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4", - "Pacific/Chuuk|+10 +09|-a0 -90|01010|-2ewy0 axB0 RVX0 axd0|49e3", - "Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3", - "Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1", - "Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483", - "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00|88e4", - "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3", - "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125", - "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4", - "Pacific/Guam|GST +09 GDT ChST|-a0 -90 -b0 -a0|01020202020202020203|-18jK0 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4", - "Pacific/Honolulu|HST HDT HWT HPT HST|au 9u 9u 9u a0|0102304|-1thLu 8x0 lef0 8wWu iAu 46p0|37e4", - "Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2", - "Pacific/Kosrae|+11 +09 +10 +12|-b0 -90 -a0 -c0|01021030|-2ewz0 axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2", - "Pacific/Majuro|+11 +09 +10 +12|-b0 -90 -a0 -c0|0102103|-2ewz0 axC0 HBy0 akp0 6RB0 12um0|28e3", - "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2", - "Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2", - "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3", - "Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2", - "Pacific/Norfolk|+1112 +1130 +1230 +11 +12|-bc -bu -cu -b0 -c0|012134343434343434343434343434343434343434|-Kgbc W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|25e4", - "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3", - "Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56", - "Pacific/Pohnpei|+11 +09 +10|-b0 -90 -a0|010210|-2ewz0 axC0 HBy0 akp0 axd0|34e3", - "Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3", - "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4", - "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3", - "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", - "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|" - ], - "links": [ - "Africa/Abidjan|Africa/Bamako", - "Africa/Abidjan|Africa/Banjul", - "Africa/Abidjan|Africa/Conakry", - "Africa/Abidjan|Africa/Dakar", - "Africa/Abidjan|Africa/Freetown", - "Africa/Abidjan|Africa/Lome", - "Africa/Abidjan|Africa/Nouakchott", - "Africa/Abidjan|Africa/Ouagadougou", - "Africa/Abidjan|Africa/Timbuktu", - "Africa/Abidjan|Atlantic/St_Helena", - "Africa/Cairo|Egypt", - "Africa/Johannesburg|Africa/Maseru", - "Africa/Johannesburg|Africa/Mbabane", - "Africa/Lagos|Africa/Bangui", - "Africa/Lagos|Africa/Brazzaville", - "Africa/Lagos|Africa/Douala", - "Africa/Lagos|Africa/Kinshasa", - "Africa/Lagos|Africa/Libreville", - "Africa/Lagos|Africa/Luanda", - "Africa/Lagos|Africa/Malabo", - "Africa/Lagos|Africa/Niamey", - "Africa/Lagos|Africa/Porto-Novo", - "Africa/Maputo|Africa/Blantyre", - "Africa/Maputo|Africa/Bujumbura", - "Africa/Maputo|Africa/Gaborone", - "Africa/Maputo|Africa/Harare", - "Africa/Maputo|Africa/Kigali", - "Africa/Maputo|Africa/Lubumbashi", - "Africa/Maputo|Africa/Lusaka", - "Africa/Nairobi|Africa/Addis_Ababa", - "Africa/Nairobi|Africa/Asmara", - "Africa/Nairobi|Africa/Asmera", - "Africa/Nairobi|Africa/Dar_es_Salaam", - "Africa/Nairobi|Africa/Djibouti", - "Africa/Nairobi|Africa/Kampala", - "Africa/Nairobi|Africa/Mogadishu", - "Africa/Nairobi|Indian/Antananarivo", - "Africa/Nairobi|Indian/Comoro", - "Africa/Nairobi|Indian/Mayotte", - "Africa/Tripoli|Libya", - "America/Adak|America/Atka", - "America/Adak|US/Aleutian", - "America/Anchorage|US/Alaska", - "America/Argentina/Buenos_Aires|America/Buenos_Aires", - "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", - "America/Argentina/Catamarca|America/Catamarca", - "America/Argentina/Cordoba|America/Cordoba", - "America/Argentina/Cordoba|America/Rosario", - "America/Argentina/Jujuy|America/Jujuy", - "America/Argentina/Mendoza|America/Mendoza", - "America/Atikokan|America/Coral_Harbour", - "America/Chicago|US/Central", - "America/Curacao|America/Aruba", - "America/Curacao|America/Kralendijk", - "America/Curacao|America/Lower_Princes", - "America/Denver|America/Shiprock", - "America/Denver|Navajo", - "America/Denver|US/Mountain", - "America/Detroit|US/Michigan", - "America/Edmonton|Canada/Mountain", - "America/Fort_Wayne|America/Indiana/Indianapolis", - "America/Fort_Wayne|America/Indianapolis", - "America/Fort_Wayne|US/East-Indiana", - "America/Godthab|America/Nuuk", - "America/Halifax|Canada/Atlantic", - "America/Havana|Cuba", - "America/Indiana/Knox|America/Knox_IN", - "America/Indiana/Knox|US/Indiana-Starke", - "America/Jamaica|Jamaica", - "America/Kentucky/Louisville|America/Louisville", - "America/Los_Angeles|US/Pacific", - "America/Manaus|Brazil/West", - "America/Mazatlan|Mexico/BajaSur", - "America/Mexico_City|Mexico/General", - "America/New_York|US/Eastern", - "America/Noronha|Brazil/DeNoronha", - "America/Panama|America/Cayman", - "America/Phoenix|US/Arizona", - "America/Port_of_Spain|America/Anguilla", - "America/Port_of_Spain|America/Antigua", - "America/Port_of_Spain|America/Dominica", - "America/Port_of_Spain|America/Grenada", - "America/Port_of_Spain|America/Guadeloupe", - "America/Port_of_Spain|America/Marigot", - "America/Port_of_Spain|America/Montserrat", - "America/Port_of_Spain|America/St_Barthelemy", - "America/Port_of_Spain|America/St_Kitts", - "America/Port_of_Spain|America/St_Lucia", - "America/Port_of_Spain|America/St_Thomas", - "America/Port_of_Spain|America/St_Vincent", - "America/Port_of_Spain|America/Tortola", - "America/Port_of_Spain|America/Virgin", - "America/Regina|Canada/Saskatchewan", - "America/Rio_Branco|America/Porto_Acre", - "America/Rio_Branco|Brazil/Acre", - "America/Santiago|Chile/Continental", - "America/Sao_Paulo|Brazil/East", - "America/St_Johns|Canada/Newfoundland", - "America/Tijuana|America/Ensenada", - "America/Tijuana|America/Santa_Isabel", - "America/Tijuana|Mexico/BajaNorte", - "America/Toronto|America/Montreal", - "America/Toronto|Canada/Eastern", - "America/Vancouver|Canada/Pacific", - "America/Whitehorse|Canada/Yukon", - "America/Winnipeg|Canada/Central", - "Asia/Ashgabat|Asia/Ashkhabad", - "Asia/Bangkok|Asia/Phnom_Penh", - "Asia/Bangkok|Asia/Vientiane", - "Asia/Dhaka|Asia/Dacca", - "Asia/Dubai|Asia/Muscat", - "Asia/Ho_Chi_Minh|Asia/Saigon", - "Asia/Hong_Kong|Hongkong", - "Asia/Jerusalem|Asia/Tel_Aviv", - "Asia/Jerusalem|Israel", - "Asia/Kathmandu|Asia/Katmandu", - "Asia/Kolkata|Asia/Calcutta", - "Asia/Kuala_Lumpur|Asia/Singapore", - "Asia/Kuala_Lumpur|Singapore", - "Asia/Macau|Asia/Macao", - "Asia/Makassar|Asia/Ujung_Pandang", - "Asia/Nicosia|Europe/Nicosia", - "Asia/Qatar|Asia/Bahrain", - "Asia/Rangoon|Asia/Yangon", - "Asia/Riyadh|Asia/Aden", - "Asia/Riyadh|Asia/Kuwait", - "Asia/Seoul|ROK", - "Asia/Shanghai|Asia/Chongqing", - "Asia/Shanghai|Asia/Chungking", - "Asia/Shanghai|Asia/Harbin", - "Asia/Shanghai|PRC", - "Asia/Taipei|ROC", - "Asia/Tehran|Iran", - "Asia/Thimphu|Asia/Thimbu", - "Asia/Tokyo|Japan", - "Asia/Ulaanbaatar|Asia/Ulan_Bator", - "Asia/Urumqi|Asia/Kashgar", - "Atlantic/Faroe|Atlantic/Faeroe", - "Atlantic/Reykjavik|Iceland", - "Atlantic/South_Georgia|Etc/GMT+2", - "Australia/Adelaide|Australia/South", - "Australia/Brisbane|Australia/Queensland", - "Australia/Broken_Hill|Australia/Yancowinna", - "Australia/Darwin|Australia/North", - "Australia/Hobart|Australia/Currie", - "Australia/Hobart|Australia/Tasmania", - "Australia/Lord_Howe|Australia/LHI", - "Australia/Melbourne|Australia/Victoria", - "Australia/Perth|Australia/West", - "Australia/Sydney|Australia/ACT", - "Australia/Sydney|Australia/Canberra", - "Australia/Sydney|Australia/NSW", - "Etc/GMT-0|Etc/GMT", - "Etc/GMT-0|Etc/GMT+0", - "Etc/GMT-0|Etc/GMT0", - "Etc/GMT-0|Etc/Greenwich", - "Etc/GMT-0|GMT", - "Etc/GMT-0|GMT+0", - "Etc/GMT-0|GMT-0", - "Etc/GMT-0|GMT0", - "Etc/GMT-0|Greenwich", - "Etc/UTC|Etc/UCT", - "Etc/UTC|Etc/Universal", - "Etc/UTC|Etc/Zulu", - "Etc/UTC|UCT", - "Etc/UTC|UTC", - "Etc/UTC|Universal", - "Etc/UTC|Zulu", - "Europe/Belgrade|Europe/Ljubljana", - "Europe/Belgrade|Europe/Podgorica", - "Europe/Belgrade|Europe/Sarajevo", - "Europe/Belgrade|Europe/Skopje", - "Europe/Belgrade|Europe/Zagreb", - "Europe/Chisinau|Europe/Tiraspol", - "Europe/Dublin|Eire", - "Europe/Helsinki|Europe/Mariehamn", - "Europe/Istanbul|Asia/Istanbul", - "Europe/Istanbul|Turkey", - "Europe/Lisbon|Portugal", - "Europe/London|Europe/Belfast", - "Europe/London|Europe/Guernsey", - "Europe/London|Europe/Isle_of_Man", - "Europe/London|Europe/Jersey", - "Europe/London|GB", - "Europe/London|GB-Eire", - "Europe/Moscow|W-SU", - "Europe/Oslo|Arctic/Longyearbyen", - "Europe/Oslo|Atlantic/Jan_Mayen", - "Europe/Prague|Europe/Bratislava", - "Europe/Rome|Europe/San_Marino", - "Europe/Rome|Europe/Vatican", - "Europe/Warsaw|Poland", - "Europe/Zurich|Europe/Busingen", - "Europe/Zurich|Europe/Vaduz", - "Indian/Christmas|Etc/GMT-7", - "Pacific/Auckland|Antarctica/McMurdo", - "Pacific/Auckland|Antarctica/South_Pole", - "Pacific/Auckland|NZ", - "Pacific/Chatham|NZ-CHAT", - "Pacific/Chuuk|Pacific/Truk", - "Pacific/Chuuk|Pacific/Yap", - "Pacific/Easter|Chile/EasterIsland", - "Pacific/Guam|Pacific/Saipan", - "Pacific/Honolulu|Pacific/Johnston", - "Pacific/Honolulu|US/Hawaii", - "Pacific/Kwajalein|Kwajalein", - "Pacific/Pago_Pago|Pacific/Midway", - "Pacific/Pago_Pago|Pacific/Samoa", - "Pacific/Pago_Pago|US/Samoa", - "Pacific/Palau|Etc/GMT-9", - "Pacific/Pohnpei|Pacific/Ponape", - "Pacific/Port_Moresby|Etc/GMT-10", - "Pacific/Tarawa|Etc/GMT-12", - "Pacific/Tarawa|Pacific/Funafuti", - "Pacific/Tarawa|Pacific/Wake", - "Pacific/Tarawa|Pacific/Wallis" - ], - "countries": [ - "AD|Europe/Andorra", - "AE|Asia/Dubai", - "AF|Asia/Kabul", - "AG|America/Port_of_Spain America/Antigua", - "AI|America/Port_of_Spain America/Anguilla", - "AL|Europe/Tirane", - "AM|Asia/Yerevan", - "AO|Africa/Lagos Africa/Luanda", - "AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo", - "AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia", - "AS|Pacific/Pago_Pago", - "AT|Europe/Vienna", - "AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla", - "AW|America/Curacao America/Aruba", - "AX|Europe/Helsinki Europe/Mariehamn", - "AZ|Asia/Baku", - "BA|Europe/Belgrade Europe/Sarajevo", - "BB|America/Barbados", - "BD|Asia/Dhaka", - "BE|Europe/Brussels", - "BF|Africa/Abidjan Africa/Ouagadougou", - "BG|Europe/Sofia", - "BH|Asia/Qatar Asia/Bahrain", - "BI|Africa/Maputo Africa/Bujumbura", - "BJ|Africa/Lagos Africa/Porto-Novo", - "BL|America/Port_of_Spain America/St_Barthelemy", - "BM|Atlantic/Bermuda", - "BN|Asia/Brunei", - "BO|America/La_Paz", - "BQ|America/Curacao America/Kralendijk", - "BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco", - "BS|America/Nassau", - "BT|Asia/Thimphu", - "BW|Africa/Maputo Africa/Gaborone", - "BY|Europe/Minsk", - "BZ|America/Belize", - "CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson", - "CC|Indian/Cocos", - "CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi", - "CF|Africa/Lagos Africa/Bangui", - "CG|Africa/Lagos Africa/Brazzaville", - "CH|Europe/Zurich", - "CI|Africa/Abidjan", - "CK|Pacific/Rarotonga", - "CL|America/Santiago America/Punta_Arenas Pacific/Easter", - "CM|Africa/Lagos Africa/Douala", - "CN|Asia/Shanghai Asia/Urumqi", - "CO|America/Bogota", - "CR|America/Costa_Rica", - "CU|America/Havana", - "CV|Atlantic/Cape_Verde", - "CW|America/Curacao", - "CX|Indian/Christmas", - "CY|Asia/Nicosia Asia/Famagusta", - "CZ|Europe/Prague", - "DE|Europe/Zurich Europe/Berlin Europe/Busingen", - "DJ|Africa/Nairobi Africa/Djibouti", - "DK|Europe/Copenhagen", - "DM|America/Port_of_Spain America/Dominica", - "DO|America/Santo_Domingo", - "DZ|Africa/Algiers", - "EC|America/Guayaquil Pacific/Galapagos", - "EE|Europe/Tallinn", - "EG|Africa/Cairo", - "EH|Africa/El_Aaiun", - "ER|Africa/Nairobi Africa/Asmara", - "ES|Europe/Madrid Africa/Ceuta Atlantic/Canary", - "ET|Africa/Nairobi Africa/Addis_Ababa", - "FI|Europe/Helsinki", - "FJ|Pacific/Fiji", - "FK|Atlantic/Stanley", - "FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae", - "FO|Atlantic/Faroe", - "FR|Europe/Paris", - "GA|Africa/Lagos Africa/Libreville", - "GB|Europe/London", - "GD|America/Port_of_Spain America/Grenada", - "GE|Asia/Tbilisi", - "GF|America/Cayenne", - "GG|Europe/London Europe/Guernsey", - "GH|Africa/Accra", - "GI|Europe/Gibraltar", - "GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule", - "GM|Africa/Abidjan Africa/Banjul", - "GN|Africa/Abidjan Africa/Conakry", - "GP|America/Port_of_Spain America/Guadeloupe", - "GQ|Africa/Lagos Africa/Malabo", - "GR|Europe/Athens", - "GS|Atlantic/South_Georgia", - "GT|America/Guatemala", - "GU|Pacific/Guam", - "GW|Africa/Bissau", - "GY|America/Guyana", - "HK|Asia/Hong_Kong", - "HN|America/Tegucigalpa", - "HR|Europe/Belgrade Europe/Zagreb", - "HT|America/Port-au-Prince", - "HU|Europe/Budapest", - "ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura", - "IE|Europe/Dublin", - "IL|Asia/Jerusalem", - "IM|Europe/London Europe/Isle_of_Man", - "IN|Asia/Kolkata", - "IO|Indian/Chagos", - "IQ|Asia/Baghdad", - "IR|Asia/Tehran", - "IS|Atlantic/Reykjavik", - "IT|Europe/Rome", - "JE|Europe/London Europe/Jersey", - "JM|America/Jamaica", - "JO|Asia/Amman", - "JP|Asia/Tokyo", - "KE|Africa/Nairobi", - "KG|Asia/Bishkek", - "KH|Asia/Bangkok Asia/Phnom_Penh", - "KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati", - "KM|Africa/Nairobi Indian/Comoro", - "KN|America/Port_of_Spain America/St_Kitts", - "KP|Asia/Pyongyang", - "KR|Asia/Seoul", - "KW|Asia/Riyadh Asia/Kuwait", - "KY|America/Panama America/Cayman", - "KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral", - "LA|Asia/Bangkok Asia/Vientiane", - "LB|Asia/Beirut", - "LC|America/Port_of_Spain America/St_Lucia", - "LI|Europe/Zurich Europe/Vaduz", - "LK|Asia/Colombo", - "LR|Africa/Monrovia", - "LS|Africa/Johannesburg Africa/Maseru", - "LT|Europe/Vilnius", - "LU|Europe/Luxembourg", - "LV|Europe/Riga", - "LY|Africa/Tripoli", - "MA|Africa/Casablanca", - "MC|Europe/Monaco", - "MD|Europe/Chisinau", - "ME|Europe/Belgrade Europe/Podgorica", - "MF|America/Port_of_Spain America/Marigot", - "MG|Africa/Nairobi Indian/Antananarivo", - "MH|Pacific/Majuro Pacific/Kwajalein", - "MK|Europe/Belgrade Europe/Skopje", - "ML|Africa/Abidjan Africa/Bamako", - "MM|Asia/Yangon", - "MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan", - "MO|Asia/Macau", - "MP|Pacific/Guam Pacific/Saipan", - "MQ|America/Martinique", - "MR|Africa/Abidjan Africa/Nouakchott", - "MS|America/Port_of_Spain America/Montserrat", - "MT|Europe/Malta", - "MU|Indian/Mauritius", - "MV|Indian/Maldives", - "MW|Africa/Maputo Africa/Blantyre", - "MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas", - "MY|Asia/Kuala_Lumpur Asia/Kuching", - "MZ|Africa/Maputo", - "NA|Africa/Windhoek", - "NC|Pacific/Noumea", - "NE|Africa/Lagos Africa/Niamey", - "NF|Pacific/Norfolk", - "NG|Africa/Lagos", - "NI|America/Managua", - "NL|Europe/Amsterdam", - "NO|Europe/Oslo", - "NP|Asia/Kathmandu", - "NR|Pacific/Nauru", - "NU|Pacific/Niue", - "NZ|Pacific/Auckland Pacific/Chatham", - "OM|Asia/Dubai Asia/Muscat", - "PA|America/Panama", - "PE|America/Lima", - "PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier", - "PG|Pacific/Port_Moresby Pacific/Bougainville", - "PH|Asia/Manila", - "PK|Asia/Karachi", - "PL|Europe/Warsaw", - "PM|America/Miquelon", - "PN|Pacific/Pitcairn", - "PR|America/Puerto_Rico", - "PS|Asia/Gaza Asia/Hebron", - "PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores", - "PW|Pacific/Palau", - "PY|America/Asuncion", - "QA|Asia/Qatar", - "RE|Indian/Reunion", - "RO|Europe/Bucharest", - "RS|Europe/Belgrade", - "RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr", - "RW|Africa/Maputo Africa/Kigali", - "SA|Asia/Riyadh", - "SB|Pacific/Guadalcanal", - "SC|Indian/Mahe", - "SD|Africa/Khartoum", - "SE|Europe/Stockholm", - "SG|Asia/Singapore", - "SH|Africa/Abidjan Atlantic/St_Helena", - "SI|Europe/Belgrade Europe/Ljubljana", - "SJ|Europe/Oslo Arctic/Longyearbyen", - "SK|Europe/Prague Europe/Bratislava", - "SL|Africa/Abidjan Africa/Freetown", - "SM|Europe/Rome Europe/San_Marino", - "SN|Africa/Abidjan Africa/Dakar", - "SO|Africa/Nairobi Africa/Mogadishu", - "SR|America/Paramaribo", - "SS|Africa/Juba", - "ST|Africa/Sao_Tome", - "SV|America/El_Salvador", - "SX|America/Curacao America/Lower_Princes", - "SY|Asia/Damascus", - "SZ|Africa/Johannesburg Africa/Mbabane", - "TC|America/Grand_Turk", - "TD|Africa/Ndjamena", - "TF|Indian/Reunion Indian/Kerguelen", - "TG|Africa/Abidjan Africa/Lome", - "TH|Asia/Bangkok", - "TJ|Asia/Dushanbe", - "TK|Pacific/Fakaofo", - "TL|Asia/Dili", - "TM|Asia/Ashgabat", - "TN|Africa/Tunis", - "TO|Pacific/Tongatapu", - "TR|Europe/Istanbul", - "TT|America/Port_of_Spain", - "TV|Pacific/Funafuti", - "TW|Asia/Taipei", - "TZ|Africa/Nairobi Africa/Dar_es_Salaam", - "UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye", - "UG|Africa/Nairobi Africa/Kampala", - "UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway", - "US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu", - "UY|America/Montevideo", - "UZ|Asia/Samarkand Asia/Tashkent", - "VA|Europe/Rome Europe/Vatican", - "VC|America/Port_of_Spain America/St_Vincent", - "VE|America/Caracas", - "VG|America/Port_of_Spain America/Tortola", - "VI|America/Port_of_Spain America/St_Thomas", - "VN|Asia/Bangkok Asia/Ho_Chi_Minh", - "VU|Pacific/Efate", - "WF|Pacific/Wallis", - "WS|Pacific/Apia", - "YE|Asia/Riyadh Asia/Aden", - "YT|Africa/Nairobi Indian/Mayotte", - "ZA|Africa/Johannesburg", - "ZM|Africa/Maputo Africa/Lusaka", - "ZW|Africa/Maputo Africa/Harare" - ] - }); - - - return moment; -})); diff --git a/lib/moment.min.js b/lib/moment.min.js deleted file mode 100644 index 57cd2d4..0000000 --- a/lib/moment.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function f(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(m(e,t))return;return 1}function r(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){for(var n=[],s=0;s>>0,s=0;sFe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:o}}function Ae(e,t,n){var s,i,r=Ge(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+je(i=e.year()-1,t,n):a>je(e.year(),t,n)?(s=a-je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function je(e,t,n){var s=Ge(e,t,n),i=Ge(e+1,t,n);return(Fe(e)-s+i)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),A("week",5),A("isoWeek",5),ce("w",te),ce("ww",te,Q),ce("W",te),ce("WW",te,Q),ge(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=Z(e)});function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ce("d",te),ce("e",te),ce("E",te),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),ge(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e}),ge(["d","e","E"],function(e,t,n,s){t[s]=Z(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=de,Be=de,Je=de;function Qe(){function e(e,t){return t.length-e.length}for(var t,n,s,i,r=[],a=[],o=[],u=[],l=0;l<7;l++)t=_([2e3,1]).day(l),n=me(this.weekdaysMin(t,"")),s=me(this.weekdaysShort(t,"")),i=me(this.weekdays(t,"")),r.push(n),a.push(s),o.push(i),u.push(n),u.push(s),u.push(i);r.sort(e),a.sort(e),o.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Xe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),L("hour","h"),A("hour",13),ce("a",et),ce("A",et),ce("H",te),ce("h",te),ce("k",te),ce("HH",te,Q),ce("hh",te,Q),ce("kk",te,Q),ce("hmm",ne),ce("hmmss",se),ce("Hmm",ne),ce("Hmmss",se),ye(["H","HH"],Me),ye(["k","kk"],function(e,t,n){var s=Z(e);t[Me]=24===s?0:s}),ye(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ye(["h","hh"],function(e,t,n){t[Me]=Z(e),y(n).bigHour=!0}),ye("hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s)),y(n).bigHour=!0}),ye("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i)),y(n).bigHour=!0}),ye("Hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s))}),ye("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i))});var tt=z("Hours",!0);var nt,st={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Te,monthsShort:Ne,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:$e,weekdaysShort:ze,meridiemParse:/[ap]\.?m?\.?/i},it={},rt={};function at(e){return e?e.toLowerCase().replace("_","-"):e}function ot(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return nt}function ut(t){var e;if(void 0===it[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=nt._abbr,require("./locale/"+t),lt(e)}catch(e){it[t]=null}return it[t]}function lt(e,t){var n;return e&&((n=r(t)?dt(e):ht(e,t))?nt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function ht(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])s=it[t.parentLocale]._config;else{if(null==(n=ut(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return it[e]=new x(b(s,t)),rt[e]&&rt[e].forEach(function(e){ht(e.name,e.config)}),lt(e),it[e]}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!o(e)){if(t=ut(e))return t;e=[e]}return ot(e)}function ct(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ve]<0||11xe(n[pe],n[ve])?ke:n[Me]<0||24je(n,r,a)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[pe]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=St(e._a[pe],s[pe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ve(r,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=s[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Me]&&0===e._a[De]&&0===e._a[Se]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Me]=0),e._d=(e._useUTC?Ve:function(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Me]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Ot(e){if(e._f!==f.ISO_8601)if(e._f!==f.RFC_2822){e._a=[],y(e).empty=!0;for(var t,n,s,i,r,a,o,u=""+e._i,l=u.length,h=0,d=H(e._f,e._locale).match(N)||[],c=0;cn.valueOf():n.valueOf()"}),pn.toJSON=function(){return this.isValid()?this.toISOString():null},pn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},pn.unix=function(){return Math.floor(this.valueOf()/1e3)},pn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},pn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},pn.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},pn.isLocal=function(){return!!this.isValid()&&!this._isUTC},pn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},pn.isUtc=At,pn.isUTC=At,pn.zoneAbbr=function(){return this._isUTC?"UTC":""},pn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},pn.dates=n("dates accessor is deprecated. Use date instead.",fn),pn.months=n("months accessor is deprecated. Use month instead",Ue),pn.years=n("years accessor is deprecated. Use year instead",Le),pn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),pn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=bt(t))._a?(e=(t._isUTC?_:Tt)(t._a),this._isDSTShifted=this.isValid()&&0 { - try { - const data = await http.json({ - uri: 'https://www.nordpoolgroup.com/api/marketdata/page/10?' + - 'currency=,' + opts.currency + ',' + opts.currency + ',' + opts.currency + - '&endDate=' + aDate.format('DD-MM-YYYY'), - timeout: 30000 - } - ); - return parseResult(data, opts); - } catch (err) { - throw err; - } -}; - -const parseResult = (data, opts) => { - const timeZone = moment().tz(); - const result = []; - if (data.data && data.data.Rows && data.data.Rows.length) { - for (var i = 0; i < data.data.Rows.length; i++) { - const row = data.data.Rows[i]; - if (row.IsExtraRow) { - continue; - } - - const startsAt = moment.tz(row.StartTime, "YYYY-MM-DD\Thh:mm:ss", 'Europe/Oslo').tz(timeZone); - const time = startsAt.unix(); - - for (let j = 0; j < row.Columns.length; j++) { - const column = row.Columns[j]; - const price = Math.round(100000 * (parseFloat(column.Value.replace(/,/, '.').replace(' ', '')) / 1000.0)) / 100000; - - if (isNaN(price)) { - continue; - } - if (column.Name === opts.priceArea) { - result.push({ startsAt, time, price }); - } - } - } - } - return result; -}; - -const fetchPrices = async (aDate, opts) => { - try { - const oslo = moment().tz('Europe/Oslo'); - const ops = [ - aDate.utcOffset() > oslo.utcOffset() ? getHourlyPrices(moment(aDate).add(-1, 'day'), opts) : undefined, - getHourlyPrices(moment(aDate), opts), - getHourlyPrices(moment(aDate).add(1, 'day'), opts) - ]; - - const result = await Promise.all(ops.filter(o => !!o)); - - return result - .filter(r => r && typeof r === 'object' && r.length > 0) - .flatMap(r => r) - .sort((a,b) => a.time - b.time); - } catch (err) { - this.error(err); - } -}; - -module.exports = { - fetchPrices -}; diff --git a/lib/prices.js b/lib/prices.js deleted file mode 100644 index 5d1e2d8..0000000 --- a/lib/prices.js +++ /dev/null @@ -1,374 +0,0 @@ -'use strict'; - -const moment = require('./moment-timezone-with-data'); -const heating = require('./heating'); - -const toHour = (aDate) => { - return moment(aDate).startOf('hour').toISOString(); -} - -const currentPrice = (prices, aDate) => { - const currentHour = toHour(aDate); - return prices.find(p => toHour(p.startsAt) === currentHour); -}; - -const priceRatio = (prices, aDate) => { - const currentHour = toHour(aDate); - const withIndex = pricesStarting(prices, aDate, 0, 24) - .concat() - .sort((a, b) => a.price - b.price) - .findIndex(p => toHour(p.startsAt) === currentHour); - return Math.round((1 - withIndex / 23) * 1000000) / 1000000 -}; - -const pricesSorted = (prices, aDate) => { - return pricesStarting(prices, aDate, 0, 24) - .concat() - .sort((a, b) => a.price - b.price); -}; - -const priceLevels = [ - { - code: 'VERY_CHEAP', - eval: 'X <= 0.60', - description: 'The price is smaller or equal to 60 % compared to average price.' - }, - { - code: 'CHEAP', - eval: 'X > 0.60 && X <= 0.90', - description: 'The price is greater than 60 % and smaller or equal to 90 % compared to average price.' - }, - { - code: 'NORMAL', - eval: 'X > 0.90 && X < 1.15', - description: 'The price is greater than 90 % and smaller than 115 % compared to average price.' - }, - { - code: 'EXPENSIVE', - eval: 'X >= 1.15 && X < 1.40', - description: 'The price is greater or equal to 115 % and smaller than 140 % compared to average price.' - }, - { - code: 'VERY_EXPENSIVE', - eval: 'X >= 1.40', - description: 'The price is greater or equal to 140 % compared to average price.' - }, -]; - -const priceLevel = (prices, aDate) => { - const price = currentPrice(prices, aDate); - const averagePrice = averagePricesStarting(prices, aDate, 0, 24); - if (price && averagePrice !== 0) { - try { - const share = price.price / averagePrice; - for (const pl of priceLevels) { - if (eval(pl.eval.split("X").join(String(share)))) { - return pl; - } - } - } catch (err) { - } - } -}; - -const priceHighLow = (prices, aDate) => { - const sorted = pricesSorted(prices, aDate); - const high = sorted.length > 0 ? sorted[sorted.length - 1] : undefined; - const low = sorted.length > 0 ? sorted[0] : undefined; - const diffPercentage = high && low && low.price !== 0 ? (high.price - low.price) / low.price * 100 : 0; - const diffAmount = high && low ? high.price - low.price : 0; - return { - high, low, diffPercentage, diffAmount - }; -}; - -const pricesStarting = function (prices, aDate, startHour, num_hours) { - const startingAt = moment(aDate).hour(startHour).startOf('hour'); - return prices - .filter(p => p.startsAt.isSameOrAfter(startingAt)) - .slice(0, num_hours); -}; - -const priceNextHours = function (prices, aDate, num_hours) { - const startingAt = moment(aDate).startOf('hour').add(1, 'hour'); - return prices - .concat() - .filter(p => p.startsAt.isSameOrAfter(startingAt)) - .slice(0, num_hours); -}; - -const averagePricesStarting = function (prices, aDate, startHour, num_hours) { - const startingAt = moment(aDate).hour(startHour).startOf('hour'); - const arr = prices - .filter(p => p.startsAt.isSameOrAfter(startingAt)) - .map(p => p.price) - .slice(0, num_hours); - if (arr.length === 0) { - return 0; - } - return Math.round(arr.reduce((a, b) => a + b, 0) / arr.length * 10000000) / 10000000; -}; - -const checkAveragePrice = function (price, averagePrice, below, percentage) { - return (price - averagePrice) / averagePrice * 100 * (below ? -1 : 1) > percentage; -}; - -const checkLowPrice = function (prices, low_hours, aDate) { - return prices - .concat() - .sort((a, b) => a.price - b.price) - .slice(0, low_hours) - .filter(p => p.startsAt.isSameOrBefore(aDate) && moment(p.startsAt).add(1, 'hour').startOf('hour').isAfter(aDate)); -}; - -const checkHighPrice = function (prices, high_hours, aDate) { - return prices - .concat() - .sort((a, b) => b.price - a.price) - .slice(0, high_hours) - .filter(p => p.startsAt.isSameOrBefore(aDate) && moment(p.startsAt).add(1, 'hour').startOf('hour').isAfter(aDate)); -}; - -const checkHighPrice2 = function (prices, high_hours, aDate, state, filter = true) { - return prices - .map(p => { - p.heating = heating.calcHeating(p.startsAt, state.atHome, state.homeOverride, state.heatingOptions); - return p; - }) - .filter(p => p.heating.heating === false) - .filter((p, idx) => idx % 2 === 0) - .sort((a, b) => b.price - a.price) - .slice(0, high_hours) - .filter(p => !filter || filter && p.startsAt.isSameOrBefore(aDate) && moment(p.startsAt).add(1, 'hour').startOf('hour').isAfter(aDate)); -}; - -const minOfHighestPrices = function (prices, num_hours) { - const arr = prices - .concat() - .sort((a, b) => b.price - a.price) - .slice(0, num_hours); - if (arr.length > 0) { - return arr[arr.length - 1]; - } -}; - -const maxOfLowestPrices = function (prices, num_hours) { - const arr = prices - .concat() - .sort((a, b) => a.price - b.price) - .slice(0, num_hours); - if (arr.length > 0) { - return arr[arr.length - 1]; - } -}; - -const pricesAmongLowest = (prices, aDate, startHour, numHours, numLowestHours) => { - // Finds prices starting at 00:00 today - const pricesToday = pricesStarting(prices, aDate, 0, 24); - if (pricesToday.length === 0) { - return false; - } - - // Maximum price of lowest hours today - const maxOfPeriodToday = maxOfLowestPrices(pricesToday, numLowestHours); - - // X following prices - const pricesFollowing = pricesStarting(prices, aDate, startHour, numHours); - if (pricesFollowing.length === 0) { - return false; - } - - // Maximum price of X following prices - const maxOfFollowing = maxOfLowestPrices(pricesFollowing, numHours); - - return maxOfFollowing.price <= maxOfPeriodToday.price; -} - -const pricesAmongHighest = (prices, aDate, startHour, numHours, numHighestHours) => { - // Finds prices starting at 00:00 today - const pricesToday = pricesStarting(prices, aDate, 0, 24); - if (pricesToday.length === 0) { - return false; - } - - // Minimum price of highest hours today - const minOfPeriodToday = minOfHighestPrices(pricesToday, numHighestHours); - - // X following prices - const pricesFollowing = pricesStarting(prices, aDate, startHour, numHours); - if (pricesFollowing.length === 0) { - return false; - } - - // Minimum price of X following prices - const minOfFollowing = minOfHighestPrices(pricesFollowing, numHours); - - return minOfFollowing.price >= minOfPeriodToday.price; -} - -const daysPeriod = (aDate, start, end) => { - const starts = start.split(':'); - const startHour = parseInt(starts[0]) + parseInt(starts[1]) / 60; - const ends = end.split(':'); - let endHour = parseInt(ends[0]) + parseInt(ends[1]) / 60; - if (startHour === endHour) { - endHour += 24; - } - - let startTs = moment(aDate).startOf('day').add(startHour, 'hour'); - let endTs = moment(aDate).startOf('day').add(endHour, 'hour'); - - if (startHour >= endHour) { - if (aDate.isSameOrBefore(endTs)) { - startTs.add(-1, 'day'); - } else { - endTs.add(1, 'day'); - } - } - - return { startTs, endTs }; -} - -const pricesLowestInPeriod = (prices, aDate, startingAt, endingAt, numLowestHours) => { - if (aDate.isBefore(startingAt) - || aDate.isAfter(endingAt)) { - // Not in period - return false; - } - - // Finds prices in period - const pricesInPeriod = prices - .concat() - .filter(p => p.startsAt.isSameOrAfter(startingAt) - && p.startsAt.isBefore(endingAt)); - if (pricesInPeriod.length === 0) { - // No prices - return false; - } - - // Maximum price of the lowest - const maxOfPeriod = maxOfLowestPrices(pricesInPeriod, numLowestHours); - - const current = currentPrice(prices, aDate); - - return !!maxOfPeriod && current.price <= maxOfPeriod.price; -} - -const pricesHighestInPeriod = (prices, aDate, startingAt, endingAt, numHighestHours) => { - if (aDate.isBefore(startingAt) - || aDate.isAfter(endingAt)) { - // Not in period - return false; - } - - // Finds prices in period - const pricesInPeriod = prices - .concat() - .filter(p => p.startsAt.isSameOrAfter(startingAt) - && p.startsAt.isBefore(endingAt)); - if (pricesInPeriod.length === 0) { - // No prices - return false; - } - - // Minimum price of the highest - const minOfPeriod = minOfHighestPrices(pricesInPeriod, numHighestHours); - - const current = currentPrice(prices, aDate); - - return !!minOfPeriod && current.price >= minOfPeriod.price; -} - -const checkSumPrices = (prices, aDate, startingAt, endingAt, hours, low = true) => { - if (aDate.isBefore(startingAt) - || aDate.isAfter(endingAt)) { - // Not in period - return false; - } - - const pricesInPeriod = prices - .filter(p => p.startsAt.isSameOrAfter(startingAt) - && p.startsAt.isBefore(endingAt)); - if (pricesInPeriod.length === 0) { - // No prices - return false; - } - - const sumPrices = []; - for (let a = 0; a < pricesInPeriod.length - hours + 1; a++) { - const val = { - startsAt: moment(pricesInPeriod[a].startsAt), - endsAt: moment(pricesInPeriod[a].startsAt).add(hours, 'hour'), - price: 0 - } - for (let b = 0; b < hours; b++) { - val.price += pricesInPeriod[a + b].price; - } - sumPrices.push(val); - } - - const arr = low ? - sumPrices - .sort((a, b) => a.price - b.price) : - sumPrices - .sort((a, b) => b.price - a.price); - - if (arr.length > 0 - && aDate.isSameOrAfter(arr[0].startsAt) - && aDate.isBefore(arr[0].endsAt) - ) { - return arr[0]; - } -} - -const currentPriceLowerThanNext = (prices, aDate, numHours) => { - const pricesFollowing = priceNextHours(prices, aDate, numHours); - if (pricesFollowing.length === 0) { - return false; - } - - const minOfPeriod = minOfHighestPrices(pricesFollowing, numHours); - - const current = currentPrice(prices, aDate); - - return !!minOfPeriod && current.price <= minOfPeriod.price; -} - -const currentPriceHigherThanNext = (prices, aDate, numHours) => { - const pricesFollowing = priceNextHours(prices, aDate, numHours); - if (pricesFollowing.length === 0) { - return false; - } - - const maxOfPeriod = maxOfLowestPrices(pricesFollowing, numHours); - - const current = currentPrice(prices, aDate); - - return !!maxOfPeriod && current.price >= maxOfPeriod.price; -} - -module.exports = { - toHour, - currentPrice, - priceRatio, - pricesSorted, - priceLevel, - priceHighLow, - pricesStarting, - averagePricesStarting, - checkAveragePrice, - checkLowPrice, - checkHighPrice, - checkHighPrice2, - minOfHighestPrices, - maxOfLowestPrices, - pricesAmongLowest, - pricesAmongHighest, - daysPeriod, - pricesLowestInPeriod, - pricesHighestInPeriod, - checkSumPrices, - currentPriceLowerThanNext, - currentPriceHigherThanNext, -}; - diff --git a/package-lock.json b/package-lock.json index bf5a507..0fba701 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,27 +5,174 @@ "requires": true, "packages": { "": { + "name": "no.almli.heatingcontroller", "version": "1.0.0", "license": "ISC", "dependencies": { - "http.min": "2.1.0" + "@balmli/homey-utility-prices": "^1.0.0" }, "devDependencies": { - "chai": "^4.3.4", + "@tsconfig/node12": "^1.0.9", + "@types/chai": "^4.3.0", + "@types/homey": "npm:homey-apps-sdk-v3-types@^0.2.2", + "@types/mocha": "^9.1.0", + "@types/node": "^16.11.12", + "chai": "^4.3.6", "chai-datetime": "^1.8.0", - "eslint": "^8.0.1", - "mocha": "^9.1.2" + "eslint": "^7.32.0", + "eslint-config-athom": "^3.0.1", + "mocha": "^9.2.0", + "ts-node": "^10.4.0", + "typescript": "^4.5.4" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@balmli/homey-public-holidays": { + "version": "1.0.1", + "resolved": "https://npm.pkg.github.com/download/@balmli/homey-public-holidays/1.0.1/4fb7527c359f9a5c8b3f07e74ed7e6730e10feb5", + "integrity": "sha512-7qALNa5Z3b/vmo1LcdieH5hQi83cHum4QGCvFnDaytoNHAJjmAjvHL3rrslcQkFnLuiQJToYrkBAK4H7JW5rLA==", + "license": "ISC", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@balmli/homey-utility-prices": { + "version": "1.0.0", + "resolved": "https://npm.pkg.github.com/download/@balmli/homey-utility-prices/1.0.0/9a2423189c2097681657d7a8b428e204fd2e7a60", + "integrity": "sha512-wIODkr64VHv3gl9trBMJeNY9UWV8JXTP8slL1f7rl11jt88svsFZ/9pNkx/0nF11mWOIWk5UiWASruSoeLMSRw==", + "license": "ISC", + "dependencies": { + "@balmli/homey-public-holidays": "^1.0.1", + "http.min": "2.1.0", + "moment-timezone": "0.5.40" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" } }, "node_modules/@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", + "debug": "^4.1.1", + "espree": "^7.3.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -34,7 +181,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -60,9 +207,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -74,11 +221,483 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "dev": true + }, + "node_modules/@types/homey": { + "name": "homey-apps-sdk-v3-types", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/homey-apps-sdk-v3-types/-/homey-apps-sdk-v3-types-0.2.2.tgz", + "integrity": "sha512-FS0ahnOTs3e5BBlL/q8dD/mFcoCZeqH+BIrjZ4krQjybpAvyDA0cqQm9ROUxNbcUoVVNStCEBJEooSvJR1HSmg==", + "dev": true, + "dependencies": { + "@types/node": "^14.14.20" + } + }, + "node_modules/@types/homey/node_modules/@types/node": { + "version": "14.18.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.35.tgz", + "integrity": "sha512-2ATO8pfhG1kDvw4Lc4C0GXIMSQFFJBCo/R1fSgTwmUlq5oy95LXyjDQinsRVgQY6gp6ghh3H91wk9ES5/5C+Tw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.10.tgz", + "integrity": "sha512-XU1+v7h81p7145ddPfjv7jtWvkSilpcnON3mQ+bDi9Yuf7OI56efOglXRyXWgQ57xH3fEQgh7WOJMncRHVew5w==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/type-utils": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.46.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -106,6 +725,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -155,25 +783,77 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -183,6 +863,15 @@ "node": "*" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -226,6 +915,19 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -248,15 +950,16 @@ } }, "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", + "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" }, @@ -299,10 +1002,16 @@ } }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -319,18 +1028,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -366,6 +1063,18 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -381,9 +1090,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -410,15 +1119,15 @@ } }, "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=6" } }, "node_modules/deep-is": { @@ -427,6 +1136,22 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -436,6 +1161,18 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -466,6 +1203,71 @@ "node": ">=8.6" } }, + "node_modules/es-abstract": { + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", + "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -488,36 +1290,37 @@ } }, "node_modules/eslint": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz", - "integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -525,10 +1328,11 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.2.0", + "regexpp": "^3.1.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -536,73 +1340,346 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1" + } + }, + "node_modules/eslint-config-athom": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-athom/-/eslint-config-athom-3.1.1.tgz", + "integrity": "sha512-GtnARfOvuW/vJIvtfmZHwXXQimkuzR3+dNeGD95ASEr7DjjbF+26pWz6EBeFFSL3FnzF9oJr+jsxqTxlaK21nQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-plugin-homey-app": "^1.0.2", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-mocha": "^6.3.0", + "eslint-plugin-node": "^11.1.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.5.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-homey-app": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-homey-app/-/eslint-plugin-homey-app-1.0.2.tgz", + "integrity": "sha512-uO09MpI0GaRfxWd8jKf6ei71zCCx3C4/8m1vm/GqYv1y/TEi8i2GdIlBCqyN67IXd4fwT+BNd+BoGxKh+8WC8A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": "^7.32.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-mocha": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-6.3.0.tgz", + "integrity": "sha512-Cd2roo8caAyG21oKaaNTj7cqeYRWW1I2B5SfpKRp0Ip1gkfwoR1Ow0IGlPWnNjzywdF4n+kHL8/9vM6zCJUxdg==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "ramda": "^0.27.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "eslint": ">= 4.0.0" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=0.4.0" } }, - "node_modules/espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "dependencies": { - "acorn": "^8.5.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" } }, "node_modules/esprima": { @@ -666,6 +1743,22 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -678,6 +1771,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fastq": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -766,12 +1868,45 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -790,10 +1925,40 @@ "node": "*" } }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -811,21 +1976,21 @@ } }, "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -837,6 +2002,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -846,6 +2052,27 @@ "node": ">=4.x" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -855,6 +2082,45 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -882,9 +2148,9 @@ } }, "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", @@ -892,6 +2158,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -919,6 +2188,32 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/internal-slot": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -931,6 +2226,61 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -961,6 +2311,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -970,6 +2332,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -979,6 +2356,64 @@ "node": ">=8" } }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -991,12 +2426,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1021,6 +2474,18 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1055,6 +2520,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -1071,6 +2542,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1083,10 +2563,38 @@ "node": ">=10" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1095,33 +2603,42 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/mocha": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.2.tgz", - "integrity": "sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", + "chokidar": "3.5.3", + "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.7", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.1.25", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "workerpool": "6.1.5", + "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -1138,6 +2655,18 @@ "url": "https://opencollective.com/mochajs" } }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -1159,6 +2688,25 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1166,9 +2714,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -1183,6 +2731,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1192,6 +2746,73 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1287,6 +2908,21 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -1297,9 +2933,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" @@ -1335,6 +2971,32 @@ "node": ">=6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ramda": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", + "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", + "dev": true + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -1356,6 +3018,23 @@ "node": ">=8.10.0" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -1377,6 +3056,32 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1386,6 +3091,16 @@ "node": ">=4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -1401,6 +3116,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1421,6 +3159,20 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -1466,10 +3218,50 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/string-width": { @@ -1486,6 +3278,34 @@ "node": ">=8" } }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1498,6 +3318,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -1510,34 +3339,169 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "tslib": "^1.8.1" }, "engines": { - "node": ">=8.0" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/type-check": { @@ -1573,6 +3537,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -1588,6 +3580,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1603,6 +3601,22 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -1613,9 +3627,9 @@ } }, "node_modules/workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "node_modules/wrap-ansi": { @@ -1698,6 +3712,15 @@ "node": ">=10" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -1709,64 +3732,491 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - } - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@balmli/homey-public-holidays": { + "version": "1.0.1", + "resolved": "https://npm.pkg.github.com/download/@balmli/homey-public-holidays/1.0.1/4fb7527c359f9a5c8b3f07e74ed7e6730e10feb5", + "integrity": "sha512-7qALNa5Z3b/vmo1LcdieH5hQi83cHum4QGCvFnDaytoNHAJjmAjvHL3rrslcQkFnLuiQJToYrkBAK4H7JW5rLA==" + }, + "@balmli/homey-utility-prices": { + "version": "1.0.0", + "resolved": "https://npm.pkg.github.com/download/@balmli/homey-utility-prices/1.0.0/9a2423189c2097681657d7a8b428e204fd2e7a60", + "integrity": "sha512-wIODkr64VHv3gl9trBMJeNY9UWV8JXTP8slL1f7rl11jt88svsFZ/9pNkx/0nF11mWOIWk5UiWASruSoeLMSRw==", + "requires": { + "@balmli/homey-public-holidays": "^1.0.1", + "http.min": "2.1.0", + "moment-timezone": "0.5.40" + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", + "dev": true + }, + "@types/homey": { + "version": "npm:homey-apps-sdk-v3-types@0.2.2", + "resolved": "https://registry.npmjs.org/homey-apps-sdk-v3-types/-/homey-apps-sdk-v3-types-0.2.2.tgz", + "integrity": "sha512-FS0ahnOTs3e5BBlL/q8dD/mFcoCZeqH+BIrjZ4krQjybpAvyDA0cqQm9ROUxNbcUoVVNStCEBJEooSvJR1HSmg==", + "dev": true, + "requires": { + "@types/node": "^14.14.20" + }, + "dependencies": { + "@types/node": { + "version": "14.18.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.35.tgz", + "integrity": "sha512-2ATO8pfhG1kDvw4Lc4C0GXIMSQFFJBCo/R1fSgTwmUlq5oy95LXyjDQinsRVgQY6gp6ghh3H91wk9ES5/5C+Tw==", + "dev": true + } + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, + "@types/node": { + "version": "16.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.10.tgz", + "integrity": "sha512-XU1+v7h81p7145ddPfjv7jtWvkSilpcnON3mQ+bDi9Yuf7OI56efOglXRyXWgQ57xH3fEQgh7WOJMncRHVew5w==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/type-utils": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@typescript-eslint/types": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", "dev": true, "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "eslint-visitor-keys": "^2.0.0" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "lru-cache": "^6.0.0" } } } }, - "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "@typescript-eslint/visitor-keys": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@typescript-eslint/types": "5.46.1", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } } }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -1786,6 +4236,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1820,27 +4276,70 @@ } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1878,6 +4377,16 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1891,15 +4400,16 @@ "dev": true }, "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", + "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" } @@ -1930,9 +4440,9 @@ "dev": true }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -1943,17 +4453,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } } }, "cliui": { @@ -1988,6 +4487,18 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2000,9 +4511,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -2015,9 +4526,9 @@ "dev": true }, "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -2029,12 +4540,31 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2059,6 +4589,59 @@ "ansi-colors": "^4.1.1" } }, + "es-abstract": { + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", + "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2072,36 +4655,37 @@ "dev": true }, "eslint": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz", - "integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -2109,56 +4693,270 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.2.0", + "regexpp": "^3.1.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-athom": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-athom/-/eslint-config-athom-3.1.1.tgz", + "integrity": "sha512-GtnARfOvuW/vJIvtfmZHwXXQimkuzR3+dNeGD95ASEr7DjjbF+26pWz6EBeFFSL3FnzF9oJr+jsxqTxlaK21nQ==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-plugin-homey-app": "^1.0.2", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-mocha": "^6.3.0", + "eslint-plugin-node": "^11.1.0", + "typescript": "^4.4.3" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-plugin-homey-app": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-homey-app/-/eslint-plugin-homey-app-1.0.2.tgz", + "integrity": "sha512-uO09MpI0GaRfxWd8jKf6ei71zCCx3C4/8m1vm/GqYv1y/TEi8i2GdIlBCqyN67IXd4fwT+BNd+BoGxKh+8WC8A==", + "dev": true, + "requires": {} + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-mocha": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-6.3.0.tgz", + "integrity": "sha512-Cd2roo8caAyG21oKaaNTj7cqeYRWW1I2B5SfpKRp0Ip1gkfwoR1Ow0IGlPWnNjzywdF4n+kHL8/9vM6zCJUxdg==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "ramda": "^0.27.0" + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } }, "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^8.5.0", + "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -2203,6 +5001,19 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2215,6 +5026,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2278,12 +5098,36 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2296,10 +5140,31 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2310,22 +5175,53 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true + } } }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "get-intrinsic": "^1.1.3" } }, "growl": { @@ -2334,12 +5230,51 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -2358,9 +5293,9 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -2389,6 +5324,26 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "internal-slot": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2398,6 +5353,40 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2419,30 +5408,97 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2464,6 +5520,15 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2489,6 +5554,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -2499,6 +5570,15 @@ "is-unicode-supported": "^0.1.0" } }, + "loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2508,47 +5588,84 @@ "yallist": "^4.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, "mocha": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.2.tgz", - "integrity": "sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", + "chokidar": "3.5.3", + "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.7", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.1.25", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "workerpool": "6.1.5", + "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2566,6 +5683,19 @@ } } }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "moment-timezone": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", + "requires": { + "moment": ">= 2.9.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2573,9 +5703,9 @@ "dev": true }, "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "natural-compare": { @@ -2584,12 +5714,64 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2658,6 +5840,18 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -2665,9 +5859,9 @@ "dev": true }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "prelude-ls": { @@ -2688,6 +5882,18 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "ramda": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", + "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2706,6 +5912,17 @@ "picomatch": "^2.2.1" } }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -2718,12 +5935,35 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2733,12 +5973,32 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -2772,10 +6032,38 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "string-width": { @@ -2789,6 +6077,28 @@ "strip-ansi": "^6.0.1" } }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2798,6 +6108,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2813,6 +6129,45 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2828,6 +6183,62 @@ "is-number": "^7.0.0" } }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2849,6 +6260,24 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2864,6 +6293,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2873,6 +6308,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -2880,9 +6328,9 @@ "dev": true }, "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "wrap-ansi": { @@ -2947,6 +6395,12 @@ "is-plain-obj": "^2.1.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 2d200b3..6be6264 100644 --- a/package.json +++ b/package.json @@ -2,21 +2,30 @@ "name": "no.almli.heatingcontroller", "version": "1.0.0", "description": "Heating Controller with utility prices from Nordpoolspot", - "main": "app.js", + "main": "app.ts", "scripts": { - "pretest": "eslint --ignore-path .gitignore app.js lib drivers test", - "test": "./node_modules/.bin/mocha --reporter spec", + "build": "tsc", + "xx_pretest": "eslint --ignore-path .gitignore app.js lib drivers test", + "test": "env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register 'test/**/*.js'", "posttest": "homey app validate" }, "author": "Bjørnar Almli", "license": "ISC", "dependencies": { - "http.min": "2.1.0" + "@balmli/homey-utility-prices": "^1.0.0" }, "devDependencies": { - "chai": "^4.3.4", + "@tsconfig/node12": "^1.0.9", + "@types/chai": "^4.3.0", + "@types/homey": "npm:homey-apps-sdk-v3-types@^0.2.2", + "@types/mocha": "^9.1.0", + "@types/node": "^16.11.12", + "chai": "^4.3.6", "chai-datetime": "^1.8.0", - "eslint": "^8.0.1", - "mocha": "^9.1.2" + "eslint": "^7.32.0", + "eslint-config-athom": "^3.0.1", + "mocha": "^9.2.0", + "ts-node": "^10.4.0", + "typescript": "^4.5.4" } } diff --git a/scripts/.gitignore b/scripts/.gitignore deleted file mode 100644 index 8d87b1d..0000000 --- a/scripts/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/* diff --git a/scripts/create.js b/scripts/create.js deleted file mode 100644 index 06b8376..0000000 --- a/scripts/create.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -const Holidays = require('date-holidays'); -const countries = require('../lib/countries'); - -console.log(`'use strict';`); -console.log('const holidays_list = {'); -countries.map(c => { - let hd = new Holidays(c.id); - const startYear = new Date().getFullYear(); - for (let year = startYear; year < startYear + 3; year++) { - let dates = hd.getHolidays(year); - if (dates) { - const result = dates - .filter(date => date.type !== 'public') - .reduce( - (accumulator, target) => ({...accumulator, [target.date.substr(0, 10)]: target}), - {}); - - const publicHolidays = dates - .filter(date => date.type === 'public') - .reduce( - (accumulator, target) => ({...accumulator, [target.date.substr(0, 10)]: target}), - {}); - - Object.keys(publicHolidays).forEach(function (key) { - result[key] = publicHolidays[key]; - }); - - Object.keys(result) - .sort() - .forEach(function (key) { - let ho = result[key]; - console.log(`"${c.id}-${ho.date.substr(0, 10)}":{"type":"${ho.type}","name":"${ho.name}"},`); - }); - } - } -}); -console.log('};'); -console.log(`module.exports = holidays_list;`); diff --git a/scripts/package-lock.json b/scripts/package-lock.json deleted file mode 100644 index 70b1315..0000000 --- a/scripts/package-lock.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "name": "no.almli.heatingcontroller", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "no.almli.heatingcontroller", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "date-holidays": "^3.10.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/astronomia": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/astronomia/-/astronomia-4.0.1.tgz", - "integrity": "sha512-NT0M9uIII3sOZnZgtqVad5crKFdzLXQTcT+qK80zBkhFOlObhs/OEAnK0WzZuNAraWLDw62RrLhapTHBs6bcsA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/caldate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caldate/-/caldate-2.0.1.tgz", - "integrity": "sha512-edJtriYPt9mYarpEHOZ7QUZWXuY55S8ZdwUVBiLOqeAUYnCI7aTM3Cw+YX60MuJWhDmSRcpfJkiRpz3quMKoGQ==", - "dependencies": { - "moment-timezone": "^0.5.33" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/date-bengali-revised": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-bengali-revised/-/date-bengali-revised-2.0.1.tgz", - "integrity": "sha512-7D9FceOSpRy1MpLzxs0rMlTaUju9LNnIz6A2Hag3/+nB7RKdVKzuQrO7mchbCqFErLoTM+L5Ja/M03psWqGqGA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/date-chinese": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/date-chinese/-/date-chinese-2.1.3.tgz", - "integrity": "sha512-g1YSDAY01sBLu5NfjpnhXGZu9xoC1xtEKHlCHQNYUIivz85Iea7WBzGPKUIBPfyejZ6x2YA64HSbTYjmzq2Yew==", - "dependencies": { - "astronomia": "^4.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/date-easter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/date-easter/-/date-easter-1.0.1.tgz", - "integrity": "sha512-5uAPmiO5tlztgaJrAy8eQCbsVrvYap12JGQEULi7HtLFRML65Jrop74ylHsA6OrqzcEyd6b9WQRIG/kvNzqC8g==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/date-holidays": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/date-holidays/-/date-holidays-3.10.0.tgz", - "integrity": "sha512-e08RjHzrBMNnZ2ClGUsa03RW1QcqWhaZUZQXL82czfwy/6HgKbrZe+UnwxCJVSk48CxQ0oALkReY3YL738C2Kw==", - "dependencies": { - "date-holidays-parser": "^3.2.2", - "js-yaml": "^4.1.0", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "prepin": "^1.0.3" - }, - "bin": { - "holidays2json": "scripts/holidays2json.cjs" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/date-holidays-parser": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/date-holidays-parser/-/date-holidays-parser-3.2.2.tgz", - "integrity": "sha512-b2wG9vGvNK16WXm7LNbD2UnPS1BGYqDJQVIfgClpMcG31qXtjAibc2zSR1ceiuHDx9XY9jBZO4pKogWUw7MZYg==", - "dependencies": { - "astronomia": "^4.0.1", - "caldate": "^2.0.1", - "date-bengali-revised": "^2.0.1", - "date-chinese": "^2.1.3", - "date-easter": "^1.0.1", - "deepmerge": "^4.2.2", - "moment-timezone": "^0.5.33" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/prepin": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/prepin/-/prepin-1.0.3.tgz", - "integrity": "sha512-0XL2hreherEEvUy0fiaGEfN/ioXFV+JpImqIzQjxk6iBg4jQ2ARKqvC4+BmRD8w/pnpD+lbxvh0Ub+z7yBEjvA==", - "bin": { - "prepin": "bin/prepin.js" - } - } - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "astronomia": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/astronomia/-/astronomia-4.0.1.tgz", - "integrity": "sha512-NT0M9uIII3sOZnZgtqVad5crKFdzLXQTcT+qK80zBkhFOlObhs/OEAnK0WzZuNAraWLDw62RrLhapTHBs6bcsA==" - }, - "caldate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caldate/-/caldate-2.0.1.tgz", - "integrity": "sha512-edJtriYPt9mYarpEHOZ7QUZWXuY55S8ZdwUVBiLOqeAUYnCI7aTM3Cw+YX60MuJWhDmSRcpfJkiRpz3quMKoGQ==", - "requires": { - "moment-timezone": "^0.5.33" - } - }, - "date-bengali-revised": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-bengali-revised/-/date-bengali-revised-2.0.1.tgz", - "integrity": "sha512-7D9FceOSpRy1MpLzxs0rMlTaUju9LNnIz6A2Hag3/+nB7RKdVKzuQrO7mchbCqFErLoTM+L5Ja/M03psWqGqGA==" - }, - "date-chinese": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/date-chinese/-/date-chinese-2.1.3.tgz", - "integrity": "sha512-g1YSDAY01sBLu5NfjpnhXGZu9xoC1xtEKHlCHQNYUIivz85Iea7WBzGPKUIBPfyejZ6x2YA64HSbTYjmzq2Yew==", - "requires": { - "astronomia": "^4.0.1" - } - }, - "date-easter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/date-easter/-/date-easter-1.0.1.tgz", - "integrity": "sha512-5uAPmiO5tlztgaJrAy8eQCbsVrvYap12JGQEULi7HtLFRML65Jrop74ylHsA6OrqzcEyd6b9WQRIG/kvNzqC8g==" - }, - "date-holidays": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/date-holidays/-/date-holidays-3.10.0.tgz", - "integrity": "sha512-e08RjHzrBMNnZ2ClGUsa03RW1QcqWhaZUZQXL82czfwy/6HgKbrZe+UnwxCJVSk48CxQ0oALkReY3YL738C2Kw==", - "requires": { - "date-holidays-parser": "^3.2.2", - "js-yaml": "^4.1.0", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "prepin": "^1.0.3" - } - }, - "date-holidays-parser": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/date-holidays-parser/-/date-holidays-parser-3.2.2.tgz", - "integrity": "sha512-b2wG9vGvNK16WXm7LNbD2UnPS1BGYqDJQVIfgClpMcG31qXtjAibc2zSR1ceiuHDx9XY9jBZO4pKogWUw7MZYg==", - "requires": { - "astronomia": "^4.0.1", - "caldate": "^2.0.1", - "date-bengali-revised": "^2.0.1", - "date-chinese": "^2.1.3", - "date-easter": "^1.0.1", - "deepmerge": "^4.2.2", - "moment-timezone": "^0.5.33" - } - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "prepin": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/prepin/-/prepin-1.0.3.tgz", - "integrity": "sha512-0XL2hreherEEvUy0fiaGEfN/ioXFV+JpImqIzQjxk6iBg4jQ2ARKqvC4+BmRD8w/pnpD+lbxvh0Ub+z7yBEjvA==" - } - } -} diff --git a/scripts/package.json b/scripts/package.json deleted file mode 100644 index 5ce4db6..0000000 --- a/scripts/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "no.almli.heatingcontroller", - "version": "1.0.0", - "description": "HeatingController", - "main": "app.js", - "scripts": {}, - "author": "Bjørnar Almli", - "license": "ISC", - "dependencies": { - "date-holidays": "^3.10.0" - } -} diff --git a/test/calc_date.js b/test/calc_date.js deleted file mode 100644 index ec79415..0000000 --- a/test/calc_date.js +++ /dev/null @@ -1,26 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const chai = require("chai"); -const expect = chai.expect; -const holidays = require('../lib/holidays'); - -const getDay = (y, m, d) => { - return moment({ year: y, month: m, day: d }); -}; - -const toStr = (aDate) => { - return aDate.format('YYYY-MM-DD'); -} - -describe("Calc date", function () { - describe("Check", function () { - it("Check 01.01.2019", function () { - expect(toStr(holidays.calcDate(getDay(2019, 0, 1)))).to.eq(toStr(getDay(2019, 0, 1))); - }); - it("Check 02.01.2019 yesterday", function () { - expect(toStr(holidays.calcDate(getDay(2019, 0, 2), 'yesterday'))).to.eq(toStr(getDay(2019, 0, 1))); - }); - it("Check 02.01.2019 tomorrow", function () { - expect(toStr(holidays.calcDate(getDay(2019, 0, 2), 'tomorrow'))).to.eq(toStr(getDay(2019, 0, 3))); - }); - }); -}); diff --git a/test/dates_1.js b/test/dates_1.js deleted file mode 100644 index e182558..0000000 --- a/test/dates_1.js +++ /dev/null @@ -1,17 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const days = require('../lib/days'); - -describe("Prices", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Timestamp for Oslo 2019-01-21", function () { - it("2019-01-21", function () { - expect(moment('2019-01-21').utc().toISOString()).to.equal('2019-01-20T23:00:00.000Z'); - }); - }); - -}); \ No newline at end of file diff --git a/test/dates_2.js b/test/dates_2.js deleted file mode 100644 index ae898b3..0000000 --- a/test/dates_2.js +++ /dev/null @@ -1,17 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const days = require('../lib/days'); - -describe("Prices", function () { - - before(function() { - days.setTimeZone('Europe/Helsinki'); - }); - - describe("Timestamp for Helsinki 2019-01-21", function () { - it("2019-01-21", function () { - expect(moment('2019-01-21').utc().toISOString()).to.equal('2019-01-20T22:00:00.000Z'); - }); - }); - -}); \ No newline at end of file diff --git a/test/heating_1.js b/test/heating_1.js deleted file mode 100644 index 58ff563..0000000 --- a/test/heating_1.js +++ /dev/null @@ -1,1567 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const heating = require('../lib/heating'); -const days = require("../lib/days"); - -const getDay = (y, M, d, h, m, s, ms) => { - return moment({ y, M, d, h, m, s, ms}); -}; - -const getHeatingOptions = function () { - return { - workday: { - startHour: 5, - endHour: 22.5, - }, - notWorkday: { - startHour: 7, - endHour: 23, - }, - workHours: { - startHour: 7, - endHour: 14 - }, - country: 'NO' - }; -}; - -const getHeatingOptionsHoliday = function () { - let opts = getHeatingOptions(); - opts.holiday_today = 'holiday'; - return opts; -}; - -const getHeatingOptionsNewDay = function () { - return { - workday: { - startHour: 5, - endHour: 22.5, - }, - notWorkday: { - startHour: 7, - endHour: 1, - }, - workHours: { - startHour: 7, - endHour: 14 - }, - country: 'NO' - }; -}; - -const getHeatingOptionsNewDay2 = function () { - return { - workday: { - startHour: 5, - endHour: 22.5, - }, - notWorkday: { - startHour: 8, - endHour: 0.3, - }, - workHours: { - startHour: 7.5, - endHour: 14.5 - }, - country: 'NO' - }; -}; - -const getHeatingOptionsNewDay3 = function () { - return { - workday: { - startHour: 5, - endHour: 0.2, - }, - notWorkday: { - startHour: 8, - endHour: 0.3, - }, - workHours: { - startHour: 7.5, - endHour: 14.5 - }, - country: 'NO' - }; -}; - -describe("Heating", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Check getDay", function () { - it("Friday 21.12.2018", function () { - const aDate = getDay(2018, 11, 21, 7, 0, 0, 0); - expect(aDate.format()).to.equal('2018-12-21T07:00:00+01:00'); - }); - }); - - describe("Heating on a Monday, at home, no home override", function () { - it("Monday 04:00", function () { - const aDate = getDay(2018, 11, 17, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 05:00", function () { - const aDate = getDay(2018, 11, 17, 5, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 07:00", function () { - const aDate = getDay(2018, 11, 17, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Monday 10:00", function () { - const aDate = getDay(2018, 11, 17, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Monday 22:30", function () { - const aDate = getDay(2018, 11, 17, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 23:00", function () { - const aDate = getDay(2018, 11, 17, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Monday, at home, home override", function () { - it("Monday 04:00", function () { - const aDate = getDay(2018, 11, 17, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 05:00", function () { - const aDate = getDay(2018, 11, 17, 5, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 07:00", function () { - const aDate = getDay(2018, 11, 17, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(true); - }); - - it("Monday 10:00", function () { - const aDate = getDay(2018, 11, 17, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(true); - }); - - it("Monday 22:30", function () { - const aDate = getDay(2018, 11, 17, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 23:00", function () { - const aDate = getDay(2018, 11, 17, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Monday, at home, no home override, holiday", function () { - it("Monday 04:00", function () { - const aDate = getDay(2018, 11, 17, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptionsHoliday()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 05:00", function () { - const aDate = getDay(2018, 11, 17, 5, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptionsHoliday()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 07:00", function () { - const aDate = getDay(2018, 11, 17, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptionsHoliday()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 10:00", function () { - const aDate = getDay(2018, 11, 17, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptionsHoliday()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 22:30", function () { - const aDate = getDay(2018, 11, 17, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptionsHoliday()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 23:00", function () { - const aDate = getDay(2018, 11, 17, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, true, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Friday, at home, no home override", function () { - it("Friday 04:00", function () { - const aDate = getDay(2018, 11, 21, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Friday 05:00", function () { - const aDate = getDay(2018, 11, 21, 5, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 07:00", function () { - const aDate = getDay(2018, 11, 21, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Friday 10:00", function () { - const aDate = getDay(2018, 11, 21, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Friday 22:30", function () { - const aDate = getDay(2018, 11, 21, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 22:59", function () { - const aDate = getDay(2018, 11, 21, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 23:00", function () { - const aDate = getDay(2018, 11, 21, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Saturday, at home, no home override", function () { - it("Saturday 04:00", function () { - const aDate = getDay(2018, 11, 22, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 05:00", function () { - const aDate = getDay(2018, 11, 22, 5, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 07:00", function () { - const aDate = getDay(2018, 11, 22, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 10:00", function () { - const aDate = getDay(2018, 11, 22, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 22:30", function () { - const aDate = getDay(2018, 11, 22, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 22:59", function () { - const aDate = getDay(2018, 11, 22, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 23:00", function () { - const aDate = getDay(2018, 11, 22, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Sunday, at home, no home override", function () { - it("Sunday 04:00", function () { - const aDate = getDay(2018, 11, 16, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 05:00", function () { - const aDate = getDay(2018, 11, 16, 5, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 07:00", function () { - const aDate = getDay(2018, 11, 16, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 10:00", function () { - const aDate = getDay(2018, 11, 16, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 22:30", function () { - const aDate = getDay(2018, 11, 16, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 22:59", function () { - const aDate = getDay(2018, 11, 16, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 23:00", function () { - const aDate = getDay(2018, 11, 16, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Saturday, not at home, no home override", function () { - it("Saturday 04:00", function () { - const aDate = getDay(2018, 11, 22, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, false, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 10:00", function () { - const aDate = getDay(2018, 11, 22, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, false, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 23:00", function () { - const aDate = getDay(2018, 11, 22, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, false, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a holiday", function () { - it("Holiday 04:00", function () { - const aDate = getDay(2022, 11, 25, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Holiday 10:00", function () { - const aDate = getDay(2022, 11, 25, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:59", function () { - const aDate = getDay(2022, 11, 25, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 23:00", function () { - const aDate = getDay(2022, 11, 25, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on Maundy Thursday 2022", function () { - it("Holiday 04:00", function () { - const aDate = getDay(2022, 3, 14, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Holiday 10:00", function () { - const aDate = getDay(2022, 3, 14, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:59", function () { - const aDate = getDay(2022, 3, 14, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 23:00", function () { - const aDate = getDay(2022, 3, 14, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on Easter Monday 2022", function () { - it("Holiday 04:00", function () { - const aDate = getDay(2022, 3, 18, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Holiday 10:00", function () { - const aDate = getDay(2022, 3, 18, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:29", function () { - const aDate = getDay(2022, 3, 18, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:30", function () { - const aDate = getDay(2022, 3, 18, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Holiday 22:59", function () { - const aDate = getDay(2022, 3, 18, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Holiday 23:00", function () { - const aDate = getDay(2019, 3, 18, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on Christmas Eve 2019", function () { - it("Holiday 04:00", function () { - const aDate = getDay(2022, 11, 24, 4, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Holiday 10:00", function () { - const aDate = getDay(2022, 11, 24, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:29", function () { - const aDate = getDay(2022, 11, 24, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:30", function () { - const aDate = getDay(2022, 11, 24, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 22:59", function () { - const aDate = getDay(2022, 11, 24, 22, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Holiday 23:00", function () { - const aDate = getDay(2022, 11, 24, 23, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptions()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a saturday - options ", function () { - it("Saturday 00:00", function () { - const aDate = getDay(2018, 11, 22, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 00:30", function () { - const aDate = getDay(2018, 11, 22, 0, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 00:59", function () { - const aDate = getDay(2018, 11, 22, 0, 59, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 01:00", function () { - const aDate = getDay(2018, 11, 22, 1, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 01:01", function () { - const aDate = getDay(2018, 11, 22, 1, 1, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 06:55", function () { - const aDate = getDay(2018, 11, 22, 6, 55, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 07:00", function () { - const aDate = getDay(2018, 11, 22, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 10:00", function () { - const aDate = getDay(2018, 11, 22, 10, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 23:30", function () { - const aDate = getDay(2018, 11, 22, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Thursday - options 2", function () { - it("Thursday 00:00", function () { - const aDate = getDay(2019, 0, 31, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Thursday 00:17", function () { - const aDate = getDay(2019, 0, 31, 0, 17, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Thursday 00:18", function () { - const aDate = getDay(2019, 0, 31, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Thursday 07:00", function () { - const aDate = getDay(2019, 0, 31, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 07:25", function () { - const aDate = getDay(2019, 0, 31, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 08:00", function () { - const aDate = getDay(2019, 0, 31, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Thursday 22:29", function () { - const aDate = getDay(2019, 0, 31, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 22:30", function () { - const aDate = getDay(2019, 0, 31, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Friday - options 2", function () { - it("Friday 00:00", function () { - const aDate = getDay(2019, 1, 1, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Friday 00:17", function () { - const aDate = getDay(2019, 1, 1, 0, 17, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Friday 00:18", function () { - const aDate = getDay(2019, 1, 1, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Friday 07:00", function () { - const aDate = getDay(2019, 1, 1, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 07:25", function () { - const aDate = getDay(2019, 1, 1, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 08:00", function () { - const aDate = getDay(2019, 1, 1, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Friday 22:29", function () { - const aDate = getDay(2019, 1, 1, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 22:30", function () { - const aDate = getDay(2019, 1, 1, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 23:30", function () { - const aDate = getDay(2019, 1, 1, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Saturday - options 2", function () { - it("Saturday 00:00", function () { - const aDate = getDay(2019, 1, 2, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 00:17", function () { - const aDate = getDay(2019, 1, 2, 0, 17, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 00:18", function () { - const aDate = getDay(2019, 1, 2, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 07:00", function () { - const aDate = getDay(2019, 1, 2, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 07:25", function () { - const aDate = getDay(2019, 1, 2, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 08:00", function () { - const aDate = getDay(2019, 1, 2, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 22:29", function () { - const aDate = getDay(2019, 1, 2, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 22:30", function () { - const aDate = getDay(2019, 1, 2, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 23:30", function () { - const aDate = getDay(2019, 1, 2, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Sunday - options 2", function () { - it("Sunday 00:00", function () { - const aDate = getDay(2019, 1, 3, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 00:17", function () { - const aDate = getDay(2019, 1, 3, 0, 17, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 00:18", function () { - const aDate = getDay(2019, 1, 3, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 07:00", function () { - const aDate = getDay(2019, 1, 3, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 07:25", function () { - const aDate = getDay(2019, 1, 3, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 08:00", function () { - const aDate = getDay(2019, 1, 3, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 22:29", function () { - const aDate = getDay(2019, 1, 3, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 22:30", function () { - const aDate = getDay(2019, 1, 3, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 23:30", function () { - const aDate = getDay(2019, 1, 3, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Monday - options 2", function () { - it("Monday 00:00", function () { - const aDate = getDay(2019, 1, 4, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 00:11", function () { - const aDate = getDay(2019, 1, 4, 0, 11, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 00:12", function () { - const aDate = getDay(2019, 1, 4, 0, 12, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 07:00", function () { - const aDate = getDay(2019, 1, 4, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 07:25", function () { - const aDate = getDay(2019, 1, 4, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 08:00", function () { - const aDate = getDay(2019, 1, 4, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Monday 22:29", function () { - const aDate = getDay(2019, 1, 4, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 22:30", function () { - const aDate = getDay(2019, 1, 4, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay2()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - }); - - describe("Heating on a Thursday - options 3", function () { - it("Thursday 00:00", function () { - const aDate = getDay(2019, 0, 31, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 00:11", function () { - const aDate = getDay(2019, 0, 31, 0, 11, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 00:12", function () { - const aDate = getDay(2019, 0, 31, 0, 12, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Thursday 07:00", function () { - const aDate = getDay(2019, 0, 31, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 07:25", function () { - const aDate = getDay(2019, 0, 31, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 08:00", function () { - const aDate = getDay(2019, 0, 31, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Thursday 22:29", function () { - const aDate = getDay(2019, 0, 31, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 22:30", function () { - const aDate = getDay(2019, 0, 31, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Thursday 23:30", function () { - const aDate = getDay(2019, 0, 31, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Friday - options 3", function () { - it("Friday 00:00", function () { - const aDate = getDay(2019, 1, 1, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 00:11", function () { - const aDate = getDay(2019, 1, 1, 0, 11, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 00:12", function () { - const aDate = getDay(2019, 1, 1, 0, 12, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Friday 00:18", function () { - const aDate = getDay(2019, 1, 1, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Friday 07:00", function () { - const aDate = getDay(2019, 1, 1, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 07:25", function () { - const aDate = getDay(2019, 1, 1, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 08:00", function () { - const aDate = getDay(2019, 1, 1, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Friday 22:29", function () { - const aDate = getDay(2019, 1, 1, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 22:30", function () { - const aDate = getDay(2019, 1, 1, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Friday 23:30", function () { - const aDate = getDay(2019, 1, 1, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Saturday - options 3", function () { - it("Saturday 00:00", function () { - const aDate = getDay(2019, 1, 2, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 00:17", function () { - const aDate = getDay(2019, 1, 2, 0, 17, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 00:18", function () { - const aDate = getDay(2019, 1, 2, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 07:00", function () { - const aDate = getDay(2019, 1, 2, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 07:25", function () { - const aDate = getDay(2019, 1, 2, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Saturday 08:00", function () { - const aDate = getDay(2019, 1, 2, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 22:29", function () { - const aDate = getDay(2019, 1, 2, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 22:30", function () { - const aDate = getDay(2019, 1, 2, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Saturday 23:30", function () { - const aDate = getDay(2019, 1, 2, 23, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Sunday - options 3", function () { - it("Sunday 00:00", function () { - const aDate = getDay(2019, 1, 3, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 00:17", function () { - const aDate = getDay(2019, 1, 3, 0, 17, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 00:18", function () { - const aDate = getDay(2019, 1, 3, 0, 18, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 07:00", function () { - const aDate = getDay(2019, 1, 3, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 07:25", function () { - const aDate = getDay(2019, 1, 3, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Sunday 08:00", function () { - const aDate = getDay(2019, 1, 3, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 22:29", function () { - const aDate = getDay(2019, 1, 3, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Sunday 22:30", function () { - const aDate = getDay(2019, 1, 3, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - - describe("Heating on a Monday - options 3", function () { - it("Monday 00:00", function () { - const aDate = getDay(2019, 1, 4, 0, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 00:11", function () { - const aDate = getDay(2019, 1, 4, 0, 11, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 00:12", function () { - const aDate = getDay(2019, 1, 4, 0, 12, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(false); - expect(heat.night).to.equal(true); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(false); - }); - - it("Monday 07:00", function () { - const aDate = getDay(2019, 1, 4, 7, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 07:25", function () { - const aDate = getDay(2019, 1, 4, 7, 25, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 08:00", function () { - const aDate = getDay(2019, 1, 4, 8, 0, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(true); - expect(heat.heating).to.equal(false); - }); - - it("Monday 22:29", function () { - const aDate = getDay(2019, 1, 4, 22, 29, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - - it("Monday 22:30", function () { - const aDate = getDay(2019, 1, 4, 22, 30, 0, 0); - let heat = heating.calcHeating(aDate, true, false, getHeatingOptionsNewDay3()); - expect(heat.day).to.equal(true); - expect(heat.night).to.equal(false); - expect(heat.atWork).to.equal(false); - expect(heat.heating).to.equal(true); - }); - }); - -}); \ No newline at end of file diff --git a/test/holiday_no_2022.js b/test/holiday_no_2022.js deleted file mode 100644 index dabd229..0000000 --- a/test/holiday_no_2022.js +++ /dev/null @@ -1,84 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const holidays = require('../lib/holidays'); -const days = require("../lib/days"); - -const getDay = (y, m, d) => { - return moment({ year: y, month: m, day: d }); -}; - -describe("Norwegian holidays", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("2022", function () { - it("Check 01.01.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 0, 1)).type).to.equal('public'); - }); - it("Check 02.01.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 0, 2))).to.equal(false); - }); - it("Check 01.01.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 0, 2), 'yesterday').type).to.equal('public'); - }); - it("Check 13.02.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 1, 13)).type).to.equal('observance'); - }); - it("Check 15.04.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 3, 15)).type).to.equal('public'); - }); - it("Check 16.04.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 3, 16)).type).to.equal('public'); - }); - it("Check 18.04.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 3, 18)).type).to.equal('public'); - }); - it("Check 01.05.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 4, 1)).type).to.equal('public'); - }); - it("Check 02.05.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 4, 2))).to.equal(false); - }); - it("Check 08.05.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 4, 8)).type).to.equal('observance'); - }); - it("Check 17.05.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 4, 17)).type).to.equal('public'); - }); - it("Check 29.05.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 4, 29))).to.equal(false); - }); - it("Check 26.05.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 4, 26)).type).to.equal('public'); - }); - it("Check 04.06.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 5, 4))).to.equal(false); - }); - it("Check 05.06.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 5, 5)).type).to.equal('public'); - }); - it("Check 06.06.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 5, 6)).type).to.equal('public'); - }); - it("Check 04.07.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 6, 4))).to.equal(false); - }); - it("Check 27.11.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 10, 27)).type).to.equal('observance'); - }); - it("Check 24.12.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 11, 24)).type).to.equal('bank'); - }); - it("Check 25.12.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 11, 25)).type).to.equal('public'); - }); - it("Check 26.12.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 11, 26)).type).to.equal('public'); - }); - it("Check 31.12.2022", function () { - expect(holidays.isHoliday('NO', getDay(2022, 11, 31)).type).to.equal('bank'); - }); - }); -}); diff --git a/test/prices_1.js b/test/prices_1.js deleted file mode 100644 index 643dec9..0000000 --- a/test/prices_1.js +++ /dev/null @@ -1,581 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2019-01-20T23:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal( aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(48); - return _prices; - } - const prices = [ - { - startsAt: '2019-01-20T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.49599 - }, - { - startsAt: '2019-01-21T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.49103 - }, - { - startsAt: '2019-01-21T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.48919 - }, - { - startsAt: '2019-01-21T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.48987 - }, - { - startsAt: '2019-01-21T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.4955 - }, - { - startsAt: '2019-01-21T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.52078 - }, - { - startsAt: '2019-01-21T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.53604 - }, - { - startsAt: '2019-01-21T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.60264 - }, - { - startsAt: '2019-01-21T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.63073 - }, - { - startsAt: '2019-01-21T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.60176 - }, - { - startsAt: '2019-01-21T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.56754 - }, - { - startsAt: '2019-01-21T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55704 - }, - { - startsAt: '2019-01-21T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55344 - }, - { - startsAt: '2019-01-21T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55315 - }, - { - startsAt: '2019-01-21T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55772 - }, - { - startsAt: '2019-01-21T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.56385 - }, - { - startsAt: '2019-01-21T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.58008 - }, - { - startsAt: '2019-01-21T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.59671 - }, - { - startsAt: '2019-01-21T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.57979 - }, - { - startsAt: '2019-01-21T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.54868 - }, - { - startsAt: '2019-01-21T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.53634 - }, - { - startsAt: '2019-01-21T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.53264 - }, - { - startsAt: '2019-01-21T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.52185 - }, - { - startsAt: '2019-01-21T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.50902 - }, - { - startsAt: '2019-01-21T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.49599 - }, - { - startsAt: '2019-01-22T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.49103 - }, - { - startsAt: '2019-01-22T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.48919 - }, - { - startsAt: '2019-01-22T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.48987 - }, - { - startsAt: '2019-01-22T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.4955 - }, - { - startsAt: '2019-01-22T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.52078 - }, - { - startsAt: '2019-01-22T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.53604 - }, - { - startsAt: '2019-01-22T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.60264 - }, - { - startsAt: '2019-01-22T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.63073 - }, - { - startsAt: '2019-01-22T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.60176 - }, - { - startsAt: '2019-01-22T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.56754 - }, - { - startsAt: '2019-01-22T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55704 - }, - { - startsAt: '2019-01-22T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55344 - }, - { - startsAt: '2019-01-22T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55315 - }, - { - startsAt: '2019-01-22T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.55772 - }, - { - startsAt: '2019-01-22T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.56385 - }, - { - startsAt: '2019-01-22T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.58008 - }, - { - startsAt: '2019-01-22T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.59671 - }, - { - startsAt: '2019-01-22T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.57979 - }, - { - startsAt: '2019-01-22T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.54868 - }, - { - startsAt: '2019-01-22T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.53634 - }, - { - startsAt: '2019-01-22T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.53264 - }, - { - startsAt: '2019-01-22T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.52185 - }, - { - startsAt: '2019-01-22T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'NOK', - price: 0.50902 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const getState = function (atHome) { - return { - atHome: atHome, - homeOverride: false, - heatingOptions: { - workday: { - startHour: 5, - endHour: 22.5, - }, - notWorkday: { - startHour: 7, - endHour: 23, - }, - workHours: { - startHour: 7, - endHour: 14 - }, - country: 'NO' - } - }; -}; - -const checkLowPrice = function (aDate, aTime, numRows) { - it("Low price at " + aTime, function () { - let x = pricesLib.pricesStarting(getPrices(), moment(aDate), 0, 24); - expect(pricesLib.checkLowPrice(x, 18, moment(aDate + 'T' + aTime)).length).to.equal(numRows); - }); -}; - -const checkHighPrice = function (aDate, aTime, state, numRows) { - it("High price at " + aTime, function () { - let x = pricesLib.pricesStarting(getPrices(), moment(aDate), 0, 24); - expect(pricesLib.checkHighPrice2(x, 6, moment(aDate + 'T' + aTime), state).length).to.equal(numRows); - }); -}; - -describe("Prices", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Check testdata", function () { - it("48 hours", function () { - const prcs = getPrices(); - //console.log(prcs); - expect(prcs.length).to.equal(48); - }); - }); - - describe("Check no date change", function () { - it("No date change: toHour", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.toHour(aDate); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: currentPrice", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.currentPrice(getPrices(), aDate); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: priceRatio", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.priceRatio(getPrices(), aDate); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: pricesStarting", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.pricesStarting(getPrices(), aDate, 0, 24); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: averagePricesStarting", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.averagePricesStarting(getPrices(), aDate, 0, 24); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: checkLowPrice", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - const prcs = getPrices(); - pricesLib.checkLowPrice(prcs, 4, aDate); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: checkHighPrice", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.checkHighPrice(getPrices(), 6, aDate); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: checkHighPrice2", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - const state = getState(true); - pricesLib.checkHighPrice2(getPrices(), 6, aDate, state); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: pricesAmongLowest", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.pricesAmongLowest(getPrices(), aDate, 0, 4, 2); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - it("No date change: pricesAmongHighest", function () { - const aDate = moment('2019-01-21T03:12:45.678Z'); - pricesLib.pricesAmongHighest(getPrices(), aDate, 0, 4, 2); - expect(aDate.toISOString()).to.equal('2019-01-21T03:12:45.678Z'); - }); - }); - - describe("Check no prices", function () { - it("No prices: pricesStarting", function () { - expect(pricesLib.pricesStarting([], moment('2019-01-21'), 0, 24).length).to.equal(0); - }); - it("No prices: checkLowPrice", function () { - expect(pricesLib.checkLowPrice([], 18, moment('2019-01-21')).length).to.equal(0); - }); - it("No prices: checkHighPrice", function () { - expect(pricesLib.checkHighPrice2([], 6, moment('2019-01-21'), {}).length).to.equal(0); - }); - }); - - describe("Price level", function () { - it("Price level 2019-01-21: 24 hours", function () { - const priceLevel = pricesLib.priceLevel(getPrices(), moment('2019-01-21')); - expect(priceLevel.code).eq('NORMAL'); - expect(priceLevel.description).eq('The price is greater than 90 % and smaller than 115 % compared to average price.'); - }); - it("Price level 2019-01-21T07:00:00.000Z: 24 hours", function () { - const priceLevel = pricesLib.priceLevel(getPrices(), moment('2019-01-21T07:00:00.000Z')); - expect(priceLevel.code).eq('EXPENSIVE'); - }); - it("Price level 2019-01-22T10:00:00.000Z: 24 hours", function () { - const priceLevel = pricesLib.priceLevel(getPrices(), moment('2019-01-22T10:00:00.000Z')); - expect(priceLevel.code).eq('NORMAL'); - }); - it("Price level 2019-01-22T15:00:00.000Z: 24 hours", function () { - const priceLevel = pricesLib.priceLevel(getPrices(), moment('2019-01-22T15:00:00.000Z')); - expect(priceLevel.code).eq('NORMAL'); - }); - }); - - describe("Price ratio", function () { - it("Price ratio 2019-01-21: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-21'))).to.equal(0.826087); - }); - it("Price ratio 2019-01-21T01:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-21T01:00:00.000Z'))).to.equal(1.0); - }); - it("Price ratio 2019-01-21T07:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-21T07:00:00.000Z'))).to.equal(0.0); - }); - it("Price ratio 2019-01-21T10:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-21T10:00:00.000Z'))).to.equal(0.391304); - }); - it("Price ratio 2019-01-22: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-22'))).to.equal(0.826087); - }); - }); - - describe("Prices next hours", function () { - it("2019-01-21: 24 hours", function () { - const forDay = moment('2019-01-21').startOf('day'); - const prcs = pricesLib.pricesStarting(getPrices(), forDay, 0, 24) - expect(prcs.length).to.equal(24); - //expect(pricesLib.pricesStarting(getPrices(), moment('2019-01-21'), 0, 24).length).to.equal(24); - }); - it("2019-01-22: 24 hours", function () { - expect(pricesLib.pricesStarting(getPrices(), moment('2019-01-22'), 0, 24).length).to.equal(24); - }); - it("2019-01-21T10:00:00: 20 hours", function () { - let prices = pricesLib.pricesStarting(getPrices(), moment('2019-01-21'), 10, 20); - expect(prices.length).to.equal(20); - expect(prices[0].startsAt.format()).to.equal('2019-01-21T10:00:00+01:00'); - expect(prices[prices.length - 1].startsAt.format()).to.equal('2019-01-22T05:00:00+01:00'); - }); - it("2019-01-23: 0 hours", function () { - expect(pricesLib.pricesStarting(getPrices(), moment('2019-01-23'), 0, 24).length).to.equal(0); - }); - }); - - describe("Check low price", function () { - checkLowPrice('2019-01-21', '00:00:00', 1); - checkLowPrice('2019-01-21', '01:00:00', 1); - checkLowPrice('2019-01-21', '02:00:00', 1); - checkLowPrice('2019-01-21', '03:00:00', 1); - checkLowPrice('2019-01-21', '04:00:00', 1); - checkLowPrice('2019-01-21', '05:00:00', 1); - checkLowPrice('2019-01-21', '06:00:00', 1); - checkLowPrice('2019-01-21', '06:59:59', 1); - checkLowPrice('2019-01-21', '07:00:00', 0); - checkLowPrice('2019-01-21', '08:00:00', 0); - checkLowPrice('2019-01-21', '09:00:00', 0); - checkLowPrice('2019-01-21', '10:00:00', 1); - checkLowPrice('2019-01-21', '11:00:00', 1); - checkLowPrice('2019-01-21', '12:00:00', 1); - checkLowPrice('2019-01-21', '13:00:00', 1); - checkLowPrice('2019-01-21', '14:00:00', 1); - checkLowPrice('2019-01-21', '15:00:00', 1); - checkLowPrice('2019-01-21', '16:00:00', 0); - checkLowPrice('2019-01-21', '17:00:00', 0); - checkLowPrice('2019-01-21', '18:00:00', 0); - checkLowPrice('2019-01-21', '19:00:00', 1); - checkLowPrice('2019-01-21', '20:00:00', 1); - checkLowPrice('2019-01-21', '21:00:00', 1); - checkLowPrice('2019-01-21', '22:00:00', 1); - checkLowPrice('2019-01-21', '23:00:00', 1); - }); - - describe("Check high price - working day - home", function () { - let state = getState(true); - checkHighPrice('2019-01-21', '00:00:00', state, 1); - checkHighPrice('2019-01-21', '01:00:00', state, 0); - checkHighPrice('2019-01-21', '02:00:00', state, 0); - checkHighPrice('2019-01-21', '03:00:00', state, 0); - checkHighPrice('2019-01-21', '04:00:00', state, 1); - checkHighPrice('2019-01-21', '05:00:00', state, 0); - checkHighPrice('2019-01-21', '06:00:00', state, 0); - checkHighPrice('2019-01-21', '07:00:00', state, 0); - checkHighPrice('2019-01-21', '08:00:00', state, 1); - checkHighPrice('2019-01-21', '09:00:00', state, 0); - checkHighPrice('2019-01-21', '10:00:00', state, 1); - checkHighPrice('2019-01-21', '11:00:00', state, 0); - checkHighPrice('2019-01-21', '12:00:00', state, 1); - checkHighPrice('2019-01-21', '13:00:00', state, 0); - checkHighPrice('2019-01-21', '14:00:00', state, 0); - checkHighPrice('2019-01-21', '15:00:00', state, 0); - checkHighPrice('2019-01-21', '16:00:00', state, 0); - checkHighPrice('2019-01-21', '17:00:00', state, 0); - checkHighPrice('2019-01-21', '18:00:00', state, 0); - checkHighPrice('2019-01-21', '19:00:00', state, 0); - checkHighPrice('2019-01-21', '20:00:00', state, 0); - checkHighPrice('2019-01-21', '21:00:00', state, 0); - checkHighPrice('2019-01-21', '22:00:00', state, 0); - checkHighPrice('2019-01-21', '23:00:00', state, 1); - }); - - describe("Check high price - working day - away", function () { - let state = getState(false); - checkHighPrice('2019-01-21', '00:00:00', state, 0); - checkHighPrice('2019-01-21', '01:00:00', state, 0); - checkHighPrice('2019-01-21', '02:00:00', state, 0); - checkHighPrice('2019-01-21', '03:00:00', state, 0); - checkHighPrice('2019-01-21', '04:00:00', state, 0); - checkHighPrice('2019-01-21', '05:00:00', state, 0); - checkHighPrice('2019-01-21', '06:00:00', state, 0); - checkHighPrice('2019-01-21', '07:00:00', state, 0); - checkHighPrice('2019-01-21', '08:00:00', state, 1); - checkHighPrice('2019-01-21', '09:00:00', state, 0); - checkHighPrice('2019-01-21', '10:00:00', state, 1); - checkHighPrice('2019-01-21', '11:00:00', state, 0); - checkHighPrice('2019-01-21', '12:00:00', state, 1); - checkHighPrice('2019-01-21', '13:00:00', state, 0); - checkHighPrice('2019-01-21', '14:00:00', state, 1); - checkHighPrice('2019-01-21', '15:00:00', state, 0); - checkHighPrice('2019-01-21', '16:00:00', state, 1); - checkHighPrice('2019-01-21', '17:00:00', state, 0); - checkHighPrice('2019-01-21', '18:00:00', state, 1); - checkHighPrice('2019-01-21', '19:00:00', state, 0); - checkHighPrice('2019-01-21', '20:00:00', state, 0); - checkHighPrice('2019-01-21', '21:00:00', state, 0); - checkHighPrice('2019-01-21', '22:00:00', state, 0); - checkHighPrice('2019-01-21', '23:00:00', state, 0); - }); - -}); \ No newline at end of file diff --git a/test/prices_2.js b/test/prices_2.js deleted file mode 100644 index eb7c642..0000000 --- a/test/prices_2.js +++ /dev/null @@ -1,410 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -const getPrices = function () { - if (_prices) { - const aDate = moment('2019-01-30T23:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal( aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(48); - return _prices; - } - const prices = [ - { - startsAt: '2019-01-30T23:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49495 - }, - { - startsAt: '2019-01-31T00:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49058 - }, - { - startsAt: '2019-01-31T01:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48981 - }, - { - startsAt: '2019-01-31T02:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49029 - }, - { - startsAt: '2019-01-31T03:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49417 - }, - { - startsAt: '2019-01-31T04:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52164 - }, - { - startsAt: '2019-01-31T05:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53076 - }, - { - startsAt: '2019-01-31T06:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54493 - }, - { - startsAt: '2019-01-31T07:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54726 - }, - { - startsAt: '2019-01-31T08:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54658 - }, - { - startsAt: '2019-01-31T09:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54619 - }, - { - startsAt: '2019-01-31T10:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54435 - }, - { - startsAt: '2019-01-31T11:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54425 - }, - { - startsAt: '2019-01-31T12:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54571 - }, - { - startsAt: '2019-01-31T13:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54435 - }, - { - startsAt: '2019-01-31T14:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5427 - }, - { - startsAt: '2019-01-31T15:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54794 - }, - { - startsAt: '2019-01-31T16:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.55619 - }, - { - startsAt: '2019-01-31T17:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5526 - }, - { - startsAt: '2019-01-31T18:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54716 - }, - { - startsAt: '2019-01-31T19:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53775 - }, - { - startsAt: '2019-01-31T20:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52678 - }, - { - startsAt: '2019-01-31T21:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.51067 - }, - { - startsAt: '2019-01-31T22:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49941 - }, - { - startsAt: '2019-01-31T23:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49563 - }, - { - startsAt: '2019-02-01T00:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48751 - }, - { - startsAt: '2019-02-01T01:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48326 - }, - { - startsAt: '2019-02-01T02:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48394 - }, - { - startsAt: '2019-02-01T03:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48993 - }, - { - startsAt: '2019-02-01T04:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5077 - }, - { - startsAt: '2019-02-01T05:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52142 - }, - { - startsAt: '2019-02-01T06:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53407 - }, - { - startsAt: '2019-02-01T07:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54731 - }, - { - startsAt: '2019-02-01T08:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54026 - }, - { - startsAt: '2019-02-01T09:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5362 - }, - { - startsAt: '2019-02-01T10:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54605 - }, - { - startsAt: '2019-02-01T11:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54141 - }, - { - startsAt: '2019-02-01T12:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53745 - }, - { - startsAt: '2019-02-01T13:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53765 - }, - { - startsAt: '2019-02-01T14:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53697 - }, - { - startsAt: '2019-02-01T15:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54113 - }, - { - startsAt: '2019-02-01T16:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54953 - }, - { - startsAt: '2019-02-01T17:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54364 - }, - { - startsAt: '2019-02-01T18:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53205 - }, - { - startsAt: '2019-02-01T19:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52335 - }, - { - startsAt: '2019-02-01T20:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52152 - }, - { - startsAt: '2019-02-01T21:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.50915 - }, - { - startsAt: '2019-02-01T22:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49186 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const getState = function (atHome) { - return { - atHome: atHome, - homeOverride: false, - heatingOptions: { - workday: { - startHour: 5, - endHour: 23, - }, - notWorkday: { - startHour: 7, - endHour: 23, - }, - workHours: { - startHour: 7, - endHour: 14 - }, - country: 'NO' - } - }; -}; - -const checkHighPrice = function (aDate, aTime, state, numRows) { - it("High price at " + aTime, function () { - let x = pricesLib.pricesStarting(getPrices(), moment(aDate), 0, 24); - expect(pricesLib.checkHighPrice2(x, 4, moment(aDate + 'T' + aTime), state).length).to.equal(numRows); - }); -}; - -describe("Prices Kr.sand 31.01.2019", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Check testdata", function () { - it("48 hours", function () { - expect(getPrices().length).to.equal(48); - }); - }); - - describe("Price ratio", function () { - it("Price ratio 2019-01-31: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-31'))).to.equal(0.826087); - }); - it("Price ratio 2019-01-31T01:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-31T01:00:00.000Z'))).to.equal(1.0); - }); - it("Price ratio 2019-01-31T07:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-31T07:00:00.000Z'))).to.equal(0.130435); - }); - it("Price ratio 2019-01-31T10:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-31T10:00:00.000Z'))).to.equal(0.434783); - }); - it("Price ratio 2019-01-31T16:00:00.000Z: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-01-31T16:00:00.000Z'))).to.equal(0.0); - }); - it("Price ratio 2019-02-01: 24 hours", function () { - expect(pricesLib.priceRatio(getPrices(), moment('2019-02-01'))).to.equal(0.782609); - }); - }); - - describe("Check high price - working day - home", function () { - let state = getState(true); - checkHighPrice('2019-01-31', '00:00:00', state, 0); - checkHighPrice('2019-01-31', '01:00:00', state, 0); - checkHighPrice('2019-01-31', '02:00:00', state, 0); - checkHighPrice('2019-01-31', '03:00:00', state, 0); - checkHighPrice('2019-01-31', '04:00:00', state, 0); - checkHighPrice('2019-01-31', '05:00:00', state, 0); - checkHighPrice('2019-01-31', '06:00:00', state, 0); - checkHighPrice('2019-01-31', '07:00:00', state, 0); - checkHighPrice('2019-01-31', '08:00:00', state, 1); - checkHighPrice('2019-01-31', '09:00:00', state, 0); - checkHighPrice('2019-01-31', '10:00:00', state, 1); - checkHighPrice('2019-01-31', '11:00:00', state, 0); - checkHighPrice('2019-01-31', '12:00:00', state, 1); - checkHighPrice('2019-01-31', '13:00:00', state, 0); - checkHighPrice('2019-01-31', '14:00:00', state, 0); - checkHighPrice('2019-01-31', '15:00:00', state, 0); - checkHighPrice('2019-01-31', '16:00:00', state, 0); - checkHighPrice('2019-01-31', '17:00:00', state, 0); - checkHighPrice('2019-01-31', '18:00:00', state, 0); - checkHighPrice('2019-01-31', '19:00:00', state, 0); - checkHighPrice('2019-01-31', '20:00:00', state, 0); - checkHighPrice('2019-01-31', '21:00:00', state, 0); - checkHighPrice('2019-01-31', '22:00:00', state, 0); - checkHighPrice('2019-01-31', '23:00:00', state, 1); - }); - - -}); \ No newline at end of file diff --git a/test/prices_3.js b/test/prices_3.js deleted file mode 100644 index 5b77d61..0000000 --- a/test/prices_3.js +++ /dev/null @@ -1,607 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2019-01-30T23:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal( aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(48); - return _prices; - } - const prices = [ - { - startsAt: '2019-01-30T23:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49495 - }, - { - startsAt: '2019-01-31T00:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49058 - }, - { - startsAt: '2019-01-31T01:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48981 - }, - { - startsAt: '2019-01-31T02:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49029 - }, - { - startsAt: '2019-01-31T03:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49417 - }, - { - startsAt: '2019-01-31T04:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52164 - }, - { - startsAt: '2019-01-31T05:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53076 - }, - { - startsAt: '2019-01-31T06:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54493 - }, - { - startsAt: '2019-01-31T07:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54726 - }, - { - startsAt: '2019-01-31T08:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54658 - }, - { - startsAt: '2019-01-31T09:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54619 - }, - { - startsAt: '2019-01-31T10:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54435 - }, - { - startsAt: '2019-01-31T11:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54425 - }, - { - startsAt: '2019-01-31T12:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54571 - }, - { - startsAt: '2019-01-31T13:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54435 - }, - { - startsAt: '2019-01-31T14:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5427 - }, - { - startsAt: '2019-01-31T15:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54794 - }, - { - startsAt: '2019-01-31T16:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.55619 - }, - { - startsAt: '2019-01-31T17:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5526 - }, - { - startsAt: '2019-01-31T18:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54716 - }, - { - startsAt: '2019-01-31T19:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53775 - }, - { - startsAt: '2019-01-31T20:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52678 - }, - { - startsAt: '2019-01-31T21:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.51067 - }, - { - startsAt: '2019-01-31T22:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49941 - }, - { - startsAt: '2019-01-31T23:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49563 - }, - { - startsAt: '2019-02-01T00:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48751 - }, - { - startsAt: '2019-02-01T01:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48326 - }, - { - startsAt: '2019-02-01T02:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48394 - }, - { - startsAt: '2019-02-01T03:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.48993 - }, - { - startsAt: '2019-02-01T04:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5077 - }, - { - startsAt: '2019-02-01T05:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52142 - }, - { - startsAt: '2019-02-01T06:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53407 - }, - { - startsAt: '2019-02-01T07:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54731 - }, - { - startsAt: '2019-02-01T08:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54026 - }, - { - startsAt: '2019-02-01T09:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.5362 - }, - { - startsAt: '2019-02-01T10:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54605 - }, - { - startsAt: '2019-02-01T11:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54141 - }, - { - startsAt: '2019-02-01T12:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53745 - }, - { - startsAt: '2019-02-01T13:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53765 - }, - { - startsAt: '2019-02-01T14:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53697 - }, - { - startsAt: '2019-02-01T15:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54113 - }, - { - startsAt: '2019-02-01T16:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54953 - }, - { - startsAt: '2019-02-01T17:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.54364 - }, - { - startsAt: '2019-02-01T18:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.53205 - }, - { - startsAt: '2019-02-01T19:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52335 - }, - { - startsAt: '2019-02-01T20:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.52152 - }, - { - startsAt: '2019-02-01T21:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.50915 - }, - { - startsAt: '2019-02-01T22:00:00.000Z', - priceArea: 'Kr.sand', - currency: 'NOK', - price: 0.49186 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const checkAvgPrice = function (aDate, startHour, below, percentage, state) { - const aDays = moment(aDate); - const startingAt = aDays.hour(startHour).startOf('hour'); - const prices = getPrices(); - it("Average price check at " + aDate + ' - ' + startHour, function () { - const price = pricesLib.pricesStarting(prices, aDays, startHour, 1); - expect(price.length).to.equal(1); - let avg = pricesLib.averagePricesStarting(prices, aDays, 0, 24); - let chk = pricesLib.checkAveragePrice(price[0].price, avg, below, percentage); - expect(chk).to.equal(state); - }); -}; - -describe("Average price change", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Check testdata", function () { - it("48 hours", function () { - const prcs = getPrices(); - //console.log(prcs); - expect(prcs.length).to.equal(48); - }); - }); - - describe("1 percent", function () { - it("0.53775 >= 1% higher than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.53775, 0.5290425, false, 1)).to.equal(true); - }); - it("0.52678 NOT >= 1% higher than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.52678, 0.5290425, false, 1)).to.equal(false); - }); - }); - - describe("2 percent", function () { - it("0.54716 >= 2% higher than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.54716, 0.5290425, false, 2)).to.equal(true); - }); - it("0.53775 NOT >= 2% higher than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.53775, 0.5290425, false, 2)).to.equal(false); - }); - }); - - describe("5 percent", function () { - it("0.55619 >= 5% higher than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.55619, 0.5290425, false, 5)).to.equal(true); - }); - it("0.5526 NOT >= 5% higher than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.5526, 0.5290425, false, 5)).to.equal(false); - }); - }); - - describe("-1 percent", function () { - it("0.49941 <= 1% lower than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.49441, 0.5290425, true, 1)).to.equal(true); - }); - it("0.52678 NOT <= 1% lower than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.52678, 0.5290425, true, 1)).to.equal(false); - }); - }); - - describe("-3 percent", function () { - it("0.51067 <= 3% lower than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.51067, 0.5290425, true, 3)).to.equal(true); - }); - it("0.52164 NOT <= 3% lower than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.52164, 0.5290425, true, 3)).to.equal(false); - }); - }); - - describe("-5 percent", function () { - it("0.49417 <= 5% lower than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.49417, 0.5290425, true, 5)).to.equal(true); - }); - it("0.52164 NOT <= 5% lower than 0.5290425", function () { - expect(pricesLib.checkAveragePrice(0.52164, 0.5290425, true, 5)).to.equal(false); - }); - }); -}); - -describe("Average prices Kr.sand 31.01.2019", function () { - - before(function() { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Check testdata", function () { - it("48 hours", function () { - expect(getPrices().length).to.equal(48); - }); - }); - - describe("Check average below 1 % of average", function () { - checkAvgPrice('2019-01-31', 0, true, 1, true); - checkAvgPrice('2019-01-31', 1, true, 1, true); - checkAvgPrice('2019-01-31', 2, true, 1, true); - checkAvgPrice('2019-01-31', 3, true, 1, true); - checkAvgPrice('2019-01-31', 4, true, 1, true); - checkAvgPrice('2019-01-31', 5, true, 1, true); - checkAvgPrice('2019-01-31', 6, true, 1, false); - checkAvgPrice('2019-01-31', 7, true, 1, false); - checkAvgPrice('2019-01-31', 8, true, 1, false); - checkAvgPrice('2019-01-31', 9, true, 1, false); - checkAvgPrice('2019-01-31', 10, true, 1, false); - checkAvgPrice('2019-01-31', 11, true, 1, false); - checkAvgPrice('2019-01-31', 12, true, 1, false); - checkAvgPrice('2019-01-31', 13, true, 1, false); - checkAvgPrice('2019-01-31', 14, true, 1, false); - checkAvgPrice('2019-01-31', 15, true, 1, false); - checkAvgPrice('2019-01-31', 16, true, 1, false); - checkAvgPrice('2019-01-31', 17, true, 1, false); - checkAvgPrice('2019-01-31', 18, true, 1, false); - checkAvgPrice('2019-01-31', 19, true, 1, false); - checkAvgPrice('2019-01-31', 20, true, 1, false); - checkAvgPrice('2019-01-31', 21, true, 1, false); - checkAvgPrice('2019-01-31', 22, true, 1, true); - checkAvgPrice('2019-01-31', 23, true, 1, true); - }); - - describe("Check average above 1 % of average", function () { - checkAvgPrice('2019-01-31', 0, false, 1, false); - checkAvgPrice('2019-01-31', 1, false, 1, false); - checkAvgPrice('2019-01-31', 2, false, 1, false); - checkAvgPrice('2019-01-31', 3, false, 1, false); - checkAvgPrice('2019-01-31', 4, false, 1, false); - checkAvgPrice('2019-01-31', 5, false, 1, false); - checkAvgPrice('2019-01-31', 6, false, 1, false); - checkAvgPrice('2019-01-31', 7, false, 1, true); - checkAvgPrice('2019-01-31', 8, false, 1, true); - checkAvgPrice('2019-01-31', 9, false, 1, true); - checkAvgPrice('2019-01-31', 10, false, 1, true); - checkAvgPrice('2019-01-31', 11, false, 1, true); - checkAvgPrice('2019-01-31', 12, false, 1, true); - checkAvgPrice('2019-01-31', 13, false, 1, true); - checkAvgPrice('2019-01-31', 14, false, 1, true); - checkAvgPrice('2019-01-31', 15, false, 1, true); - checkAvgPrice('2019-01-31', 16, false, 1, true); - checkAvgPrice('2019-01-31', 17, false, 1, true); - checkAvgPrice('2019-01-31', 18, false, 1, true); - checkAvgPrice('2019-01-31', 19, false, 1, true); - checkAvgPrice('2019-01-31', 20, false, 1, true); - checkAvgPrice('2019-01-31', 21, false, 1, false); - checkAvgPrice('2019-01-31', 22, false, 1, false); - checkAvgPrice('2019-01-31', 23, false, 1, false); - }); - - describe("Check average below 3 % of average", function () { - checkAvgPrice('2019-01-31', 0, true, 3, true); - checkAvgPrice('2019-01-31', 1, true, 3, true); - checkAvgPrice('2019-01-31', 2, true, 3, true); - checkAvgPrice('2019-01-31', 3, true, 3, true); - checkAvgPrice('2019-01-31', 4, true, 3, true); - checkAvgPrice('2019-01-31', 5, true, 3, false); - checkAvgPrice('2019-01-31', 6, true, 3, false); - checkAvgPrice('2019-01-31', 7, true, 3, false); - checkAvgPrice('2019-01-31', 8, true, 3, false); - checkAvgPrice('2019-01-31', 9, true, 3, false); - checkAvgPrice('2019-01-31', 10, true, 3, false); - checkAvgPrice('2019-01-31', 11, true, 3, false); - checkAvgPrice('2019-01-31', 12, true, 3, false); - checkAvgPrice('2019-01-31', 13, true, 3, false); - checkAvgPrice('2019-01-31', 14, true, 3, false); - checkAvgPrice('2019-01-31', 15, true, 3, false); - checkAvgPrice('2019-01-31', 16, true, 3, false); - checkAvgPrice('2019-01-31', 17, true, 3, false); - checkAvgPrice('2019-01-31', 18, true, 3, false); - checkAvgPrice('2019-01-31', 19, true, 3, false); - checkAvgPrice('2019-01-31', 20, true, 3, false); - checkAvgPrice('2019-01-31', 21, true, 3, false); - checkAvgPrice('2019-01-31', 22, true, 3, true); - checkAvgPrice('2019-01-31', 23, true, 3, true); - }); - - describe("Check average above 3 % of average", function () { - checkAvgPrice('2019-01-31', 0, false, 3, false); - checkAvgPrice('2019-01-31', 1, false, 3, false); - checkAvgPrice('2019-01-31', 2, false, 3, false); - checkAvgPrice('2019-01-31', 3, false, 3, false); - checkAvgPrice('2019-01-31', 4, false, 3, false); - checkAvgPrice('2019-01-31', 5, false, 3, false); - checkAvgPrice('2019-01-31', 6, false, 3, false); - checkAvgPrice('2019-01-31', 7, false, 3, true); - checkAvgPrice('2019-01-31', 8, false, 3, true); - checkAvgPrice('2019-01-31', 9, false, 3, true); - checkAvgPrice('2019-01-31', 10, false, 3, true); - checkAvgPrice('2019-01-31', 11, false, 3, false); - checkAvgPrice('2019-01-31', 12, false, 3, false); - checkAvgPrice('2019-01-31', 13, false, 3, true); - checkAvgPrice('2019-01-31', 14, false, 3, false); - checkAvgPrice('2019-01-31', 15, false, 3, false); - checkAvgPrice('2019-01-31', 16, false, 3, true); - checkAvgPrice('2019-01-31', 17, false, 3, true); - checkAvgPrice('2019-01-31', 18, false, 3, true); - checkAvgPrice('2019-01-31', 19, false, 3, true); - checkAvgPrice('2019-01-31', 20, false, 3, false); - checkAvgPrice('2019-01-31', 21, false, 3, false); - checkAvgPrice('2019-01-31', 22, false, 3, false); - checkAvgPrice('2019-01-31', 23, false, 3, false); - }); -}); - -const checkFollowingHoursLowestPrice = function (aDate, startHour, following_hours, num_lowest_hours, state) { - const aDays = moment(aDate); - const prices = getPrices(); - it("Lowest price check at " + aDate + ' - ' + startHour, function () { - const chk = pricesLib.pricesAmongLowest(prices, aDays, startHour, following_hours, num_lowest_hours); - expect(chk).to.equal(state); - }); -}; - -const checkFollowingHoursHighestPrice = function (aDate, startHour, following_hours, num_highest_hours, state) { - const aDays = moment(aDate); - const prices = getPrices(); - it("Highest price check at " + aDate + ' - ' + startHour, function () { - const chk = pricesLib.pricesAmongHighest(prices, aDays, startHour, following_hours, num_highest_hours); - expect(chk).to.equal(state); - }); -}; - -describe("The following X hours are among Y hours of the days lowest prices Kr.sand 31.01.2019", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("The following 3 hours are among 3 hours of the days lowest prices", function () { - checkFollowingHoursLowestPrice('2019-01-31', 1, 3, 3, true); - checkFollowingHoursLowestPrice('2019-01-31', 2, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 3, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 4, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 5, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 6, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 7, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 8, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 9, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 10, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 11, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 12, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 13, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 14, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 15, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 16, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 17, 3, 3, false); - checkFollowingHoursLowestPrice('2019-01-31', 18, 3, 3, false); - }); - -}); - -describe("The following X hours are among Y hours of the days highest prices Kr.sand 31.01.2019", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("The following X hours are among the 6 hours of the days highest prices", function () { - checkFollowingHoursHighestPrice('2019-01-31', 1, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 2, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 3, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 4, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 5, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 6, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 7, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 8, 1, 6, true); - checkFollowingHoursHighestPrice('2019-01-31', 8, 2, 6, true); - checkFollowingHoursHighestPrice('2019-01-31', 8, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 9, 1, 6, true); - checkFollowingHoursHighestPrice('2019-01-31', 9, 2, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 9, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 10, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 11, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 12, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 13, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 14, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 15, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 16, 3, 6, true); - checkFollowingHoursHighestPrice('2019-01-31', 17, 3, 6, true); - checkFollowingHoursHighestPrice('2019-01-31', 18, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 19, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 20, 3, 6, false); - checkFollowingHoursHighestPrice('2019-01-31', 21, 3, 6, false); - - - }); - -}); \ No newline at end of file diff --git a/test/prices_4.js b/test/prices_4.js deleted file mode 100644 index 83c7fed..0000000 --- a/test/prices_4.js +++ /dev/null @@ -1,487 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Helsinki'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2019-01-20T22:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal( aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(48); - return _prices; - } - const prices = [ - { - startsAt: '2019-01-20T22:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.49599 - }, - { - startsAt: '2019-01-20T23:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.49599 - }, - { - startsAt: '2019-01-21T00:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.49103 - }, - { - startsAt: '2019-01-21T01:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.48919 - }, - { - startsAt: '2019-01-21T02:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.48987 - }, - { - startsAt: '2019-01-21T03:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.4955 - }, - { - startsAt: '2019-01-21T04:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.52078 - }, - { - startsAt: '2019-01-21T05:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.53604 - }, - { - startsAt: '2019-01-21T06:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.60264 - }, - { - startsAt: '2019-01-21T07:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.63073 - }, - { - startsAt: '2019-01-21T08:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.60176 - }, - { - startsAt: '2019-01-21T09:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.56754 - }, - { - startsAt: '2019-01-21T10:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55704 - }, - { - startsAt: '2019-01-21T11:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55344 - }, - { - startsAt: '2019-01-21T12:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55315 - }, - { - startsAt: '2019-01-21T13:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55772 - }, - { - startsAt: '2019-01-21T14:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.56385 - }, - { - startsAt: '2019-01-21T15:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.58008 - }, - { - startsAt: '2019-01-21T16:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.59671 - }, - { - startsAt: '2019-01-21T17:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.57979 - }, - { - startsAt: '2019-01-21T18:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.54868 - }, - { - startsAt: '2019-01-21T19:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.53634 - }, - { - startsAt: '2019-01-21T20:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.53264 - }, - { - startsAt: '2019-01-21T21:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.52185 - }, - { - startsAt: '2019-01-21T22:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.50902 - }, - { - startsAt: '2019-01-21T23:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.49599 - }, - { - startsAt: '2019-01-22T00:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.49103 - }, - { - startsAt: '2019-01-22T01:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.48919 - }, - { - startsAt: '2019-01-22T02:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.48987 - }, - { - startsAt: '2019-01-22T03:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.4955 - }, - { - startsAt: '2019-01-22T04:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.52078 - }, - { - startsAt: '2019-01-22T05:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.53604 - }, - { - startsAt: '2019-01-22T06:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.60264 - }, - { - startsAt: '2019-01-22T07:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.63073 - }, - { - startsAt: '2019-01-22T08:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.60176 - }, - { - startsAt: '2019-01-22T09:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.56754 - }, - { - startsAt: '2019-01-22T10:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55704 - }, - { - startsAt: '2019-01-22T11:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55344 - }, - { - startsAt: '2019-01-22T12:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55315 - }, - { - startsAt: '2019-01-22T13:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.55772 - }, - { - startsAt: '2019-01-22T14:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.56385 - }, - { - startsAt: '2019-01-22T15:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.58008 - }, - { - startsAt: '2019-01-22T16:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.59671 - }, - { - startsAt: '2019-01-22T17:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.57979 - }, - { - startsAt: '2019-01-22T18:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.54868 - }, - { - startsAt: '2019-01-22T19:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.53634 - }, - { - startsAt: '2019-01-22T20:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.53264 - }, - { - startsAt: '2019-01-22T21:00:00.000Z', - priceArea: 'FI', - currency: 'EUR', - price: 0.52185 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const getState = function (atHome) { - return { - atHome: atHome, - homeOverride: false, - heatingOptions: { - workday: { - startHour: 5, - endHour: 22.5, - }, - notWorkday: { - startHour: 7, - endHour: 23, - }, - workHours: { - startHour: 7, - endHour: 14 - }, - country: 'FI' - } - }; -}; - -const checkLowPrice = function (aDate, aTime, numRows) { - it("Low price at " + aTime, function () { - let x = pricesLib.pricesStarting(getPrices(), moment(aDate), 0, 24); - expect(pricesLib.checkLowPrice(x, 18, moment(aDate + 'T' + aTime)).length).to.equal(numRows); - }); -}; - -const checkHighPrice = function (aDate, aTime, state, numRows) { - it("High price at " + aTime, function () { - let x = pricesLib.pricesStarting(getPrices(), moment(aDate), 0, 24); - expect(pricesLib.checkHighPrice2(x, 6, moment(aDate + 'T' + aTime), state).length).to.equal(numRows); - }); -}; - -describe("Prices", function () { - - before(function() { - days.setTimeZone('Europe/Helsinki'); - }); - - describe("Check testdata", function () { - it("48 hours", function () { - const prcs = getPrices(); - //console.log(prcs); - expect(prcs.length).to.equal(48); - }); - }); - - describe("Check no prices", function () { - it("No prices: pricesStarting", function () { - expect(pricesLib.pricesStarting([], moment('2019-01-21'), 0, 24).length).to.equal(0); - }); - it("No prices: checkLowPrice", function () { - expect(pricesLib.checkLowPrice([], 18, moment('2019-01-21')).length).to.equal(0); - }); - it("No prices: checkHighPrice", function () { - expect(pricesLib.checkHighPrice2([], 6, moment('2019-01-21'), {}).length).to.equal(0); - }); - }); - - describe("Prices next hours", function () { - it("2019-01-21: 24 hours", function () { - const forDay = moment('2019-01-21').startOf('day'); - const prcs = pricesLib.pricesStarting(getPrices(), forDay, 0, 24) - expect(prcs.length).to.equal(24); - }); - it("2019-01-22: 24 hours", function () { - expect(pricesLib.pricesStarting(getPrices(), moment('2019-01-22'), 0, 24).length).to.equal(24); - }); - it("2019-01-21T10:00:00: 20 hours", function () { - let prices = pricesLib.pricesStarting(getPrices(), moment('2019-01-21'), 10, 20); - expect(prices.length).to.equal(20); - expect(prices[0].startsAt.format()).to.equal('2019-01-21T10:00:00+02:00'); - expect(prices[prices.length - 1].startsAt.format()).to.equal('2019-01-22T05:00:00+02:00'); - }); - it("2019-01-23: 0 hours", function () { - expect(pricesLib.pricesStarting(getPrices(), moment('2019-01-23'), 0, 24).length).to.equal(0); - }); - }); - - describe("Check low price", function () { - checkLowPrice('2019-01-21', '00:00:00', 1); - checkLowPrice('2019-01-21', '01:00:00', 1); - checkLowPrice('2019-01-21', '02:00:00', 1); - checkLowPrice('2019-01-21', '03:00:00', 1); - checkLowPrice('2019-01-21', '04:00:00', 1); - checkLowPrice('2019-01-21', '05:00:00', 1); - checkLowPrice('2019-01-21', '06:00:00', 1); - checkLowPrice('2019-01-21', '06:59:59', 1); - checkLowPrice('2019-01-21', '07:00:00', 1); - checkLowPrice('2019-01-21', '08:00:00', 0); - checkLowPrice('2019-01-21', '09:00:00', 0); - checkLowPrice('2019-01-21', '10:00:00', 0); - checkLowPrice('2019-01-21', '11:00:00', 1); - checkLowPrice('2019-01-21', '12:00:00', 1); - checkLowPrice('2019-01-21', '13:00:00', 1); - checkLowPrice('2019-01-21', '14:00:00', 1); - checkLowPrice('2019-01-21', '15:00:00', 1); - checkLowPrice('2019-01-21', '16:00:00', 1); - checkLowPrice('2019-01-21', '17:00:00', 0); - checkLowPrice('2019-01-21', '18:00:00', 0); - checkLowPrice('2019-01-21', '19:00:00', 0); - checkLowPrice('2019-01-21', '20:00:00', 1); - checkLowPrice('2019-01-21', '21:00:00', 1); - checkLowPrice('2019-01-21', '22:00:00', 1); - checkLowPrice('2019-01-21', '23:00:00', 1); - }); - - describe("Check high price - working day - home", function () { - let state = getState(true); - checkHighPrice('2019-01-21', '00:00:00', state, 1); - checkHighPrice('2019-01-21', '01:00:00', state, 0); - checkHighPrice('2019-01-21', '02:00:00', state, 1); - checkHighPrice('2019-01-21', '03:00:00', state, 0); - checkHighPrice('2019-01-21', '04:00:00', state, 0); - checkHighPrice('2019-01-21', '05:00:00', state, 0); - checkHighPrice('2019-01-21', '06:00:00', state, 0); - checkHighPrice('2019-01-21', '07:00:00', state, 0); - checkHighPrice('2019-01-21', '08:00:00', state, 1); - checkHighPrice('2019-01-21', '09:00:00', state, 0); - checkHighPrice('2019-01-21', '10:00:00', state, 1); - checkHighPrice('2019-01-21', '11:00:00', state, 0); - checkHighPrice('2019-01-21', '12:00:00', state, 1); - checkHighPrice('2019-01-21', '13:00:00', state, 0); - checkHighPrice('2019-01-21', '14:00:00', state, 0); - checkHighPrice('2019-01-21', '15:00:00', state, 0); - checkHighPrice('2019-01-21', '16:00:00', state, 0); - checkHighPrice('2019-01-21', '17:00:00', state, 0); - checkHighPrice('2019-01-21', '18:00:00', state, 0); - checkHighPrice('2019-01-21', '19:00:00', state, 0); - checkHighPrice('2019-01-21', '20:00:00', state, 0); - checkHighPrice('2019-01-21', '21:00:00', state, 0); - checkHighPrice('2019-01-21', '22:00:00', state, 0); - checkHighPrice('2019-01-21', '23:00:00', state, 1); - }); - - describe("Check high price - working day - away", function () { - let state = getState(false); - checkHighPrice('2019-01-21', '00:00:00', state, 0); - checkHighPrice('2019-01-21', '01:00:00', state, 0); - checkHighPrice('2019-01-21', '02:00:00', state, 0); - checkHighPrice('2019-01-21', '03:00:00', state, 0); - checkHighPrice('2019-01-21', '04:00:00', state, 0); - checkHighPrice('2019-01-21', '05:00:00', state, 0); - checkHighPrice('2019-01-21', '06:00:00', state, 0); - checkHighPrice('2019-01-21', '07:00:00', state, 0); - checkHighPrice('2019-01-21', '08:00:00', state, 1); - checkHighPrice('2019-01-21', '09:00:00', state, 0); - checkHighPrice('2019-01-21', '10:00:00', state, 1); - checkHighPrice('2019-01-21', '11:00:00', state, 0); - checkHighPrice('2019-01-21', '12:00:00', state, 1); - checkHighPrice('2019-01-21', '13:00:00', state, 0); - checkHighPrice('2019-01-21', '14:00:00', state, 1); - checkHighPrice('2019-01-21', '15:00:00', state, 0); - checkHighPrice('2019-01-21', '16:00:00', state, 1); - checkHighPrice('2019-01-21', '17:00:00', state, 0); - checkHighPrice('2019-01-21', '18:00:00', state, 1); - checkHighPrice('2019-01-21', '19:00:00', state, 0); - checkHighPrice('2019-01-21', '20:00:00', state, 0); - checkHighPrice('2019-01-21', '21:00:00', state, 0); - checkHighPrice('2019-01-21', '22:00:00', state, 0); - checkHighPrice('2019-01-21', '23:00:00', state, 0); - }); - -}); \ No newline at end of file diff --git a/test/prices_5.js b/test/prices_5.js deleted file mode 100644 index b1fc9b1..0000000 --- a/test/prices_5.js +++ /dev/null @@ -1,256 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2021-10-19T22:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal( aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(24); - return _prices; - } - const prices = [ - { - startsAt: '2021-10-19T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-19T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-20T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-20T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-20T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-20T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-20T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-20T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-20T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-20T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-20T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-20T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-20T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-20T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-20T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-20T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-20T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-20T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-20T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-20T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-20T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-20T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const checkFollowingHoursLowestPrice = function (aDate, startHour, following_hours, num_lowest_hours, state) { - const aDays = moment(aDate); - const prices = getPrices(); - it("Lowest price check at " + aDate + ' - ' + startHour, function () { - const chk = pricesLib.pricesAmongLowest(prices, aDays, startHour, following_hours, num_lowest_hours); - expect(chk).to.equal(state); - }); -}; - -const checkFollowingHoursHighestPrice = function (aDate, startHour, following_hours, num_highest_hours, state) { - const aDays = moment(aDate); - const prices = getPrices(); - it("Highest price check at " + aDate + ' - ' + startHour, function () { - const chk = pricesLib.pricesAmongHighest(prices, aDays, startHour, following_hours, num_highest_hours); - expect(chk).to.equal(state); - }); -}; - -describe("The following X hours are among Y hours of the days lowest prices Bergen 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("The following 3 hours are among 8 hours of the days lowest prices", function () { - checkFollowingHoursLowestPrice('2021-10-20', 0, 3, 8, true); - checkFollowingHoursLowestPrice('2021-10-20', 1, 3, 8, true); - checkFollowingHoursLowestPrice('2021-10-20', 2, 3, 8, true); - checkFollowingHoursLowestPrice('2021-10-20', 3, 3, 8, true); - checkFollowingHoursLowestPrice('2021-10-20', 4, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 5, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 6, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 7, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 8, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 9, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 10, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 11, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 12, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 13, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 14, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 15, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 16, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 17, 3, 8, false); - checkFollowingHoursLowestPrice('2021-10-20', 18, 3, 8, false); - }); - -}); - -describe("The following X hours are among Y hours of the days highest prices Bergen 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("The following 2 hours are among the 6 hours of the days highest prices", function () { - checkFollowingHoursHighestPrice('2021-10-20', 0, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 1, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 2, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 3, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 4, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 5, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 6, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 7, 2, 6,true); - checkFollowingHoursHighestPrice('2021-10-20', 8, 2, 6, true); - checkFollowingHoursHighestPrice('2021-10-20', 9, 2, 6, false); - checkFollowingHoursHighestPrice('2021-10-20', 10, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 11, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 12, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 13, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 14, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 15, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 16, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 17, 2, 6,true); - checkFollowingHoursHighestPrice('2021-10-20', 18, 2, 6,true); - checkFollowingHoursHighestPrice('2021-10-20', 19, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 20, 2, 6,false); - checkFollowingHoursHighestPrice('2021-10-20', 21, 2, 6,false); - }); - -}); diff --git a/test/prices_6.js b/test/prices_6.js deleted file mode 100644 index 8ef9693..0000000 --- a/test/prices_6.js +++ /dev/null @@ -1,705 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2021-10-19T22:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal(aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(50); - return _prices; - } - const prices = [ - { - startsAt: '2021-10-19T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-19T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-20T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-20T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-20T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-20T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-20T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-20T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-20T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-20T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-20T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-20T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-20T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-20T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-20T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-20T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-20T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-20T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-20T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-20T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-20T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-20T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-20T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-20T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-21T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-21T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-21T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-21T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-21T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-21T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-21T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-21T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-21T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-21T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-21T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-21T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-21T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-21T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-21T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-21T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-21T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-21T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-21T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-21T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-21T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-21T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -describe("Check days period", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Check days period", function () { - it("Check 00:00 to 23:59 - '2021-10-20", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T07:00:00.000Z'), '00:00', '23:59'); - expect(startTs.format()).to.equal('2021-10-20T00:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-20T23:59:00+02:00'); - }); - it("Check 00:00 to 00:00 next day - '2021-10-20 a", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T00:00:00+02:00'), '00:00', '00:00'); - expect(startTs.format()).to.equal('2021-10-20T00:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T00:00:00+02:00'); - }); - it("Check 00:00 to 00:00 next day - '2021-10-20 b", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T07:00:00.000Z'), '00:00', '00:00'); - expect(startTs.format()).to.equal('2021-10-20T00:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T00:00:00+02:00'); - }); - it("Check 01:00 to 00:00 - '2021-10-20", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T07:00:00.000Z'), '01:00', '00:00'); - expect(startTs.format()).to.equal('2021-10-20T01:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T00:00:00+02:00'); - }); - it("Check 20:00 to 23:00 - '2021-10-20 a", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T07:00:00.000Z'), '20:00', '23:00'); - expect(startTs.format()).to.equal('2021-10-20T20:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-20T23:00:00+02:00'); - }); - it("Check 20:00 to 23:00 - '2021-10-20 b", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T20:00:00.000Z'), '20:00', '23:00'); - expect(startTs.format()).to.equal('2021-10-20T20:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-20T23:00:00+02:00'); - }); - it("Check 20:00 to 23:00 - 2021-10-21", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-21T05:00:00.000Z'), '20:00', '23:00'); - expect(startTs.format()).to.equal('2021-10-21T20:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T23:00:00+02:00'); - }); - it("Check 22:00 to 05:00 same day", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T07:00:00.000Z'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 same day", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T23:01:00.000Z'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - a", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-21T01:00:00.000Z'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - b", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T21:30:00+02:00'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - c", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-20T22:00:00+02:00'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - c", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-21T00:00:00+02:00'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - c", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-21T04:30:00+02:00'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - c", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-21T05:00:00+02:00'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-20T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-21T05:00:00+02:00'); - }); - it("Check 22:00 to 05:00 next day - c", function () { - const { startTs, endTs } = pricesLib.daysPeriod(moment('2021-10-21T05:30:00+02:00'), '22:00', '05:00'); - expect(startTs.format()).to.equal('2021-10-21T22:00:00+02:00'); - expect(endTs.format()).to.equal('2021-10-22T05:00:00+02:00'); - }); - }); -}); - -const checkLowestInPeriod = function (aDate, start, end, num_lowest_hours, state) { - it("Lowest price check at " + aDate + ':' + start + '-' + end + ' with ' + num_lowest_hours + ' hours', function () { - const prices = getPrices(); - const localTime = moment(aDate); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, start, end); - const chk = pricesLib.pricesLowestInPeriod(prices, localTime, startTs, endTs, num_lowest_hours); - //console.log('test:', localTime, startTs.format(), endTs.format(), num_lowest_hours, ' -> ', chk); - expect(chk).to.equal(state); - }); -}; - -const checkHighestInPeriod = function (aDate, start, end, num_highest_hours, state) { - it("Highest price check at " + aDate + ':' + start + '-' + end + ' with ' + num_highest_hours + ' hours', function () { - const prices = getPrices(); - const localTime = moment(aDate); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, start, end); - const chk = pricesLib.pricesHighestInPeriod(prices, localTime, startTs, endTs, num_highest_hours); - //console.log('test:', localTime, startTs.format(), endTs.format(), num_highest_hours, ' -> ', chk); - expect(chk).to.equal(state); - }); -}; - -describe("Current price is among the 'low hours' hours of lowest between 'start' and 'end' Bergen 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Current price is among the X hours of lowest between 01:00 and 04:00", function () { - checkLowestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 1, false); - checkLowestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 2, false); - checkLowestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 3, false); - checkLowestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 4, false); - checkLowestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 5, false); - - checkLowestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 1, false); - checkLowestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 2, false); - checkLowestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 3, true); - checkLowestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 4, true); - checkLowestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 5, true); - - checkLowestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 1, false); - checkLowestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 2, true); - checkLowestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 3, true); - checkLowestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 4, true); - checkLowestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 5, true); - - checkLowestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 1, true); - checkLowestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 2, true); - checkLowestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 3, true); - checkLowestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 4, true); - checkLowestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 5, true); - - checkLowestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 1, false); - checkLowestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 2, false); - checkLowestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 3, false); - checkLowestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 4, false); - checkLowestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 5, false); - }); - - describe("Current price is among the X hours of lowest between 22:00 and 05:00", function () { - checkLowestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 2, false); - checkLowestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 3, false); - checkLowestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 4, false); - checkLowestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 5, false); - - checkLowestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 2, false); - checkLowestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 3, false); - checkLowestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 4, false); - checkLowestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 5, false); - - checkLowestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 2, false); - checkLowestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 3, false); - checkLowestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 4, false); - checkLowestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 5, false); - - checkLowestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 2, false); - checkLowestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 3, false); - checkLowestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 4, true); - checkLowestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 5, true); - - checkLowestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 2, true); - checkLowestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 3, true); - checkLowestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 4, true); - checkLowestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 5, true); - - checkLowestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 2, false); - checkLowestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 3, false); - checkLowestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 4, true); - checkLowestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 5, true); - - checkLowestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 1, false); - checkLowestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 2, false); - checkLowestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 3, false); - checkLowestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 4, false); - checkLowestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 5, false); - }); - -}); - -describe("Current price is among the 'high hours' hours of higherst between 'start' and 'end' Bergen 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Current price is among the X hours of highest between 01:00 and 04:00", function () { - checkHighestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 1, false); - checkHighestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 2, false); - checkHighestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 3, false); - checkHighestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 4, false); - checkHighestInPeriod('2021-10-20T00:03:00', '01:00', '04:00', 5, false); - - checkHighestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 1, true); - checkHighestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 2, true); - checkHighestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 3, true); - checkHighestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 4, true); - checkHighestInPeriod('2021-10-20T01:03:00', '01:00', '04:00', 5, true); - - checkHighestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 1, false); - checkHighestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 2, true); - checkHighestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 3, true); - checkHighestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 4, true); - checkHighestInPeriod('2021-10-20T02:03:00', '01:00', '04:00', 5, true); - - checkHighestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 1, false); - checkHighestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 2, false); - checkHighestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 3, true); - checkHighestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 4, true); - checkHighestInPeriod('2021-10-20T03:03:00', '01:00', '04:00', 5, true); - - checkHighestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 1, false); - checkHighestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 2, false); - checkHighestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 3, false); - checkHighestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 4, false); - checkHighestInPeriod('2021-10-20T04:03:00', '01:00', '04:00', 5, false); - }); - - describe("Current price is among the X hours of highest between 08:00 and 16:00", function () { - checkHighestInPeriod('2021-10-20T00:03:00', '08:00', '16:00', 1, false); - checkHighestInPeriod('2021-10-20T00:03:00', '08:00', '16:00', 2, false); - checkHighestInPeriod('2021-10-20T00:03:00', '08:00', '16:00', 3, false); - checkHighestInPeriod('2021-10-20T00:03:00', '08:00', '16:00', 4, false); - checkHighestInPeriod('2021-10-20T00:03:00', '08:00', '16:00', 5, false); - - checkHighestInPeriod('2021-10-20T08:03:00', '08:00', '16:00', 1, true); - checkHighestInPeriod('2021-10-20T08:03:00', '08:00', '16:00', 2, true); - checkHighestInPeriod('2021-10-20T08:03:00', '08:00', '16:00', 3, true); - checkHighestInPeriod('2021-10-20T08:03:00', '08:00', '16:00', 4, true); - checkHighestInPeriod('2021-10-20T08:03:00', '08:00', '16:00', 5, true); - - checkHighestInPeriod('2021-10-20T10:00:00', '08:00', '16:00', 1, false); - checkHighestInPeriod('2021-10-20T10:00:00', '08:00', '16:00', 2, false); - checkHighestInPeriod('2021-10-20T10:00:00', '08:00', '16:00', 3, true); - checkHighestInPeriod('2021-10-20T10:00:00', '08:00', '16:00', 4, true); - checkHighestInPeriod('2021-10-20T10:00:00', '08:00', '16:00', 5, true); - - checkHighestInPeriod('2021-10-20T12:03:00', '08:00', '16:00', 1, false); - checkHighestInPeriod('2021-10-20T12:03:00', '08:00', '16:00', 2, false); - checkHighestInPeriod('2021-10-20T12:03:00', '08:00', '16:00', 3, false); - checkHighestInPeriod('2021-10-20T12:03:00', '08:00', '16:00', 4, false); - checkHighestInPeriod('2021-10-20T12:03:00', '08:00', '16:00', 5, false); - - checkHighestInPeriod('2021-10-20T15:03:00', '08:00', '16:00', 1, false); - checkHighestInPeriod('2021-10-20T15:03:00', '08:00', '16:00', 2, false); - checkHighestInPeriod('2021-10-20T15:03:00', '08:00', '16:00', 3, false); - checkHighestInPeriod('2021-10-20T15:03:00', '08:00', '16:00', 4, false); - checkHighestInPeriod('2021-10-20T15:03:00', '08:00', '16:00', 5, false); - - checkHighestInPeriod('2021-10-20T16:00:00', '08:00', '16:00', 1, false); - checkHighestInPeriod('2021-10-20T16:00:00', '08:00', '16:00', 2, false); - checkHighestInPeriod('2021-10-20T16:00:00', '08:00', '16:00', 3, false); - checkHighestInPeriod('2021-10-20T16:00:00', '08:00', '16:00', 4, false); - checkHighestInPeriod('2021-10-20T16:00:00', '08:00', '16:00', 5, false); - - checkHighestInPeriod('2021-10-20T16:00:10', '08:00', '16:00', 1, false); - checkHighestInPeriod('2021-10-20T16:00:10', '08:00', '16:00', 2, false); - checkHighestInPeriod('2021-10-20T16:00:10', '08:00', '16:00', 3, false); - checkHighestInPeriod('2021-10-20T16:00:10', '08:00', '16:00', 4, false); - checkHighestInPeriod('2021-10-20T16:00:10', '08:00', '16:00', 5, false); - }); - - describe("Current price is among the X hours of highest between 13:00 and 16:01", function () { - checkHighestInPeriod('2021-10-20T00:03:00', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T00:03:00', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T00:03:00', '13:00', '16:01', 3, false); - checkHighestInPeriod('2021-10-20T00:03:00', '13:00', '16:01', 4, false); - checkHighestInPeriod('2021-10-20T00:03:00', '13:00', '16:01', 5, false); - - checkHighestInPeriod('2021-10-20T08:03:00', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T08:03:00', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T08:03:00', '13:00', '16:01', 3, false); - checkHighestInPeriod('2021-10-20T08:03:00', '13:00', '16:01', 4, false); - checkHighestInPeriod('2021-10-20T08:03:00', '13:00', '16:01', 5, false); - - checkHighestInPeriod('2021-10-20T10:00:00', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T10:00:00', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T10:00:00', '13:00', '16:01', 3, false); - checkHighestInPeriod('2021-10-20T10:00:00', '13:00', '16:01', 4, false); - checkHighestInPeriod('2021-10-20T10:00:00', '13:00', '16:01', 5, false); - - checkHighestInPeriod('2021-10-20T12:03:00', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T12:03:00', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T12:03:00', '13:00', '16:01', 3, false); - checkHighestInPeriod('2021-10-20T12:03:00', '13:00', '16:01', 4, false); - checkHighestInPeriod('2021-10-20T12:03:00', '13:00', '16:01', 5, false); - - checkHighestInPeriod('2021-10-20T15:03:00', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T15:03:00', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T15:03:00', '13:00', '16:01', 3, false); - checkHighestInPeriod('2021-10-20T15:03:00', '13:00', '16:01', 4, true); - checkHighestInPeriod('2021-10-20T15:03:00', '13:00', '16:01', 5, true); - - checkHighestInPeriod('2021-10-20T16:00:00', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T16:00:00', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T16:00:00', '13:00', '16:01', 3, true); - checkHighestInPeriod('2021-10-20T16:00:00', '13:00', '16:01', 4, true); - checkHighestInPeriod('2021-10-20T16:00:00', '13:00', '16:01', 5, true); - - checkHighestInPeriod('2021-10-20T16:00:10', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T16:00:10', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T16:00:10', '13:00', '16:01', 3, true); - checkHighestInPeriod('2021-10-20T16:00:10', '13:00', '16:01', 4, true); - checkHighestInPeriod('2021-10-20T16:00:10', '13:00', '16:01', 5, true); - - checkHighestInPeriod('2021-10-20T16:01:10', '13:00', '16:01', 1, false); - checkHighestInPeriod('2021-10-20T16:01:10', '13:00', '16:01', 2, false); - checkHighestInPeriod('2021-10-20T16:01:10', '13:00', '16:01', 3, false); - checkHighestInPeriod('2021-10-20T16:01:10', '13:00', '16:01', 4, false); - checkHighestInPeriod('2021-10-20T16:01:10', '13:00', '16:01', 5, false); - }); - - describe("Current price is among the X hours of highest between 22:00 and 05:00", function () { - checkHighestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 1, false); - checkHighestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 2, false); - checkHighestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 3, false); - checkHighestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 4, false); - checkHighestInPeriod('2021-10-20T20:03:00', '22:00', '05:00', 5, false); - - checkHighestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 1, true); - checkHighestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 2, true); - checkHighestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 3, true); - checkHighestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 4, true); - checkHighestInPeriod('2021-10-20T22:00:00', '22:00', '05:00', 5, true); - - checkHighestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 1, false); - checkHighestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 2, true); - checkHighestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 3, true); - checkHighestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 4, true); - checkHighestInPeriod('2021-10-21T00:00:00', '22:00', '05:00', 5, true); - - checkHighestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 1, false); - checkHighestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 2, false); - checkHighestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 3, false); - checkHighestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 4, true); - checkHighestInPeriod('2021-10-21T01:01:00', '22:00', '05:00', 5, true); - - checkHighestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 1, false); - checkHighestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 2, false); - checkHighestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 3, false); - checkHighestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 4, false); - checkHighestInPeriod('2021-10-21T03:00:10', '22:00', '05:00', 5, false); - - checkHighestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 1, false); - checkHighestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 2, false); - checkHighestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 3, false); - checkHighestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 4, false); - checkHighestInPeriod('2021-10-21T05:00:00', '22:00', '05:00', 5, true); - - checkHighestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 1, false); - checkHighestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 2, false); - checkHighestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 3, false); - checkHighestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 4, false); - checkHighestInPeriod('2021-10-21T05:01:00', '22:00', '05:00', 5, false); - }); - -}); diff --git a/test/prices_7.js b/test/prices_7.js deleted file mode 100644 index 9748afe..0000000 --- a/test/prices_7.js +++ /dev/null @@ -1,618 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2021-10-19T22:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal(aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(50); - return _prices; - } - const prices = [ - { - startsAt: '2021-10-19T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-19T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-20T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-20T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-20T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-20T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-20T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-20T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-20T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-20T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-20T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-20T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-20T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-20T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-20T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-20T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-20T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-20T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-20T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-20T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-20T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-20T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-20T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-20T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-21T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-21T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-21T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-21T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-21T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-21T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-21T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-21T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-21T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-21T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-21T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-21T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-21T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-21T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-21T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-21T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-21T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-21T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-21T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-21T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-21T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-21T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const findSumLowest = function (aDate, start, end, hours, expectedSum) { - it("Lowest sum of " + hours + ' prices starting at ' + aDate, function () { - const prices = getPrices(); - const localTime = moment(aDate); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, start, end); - const sumPrice = pricesLib.checkSumPrices(prices, localTime, startTs, endTs, hours, true); - if (sumPrice) { - expect(sumPrice.price).to.equal(expectedSum); - } else { - expect(expectedSum).eq(undefined); - } - }); -}; - -const findSumHighest = function (aDate, start, end, hours, expectedSum) { - it("Highest sum of " + hours + ' prices starting at ' + aDate, function () { - const prices = getPrices(); - const localTime = moment(aDate); - const { startTs, endTs } = pricesLib.daysPeriod(localTime, start, end); - const sumPrice = pricesLib.checkSumPrices(prices, localTime, startTs, endTs, hours, false); - if (sumPrice) { - expect(sumPrice.price).to.equal(expectedSum); - } else { - expect(expectedSum).eq(undefined); - } - }); -}; - -describe("The following X hours are the cheapest of the day Bergen 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("The following 2 hours are the cheapest between 00:00 - 00:00 next day", function () { - findSumLowest('2021-10-19T23:59:59', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T00:00:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T01:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T02:10:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T02:59:59', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T03:00:00', '00:00', '00:00', 2, 0.20138); - findSumLowest('2021-10-20T03:03:00', '00:00', '00:00', 2, 0.20138); - findSumLowest('2021-10-20T04:03:00', '00:00', '00:00', 2, 0.20138); - findSumLowest('2021-10-20T04:59:59', '00:00', '00:00', 2, 0.20138); - findSumLowest('2021-10-20T05:00:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T05:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T06:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T07:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T08:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T09:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T10:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T11:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T12:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T13:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T14:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T15:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T16:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T17:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T18:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T19:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T20:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T21:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T22:03:00', '00:00', '00:00', 2, undefined); - findSumLowest('2021-10-20T23:03:00', '00:00', '00:00', 2, undefined); - }); - - describe("The following 4 hours are the cheapest between 00:00 - 00:00 next day", function () { - findSumLowest('2021-10-20T00:00:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T01:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T01:59:59', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T02:00:00', '00:00', '00:00', 4, 1.20721); - findSumLowest('2021-10-20T02:10:00', '00:00', '00:00', 4, 1.20721); - findSumLowest('2021-10-20T03:03:00', '00:00', '00:00', 4, 1.20721); - findSumLowest('2021-10-20T04:03:00', '00:00', '00:00', 4, 1.20721); - findSumLowest('2021-10-20T05:03:00', '00:00', '00:00', 4, 1.20721); - findSumLowest('2021-10-20T05:59:59', '00:00', '00:00', 4, 1.20721); - findSumLowest('2021-10-20T06:00:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T06:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T07:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T08:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T09:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T10:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T11:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T12:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T13:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T14:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T15:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T16:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T17:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T18:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T19:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T20:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T21:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T22:03:00', '00:00', '00:00', 4, undefined); - findSumLowest('2021-10-20T23:03:00', '00:00', '00:00', 4, undefined); - }); - - describe("The following 6 hours are the cheapest between 00:00 - 00:00 next day", function () { - findSumLowest('2021-10-19T23:59:59', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T00:00:00', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T01:03:00', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T02:10:00', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T03:03:00', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T04:03:00', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T05:03:00', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T05:59:59', '00:00', '00:00', 6, 2.70618); - findSumLowest('2021-10-20T06:00:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T06:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T07:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T08:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T09:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T10:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T11:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T12:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T13:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T14:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T15:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T16:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T17:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T18:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T19:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T20:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T21:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T22:03:00', '00:00', '00:00', 6, undefined); - findSumLowest('2021-10-20T23:03:00', '00:00', '00:00', 6, undefined); - }); - - describe("The following 6 hours are the cheapest between 01:00 - 20:00", function () { - findSumLowest('2021-10-19T23:59:59', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T00:00:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T01:00:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T01:03:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T02:10:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T03:03:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T04:03:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T05:03:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T05:59:59', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T06:00:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T06:03:00', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T06:59:59', '01:00', '20:00', 6, 2.73731); - findSumLowest('2021-10-20T07:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T08:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T09:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T10:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T11:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T12:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T13:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T14:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T15:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T16:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T17:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T18:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T19:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T20:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T21:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T22:03:00', '01:00', '20:00', 6, undefined); - findSumLowest('2021-10-20T23:03:00', '01:00', '20:00', 6, undefined); - }); - - describe("The following 2 hours are the most expensive between 00:00 - 00:00 next day", function () { - findSumHighest('2021-10-20T00:00:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T01:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T02:10:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T03:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T04:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T05:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T06:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T06:59:59', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T07:00:00', '00:00', '00:00', 2, 2.03355); - findSumHighest('2021-10-20T07:03:00', '00:00', '00:00', 2, 2.03355); - findSumHighest('2021-10-20T08:03:00', '00:00', '00:00', 2, 2.03355); - findSumHighest('2021-10-20T08:59:59', '00:00', '00:00', 2, 2.03355); - findSumHighest('2021-10-20T09:00:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T09:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T10:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T11:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T12:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T13:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T14:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T15:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T16:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T17:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T18:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T19:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T20:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T21:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T22:03:00', '00:00', '00:00', 2, undefined); - findSumHighest('2021-10-20T23:03:00', '00:00', '00:00', 2, undefined); - }); - - describe("The following 4 hours are the most expensive between 00:00 - 00:00 next day", function () { - findSumHighest('2021-10-20T00:00:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T01:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T02:10:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T03:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T04:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T05:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T06:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T06:59:59', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T07:00:00', '00:00', '00:00', 4, 3.9275); - findSumHighest('2021-10-20T07:03:00', '00:00', '00:00', 4, 3.9275); - findSumHighest('2021-10-20T08:03:00', '00:00', '00:00', 4, 3.9275); - findSumHighest('2021-10-20T09:03:00', '00:00', '00:00', 4, 3.9275); - findSumHighest('2021-10-20T10:03:00', '00:00', '00:00', 4, 3.9275); - findSumHighest('2021-10-20T10:59:58', '00:00', '00:00', 4, 3.9275); - findSumHighest('2021-10-20T11:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T12:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T13:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T14:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T15:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T16:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T17:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T18:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T19:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T20:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T21:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T22:03:00', '00:00', '00:00', 4, undefined); - findSumHighest('2021-10-20T23:03:00', '00:00', '00:00', 4, undefined); - }); - - describe("The following 6 hours are the most expensive between 00:00 - 00:00 next day", function () { - findSumHighest('2021-10-20T00:00:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T01:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T02:10:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T03:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T04:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T05:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T05:59:59', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T06:00:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T06:03:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T07:03:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T08:03:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T09:03:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T10:03:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T11:03:00', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T11:59:59', '00:00', '00:00', 6, 5.70616); - findSumHighest('2021-10-20T12:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T13:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T14:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T15:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T16:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T17:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T18:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T19:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T20:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T21:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T22:03:00', '00:00', '00:00', 6, undefined); - findSumHighest('2021-10-20T23:03:00', '00:00', '00:00', 6, undefined); - }); - - describe("The following 6 hours are the most expensive between 08:00 - 16:00", function () { - findSumHighest('2021-10-20T00:00:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T01:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T02:10:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T03:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T04:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T05:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T05:59:59', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T06:00:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T06:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T07:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T07:59:59', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T08:00:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T08:03:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T09:03:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T10:03:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T11:03:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T11:59:59', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T12:03:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T13:03:00', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T13:59:59', '08:00', '16:00', 6, 5.59778); - findSumHighest('2021-10-20T14:00:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T14:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T15:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T16:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T17:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T18:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T19:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T20:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T21:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T22:03:00', '08:00', '16:00', 6, undefined); - findSumHighest('2021-10-20T23:03:00', '08:00', '16:00', 6, undefined); - }); - -}); - diff --git a/test/prices_8.js b/test/prices_8.js deleted file mode 100644 index c264305..0000000 --- a/test/prices_8.js +++ /dev/null @@ -1,384 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2021-10-19T22:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal(aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(50); - return _prices; - } - const prices = [ - { - startsAt: '2021-10-19T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-19T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-20T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-20T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-20T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-20T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-20T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-20T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-20T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-20T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-20T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-20T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-20T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-20T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-20T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-20T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-20T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-20T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-20T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-20T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-20T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-20T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-20T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-20T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-21T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-21T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-21T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-21T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-21T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-21T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-21T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-21T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-21T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-21T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-21T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-21T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-21T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-21T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-21T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-21T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-21T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-21T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-21T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-21T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-21T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-21T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const checkDiffPercentage = function (aDate, expectedPct) { - it(`"Price difference at ${aDate} expected to be ${expectedPct}`, function () { - const prices = getPrices(); - const diffCheck = pricesLib.priceHighLow(prices, aDate); - //console.log(aDate, ', expected: ', expectedPct, ', was: ', diffCheck); - if (diffCheck) { - expect(diffCheck.diffPercentage).to.be.closeTo(expectedPct, 0.000001); - } else { - expect(expectedPct).eq(undefined); - } - }); -}; - -describe("Price difference between high and low is less than X percent on 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Price difference between high and low is less than X percent on 20.10.2021", function () { - checkDiffPercentage('2021-10-20T01:00:00+02:00', 100 * (1.03745 - 0.1005) / 0.1005); - checkDiffPercentage('2021-10-21T01:00:00+02:00', 100 * (1.03745 - 0.1005) / 0.1005); - }); - -}); - -const checkDiffAmount = function (aDate, expectedAmount) { - it(`"Price difference at ${aDate} expected to be ${expectedAmount}`, function () { - const prices = getPrices(); - const diffCheck = pricesLib.priceHighLow(prices, aDate); - //console.log(aDate, ', expected: ', expectedAmount, ', was: ', diffCheck); - if (diffCheck) { - expect(diffCheck.diffAmount).to.be.closeTo(expectedAmount, 0.000001); - } else { - expect(expectedAmount).eq(undefined); - } - }); -}; - -describe("Price difference between high and low is less than X on 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Price difference between high and low is less than X on 20.10.2021", function () { - checkDiffAmount('2021-10-20T01:00:00+02:00', 1.03745 - 0.1005); - checkDiffAmount('2021-10-21T01:00:00+02:00', 1.03745 - 0.1005); - }); - -}); - diff --git a/test/prices_9.js b/test/prices_9.js deleted file mode 100644 index 7bca619..0000000 --- a/test/prices_9.js +++ /dev/null @@ -1,373 +0,0 @@ -const moment = require('../lib/moment-timezone-with-data'); -const expect = require("chai").expect; -const pricesLib = require('../lib/prices'); -const days = require("../lib/days"); - -let _prices = undefined; - -days.setTimeZone('Europe/Oslo'); - -const getPrices = function () { - if (_prices) { - const aDate = moment('2021-10-19T22:00:00.000Z'); - for (let p of _prices) { - expect(p.startsAt.toISOString()).to.equal(aDate.toISOString()); - aDate.add(1, 'hour'); - } - expect(_prices.length).to.equal(50); - return _prices; - } - const prices = [ - { - startsAt: '2021-10-19T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-19T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-20T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-20T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-20T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-20T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-20T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-20T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-20T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-20T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-20T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-20T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-20T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-20T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-20T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-20T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-20T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-20T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-20T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-20T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-20T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-20T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-20T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-20T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-20T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - }, - { - startsAt: '2021-10-21T00:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.38904 - }, - { - startsAt: '2021-10-21T01:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.10088 - }, - { - startsAt: '2021-10-21T02:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.1005 - }, - { - startsAt: '2021-10-21T03:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.61679 - }, - { - startsAt: '2021-10-21T04:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88948 - }, - { - startsAt: '2021-10-21T05:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9961 - }, - { - startsAt: '2021-10-21T06:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.03745 - }, - { - startsAt: '2021-10-21T07:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.98618 - }, - { - startsAt: '2021-10-21T08:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.90777 - }, - { - startsAt: '2021-10-21T09:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88918 - }, - { - startsAt: '2021-10-21T10:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T11:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89152 - }, - { - startsAt: '2021-10-21T12:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.89026 - }, - { - startsAt: '2021-10-21T13:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88364 - }, - { - startsAt: '2021-10-21T14:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88666 - }, - { - startsAt: '2021-10-21T15:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91302 - }, - { - startsAt: '2021-10-21T16:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.9745 - }, - { - startsAt: '2021-10-21T17:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 1.01176 - }, - { - startsAt: '2021-10-21T18:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.91098 - }, - { - startsAt: '2021-10-21T19:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.88568 - }, - { - startsAt: '2021-10-21T20:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.87255 - }, - { - startsAt: '2021-10-21T21:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.78723 - }, - { - startsAt: '2021-10-21T22:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.85835 - }, - { - startsAt: '2021-10-21T23:00:00.000Z', - priceArea: 'Bergen', - currency: 'Bergen', - price: 0.64062 - } - ]; - const timeZone = moment().tz(); - _prices = prices - .map(p => { - const startsAt = moment.tz(p.startsAt, 'UTC').tz(timeZone); - const time = startsAt.unix(); - const price = p.price; - return { startsAt, time, price }; - }); - return _prices; -}; - -const checkCurrentPriceLowerThanNext = function (aDate, numHours, expectedLower) { - it(`Current price at ${aDate} ${expectedLower ? 'is' : 'is not'} expected to be lower than next ${numHours} hours`, function () { - const prices = getPrices(); - const isLower = pricesLib.currentPriceLowerThanNext(prices, aDate, numHours); - expect(isLower).eq(expectedLower); - }); -}; - -const checkCurrentPriceHigherThanNext = function (aDate, numHours, expectedHigher) { - it(`Current price at ${aDate} ${expectedHigher ? 'is' : 'is not'} expected to be higher than next ${numHours} hours`, function () { - const prices = getPrices(); - const isLower = pricesLib.currentPriceHigherThanNext(prices, aDate, numHours); - expect(isLower).eq(expectedHigher); - }); -}; - -describe("Current price at 20.10.2021", function () { - - before(function () { - days.setTimeZone('Europe/Oslo'); - }); - - describe("Current price lower at 20.10.2021T12", function () { - checkCurrentPriceLowerThanNext('2021-10-20T12:00:00+02:00', 1, true); - checkCurrentPriceLowerThanNext('2021-10-20T12:00:00+02:00', 2, true); - checkCurrentPriceLowerThanNext('2021-10-20T12:00:00+02:00', 3, false); - checkCurrentPriceLowerThanNext('2021-10-20T12:00:00+02:00', 4, false); - checkCurrentPriceLowerThanNext('2021-10-20T12:00:00+02:00', 5, false); - checkCurrentPriceLowerThanNext('2021-10-20T12:00:00+02:00', 6, false); - }); - - describe("Current price higher at 20.10.2021T14", function () { - checkCurrentPriceHigherThanNext('2021-10-20T14:00:00+02:00', 1, true); - checkCurrentPriceHigherThanNext('2021-10-20T14:00:00+02:00', 2, true); - checkCurrentPriceHigherThanNext('2021-10-20T14:00:00+02:00', 3, false); - checkCurrentPriceHigherThanNext('2021-10-20T14:00:00+02:00', 4, false); - checkCurrentPriceHigherThanNext('2021-10-20T14:00:00+02:00', 5, false); - checkCurrentPriceHigherThanNext('2021-10-20T14:00:00+02:00', 6, false); - }); - -}); diff --git a/test2/nordpool_test.js b/test2/nordpool_test.js index bb46408..8c7cf83 100644 --- a/test2/nordpool_test.js +++ b/test2/nordpool_test.js @@ -1,14 +1,15 @@ 'use strict'; -const moment = require('../lib/moment-timezone-with-data'); -const days = require('../lib/days'); +import moment from 'moment-timezone'; + const nordpool = require('../lib/nordpool'); const heating = require('../lib/heating'); -const pricesLib = require('../lib/prices'); +import { PriceApi } from '@balmli/homey-utility-prices'; +const pricesLib = new PriceApi(); const testNordpool = async function ({ priceArea, currency, country, timeZone, date }) { try { - days.setTimeZone(timeZone); + moment.tz.setDefault(timeZone); const localTime = (date ? moment(date) : moment()).startOf('day'); const atHome = true; @@ -41,12 +42,12 @@ const testNordpool = async function ({ priceArea, currency, country, timeZone, d .map(p => { p.heating = heating.calcHeating(p.startsAt, atHome, homeOverride, heatingOptions); p.lowPrice22Hours = pricesLib.checkLowPrice(pricesNextHours, 22, p.startsAt).length === 1; - p.highPrice6Hours = pricesLib.checkHighPrice2(pricesNextHours, 6, p.startsAt, state).length === 1; + p.highPrice6Hours = heating.checkHighPrice2(pricesNextHours, 6, p.startsAt, state).length === 1; return p; }); console.log('pricesNextHours:', pricesNextHours.length, pricesNextHours); - const heatingOffWithHighPrices = pricesLib.checkHighPrice2(pricesNextHours, 6, localTime, state, false); + const heatingOffWithHighPrices = heating.checkHighPrice2(pricesNextHours, 6, localTime, state, false); console.log('heatingOffWithHighPrices:', heatingOffWithHighPrices.length, heatingOffWithHighPrices); } catch (err) { diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..33801f7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@tsconfig/node12/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "outDir": "build/", + "paths": { + "@balmli/homey-utility-prices": [ + "../node-homey-utility-prices" + ] + } + } +} \ No newline at end of file