(Natools.Static_Maps.S_Expressions.Templates.Dates
   pure
   (test-function T)
   (extra-decl "\
   type Main_Command is
     (Error,
      Year, Month, Day, Hour, Minute, Second,
      Padded_Month, Padded_Day,
      Padded_Hour, Padded_Minute, Padded_Second,
      Day_Of_Week,
      Big_Endian_Date, Little_Endian_Date,
      Big_Endian_Time, Little_Endian_Time,
      RFC_3339, With_Offset);")
   (Main_Command
      (hash-package Natools.Static_Maps.S_Expressions.Templates.Dates.Cmds)
      (function Main)
      (not-found Error)
      (nodes
         (Big_Endian_Date     YYYYMMDD big-endian-date)
         (Big_Endian_Time     HHMMSS time big-endian-time)
         (Day                 day)
         (Day_Of_Week         dow day-of-week)
         (Hour                hour)
         (Little_Endian_Date  DDMMYYYY little-endian-date)
         (Little_Endian_Time  SSMMHH little-endian-time)
         (Minute              minute)
         (Month               month)
         (Padded_Day          0day padded-day)
         (Padded_Hour         0hour padded-hour)
         (Padded_Minute       0minute padded-minute)
         (Padded_Month        0month padded-month)
         (Padded_Second       0second padded-second)
         (RFC_3339            rfc-3339)
         (Second              second)
         (With_Offset         with-offset in-zone)
         (Year                year)))
   (Integer
      (hash-package Natools.Static_Maps.S_Expressions.Templates.Dates.Zones)
      (function To_Time_Offset)
      (nodes
         ("+10 * 60 + 30"  ACDT)
         ("+09 * 60 + 30"  ACST)
         ("-03 * 60"       ADT)
         ("+11 * 60"       AEDT)
         ("+10 * 60"       AEST)
         ("+04 * 60 + 30"  AFT)
         ("-08 * 60"       AKDT)
         ("-09 * 60"       AKST)
         ("-03 * 60"       ART)
         ("+09 * 60"       AWDT)
         ("+08 * 60"       AWST)
         ("-01 * 60"       AZOST)
         ("+04 * 60"       AZT)
         ("+08 * 60"       BDT)
         ("+06 * 60"       BIOT)
         ("-12 * 60"       BIT)
         ("-04 * 60"       BOT)
         ("-02 * 60"       BRST)
         ("-03 * 60"       BRT)
         ("+06 * 60"       BTT)
         ("+02 * 60"       CAT)
         ("+06 * 60 + 30"  CCT)
         ("+02 * 60"       CEDT)
         ("+02 * 60"       CEST)
         ("+01 * 60"       CET)
         ("+13 * 60 + 45"  CHADT)
         ("+12 * 60 + 45"  CHAST)
         ("+08 * 60"       CHOT)
         ("+10 * 60"       ChST)
         ("+10 * 60"       CHUT)
         ("-08 * 60"       CIST)
         ("+08 * 60"       CIT)
         ("-10 * 60"       CKT)
         ("-03 * 60"       CLST)
         ("-04 * 60"       CLT)
         ("-04 * 60"       COST)
         ("-05 * 60"       COT)
         ("+08 * 60"       CT)
         ("-01 * 60"       CVT)
         ("+08 * 60 + 45"  CWST)
         ("+07 * 60"       CXT)
         ("+07 * 60"       DAVT)
         ("+10 * 60"       DDUT)
         ("+01 * 60"       DFT)
         ("-05 * 60"       EASST)
         ("-06 * 60"       EAST)
         ("+03 * 60"       EAT)
         ("-04 * 60"       EDT)
         ("+03 * 60"       EEDT)
         ("+03 * 60"       EEST)
         ("+02 * 60"       EET)
         ("+00 * 60"       EGST)
         ("-01 * 60"       EGT)
         ("+09 * 60"       EIT)
         ("+03 * 60"       FET)
         ("+12 * 60"       FJT)
         ("-03 * 60"       FKST)
         ("-04 * 60"       FKT)
         ("-02 * 60"       FNT)
         ("-06 * 60"       GALT)
         ("-09 * 60"       GAMT)
         ("+04 * 60"       GET)
         ("-03 * 60"       GFT)
         ("+12 * 60"       GILT)
         ("-09 * 60"       GIT)
         ("0"              GMT)
         ("-04 * 60"       GYT)
         ("-09 * 60"       HADT)
         ("+02 * 60"       HAEC)
         ("-10 * 60"       HAST)
         ("+08 * 60"       HKT)
         ("+05 * 60"       HMT)
         ("+07 * 60"       HOVT)
         ("-10 * 60"       HST)
         ("+07 * 60"       ICT)
         ("+03 * 60"       IDT)
         ("+03 * 60"       IOT)
         ("+04 * 60 + 30"  IRDT)
         ("+08 * 60"       IRKT)
         ("+03 * 60 + 30"  IRST)
         ("+09 * 60"       JST)
         ("+06 * 60"       KGT)
         ("+11 * 60"       KOST)
         ("+07 * 60"       KRAT)
         ("+09 * 60"       KST)
         ("+14 * 60"       LINT)
         ("+12 * 60"       MAGT)
         ("-09 * 60 + 30"  MART)
         ("+05 * 60"       MAWT)
         ("-06 * 60"       MDT)
         ("+01 * 60"       MET)
         ("+02 * 60"       MEST)
         ("+12 * 60"       MHT)
         ("+11 * 60"       MIST)
         ("-09 * 60 + 30"  MIT)
         ("+06 * 60 + 30"  MMT)
         ("+03 * 60"       MSK)
         ("+04 * 60"       MUT)
         ("+05 * 60"       MVT)
         ("+08 * 60"       MYT)
         ("+11 * 60"       NCT)
         ("-02 * 60 + 30"  NDT)
         ("+11 * 60 + 30"  NFT)
         ("+05 * 60 + 45"  NPT)
         ("-03 * 60 + 30"  NST)
         ("-03 * 60 + 30"  NT)
         ("-11 * 60"       NUT)
         ("+13 * 60"       NZDT)
         ("+12 * 60"       NZST)
         ("+06 * 60"       OMST)
         ("+05 * 60"       ORAT)
         ("-07 * 60"       PDT)
         ("-05 * 60"       PET)
         ("+12 * 60"       PETT)
         ("+10 * 60"       PGT)
         ("+13 * 60"       PHOT)
         ("+05 * 60"       PKT)
         ("-02 * 60"       PMDT)
         ("-03 * 60"       PMST)
         ("+11 * 60"       PONT)
         ("-03 * 60"       PYST)
         ("-04 * 60"       PYT)
         ("+04 * 60"       RET)
         ("-03 * 60"       ROTT)
         ("+11 * 60"       SAKT)
         ("+04 * 60"       SAMT)
         ("+02 * 60"       SAST)
         ("+11 * 60"       SBT)
         ("+04 * 60"       SCT)
         ("+08 * 60"       SGT)
         ("+05 * 60 + 30"  SLST)
         ("+11 * 60"       SRET)
         ("-03 * 60"       SRT)
         ("+03 * 60"       SYOT)
         ("-10 * 60"       TAHT)
         ("+07 * 60"       THA)
         ("+05 * 60"       TFT)
         ("+05 * 60"       TJT)
         ("+13 * 60"       TKT)
         ("+09 * 60"       TLT)
         ("+05 * 60"       TMT)
         ("+13 * 60"       TOT)
         ("+12 * 60"       TVT)
         ("0"              UCT)
         ("+08 * 60"       ULAT)
         ("+02 * 60"       USZ1)
         ("0"              UTC)
         ("-02 * 60"       UYST)
         ("-03 * 60"       UYT)
         ("+05 * 60"       UZT)
         ("-04 * 60 + 30"  VET)
         ("+10 * 60"       VLAT)
         ("+04 * 60"       VOLT)
         ("+06 * 60"       VOST)
         ("+11 * 60"       VUT)
         ("+12 * 60"       WAKT)
         ("+02 * 60"       WAST)
         ("+01 * 60"       WAT)
         ("+01 * 60"       WEDT)
         ("+01 * 60"       WEST)
         ("0"              WET)
         ("+07 * 60"       WIT)
         ("+08 * 60"       WST)
         ("+09 * 60"       YAKT)
         ("+05 * 60"       YEKT)
         ("0"              Z))))
