var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __commonJS = (cb, mod) => function __require() {
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to2, from2, except, desc) => {
  if (from2 && typeof from2 === "object" || typeof from2 === "function") {
    for (let key of __getOwnPropNames(from2))
      if (!__hasOwnProp.call(to2, key) && key !== except)
        __defProp(to2, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
  }
  return to2;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __publicField = (obj, key, value) => {
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
  return value;
};

// node_modules/.pnpm/pagerank.js@1.0.2/node_modules/pagerank.js/lib/index.js
var require_lib = __commonJS({
  "node_modules/.pnpm/pagerank.js@1.0.2/node_modules/pagerank.js/lib/index.js"(exports, module2) {
    "use strict";
    function forOwn(object, callback2) {
      if (typeof object === "object" && typeof callback2 === "function") {
        for (var key in object) {
          if (object.hasOwnProperty(key) === true) {
            if (callback2(key, object[key]) === false) {
              break;
            }
          }
        }
      }
    }
    module2.exports = function() {
      var self = {
        count: 0,
        edges: {},
        nodes: {}
      };
      self.link = function(source, target, weight) {
        if (isFinite(weight) !== true || weight === null) {
          weight = 1;
        }
        weight = parseFloat(weight);
        if (self.nodes.hasOwnProperty(source) !== true) {
          self.count++;
          self.nodes[source] = {
            weight: 0,
            outbound: 0
          };
        }
        self.nodes[source].outbound += weight;
        if (self.nodes.hasOwnProperty(target) !== true) {
          self.count++;
          self.nodes[target] = {
            weight: 0,
            outbound: 0
          };
        }
        if (self.edges.hasOwnProperty(source) !== true) {
          self.edges[source] = {};
        }
        if (self.edges[source].hasOwnProperty(target) !== true) {
          self.edges[source][target] = 0;
        }
        self.edges[source][target] += weight;
      };
      self.rank = function(alpha2, epsilon, callback2) {
        var delta = 1, inverse = 1 / self.count;
        forOwn(self.edges, function(source) {
          if (self.nodes[source].outbound > 0) {
            forOwn(self.edges[source], function(target) {
              self.edges[source][target] /= self.nodes[source].outbound;
            });
          }
        });
        forOwn(self.nodes, function(key) {
          self.nodes[key].weight = inverse;
        });
        while (delta > epsilon) {
          var leak = 0, nodes = {};
          forOwn(self.nodes, function(key, value) {
            nodes[key] = value.weight;
            if (value.outbound === 0) {
              leak += value.weight;
            }
            self.nodes[key].weight = 0;
          });
          leak *= alpha2;
          forOwn(self.nodes, function(source) {
            forOwn(self.edges[source], function(target, weight) {
              self.nodes[target].weight += alpha2 * nodes[source] * weight;
            });
            self.nodes[source].weight += (1 - alpha2) * inverse + leak * inverse;
          });
          delta = 0;
          forOwn(self.nodes, function(key, value) {
            delta += Math.abs(value.weight - nodes[key]);
          });
        }
        forOwn(self.nodes, function(key) {
          return callback2(key, self.nodes[key].weight);
        });
      };
      self.reset = function() {
        self.count = 0;
        self.edges = {};
        self.nodes = {};
      };
      return self;
    }();
  }
});

// node_modules/.pnpm/vhtml@2.2.0/node_modules/vhtml/dist/vhtml.js
var require_vhtml = __commonJS({
  "node_modules/.pnpm/vhtml@2.2.0/node_modules/vhtml/dist/vhtml.js"(exports, module2) {
    (function(global, factory) {
      typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.vhtml = factory();
    })(exports, function() {
      "use strict";
      var emptyTags = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"];
      var esc = function esc2(str) {
        return String(str).replace(/[&<>"']/g, function(s) {
          return "&" + map3[s] + ";";
        });
      };
      var map3 = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "apos" };
      var setInnerHTMLAttr = "dangerouslySetInnerHTML";
      var DOMAttributeNames = {
        className: "class",
        htmlFor: "for"
      };
      var sanitized = {};
      function h4(name, attrs) {
        var stack = [], s = "";
        attrs = attrs || {};
        for (var i = arguments.length; i-- > 2; ) {
          stack.push(arguments[i]);
        }
        if (typeof name === "function") {
          attrs.children = stack.reverse();
          return name(attrs);
        }
        if (name) {
          s += "<" + name;
          if (attrs)
            for (var _i in attrs) {
              if (attrs[_i] !== false && attrs[_i] != null && _i !== setInnerHTMLAttr) {
                s += " " + (DOMAttributeNames[_i] ? DOMAttributeNames[_i] : esc(_i)) + '="' + esc(attrs[_i]) + '"';
              }
            }
          s += ">";
        }
        if (emptyTags.indexOf(name) === -1) {
          if (attrs[setInnerHTMLAttr]) {
            s += attrs[setInnerHTMLAttr].__html;
          } else
            while (stack.length) {
              var child = stack.pop();
              if (child) {
                if (child.pop) {
                  for (var _i2 = child.length; _i2--; ) {
                    stack.push(child[_i2]);
                  }
                } else {
                  s += sanitized[child] === true ? child : esc(child);
                }
              }
            }
          s += name ? "</" + name + ">" : "";
        }
        sanitized[s] = true;
        return s;
      }
      return h4;
    });
  }
});

// node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js
var require_moment = __commonJS({
  "node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js"(exports, module2) {
    (function(global, factory) {
      typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.moment = factory();
    })(exports, function() {
      "use strict";
      var hookCallback;
      function hooks() {
        return hookCallback.apply(null, arguments);
      }
      function setHookCallback(callback2) {
        hookCallback = callback2;
      }
      function isArray2(input) {
        return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]";
      }
      function isObject2(input) {
        return input != null && Object.prototype.toString.call(input) === "[object Object]";
      }
      function hasOwnProp(a, b) {
        return Object.prototype.hasOwnProperty.call(a, b);
      }
      function isObjectEmpty(obj) {
        if (Object.getOwnPropertyNames) {
          return Object.getOwnPropertyNames(obj).length === 0;
        } else {
          var k;
          for (k in obj) {
            if (hasOwnProp(obj, k)) {
              return false;
            }
          }
          return true;
        }
      }
      function isUndefined(input) {
        return input === void 0;
      }
      function isNumber2(input) {
        return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]";
      }
      function isDate(input) {
        return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]";
      }
      function map3(arr, fn) {
        var res = [], i, arrLen = arr.length;
        for (i = 0; i < arrLen; ++i) {
          res.push(fn(arr[i], i));
        }
        return res;
      }
      function extend(a, b) {
        for (var i in b) {
          if (hasOwnProp(b, i)) {
            a[i] = b[i];
          }
        }
        if (hasOwnProp(b, "toString")) {
          a.toString = b.toString;
        }
        if (hasOwnProp(b, "valueOf")) {
          a.valueOf = b.valueOf;
        }
        return a;
      }
      function createUTC(input, format2, locale3, strict) {
        return createLocalOrUTC(input, format2, locale3, strict, true).utc();
      }
      function defaultParsingFlags() {
        return {
          empty: false,
          unusedTokens: [],
          unusedInput: [],
          overflow: -2,
          charsLeftOver: 0,
          nullInput: false,
          invalidEra: null,
          invalidMonth: null,
          invalidFormat: false,
          userInvalidated: false,
          iso: false,
          parsedDateParts: [],
          era: null,
          meridiem: null,
          rfc2822: false,
          weekdayMismatch: false
        };
      }
      function getParsingFlags(m) {
        if (m._pf == null) {
          m._pf = defaultParsingFlags();
        }
        return m._pf;
      }
      var some;
      if (Array.prototype.some) {
        some = Array.prototype.some;
      } else {
        some = function(fun) {
          var t2 = Object(this), len = t2.length >>> 0, i;
          for (i = 0; i < len; i++) {
            if (i in t2 && fun.call(this, t2[i], i, t2)) {
              return true;
            }
          }
          return false;
        };
      }
      function isValid(m) {
        var flags = null, parsedParts = false, isNowValid = m._d && !isNaN(m._d.getTime());
        if (isNowValid) {
          flags = getParsingFlags(m);
          parsedParts = some.call(flags.parsedDateParts, function(i) {
            return i != null;
          });
          isNowValid = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);
          if (m._strict) {
            isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === void 0;
          }
        }
        if (Object.isFrozen == null || !Object.isFrozen(m)) {
          m._isValid = isNowValid;
        } else {
          return isNowValid;
        }
        return m._isValid;
      }
      function createInvalid(flags) {
        var m = createUTC(NaN);
        if (flags != null) {
          extend(getParsingFlags(m), flags);
        } else {
          getParsingFlags(m).userInvalidated = true;
        }
        return m;
      }
      var momentProperties = hooks.momentProperties = [], updateInProgress = false;
      function copyConfig(to3, from3) {
        var i, prop, val, momentPropertiesLen = momentProperties.length;
        if (!isUndefined(from3._isAMomentObject)) {
          to3._isAMomentObject = from3._isAMomentObject;
        }
        if (!isUndefined(from3._i)) {
          to3._i = from3._i;
        }
        if (!isUndefined(from3._f)) {
          to3._f = from3._f;
        }
        if (!isUndefined(from3._l)) {
          to3._l = from3._l;
        }
        if (!isUndefined(from3._strict)) {
          to3._strict = from3._strict;
        }
        if (!isUndefined(from3._tzm)) {
          to3._tzm = from3._tzm;
        }
        if (!isUndefined(from3._isUTC)) {
          to3._isUTC = from3._isUTC;
        }
        if (!isUndefined(from3._offset)) {
          to3._offset = from3._offset;
        }
        if (!isUndefined(from3._pf)) {
          to3._pf = getParsingFlags(from3);
        }
        if (!isUndefined(from3._locale)) {
          to3._locale = from3._locale;
        }
        if (momentPropertiesLen > 0) {
          for (i = 0; i < momentPropertiesLen; i++) {
            prop = momentProperties[i];
            val = from3[prop];
            if (!isUndefined(val)) {
              to3[prop] = val;
            }
          }
        }
        return to3;
      }
      function Moment(config) {
        copyConfig(this, config);
        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
        if (!this.isValid()) {
          this._d = /* @__PURE__ */ new Date(NaN);
        }
        if (updateInProgress === false) {
          updateInProgress = true;
          hooks.updateOffset(this);
          updateInProgress = false;
        }
      }
      function isMoment(obj) {
        return obj instanceof Moment || obj != null && obj._isAMomentObject != null;
      }
      function warn(msg) {
        if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) {
          console.warn("Deprecation warning: " + msg);
        }
      }
      function deprecate(msg, fn) {
        var firstTime = true;
        return extend(function() {
          if (hooks.deprecationHandler != null) {
            hooks.deprecationHandler(null, msg);
          }
          if (firstTime) {
            var args = [], arg, i, key, argLen = arguments.length;
            for (i = 0; i < argLen; i++) {
              arg = "";
              if (typeof arguments[i] === "object") {
                arg += "\n[" + i + "] ";
                for (key in arguments[0]) {
                  if (hasOwnProp(arguments[0], key)) {
                    arg += key + ": " + arguments[0][key] + ", ";
                  }
                }
                arg = arg.slice(0, -2);
              } else {
                arg = arguments[i];
              }
              args.push(arg);
            }
            warn(
              msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + new Error().stack
            );
            firstTime = false;
          }
          return fn.apply(this, arguments);
        }, fn);
      }
      var deprecations = {};
      function deprecateSimple(name, msg) {
        if (hooks.deprecationHandler != null) {
          hooks.deprecationHandler(name, msg);
        }
        if (!deprecations[name]) {
          warn(msg);
          deprecations[name] = true;
        }
      }
      hooks.suppressDeprecationWarnings = false;
      hooks.deprecationHandler = null;
      function isFunction2(input) {
        return typeof Function !== "undefined" && input instanceof Function || Object.prototype.toString.call(input) === "[object Function]";
      }
      function set2(config) {
        var prop, i;
        for (i in config) {
          if (hasOwnProp(config, i)) {
            prop = config[i];
            if (isFunction2(prop)) {
              this[i] = prop;
            } else {
              this["_" + i] = prop;
            }
          }
        }
        this._config = config;
        this._dayOfMonthOrdinalParseLenient = new RegExp(
          (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source
        );
      }
      function mergeConfigs(parentConfig, childConfig) {
        var res = extend({}, parentConfig), prop;
        for (prop in childConfig) {
          if (hasOwnProp(childConfig, prop)) {
            if (isObject2(parentConfig[prop]) && isObject2(childConfig[prop])) {
              res[prop] = {};
              extend(res[prop], parentConfig[prop]);
              extend(res[prop], childConfig[prop]);
            } else if (childConfig[prop] != null) {
              res[prop] = childConfig[prop];
            } else {
              delete res[prop];
            }
          }
        }
        for (prop in parentConfig) {
          if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject2(parentConfig[prop])) {
            res[prop] = extend({}, res[prop]);
          }
        }
        return res;
      }
      function Locale(config) {
        if (config != null) {
          this.set(config);
        }
      }
      var keys;
      if (Object.keys) {
        keys = Object.keys;
      } else {
        keys = function(obj) {
          var i, res = [];
          for (i in obj) {
            if (hasOwnProp(obj, i)) {
              res.push(i);
            }
          }
          return res;
        };
      }
      var defaultCalendar = {
        sameDay: "[Today at] LT",
        nextDay: "[Tomorrow at] LT",
        nextWeek: "dddd [at] LT",
        lastDay: "[Yesterday at] LT",
        lastWeek: "[Last] dddd [at] LT",
        sameElse: "L"
      };
      function calendar(key, mom, now2) {
        var output = this._calendar[key] || this._calendar["sameElse"];
        return isFunction2(output) ? output.call(mom, now2) : output;
      }
      function zeroFill(number, targetLength, forceSign) {
        var absNumber = "" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign3 = number >= 0;
        return (sign3 ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
      }
      var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {};
      function addFormatToken(token2, padded, ordinal2, callback2) {
        var func = callback2;
        if (typeof callback2 === "string") {
          func = function() {
            return this[callback2]();
          };
        }
        if (token2) {
          formatTokenFunctions[token2] = func;
        }
        if (padded) {
          formatTokenFunctions[padded[0]] = function() {
            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
          };
        }
        if (ordinal2) {
          formatTokenFunctions[ordinal2] = function() {
            return this.localeData().ordinal(
              func.apply(this, arguments),
              token2
            );
          };
        }
      }
      function removeFormattingTokens(input) {
        if (input.match(/\[[\s\S]/)) {
          return input.replace(/^\[|\]$/g, "");
        }
        return input.replace(/\\/g, "");
      }
      function makeFormatFunction(format2) {
        var array = format2.match(formattingTokens), i, length;
        for (i = 0, length = array.length; i < length; i++) {
          if (formatTokenFunctions[array[i]]) {
            array[i] = formatTokenFunctions[array[i]];
          } else {
            array[i] = removeFormattingTokens(array[i]);
          }
        }
        return function(mom) {
          var output = "", i2;
          for (i2 = 0; i2 < length; i2++) {
            output += isFunction2(array[i2]) ? array[i2].call(mom, format2) : array[i2];
          }
          return output;
        };
      }
      function formatMoment(m, format2) {
        if (!m.isValid()) {
          return m.localeData().invalidDate();
        }
        format2 = expandFormat(format2, m.localeData());
        formatFunctions[format2] = formatFunctions[format2] || makeFormatFunction(format2);
        return formatFunctions[format2](m);
      }
      function expandFormat(format2, locale3) {
        var i = 5;
        function replaceLongDateFormatTokens(input) {
          return locale3.longDateFormat(input) || input;
        }
        localFormattingTokens.lastIndex = 0;
        while (i >= 0 && localFormattingTokens.test(format2)) {
          format2 = format2.replace(
            localFormattingTokens,
            replaceLongDateFormatTokens
          );
          localFormattingTokens.lastIndex = 0;
          i -= 1;
        }
        return format2;
      }
      var defaultLongDateFormat = {
        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"
      };
      function longDateFormat(key) {
        var format2 = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()];
        if (format2 || !formatUpper) {
          return format2;
        }
        this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function(tok) {
          if (tok === "MMMM" || tok === "MM" || tok === "DD" || tok === "dddd") {
            return tok.slice(1);
          }
          return tok;
        }).join("");
        return this._longDateFormat[key];
      }
      var defaultInvalidDate = "Invalid date";
      function invalidDate() {
        return this._invalidDate;
      }
      var defaultOrdinal = "%d", defaultDayOfMonthOrdinalParse = /\d{1,2}/;
      function ordinal(number) {
        return this._ordinal.replace("%d", number);
      }
      var defaultRelativeTime = {
        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"
      };
      function relativeTime(number, withoutSuffix, string, isFuture) {
        var output = this._relativeTime[string];
        return isFunction2(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
      }
      function pastFuture(diff2, output) {
        var format2 = this._relativeTime[diff2 > 0 ? "future" : "past"];
        return isFunction2(format2) ? format2(output) : format2.replace(/%s/i, output);
      }
      var aliases = {
        D: "date",
        dates: "date",
        date: "date",
        d: "day",
        days: "day",
        day: "day",
        e: "weekday",
        weekdays: "weekday",
        weekday: "weekday",
        E: "isoWeekday",
        isoweekdays: "isoWeekday",
        isoweekday: "isoWeekday",
        DDD: "dayOfYear",
        dayofyears: "dayOfYear",
        dayofyear: "dayOfYear",
        h: "hour",
        hours: "hour",
        hour: "hour",
        ms: "millisecond",
        milliseconds: "millisecond",
        millisecond: "millisecond",
        m: "minute",
        minutes: "minute",
        minute: "minute",
        M: "month",
        months: "month",
        month: "month",
        Q: "quarter",
        quarters: "quarter",
        quarter: "quarter",
        s: "second",
        seconds: "second",
        second: "second",
        gg: "weekYear",
        weekyears: "weekYear",
        weekyear: "weekYear",
        GG: "isoWeekYear",
        isoweekyears: "isoWeekYear",
        isoweekyear: "isoWeekYear",
        w: "week",
        weeks: "week",
        week: "week",
        W: "isoWeek",
        isoweeks: "isoWeek",
        isoweek: "isoWeek",
        y: "year",
        years: "year",
        year: "year"
      };
      function normalizeUnits(units) {
        return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : void 0;
      }
      function normalizeObjectUnits(inputObject) {
        var normalizedInput = {}, normalizedProp, prop;
        for (prop in inputObject) {
          if (hasOwnProp(inputObject, prop)) {
            normalizedProp = normalizeUnits(prop);
            if (normalizedProp) {
              normalizedInput[normalizedProp] = inputObject[prop];
            }
          }
        }
        return normalizedInput;
      }
      var priorities = {
        date: 9,
        day: 11,
        weekday: 11,
        isoWeekday: 11,
        dayOfYear: 4,
        hour: 13,
        millisecond: 16,
        minute: 14,
        month: 8,
        quarter: 7,
        second: 15,
        weekYear: 1,
        isoWeekYear: 1,
        week: 5,
        isoWeek: 5,
        year: 1
      };
      function getPrioritizedUnits(unitsObj) {
        var units = [], u;
        for (u in unitsObj) {
          if (hasOwnProp(unitsObj, u)) {
            units.push({ unit: u, priority: priorities[u] });
          }
        }
        units.sort(function(a, b) {
          return a.priority - b.priority;
        });
        return units;
      }
      var match1 = /\d/, match2 = /\d\d/, match3 = /\d{3}/, match4 = /\d{4}/, match6 = /[+-]?\d{6}/, match1to2 = /\d\d?/, match3to4 = /\d\d\d\d?/, match5to6 = /\d\d\d\d\d\d?/, match1to3 = /\d{1,3}/, match1to4 = /\d{1,4}/, match1to6 = /[+-]?\d{1,6}/, matchUnsigned = /\d+/, matchSigned = /[+-]?\d+/, matchOffset = /Z|[+-]\d\d:?\d\d/gi, matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, match1to2NoLeadingZero = /^[1-9]\d?/, match1to2HasZero = /^([1-9]\d|\d)/, regexes;
      regexes = {};
      function addRegexToken(token2, regex, strictRegex) {
        regexes[token2] = isFunction2(regex) ? regex : function(isStrict, localeData2) {
          return isStrict && strictRegex ? strictRegex : regex;
        };
      }
      function getParseRegexForToken(token2, config) {
        if (!hasOwnProp(regexes, token2)) {
          return new RegExp(unescapeFormat(token2));
        }
        return regexes[token2](config._strict, config._locale);
      }
      function unescapeFormat(s) {
        return regexEscape(
          s.replace("\\", "").replace(
            /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
            function(matched, p1, p2, p3, p4) {
              return p1 || p2 || p3 || p4;
            }
          )
        );
      }
      function regexEscape(s) {
        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
      }
      function absFloor(number) {
        if (number < 0) {
          return Math.ceil(number) || 0;
        } else {
          return Math.floor(number);
        }
      }
      function toInt(argumentForCoercion) {
        var coercedNumber = +argumentForCoercion, value = 0;
        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
          value = absFloor(coercedNumber);
        }
        return value;
      }
      var tokens = {};
      function addParseToken(token2, callback2) {
        var i, func = callback2, tokenLen;
        if (typeof token2 === "string") {
          token2 = [token2];
        }
        if (isNumber2(callback2)) {
          func = function(input, array) {
            array[callback2] = toInt(input);
          };
        }
        tokenLen = token2.length;
        for (i = 0; i < tokenLen; i++) {
          tokens[token2[i]] = func;
        }
      }
      function addWeekParseToken(token2, callback2) {
        addParseToken(token2, function(input, array, config, token3) {
          config._w = config._w || {};
          callback2(input, config._w, config, token3);
        });
      }
      function addTimeToArrayFromToken(token2, input, config) {
        if (input != null && hasOwnProp(tokens, token2)) {
          tokens[token2](input, config._a, config, token2);
        }
      }
      function isLeapYear(year) {
        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
      }
      var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8;
      addFormatToken("Y", 0, 0, function() {
        var y = this.year();
        return y <= 9999 ? zeroFill(y, 4) : "+" + y;
      });
      addFormatToken(0, ["YY", 2], 0, function() {
        return this.year() % 100;
      });
      addFormatToken(0, ["YYYY", 4], 0, "year");
      addFormatToken(0, ["YYYYY", 5], 0, "year");
      addFormatToken(0, ["YYYYYY", 6, true], 0, "year");
      addRegexToken("Y", matchSigned);
      addRegexToken("YY", match1to2, match2);
      addRegexToken("YYYY", match1to4, match4);
      addRegexToken("YYYYY", match1to6, match6);
      addRegexToken("YYYYYY", match1to6, match6);
      addParseToken(["YYYYY", "YYYYYY"], YEAR);
      addParseToken("YYYY", function(input, array) {
        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
      });
      addParseToken("YY", function(input, array) {
        array[YEAR] = hooks.parseTwoDigitYear(input);
      });
      addParseToken("Y", function(input, array) {
        array[YEAR] = parseInt(input, 10);
      });
      function daysInYear(year) {
        return isLeapYear(year) ? 366 : 365;
      }
      hooks.parseTwoDigitYear = function(input) {
        return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3);
      };
      var getSetYear = makeGetSet("FullYear", true);
      function getIsLeapYear() {
        return isLeapYear(this.year());
      }
      function makeGetSet(unit, keepTime) {
        return function(value) {
          if (value != null) {
            set$1(this, unit, value);
            hooks.updateOffset(this, keepTime);
            return this;
          } else {
            return get(this, unit);
          }
        };
      }
      function get(mom, unit) {
        if (!mom.isValid()) {
          return NaN;
        }
        var d = mom._d, isUTC = mom._isUTC;
        switch (unit) {
          case "Milliseconds":
            return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();
          case "Seconds":
            return isUTC ? d.getUTCSeconds() : d.getSeconds();
          case "Minutes":
            return isUTC ? d.getUTCMinutes() : d.getMinutes();
          case "Hours":
            return isUTC ? d.getUTCHours() : d.getHours();
          case "Date":
            return isUTC ? d.getUTCDate() : d.getDate();
          case "Day":
            return isUTC ? d.getUTCDay() : d.getDay();
          case "Month":
            return isUTC ? d.getUTCMonth() : d.getMonth();
          case "FullYear":
            return isUTC ? d.getUTCFullYear() : d.getFullYear();
          default:
            return NaN;
        }
      }
      function set$1(mom, unit, value) {
        var d, isUTC, year, month, date;
        if (!mom.isValid() || isNaN(value)) {
          return;
        }
        d = mom._d;
        isUTC = mom._isUTC;
        switch (unit) {
          case "Milliseconds":
            return void (isUTC ? d.setUTCMilliseconds(value) : d.setMilliseconds(value));
          case "Seconds":
            return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));
          case "Minutes":
            return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));
          case "Hours":
            return void (isUTC ? d.setUTCHours(value) : d.setHours(value));
          case "Date":
            return void (isUTC ? d.setUTCDate(value) : d.setDate(value));
          case "FullYear":
            break;
          default:
            return;
        }
        year = value;
        month = mom.month();
        date = mom.date();
        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
        void (isUTC ? d.setUTCFullYear(year, month, date) : d.setFullYear(year, month, date));
      }
      function stringGet(units) {
        units = normalizeUnits(units);
        if (isFunction2(this[units])) {
          return this[units]();
        }
        return this;
      }
      function stringSet(units, value) {
        if (typeof units === "object") {
          units = normalizeObjectUnits(units);
          var prioritized = getPrioritizedUnits(units), i, prioritizedLen = prioritized.length;
          for (i = 0; i < prioritizedLen; i++) {
            this[prioritized[i].unit](units[prioritized[i].unit]);
          }
        } else {
          units = normalizeUnits(units);
          if (isFunction2(this[units])) {
            return this[units](value);
          }
        }
        return this;
      }
      function mod(n, x) {
        return (n % x + x) % x;
      }
      var indexOf;
      if (Array.prototype.indexOf) {
        indexOf = Array.prototype.indexOf;
      } else {
        indexOf = function(o) {
          var i;
          for (i = 0; i < this.length; ++i) {
            if (this[i] === o) {
              return i;
            }
          }
          return -1;
        };
      }
      function daysInMonth(year, month) {
        if (isNaN(year) || isNaN(month)) {
          return NaN;
        }
        var modMonth = mod(month, 12);
        year += (month - modMonth) / 12;
        return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
      }
      addFormatToken("M", ["MM", 2], "Mo", function() {
        return this.month() + 1;
      });
      addFormatToken("MMM", 0, 0, function(format2) {
        return this.localeData().monthsShort(this, format2);
      });
      addFormatToken("MMMM", 0, 0, function(format2) {
        return this.localeData().months(this, format2);
      });
      addRegexToken("M", match1to2, match1to2NoLeadingZero);
      addRegexToken("MM", match1to2, match2);
      addRegexToken("MMM", function(isStrict, locale3) {
        return locale3.monthsShortRegex(isStrict);
      });
      addRegexToken("MMMM", function(isStrict, locale3) {
        return locale3.monthsRegex(isStrict);
      });
      addParseToken(["M", "MM"], function(input, array) {
        array[MONTH] = toInt(input) - 1;
      });
      addParseToken(["MMM", "MMMM"], function(input, array, config, token2) {
        var month = config._locale.monthsParse(input, token2, config._strict);
        if (month != null) {
          array[MONTH] = month;
        } else {
          getParsingFlags(config).invalidMonth = input;
        }
      });
      var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split(
        "_"
      ), defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord;
      function localeMonths(m, format2) {
        if (!m) {
          return isArray2(this._months) ? this._months : this._months["standalone"];
        }
        return isArray2(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format2) ? "format" : "standalone"][m.month()];
      }
      function localeMonthsShort(m, format2) {
        if (!m) {
          return isArray2(this._monthsShort) ? this._monthsShort : this._monthsShort["standalone"];
        }
        return isArray2(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format2) ? "format" : "standalone"][m.month()];
      }
      function handleStrictParse(monthName, format2, strict) {
        var i, ii, mom, llc = monthName.toLocaleLowerCase();
        if (!this._monthsParse) {
          this._monthsParse = [];
          this._longMonthsParse = [];
          this._shortMonthsParse = [];
          for (i = 0; i < 12; ++i) {
            mom = createUTC([2e3, i]);
            this._shortMonthsParse[i] = this.monthsShort(
              mom,
              ""
            ).toLocaleLowerCase();
            this._longMonthsParse[i] = this.months(mom, "").toLocaleLowerCase();
          }
        }
        if (strict) {
          if (format2 === "MMM") {
            ii = indexOf.call(this._shortMonthsParse, llc);
            return ii !== -1 ? ii : null;
          } else {
            ii = indexOf.call(this._longMonthsParse, llc);
            return ii !== -1 ? ii : null;
          }
        } else {
          if (format2 === "MMM") {
            ii = indexOf.call(this._shortMonthsParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._longMonthsParse, llc);
            return ii !== -1 ? ii : null;
          } else {
            ii = indexOf.call(this._longMonthsParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._shortMonthsParse, llc);
            return ii !== -1 ? ii : null;
          }
        }
      }
      function localeMonthsParse(monthName, format2, strict) {
        var i, mom, regex;
        if (this._monthsParseExact) {
          return handleStrictParse.call(this, monthName, format2, strict);
        }
        if (!this._monthsParse) {
          this._monthsParse = [];
          this._longMonthsParse = [];
          this._shortMonthsParse = [];
        }
        for (i = 0; i < 12; i++) {
          mom = createUTC([2e3, i]);
          if (strict && !this._longMonthsParse[i]) {
            this._longMonthsParse[i] = new RegExp(
              "^" + this.months(mom, "").replace(".", "") + "$",
              "i"
            );
            this._shortMonthsParse[i] = new RegExp(
              "^" + this.monthsShort(mom, "").replace(".", "") + "$",
              "i"
            );
          }
          if (!strict && !this._monthsParse[i]) {
            regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, "");
            this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i");
          }
          if (strict && format2 === "MMMM" && this._longMonthsParse[i].test(monthName)) {
            return i;
          } else if (strict && format2 === "MMM" && this._shortMonthsParse[i].test(monthName)) {
            return i;
          } else if (!strict && this._monthsParse[i].test(monthName)) {
            return i;
          }
        }
      }
      function setMonth(mom, value) {
        if (!mom.isValid()) {
          return mom;
        }
        if (typeof value === "string") {
          if (/^\d+$/.test(value)) {
            value = toInt(value);
          } else {
            value = mom.localeData().monthsParse(value);
            if (!isNumber2(value)) {
              return mom;
            }
          }
        }
        var month = value, date = mom.date();
        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
        void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date));
        return mom;
      }
      function getSetMonth(value) {
        if (value != null) {
          setMonth(this, value);
          hooks.updateOffset(this, true);
          return this;
        } else {
          return get(this, "Month");
        }
      }
      function getDaysInMonth() {
        return daysInMonth(this.year(), this.month());
      }
      function monthsShortRegex(isStrict) {
        if (this._monthsParseExact) {
          if (!hasOwnProp(this, "_monthsRegex")) {
            computeMonthsParse.call(this);
          }
          if (isStrict) {
            return this._monthsShortStrictRegex;
          } else {
            return this._monthsShortRegex;
          }
        } else {
          if (!hasOwnProp(this, "_monthsShortRegex")) {
            this._monthsShortRegex = defaultMonthsShortRegex;
          }
          return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
        }
      }
      function monthsRegex(isStrict) {
        if (this._monthsParseExact) {
          if (!hasOwnProp(this, "_monthsRegex")) {
            computeMonthsParse.call(this);
          }
          if (isStrict) {
            return this._monthsStrictRegex;
          } else {
            return this._monthsRegex;
          }
        } else {
          if (!hasOwnProp(this, "_monthsRegex")) {
            this._monthsRegex = defaultMonthsRegex;
          }
          return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
        }
      }
      function computeMonthsParse() {
        function cmpLenRev(a, b) {
          return b.length - a.length;
        }
        var shortPieces = [], longPieces = [], mixedPieces = [], i, mom, shortP, longP;
        for (i = 0; i < 12; i++) {
          mom = createUTC([2e3, i]);
          shortP = regexEscape(this.monthsShort(mom, ""));
          longP = regexEscape(this.months(mom, ""));
          shortPieces.push(shortP);
          longPieces.push(longP);
          mixedPieces.push(longP);
          mixedPieces.push(shortP);
        }
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);
        this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
        this._monthsShortRegex = this._monthsRegex;
        this._monthsStrictRegex = new RegExp(
          "^(" + longPieces.join("|") + ")",
          "i"
        );
        this._monthsShortStrictRegex = new RegExp(
          "^(" + shortPieces.join("|") + ")",
          "i"
        );
      }
      function createDate(y, m, d, h4, M, s, ms) {
        var date;
        if (y < 100 && y >= 0) {
          date = new Date(y + 400, m, d, h4, M, s, ms);
          if (isFinite(date.getFullYear())) {
            date.setFullYear(y);
          }
        } else {
          date = new Date(y, m, d, h4, M, s, ms);
        }
        return date;
      }
      function createUTCDate(y) {
        var date, args;
        if (y < 100 && y >= 0) {
          args = Array.prototype.slice.call(arguments);
          args[0] = y + 400;
          date = new Date(Date.UTC.apply(null, args));
          if (isFinite(date.getUTCFullYear())) {
            date.setUTCFullYear(y);
          }
        } else {
          date = new Date(Date.UTC.apply(null, arguments));
        }
        return date;
      }
      function firstWeekOffset(year, dow, doy) {
        var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
        return -fwdlw + fwd - 1;
      }
      function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
        var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear;
        if (dayOfYear <= 0) {
          resYear = year - 1;
          resDayOfYear = daysInYear(resYear) + dayOfYear;
        } else if (dayOfYear > daysInYear(year)) {
          resYear = year + 1;
          resDayOfYear = dayOfYear - daysInYear(year);
        } else {
          resYear = year;
          resDayOfYear = dayOfYear;
        }
        return {
          year: resYear,
          dayOfYear: resDayOfYear
        };
      }
      function weekOfYear(mom, dow, doy) {
        var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear;
        if (week < 1) {
          resYear = mom.year() - 1;
          resWeek = week + weeksInYear(resYear, dow, doy);
        } else if (week > weeksInYear(mom.year(), dow, doy)) {
          resWeek = week - weeksInYear(mom.year(), dow, doy);
          resYear = mom.year() + 1;
        } else {
          resYear = mom.year();
          resWeek = week;
        }
        return {
          week: resWeek,
          year: resYear
        };
      }
      function weeksInYear(year, dow, doy) {
        var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
      }
      addFormatToken("w", ["ww", 2], "wo", "week");
      addFormatToken("W", ["WW", 2], "Wo", "isoWeek");
      addRegexToken("w", match1to2, match1to2NoLeadingZero);
      addRegexToken("ww", match1to2, match2);
      addRegexToken("W", match1to2, match1to2NoLeadingZero);
      addRegexToken("WW", match1to2, match2);
      addWeekParseToken(
        ["w", "ww", "W", "WW"],
        function(input, week, config, token2) {
          week[token2.substr(0, 1)] = toInt(input);
        }
      );
      function localeWeek(mom) {
        return weekOfYear(mom, this._week.dow, this._week.doy).week;
      }
      var defaultLocaleWeek = {
        dow: 0,
        // Sunday is the first day of the week.
        doy: 6
        // The week that contains Jan 6th is the first week of the year.
      };
      function localeFirstDayOfWeek() {
        return this._week.dow;
      }
      function localeFirstDayOfYear() {
        return this._week.doy;
      }
      function getSetWeek(input) {
        var week = this.localeData().week(this);
        return input == null ? week : this.add((input - week) * 7, "d");
      }
      function getSetISOWeek(input) {
        var week = weekOfYear(this, 1, 4).week;
        return input == null ? week : this.add((input - week) * 7, "d");
      }
      addFormatToken("d", 0, "do", "day");
      addFormatToken("dd", 0, 0, function(format2) {
        return this.localeData().weekdaysMin(this, format2);
      });
      addFormatToken("ddd", 0, 0, function(format2) {
        return this.localeData().weekdaysShort(this, format2);
      });
      addFormatToken("dddd", 0, 0, function(format2) {
        return this.localeData().weekdays(this, format2);
      });
      addFormatToken("e", 0, 0, "weekday");
      addFormatToken("E", 0, 0, "isoWeekday");
      addRegexToken("d", match1to2);
      addRegexToken("e", match1to2);
      addRegexToken("E", match1to2);
      addRegexToken("dd", function(isStrict, locale3) {
        return locale3.weekdaysMinRegex(isStrict);
      });
      addRegexToken("ddd", function(isStrict, locale3) {
        return locale3.weekdaysShortRegex(isStrict);
      });
      addRegexToken("dddd", function(isStrict, locale3) {
        return locale3.weekdaysRegex(isStrict);
      });
      addWeekParseToken(["dd", "ddd", "dddd"], function(input, week, config, token2) {
        var weekday = config._locale.weekdaysParse(input, token2, config._strict);
        if (weekday != null) {
          week.d = weekday;
        } else {
          getParsingFlags(config).invalidWeekday = input;
        }
      });
      addWeekParseToken(["d", "e", "E"], function(input, week, config, token2) {
        week[token2] = toInt(input);
      });
      function parseWeekday(input, locale3) {
        if (typeof input !== "string") {
          return input;
        }
        if (!isNaN(input)) {
          return parseInt(input, 10);
        }
        input = locale3.weekdaysParse(input);
        if (typeof input === "number") {
          return input;
        }
        return null;
      }
      function parseIsoWeekday(input, locale3) {
        if (typeof input === "string") {
          return locale3.weekdaysParse(input) % 7 || 7;
        }
        return isNaN(input) ? null : input;
      }
      function shiftWeekdays(ws, n) {
        return ws.slice(n, 7).concat(ws.slice(0, n));
      }
      var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord;
      function localeWeekdays(m, format2) {
        var weekdays = isArray2(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format2) ? "format" : "standalone"];
        return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;
      }
      function localeWeekdaysShort(m) {
        return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;
      }
      function localeWeekdaysMin(m) {
        return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;
      }
      function handleStrictParse$1(weekdayName, format2, strict) {
        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
        if (!this._weekdaysParse) {
          this._weekdaysParse = [];
          this._shortWeekdaysParse = [];
          this._minWeekdaysParse = [];
          for (i = 0; i < 7; ++i) {
            mom = createUTC([2e3, 1]).day(i);
            this._minWeekdaysParse[i] = this.weekdaysMin(
              mom,
              ""
            ).toLocaleLowerCase();
            this._shortWeekdaysParse[i] = this.weekdaysShort(
              mom,
              ""
            ).toLocaleLowerCase();
            this._weekdaysParse[i] = this.weekdays(mom, "").toLocaleLowerCase();
          }
        }
        if (strict) {
          if (format2 === "dddd") {
            ii = indexOf.call(this._weekdaysParse, llc);
            return ii !== -1 ? ii : null;
          } else if (format2 === "ddd") {
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
          } else {
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
          }
        } else {
          if (format2 === "dddd") {
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
          } else if (format2 === "ddd") {
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
          } else {
            ii = indexOf.call(this._minWeekdaysParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
              return ii;
            }
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
          }
        }
      }
      function localeWeekdaysParse(weekdayName, format2, strict) {
        var i, mom, regex;
        if (this._weekdaysParseExact) {
          return handleStrictParse$1.call(this, weekdayName, format2, strict);
        }
        if (!this._weekdaysParse) {
          this._weekdaysParse = [];
          this._minWeekdaysParse = [];
          this._shortWeekdaysParse = [];
          this._fullWeekdaysParse = [];
        }
        for (i = 0; i < 7; i++) {
          mom = createUTC([2e3, 1]).day(i);
          if (strict && !this._fullWeekdaysParse[i]) {
            this._fullWeekdaysParse[i] = new RegExp(
              "^" + this.weekdays(mom, "").replace(".", "\\.?") + "$",
              "i"
            );
            this._shortWeekdaysParse[i] = new RegExp(
              "^" + this.weekdaysShort(mom, "").replace(".", "\\.?") + "$",
              "i"
            );
            this._minWeekdaysParse[i] = new RegExp(
              "^" + this.weekdaysMin(mom, "").replace(".", "\\.?") + "$",
              "i"
            );
          }
          if (!this._weekdaysParse[i]) {
            regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, "");
            this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i");
          }
          if (strict && format2 === "dddd" && this._fullWeekdaysParse[i].test(weekdayName)) {
            return i;
          } else if (strict && format2 === "ddd" && this._shortWeekdaysParse[i].test(weekdayName)) {
            return i;
          } else if (strict && format2 === "dd" && this._minWeekdaysParse[i].test(weekdayName)) {
            return i;
          } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
            return i;
          }
        }
      }
      function getSetDayOfWeek(input) {
        if (!this.isValid()) {
          return input != null ? this : NaN;
        }
        var day = get(this, "Day");
        if (input != null) {
          input = parseWeekday(input, this.localeData());
          return this.add(input - day, "d");
        } else {
          return day;
        }
      }
      function getSetLocaleDayOfWeek(input) {
        if (!this.isValid()) {
          return input != null ? this : NaN;
        }
        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
        return input == null ? weekday : this.add(input - weekday, "d");
      }
      function getSetISODayOfWeek(input) {
        if (!this.isValid()) {
          return input != null ? this : NaN;
        }
        if (input != null) {
          var weekday = parseIsoWeekday(input, this.localeData());
          return this.day(this.day() % 7 ? weekday : weekday - 7);
        } else {
          return this.day() || 7;
        }
      }
      function weekdaysRegex(isStrict) {
        if (this._weekdaysParseExact) {
          if (!hasOwnProp(this, "_weekdaysRegex")) {
            computeWeekdaysParse.call(this);
          }
          if (isStrict) {
            return this._weekdaysStrictRegex;
          } else {
            return this._weekdaysRegex;
          }
        } else {
          if (!hasOwnProp(this, "_weekdaysRegex")) {
            this._weekdaysRegex = defaultWeekdaysRegex;
          }
          return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
        }
      }
      function weekdaysShortRegex(isStrict) {
        if (this._weekdaysParseExact) {
          if (!hasOwnProp(this, "_weekdaysRegex")) {
            computeWeekdaysParse.call(this);
          }
          if (isStrict) {
            return this._weekdaysShortStrictRegex;
          } else {
            return this._weekdaysShortRegex;
          }
        } else {
          if (!hasOwnProp(this, "_weekdaysShortRegex")) {
            this._weekdaysShortRegex = defaultWeekdaysShortRegex;
          }
          return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
        }
      }
      function weekdaysMinRegex(isStrict) {
        if (this._weekdaysParseExact) {
          if (!hasOwnProp(this, "_weekdaysRegex")) {
            computeWeekdaysParse.call(this);
          }
          if (isStrict) {
            return this._weekdaysMinStrictRegex;
          } else {
            return this._weekdaysMinRegex;
          }
        } else {
          if (!hasOwnProp(this, "_weekdaysMinRegex")) {
            this._weekdaysMinRegex = defaultWeekdaysMinRegex;
          }
          return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
        }
      }
      function computeWeekdaysParse() {
        function cmpLenRev(a, b) {
          return b.length - a.length;
        }
        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i, mom, minp, shortp, longp;
        for (i = 0; i < 7; i++) {
          mom = createUTC([2e3, 1]).day(i);
          minp = regexEscape(this.weekdaysMin(mom, ""));
          shortp = regexEscape(this.weekdaysShort(mom, ""));
          longp = regexEscape(this.weekdays(mom, ""));
          minPieces.push(minp);
          shortPieces.push(shortp);
          longPieces.push(longp);
          mixedPieces.push(minp);
          mixedPieces.push(shortp);
          mixedPieces.push(longp);
        }
        minPieces.sort(cmpLenRev);
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);
        this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
        this._weekdaysShortRegex = this._weekdaysRegex;
        this._weekdaysMinRegex = this._weekdaysRegex;
        this._weekdaysStrictRegex = new RegExp(
          "^(" + longPieces.join("|") + ")",
          "i"
        );
        this._weekdaysShortStrictRegex = new RegExp(
          "^(" + shortPieces.join("|") + ")",
          "i"
        );
        this._weekdaysMinStrictRegex = new RegExp(
          "^(" + minPieces.join("|") + ")",
          "i"
        );
      }
      function hFormat() {
        return this.hours() % 12 || 12;
      }
      function kFormat() {
        return this.hours() || 24;
      }
      addFormatToken("H", ["HH", 2], 0, "hour");
      addFormatToken("h", ["hh", 2], 0, hFormat);
      addFormatToken("k", ["kk", 2], 0, kFormat);
      addFormatToken("hmm", 0, 0, function() {
        return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2);
      });
      addFormatToken("hmmss", 0, 0, function() {
        return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
      });
      addFormatToken("Hmm", 0, 0, function() {
        return "" + this.hours() + zeroFill(this.minutes(), 2);
      });
      addFormatToken("Hmmss", 0, 0, function() {
        return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
      });
      function meridiem(token2, lowercase) {
        addFormatToken(token2, 0, 0, function() {
          return this.localeData().meridiem(
            this.hours(),
            this.minutes(),
            lowercase
          );
        });
      }
      meridiem("a", true);
      meridiem("A", false);
      function matchMeridiem(isStrict, locale3) {
        return locale3._meridiemParse;
      }
      addRegexToken("a", matchMeridiem);
      addRegexToken("A", matchMeridiem);
      addRegexToken("H", match1to2, match1to2HasZero);
      addRegexToken("h", match1to2, match1to2NoLeadingZero);
      addRegexToken("k", match1to2, match1to2NoLeadingZero);
      addRegexToken("HH", match1to2, match2);
      addRegexToken("hh", match1to2, match2);
      addRegexToken("kk", match1to2, match2);
      addRegexToken("hmm", match3to4);
      addRegexToken("hmmss", match5to6);
      addRegexToken("Hmm", match3to4);
      addRegexToken("Hmmss", match5to6);
      addParseToken(["H", "HH"], HOUR);
      addParseToken(["k", "kk"], function(input, array, config) {
        var kInput = toInt(input);
        array[HOUR] = kInput === 24 ? 0 : kInput;
      });
      addParseToken(["a", "A"], function(input, array, config) {
        config._isPm = config._locale.isPM(input);
        config._meridiem = input;
      });
      addParseToken(["h", "hh"], function(input, array, config) {
        array[HOUR] = toInt(input);
        getParsingFlags(config).bigHour = true;
      });
      addParseToken("hmm", function(input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
        getParsingFlags(config).bigHour = true;
      });
      addParseToken("hmmss", function(input, array, config) {
        var pos1 = input.length - 4, pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
        getParsingFlags(config).bigHour = true;
      });
      addParseToken("Hmm", function(input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
      });
      addParseToken("Hmmss", function(input, array, config) {
        var pos1 = input.length - 4, pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
      });
      function localeIsPM(input) {
        return (input + "").toLowerCase().charAt(0) === "p";
      }
      var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, getSetHour = makeGetSet("Hours", true);
      function localeMeridiem(hours2, minutes2, isLower) {
        if (hours2 > 11) {
          return isLower ? "pm" : "PM";
        } else {
          return isLower ? "am" : "AM";
        }
      }
      var baseConfig = {
        calendar: defaultCalendar,
        longDateFormat: defaultLongDateFormat,
        invalidDate: defaultInvalidDate,
        ordinal: defaultOrdinal,
        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
        relativeTime: defaultRelativeTime,
        months: defaultLocaleMonths,
        monthsShort: defaultLocaleMonthsShort,
        week: defaultLocaleWeek,
        weekdays: defaultLocaleWeekdays,
        weekdaysMin: defaultLocaleWeekdaysMin,
        weekdaysShort: defaultLocaleWeekdaysShort,
        meridiemParse: defaultLocaleMeridiemParse
      };
      var locales = {}, localeFamilies = {}, globalLocale;
      function commonPrefix(arr1, arr2) {
        var i, minl = Math.min(arr1.length, arr2.length);
        for (i = 0; i < minl; i += 1) {
          if (arr1[i] !== arr2[i]) {
            return i;
          }
        }
        return minl;
      }
      function normalizeLocale(key) {
        return key ? key.toLowerCase().replace("_", "-") : key;
      }
      function chooseLocale(names2) {
        var i = 0, j, next, locale3, split;
        while (i < names2.length) {
          split = normalizeLocale(names2[i]).split("-");
          j = split.length;
          next = normalizeLocale(names2[i + 1]);
          next = next ? next.split("-") : null;
          while (j > 0) {
            locale3 = loadLocale(split.slice(0, j).join("-"));
            if (locale3) {
              return locale3;
            }
            if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {
              break;
            }
            j--;
          }
          i++;
        }
        return globalLocale;
      }
      function isLocaleNameSane(name) {
        return !!(name && name.match("^[^/\\\\]*$"));
      }
      function loadLocale(name) {
        var oldLocale = null, aliasedRequire;
        if (locales[name] === void 0 && typeof module2 !== "undefined" && module2 && module2.exports && isLocaleNameSane(name)) {
          try {
            oldLocale = globalLocale._abbr;
            aliasedRequire = require;
            aliasedRequire("./locale/" + name);
            getSetGlobalLocale(oldLocale);
          } catch (e) {
            locales[name] = null;
          }
        }
        return locales[name];
      }
      function getSetGlobalLocale(key, values) {
        var data;
        if (key) {
          if (isUndefined(values)) {
            data = getLocale(key);
          } else {
            data = defineLocale(key, values);
          }
          if (data) {
            globalLocale = data;
          } else {
            if (typeof console !== "undefined" && console.warn) {
              console.warn(
                "Locale " + key + " not found. Did you forget to load it?"
              );
            }
          }
        }
        return globalLocale._abbr;
      }
      function defineLocale(name, config) {
        if (config !== null) {
          var locale3, parentConfig = baseConfig;
          config.abbr = name;
          if (locales[name] != null) {
            deprecateSimple(
              "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."
            );
            parentConfig = locales[name]._config;
          } else if (config.parentLocale != null) {
            if (locales[config.parentLocale] != null) {
              parentConfig = locales[config.parentLocale]._config;
            } else {
              locale3 = loadLocale(config.parentLocale);
              if (locale3 != null) {
                parentConfig = locale3._config;
              } else {
                if (!localeFamilies[config.parentLocale]) {
                  localeFamilies[config.parentLocale] = [];
                }
                localeFamilies[config.parentLocale].push({
                  name,
                  config
                });
                return null;
              }
            }
          }
          locales[name] = new Locale(mergeConfigs(parentConfig, config));
          if (localeFamilies[name]) {
            localeFamilies[name].forEach(function(x) {
              defineLocale(x.name, x.config);
            });
          }
          getSetGlobalLocale(name);
          return locales[name];
        } else {
          delete locales[name];
          return null;
        }
      }
      function updateLocale(name, config) {
        if (config != null) {
          var locale3, tmpLocale, parentConfig = baseConfig;
          if (locales[name] != null && locales[name].parentLocale != null) {
            locales[name].set(mergeConfigs(locales[name]._config, config));
          } else {
            tmpLocale = loadLocale(name);
            if (tmpLocale != null) {
              parentConfig = tmpLocale._config;
            }
            config = mergeConfigs(parentConfig, config);
            if (tmpLocale == null) {
              config.abbr = name;
            }
            locale3 = new Locale(config);
            locale3.parentLocale = locales[name];
            locales[name] = locale3;
          }
          getSetGlobalLocale(name);
        } else {
          if (locales[name] != null) {
            if (locales[name].parentLocale != null) {
              locales[name] = locales[name].parentLocale;
              if (name === getSetGlobalLocale()) {
                getSetGlobalLocale(name);
              }
            } else if (locales[name] != null) {
              delete locales[name];
            }
          }
        }
        return locales[name];
      }
      function getLocale(key) {
        var locale3;
        if (key && key._locale && key._locale._abbr) {
          key = key._locale._abbr;
        }
        if (!key) {
          return globalLocale;
        }
        if (!isArray2(key)) {
          locale3 = loadLocale(key);
          if (locale3) {
            return locale3;
          }
          key = [key];
        }
        return chooseLocale(key);
      }
      function listLocales() {
        return keys(locales);
      }
      function checkOverflow(m) {
        var overflow, a = m._a;
        if (a && getParsingFlags(m).overflow === -2) {
          overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;
          if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
            overflow = DATE;
          }
          if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
            overflow = WEEK;
          }
          if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
            overflow = WEEKDAY;
          }
          getParsingFlags(m).overflow = overflow;
        }
        return m;
      }
      var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [
        ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/],
        ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/],
        ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/],
        ["GGGG-[W]WW", /\d{4}-W\d\d/, false],
        ["YYYY-DDD", /\d{4}-\d{3}/],
        ["YYYY-MM", /\d{4}-\d\d/, false],
        ["YYYYYYMMDD", /[+-]\d{10}/],
        ["YYYYMMDD", /\d{8}/],
        ["GGGG[W]WWE", /\d{4}W\d{3}/],
        ["GGGG[W]WW", /\d{4}W\d{2}/, false],
        ["YYYYDDD", /\d{7}/],
        ["YYYYMM", /\d{6}/, false],
        ["YYYY", /\d{4}/, false]
      ], isoTimes = [
        ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/],
        ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/],
        ["HH:mm:ss", /\d\d:\d\d:\d\d/],
        ["HH:mm", /\d\d:\d\d/],
        ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/],
        ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/],
        ["HHmmss", /\d\d\d\d\d\d/],
        ["HHmm", /\d\d\d\d/],
        ["HH", /\d\d/]
      ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = {
        UT: 0,
        GMT: 0,
        EDT: -4 * 60,
        EST: -5 * 60,
        CDT: -5 * 60,
        CST: -6 * 60,
        MDT: -6 * 60,
        MST: -7 * 60,
        PDT: -7 * 60,
        PST: -8 * 60
      };
      function configFromISO(config) {
        var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length;
        if (match) {
          getParsingFlags(config).iso = true;
          for (i = 0, l = isoDatesLen; i < l; i++) {
            if (isoDates[i][1].exec(match[1])) {
              dateFormat = isoDates[i][0];
              allowTime = isoDates[i][2] !== false;
              break;
            }
          }
          if (dateFormat == null) {
            config._isValid = false;
            return;
          }
          if (match[3]) {
            for (i = 0, l = isoTimesLen; i < l; i++) {
              if (isoTimes[i][1].exec(match[3])) {
                timeFormat = (match[2] || " ") + isoTimes[i][0];
                break;
              }
            }
            if (timeFormat == null) {
              config._isValid = false;
              return;
            }
          }
          if (!allowTime && timeFormat != null) {
            config._isValid = false;
            return;
          }
          if (match[4]) {
            if (tzRegex.exec(match[4])) {
              tzFormat = "Z";
            } else {
              config._isValid = false;
              return;
            }
          }
          config._f = dateFormat + (timeFormat || "") + (tzFormat || "");
          configFromStringAndFormat(config);
        } else {
          config._isValid = false;
        }
      }
      function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
        var result = [
          untruncateYear(yearStr),
          defaultLocaleMonthsShort.indexOf(monthStr),
          parseInt(dayStr, 10),
          parseInt(hourStr, 10),
          parseInt(minuteStr, 10)
        ];
        if (secondStr) {
          result.push(parseInt(secondStr, 10));
        }
        return result;
      }
      function untruncateYear(yearStr) {
        var year = parseInt(yearStr, 10);
        if (year <= 49) {
          return 2e3 + year;
        } else if (year <= 999) {
          return 1900 + year;
        }
        return year;
      }
      function preprocessRFC2822(s) {
        return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
      }
      function checkWeekday(weekdayStr, parsedInput, config) {
        if (weekdayStr) {
          var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date(
            parsedInput[0],
            parsedInput[1],
            parsedInput[2]
          ).getDay();
          if (weekdayProvided !== weekdayActual) {
            getParsingFlags(config).weekdayMismatch = true;
            config._isValid = false;
            return false;
          }
        }
        return true;
      }
      function calculateOffset(obsOffset, militaryOffset, numOffset) {
        if (obsOffset) {
          return obsOffsets[obsOffset];
        } else if (militaryOffset) {
          return 0;
        } else {
          var hm = parseInt(numOffset, 10), m = hm % 100, h4 = (hm - m) / 100;
          return h4 * 60 + m;
        }
      }
      function configFromRFC2822(config) {
        var match = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray;
        if (match) {
          parsedArray = extractFromRFC2822Strings(
            match[4],
            match[3],
            match[2],
            match[5],
            match[6],
            match[7]
          );
          if (!checkWeekday(match[1], parsedArray, config)) {
            return;
          }
          config._a = parsedArray;
          config._tzm = calculateOffset(match[8], match[9], match[10]);
          config._d = createUTCDate.apply(null, config._a);
          config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
          getParsingFlags(config).rfc2822 = true;
        } else {
          config._isValid = false;
        }
      }
      function configFromString(config) {
        var matched = aspNetJsonRegex.exec(config._i);
        if (matched !== null) {
          config._d = /* @__PURE__ */ new Date(+matched[1]);
          return;
        }
        configFromISO(config);
        if (config._isValid === false) {
          delete config._isValid;
        } else {
          return;
        }
        configFromRFC2822(config);
        if (config._isValid === false) {
          delete config._isValid;
        } else {
          return;
        }
        if (config._strict) {
          config._isValid = false;
        } else {
          hooks.createFromInputFallback(config);
        }
      }
      hooks.createFromInputFallback = deprecate(
        "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",
        function(config) {
          config._d = /* @__PURE__ */ new Date(config._i + (config._useUTC ? " UTC" : ""));
        }
      );
      function defaults2(a, b, c) {
        if (a != null) {
          return a;
        }
        if (b != null) {
          return b;
        }
        return c;
      }
      function currentDateArray(config) {
        var nowValue = new Date(hooks.now());
        if (config._useUTC) {
          return [
            nowValue.getUTCFullYear(),
            nowValue.getUTCMonth(),
            nowValue.getUTCDate()
          ];
        }
        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
      }
      function configFromArray(config) {
        var i, date, input = [], currentDate, expectedWeekday, yearToUse;
        if (config._d) {
          return;
        }
        currentDate = currentDateArray(config);
        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
          dayOfYearFromWeekInfo(config);
        }
        if (config._dayOfYear != null) {
          yearToUse = defaults2(config._a[YEAR], currentDate[YEAR]);
          if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
            getParsingFlags(config)._overflowDayOfYear = true;
          }
          date = createUTCDate(yearToUse, 0, config._dayOfYear);
          config._a[MONTH] = date.getUTCMonth();
          config._a[DATE] = date.getUTCDate();
        }
        for (i = 0; i < 3 && config._a[i] == null; ++i) {
          config._a[i] = input[i] = currentDate[i];
        }
        for (; i < 7; i++) {
          config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];
        }
        if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
          config._nextDay = true;
          config._a[HOUR] = 0;
        }
        config._d = (config._useUTC ? createUTCDate : createDate).apply(
          null,
          input
        );
        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
        if (config._tzm != null) {
          config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
        }
        if (config._nextDay) {
          config._a[HOUR] = 24;
        }
        if (config._w && typeof config._w.d !== "undefined" && config._w.d !== expectedWeekday) {
          getParsingFlags(config).weekdayMismatch = true;
        }
      }
      function dayOfYearFromWeekInfo(config) {
        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
        w = config._w;
        if (w.GG != null || w.W != null || w.E != null) {
          dow = 1;
          doy = 4;
          weekYear = defaults2(
            w.GG,
            config._a[YEAR],
            weekOfYear(createLocal(), 1, 4).year
          );
          week = defaults2(w.W, 1);
          weekday = defaults2(w.E, 1);
          if (weekday < 1 || weekday > 7) {
            weekdayOverflow = true;
          }
        } else {
          dow = config._locale._week.dow;
          doy = config._locale._week.doy;
          curWeek = weekOfYear(createLocal(), dow, doy);
          weekYear = defaults2(w.gg, config._a[YEAR], curWeek.year);
          week = defaults2(w.w, curWeek.week);
          if (w.d != null) {
            weekday = w.d;
            if (weekday < 0 || weekday > 6) {
              weekdayOverflow = true;
            }
          } else if (w.e != null) {
            weekday = w.e + dow;
            if (w.e < 0 || w.e > 6) {
              weekdayOverflow = true;
            }
          } else {
            weekday = dow;
          }
        }
        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
          getParsingFlags(config)._overflowWeeks = true;
        } else if (weekdayOverflow != null) {
          getParsingFlags(config)._overflowWeekday = true;
        } else {
          temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
          config._a[YEAR] = temp.year;
          config._dayOfYear = temp.dayOfYear;
        }
      }
      hooks.ISO_8601 = function() {
      };
      hooks.RFC_2822 = function() {
      };
      function configFromStringAndFormat(config) {
        if (config._f === hooks.ISO_8601) {
          configFromISO(config);
          return;
        }
        if (config._f === hooks.RFC_2822) {
          configFromRFC2822(config);
          return;
        }
        config._a = [];
        getParsingFlags(config).empty = true;
        var string = "" + config._i, i, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen;
        tokens2 = expandFormat(config._f, config._locale).match(formattingTokens) || [];
        tokenLen = tokens2.length;
        for (i = 0; i < tokenLen; i++) {
          token2 = tokens2[i];
          parsedInput = (string.match(getParseRegexForToken(token2, config)) || [])[0];
          if (parsedInput) {
            skipped = string.substr(0, string.indexOf(parsedInput));
            if (skipped.length > 0) {
              getParsingFlags(config).unusedInput.push(skipped);
            }
            string = string.slice(
              string.indexOf(parsedInput) + parsedInput.length
            );
            totalParsedInputLength += parsedInput.length;
          }
          if (formatTokenFunctions[token2]) {
            if (parsedInput) {
              getParsingFlags(config).empty = false;
            } else {
              getParsingFlags(config).unusedTokens.push(token2);
            }
            addTimeToArrayFromToken(token2, parsedInput, config);
          } else if (config._strict && !parsedInput) {
            getParsingFlags(config).unusedTokens.push(token2);
          }
        }
        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
        if (string.length > 0) {
          getParsingFlags(config).unusedInput.push(string);
        }
        if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
          getParsingFlags(config).bigHour = void 0;
        }
        getParsingFlags(config).parsedDateParts = config._a.slice(0);
        getParsingFlags(config).meridiem = config._meridiem;
        config._a[HOUR] = meridiemFixWrap(
          config._locale,
          config._a[HOUR],
          config._meridiem
        );
        era = getParsingFlags(config).era;
        if (era !== null) {
          config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
        }
        configFromArray(config);
        checkOverflow(config);
      }
      function meridiemFixWrap(locale3, hour, meridiem2) {
        var isPm;
        if (meridiem2 == null) {
          return hour;
        }
        if (locale3.meridiemHour != null) {
          return locale3.meridiemHour(hour, meridiem2);
        } else if (locale3.isPM != null) {
          isPm = locale3.isPM(meridiem2);
          if (isPm && hour < 12) {
            hour += 12;
          }
          if (!isPm && hour === 12) {
            hour = 0;
          }
          return hour;
        } else {
          return hour;
        }
      }
      function configFromStringAndArray(config) {
        var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false, configfLen = config._f.length;
        if (configfLen === 0) {
          getParsingFlags(config).invalidFormat = true;
          config._d = /* @__PURE__ */ new Date(NaN);
          return;
        }
        for (i = 0; i < configfLen; i++) {
          currentScore = 0;
          validFormatFound = false;
          tempConfig = copyConfig({}, config);
          if (config._useUTC != null) {
            tempConfig._useUTC = config._useUTC;
          }
          tempConfig._f = config._f[i];
          configFromStringAndFormat(tempConfig);
          if (isValid(tempConfig)) {
            validFormatFound = true;
          }
          currentScore += getParsingFlags(tempConfig).charsLeftOver;
          currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
          getParsingFlags(tempConfig).score = currentScore;
          if (!bestFormatIsValid) {
            if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
              scoreToBeat = currentScore;
              bestMoment = tempConfig;
              if (validFormatFound) {
                bestFormatIsValid = true;
              }
            }
          } else {
            if (currentScore < scoreToBeat) {
              scoreToBeat = currentScore;
              bestMoment = tempConfig;
            }
          }
        }
        extend(config, bestMoment || tempConfig);
      }
      function configFromObject(config) {
        if (config._d) {
          return;
        }
        var i = normalizeObjectUnits(config._i), dayOrDate = i.day === void 0 ? i.date : i.day;
        config._a = map3(
          [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
          function(obj) {
            return obj && parseInt(obj, 10);
          }
        );
        configFromArray(config);
      }
      function createFromConfig(config) {
        var res = new Moment(checkOverflow(prepareConfig(config)));
        if (res._nextDay) {
          res.add(1, "d");
          res._nextDay = void 0;
        }
        return res;
      }
      function prepareConfig(config) {
        var input = config._i, format2 = config._f;
        config._locale = config._locale || getLocale(config._l);
        if (input === null || format2 === void 0 && input === "") {
          return createInvalid({ nullInput: true });
        }
        if (typeof input === "string") {
          config._i = input = config._locale.preparse(input);
        }
        if (isMoment(input)) {
          return new Moment(checkOverflow(input));
        } else if (isDate(input)) {
          config._d = input;
        } else if (isArray2(format2)) {
          configFromStringAndArray(config);
        } else if (format2) {
          configFromStringAndFormat(config);
        } else {
          configFromInput(config);
        }
        if (!isValid(config)) {
          config._d = null;
        }
        return config;
      }
      function configFromInput(config) {
        var input = config._i;
        if (isUndefined(input)) {
          config._d = new Date(hooks.now());
        } else if (isDate(input)) {
          config._d = new Date(input.valueOf());
        } else if (typeof input === "string") {
          configFromString(config);
        } else if (isArray2(input)) {
          config._a = map3(input.slice(0), function(obj) {
            return parseInt(obj, 10);
          });
          configFromArray(config);
        } else if (isObject2(input)) {
          configFromObject(config);
        } else if (isNumber2(input)) {
          config._d = new Date(input);
        } else {
          hooks.createFromInputFallback(config);
        }
      }
      function createLocalOrUTC(input, format2, locale3, strict, isUTC) {
        var c = {};
        if (format2 === true || format2 === false) {
          strict = format2;
          format2 = void 0;
        }
        if (locale3 === true || locale3 === false) {
          strict = locale3;
          locale3 = void 0;
        }
        if (isObject2(input) && isObjectEmpty(input) || isArray2(input) && input.length === 0) {
          input = void 0;
        }
        c._isAMomentObject = true;
        c._useUTC = c._isUTC = isUTC;
        c._l = locale3;
        c._i = input;
        c._f = format2;
        c._strict = strict;
        return createFromConfig(c);
      }
      function createLocal(input, format2, locale3, strict) {
        return createLocalOrUTC(input, format2, locale3, strict, false);
      }
      var prototypeMin = deprecate(
        "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",
        function() {
          var other = createLocal.apply(null, arguments);
          if (this.isValid() && other.isValid()) {
            return other < this ? this : other;
          } else {
            return createInvalid();
          }
        }
      ), prototypeMax = deprecate(
        "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",
        function() {
          var other = createLocal.apply(null, arguments);
          if (this.isValid() && other.isValid()) {
            return other > this ? this : other;
          } else {
            return createInvalid();
          }
        }
      );
      function pickBy(fn, moments) {
        var res, i;
        if (moments.length === 1 && isArray2(moments[0])) {
          moments = moments[0];
        }
        if (!moments.length) {
          return createLocal();
        }
        res = moments[0];
        for (i = 1; i < moments.length; ++i) {
          if (!moments[i].isValid() || moments[i][fn](res)) {
            res = moments[i];
          }
        }
        return res;
      }
      function min() {
        var args = [].slice.call(arguments, 0);
        return pickBy("isBefore", args);
      }
      function max() {
        var args = [].slice.call(arguments, 0);
        return pickBy("isAfter", args);
      }
      var now = function() {
        return Date.now ? Date.now() : +/* @__PURE__ */ new Date();
      };
      var ordering = [
        "year",
        "quarter",
        "month",
        "week",
        "day",
        "hour",
        "minute",
        "second",
        "millisecond"
      ];
      function isDurationValid(m) {
        var key, unitHasDecimal = false, i, orderLen = ordering.length;
        for (key in m) {
          if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
            return false;
          }
        }
        for (i = 0; i < orderLen; ++i) {
          if (m[ordering[i]]) {
            if (unitHasDecimal) {
              return false;
            }
            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
              unitHasDecimal = true;
            }
          }
        }
        return true;
      }
      function isValid$1() {
        return this._isValid;
      }
      function createInvalid$1() {
        return createDuration(NaN);
      }
      function Duration(duration) {
        var normalizedInput = normalizeObjectUnits(duration), years2 = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months2 = normalizedInput.month || 0, weeks2 = normalizedInput.week || normalizedInput.isoWeek || 0, days2 = normalizedInput.day || 0, hours2 = normalizedInput.hour || 0, minutes2 = normalizedInput.minute || 0, seconds2 = normalizedInput.second || 0, milliseconds2 = normalizedInput.millisecond || 0;
        this._isValid = isDurationValid(normalizedInput);
        this._milliseconds = +milliseconds2 + seconds2 * 1e3 + // 1000
        minutes2 * 6e4 + // 1000 * 60
        hours2 * 1e3 * 60 * 60;
        this._days = +days2 + weeks2 * 7;
        this._months = +months2 + quarters * 3 + years2 * 12;
        this._data = {};
        this._locale = getLocale();
        this._bubble();
      }
      function isDuration(obj) {
        return obj instanceof Duration;
      }
      function absRound(number) {
        if (number < 0) {
          return Math.round(-1 * number) * -1;
        } else {
          return Math.round(number);
        }
      }
      function compareArrays(array1, array2, dontConvert) {
        var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i;
        for (i = 0; i < len; i++) {
          if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {
            diffs++;
          }
        }
        return diffs + lengthDiff;
      }
      function offset(token2, separator) {
        addFormatToken(token2, 0, 0, function() {
          var offset2 = this.utcOffset(), sign3 = "+";
          if (offset2 < 0) {
            offset2 = -offset2;
            sign3 = "-";
          }
          return sign3 + zeroFill(~~(offset2 / 60), 2) + separator + zeroFill(~~offset2 % 60, 2);
        });
      }
      offset("Z", ":");
      offset("ZZ", "");
      addRegexToken("Z", matchShortOffset);
      addRegexToken("ZZ", matchShortOffset);
      addParseToken(["Z", "ZZ"], function(input, array, config) {
        config._useUTC = true;
        config._tzm = offsetFromString(matchShortOffset, input);
      });
      var chunkOffset = /([\+\-]|\d\d)/gi;
      function offsetFromString(matcher, string) {
        var matches = (string || "").match(matcher), chunk, parts, minutes2;
        if (matches === null) {
          return null;
        }
        chunk = matches[matches.length - 1] || [];
        parts = (chunk + "").match(chunkOffset) || ["-", 0, 0];
        minutes2 = +(parts[1] * 60) + toInt(parts[2]);
        return minutes2 === 0 ? 0 : parts[0] === "+" ? minutes2 : -minutes2;
      }
      function cloneWithOffset(input, model) {
        var res, diff2;
        if (model._isUTC) {
          res = model.clone();
          diff2 = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
          res._d.setTime(res._d.valueOf() + diff2);
          hooks.updateOffset(res, false);
          return res;
        } else {
          return createLocal(input).local();
        }
      }
      function getDateOffset(m) {
        return -Math.round(m._d.getTimezoneOffset());
      }
      hooks.updateOffset = function() {
      };
      function getSetOffset(input, keepLocalTime, keepMinutes) {
        var offset2 = this._offset || 0, localAdjust;
        if (!this.isValid()) {
          return input != null ? this : NaN;
        }
        if (input != null) {
          if (typeof input === "string") {
            input = offsetFromString(matchShortOffset, input);
            if (input === null) {
              return this;
            }
          } else if (Math.abs(input) < 16 && !keepMinutes) {
            input = input * 60;
          }
          if (!this._isUTC && keepLocalTime) {
            localAdjust = getDateOffset(this);
          }
          this._offset = input;
          this._isUTC = true;
          if (localAdjust != null) {
            this.add(localAdjust, "m");
          }
          if (offset2 !== input) {
            if (!keepLocalTime || this._changeInProgress) {
              addSubtract(
                this,
                createDuration(input - offset2, "m"),
                1,
                false
              );
            } else if (!this._changeInProgress) {
              this._changeInProgress = true;
              hooks.updateOffset(this, true);
              this._changeInProgress = null;
            }
          }
          return this;
        } else {
          return this._isUTC ? offset2 : getDateOffset(this);
        }
      }
      function getSetZone(input, keepLocalTime) {
        if (input != null) {
          if (typeof input !== "string") {
            input = -input;
          }
          this.utcOffset(input, keepLocalTime);
          return this;
        } else {
          return -this.utcOffset();
        }
      }
      function setOffsetToUTC(keepLocalTime) {
        return this.utcOffset(0, keepLocalTime);
      }
      function setOffsetToLocal(keepLocalTime) {
        if (this._isUTC) {
          this.utcOffset(0, keepLocalTime);
          this._isUTC = false;
          if (keepLocalTime) {
            this.subtract(getDateOffset(this), "m");
          }
        }
        return this;
      }
      function setOffsetToParsedOffset() {
        if (this._tzm != null) {
          this.utcOffset(this._tzm, false, true);
        } else if (typeof this._i === "string") {
          var tZone = offsetFromString(matchOffset, this._i);
          if (tZone != null) {
            this.utcOffset(tZone);
          } else {
            this.utcOffset(0, true);
          }
        }
        return this;
      }
      function hasAlignedHourOffset(input) {
        if (!this.isValid()) {
          return false;
        }
        input = input ? createLocal(input).utcOffset() : 0;
        return (this.utcOffset() - input) % 60 === 0;
      }
      function isDaylightSavingTime() {
        return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
      }
      function isDaylightSavingTimeShifted() {
        if (!isUndefined(this._isDSTShifted)) {
          return this._isDSTShifted;
        }
        var c = {}, other;
        copyConfig(c, this);
        c = prepareConfig(c);
        if (c._a) {
          other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
          this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;
        } else {
          this._isDSTShifted = false;
        }
        return this._isDSTShifted;
      }
      function isLocal() {
        return this.isValid() ? !this._isUTC : false;
      }
      function isUtcOffset() {
        return this.isValid() ? this._isUTC : false;
      }
      function isUtc() {
        return this.isValid() ? this._isUTC && this._offset === 0 : false;
      }
      var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
      function createDuration(input, key) {
        var duration = input, match = null, sign3, ret, diffRes;
        if (isDuration(input)) {
          duration = {
            ms: input._milliseconds,
            d: input._days,
            M: input._months
          };
        } else if (isNumber2(input) || !isNaN(+input)) {
          duration = {};
          if (key) {
            duration[key] = +input;
          } else {
            duration.milliseconds = +input;
          }
        } else if (match = aspNetRegex.exec(input)) {
          sign3 = match[1] === "-" ? -1 : 1;
          duration = {
            y: 0,
            d: toInt(match[DATE]) * sign3,
            h: toInt(match[HOUR]) * sign3,
            m: toInt(match[MINUTE]) * sign3,
            s: toInt(match[SECOND]) * sign3,
            ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign3
            // the millisecond decimal point is included in the match
          };
        } else if (match = isoRegex.exec(input)) {
          sign3 = match[1] === "-" ? -1 : 1;
          duration = {
            y: parseIso(match[2], sign3),
            M: parseIso(match[3], sign3),
            w: parseIso(match[4], sign3),
            d: parseIso(match[5], sign3),
            h: parseIso(match[6], sign3),
            m: parseIso(match[7], sign3),
            s: parseIso(match[8], sign3)
          };
        } else if (duration == null) {
          duration = {};
        } else if (typeof duration === "object" && ("from" in duration || "to" in duration)) {
          diffRes = momentsDifference(
            createLocal(duration.from),
            createLocal(duration.to)
          );
          duration = {};
          duration.ms = diffRes.milliseconds;
          duration.M = diffRes.months;
        }
        ret = new Duration(duration);
        if (isDuration(input) && hasOwnProp(input, "_locale")) {
          ret._locale = input._locale;
        }
        if (isDuration(input) && hasOwnProp(input, "_isValid")) {
          ret._isValid = input._isValid;
        }
        return ret;
      }
      createDuration.fn = Duration.prototype;
      createDuration.invalid = createInvalid$1;
      function parseIso(inp, sign3) {
        var res = inp && parseFloat(inp.replace(",", "."));
        return (isNaN(res) ? 0 : res) * sign3;
      }
      function positiveMomentsDifference(base, other) {
        var res = {};
        res.months = other.month() - base.month() + (other.year() - base.year()) * 12;
        if (base.clone().add(res.months, "M").isAfter(other)) {
          --res.months;
        }
        res.milliseconds = +other - +base.clone().add(res.months, "M");
        return res;
      }
      function momentsDifference(base, other) {
        var res;
        if (!(base.isValid() && other.isValid())) {
          return { milliseconds: 0, months: 0 };
        }
        other = cloneWithOffset(other, base);
        if (base.isBefore(other)) {
          res = positiveMomentsDifference(base, other);
        } else {
          res = positiveMomentsDifference(other, base);
          res.milliseconds = -res.milliseconds;
          res.months = -res.months;
        }
        return res;
      }
      function createAdder(direction, name) {
        return function(val, period) {
          var dur, tmp;
          if (period !== null && !isNaN(+period)) {
            deprecateSimple(
              name,
              "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."
            );
            tmp = val;
            val = period;
            period = tmp;
          }
          dur = createDuration(val, period);
          addSubtract(this, dur, direction);
          return this;
        };
      }
      function addSubtract(mom, duration, isAdding, updateOffset) {
        var milliseconds2 = duration._milliseconds, days2 = absRound(duration._days), months2 = absRound(duration._months);
        if (!mom.isValid()) {
          return;
        }
        updateOffset = updateOffset == null ? true : updateOffset;
        if (months2) {
          setMonth(mom, get(mom, "Month") + months2 * isAdding);
        }
        if (days2) {
          set$1(mom, "Date", get(mom, "Date") + days2 * isAdding);
        }
        if (milliseconds2) {
          mom._d.setTime(mom._d.valueOf() + milliseconds2 * isAdding);
        }
        if (updateOffset) {
          hooks.updateOffset(mom, days2 || months2);
        }
      }
      var add = createAdder(1, "add"), subtract = createAdder(-1, "subtract");
      function isString(input) {
        return typeof input === "string" || input instanceof String;
      }
      function isMomentInput(input) {
        return isMoment(input) || isDate(input) || isString(input) || isNumber2(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
      }
      function isMomentInputObject(input) {
        var objectTest = isObject2(input) && !isObjectEmpty(input), propertyTest = false, properties = [
          "years",
          "year",
          "y",
          "months",
          "month",
          "M",
          "days",
          "day",
          "d",
          "dates",
          "date",
          "D",
          "hours",
          "hour",
          "h",
          "minutes",
          "minute",
          "m",
          "seconds",
          "second",
          "s",
          "milliseconds",
          "millisecond",
          "ms"
        ], i, property, propertyLen = properties.length;
        for (i = 0; i < propertyLen; i += 1) {
          property = properties[i];
          propertyTest = propertyTest || hasOwnProp(input, property);
        }
        return objectTest && propertyTest;
      }
      function isNumberOrStringArray(input) {
        var arrayTest = isArray2(input), dataTypeTest = false;
        if (arrayTest) {
          dataTypeTest = input.filter(function(item) {
            return !isNumber2(item) && isString(input);
          }).length === 0;
        }
        return arrayTest && dataTypeTest;
      }
      function isCalendarSpec(input) {
        var objectTest = isObject2(input) && !isObjectEmpty(input), propertyTest = false, properties = [
          "sameDay",
          "nextDay",
          "lastDay",
          "nextWeek",
          "lastWeek",
          "sameElse"
        ], i, property;
        for (i = 0; i < properties.length; i += 1) {
          property = properties[i];
          propertyTest = propertyTest || hasOwnProp(input, property);
        }
        return objectTest && propertyTest;
      }
      function getCalendarFormat(myMoment, now2) {
        var diff2 = myMoment.diff(now2, "days", true);
        return diff2 < -6 ? "sameElse" : diff2 < -1 ? "lastWeek" : diff2 < 0 ? "lastDay" : diff2 < 1 ? "sameDay" : diff2 < 2 ? "nextDay" : diff2 < 7 ? "nextWeek" : "sameElse";
      }
      function calendar$1(time, formats) {
        if (arguments.length === 1) {
          if (!arguments[0]) {
            time = void 0;
            formats = void 0;
          } else if (isMomentInput(arguments[0])) {
            time = arguments[0];
            formats = void 0;
          } else if (isCalendarSpec(arguments[0])) {
            formats = arguments[0];
            time = void 0;
          }
        }
        var now2 = time || createLocal(), sod = cloneWithOffset(now2, this).startOf("day"), format2 = hooks.calendarFormat(this, sod) || "sameElse", output = formats && (isFunction2(formats[format2]) ? formats[format2].call(this, now2) : formats[format2]);
        return this.format(
          output || this.localeData().calendar(format2, this, createLocal(now2))
        );
      }
      function clone3() {
        return new Moment(this);
      }
      function isAfter(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
          return false;
        }
        units = normalizeUnits(units) || "millisecond";
        if (units === "millisecond") {
          return this.valueOf() > localInput.valueOf();
        } else {
          return localInput.valueOf() < this.clone().startOf(units).valueOf();
        }
      }
      function isBefore(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
          return false;
        }
        units = normalizeUnits(units) || "millisecond";
        if (units === "millisecond") {
          return this.valueOf() < localInput.valueOf();
        } else {
          return this.clone().endOf(units).valueOf() < localInput.valueOf();
        }
      }
      function isBetween(from3, to3, units, inclusivity) {
        var localFrom = isMoment(from3) ? from3 : createLocal(from3), localTo = isMoment(to3) ? to3 : createLocal(to3);
        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
          return false;
        }
        inclusivity = inclusivity || "()";
        return (inclusivity[0] === "(" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ")" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
      }
      function isSame(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input), inputMs;
        if (!(this.isValid() && localInput.isValid())) {
          return false;
        }
        units = normalizeUnits(units) || "millisecond";
        if (units === "millisecond") {
          return this.valueOf() === localInput.valueOf();
        } else {
          inputMs = localInput.valueOf();
          return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
        }
      }
      function isSameOrAfter(input, units) {
        return this.isSame(input, units) || this.isAfter(input, units);
      }
      function isSameOrBefore(input, units) {
        return this.isSame(input, units) || this.isBefore(input, units);
      }
      function diff(input, units, asFloat) {
        var that, zoneDelta, output;
        if (!this.isValid()) {
          return NaN;
        }
        that = cloneWithOffset(input, this);
        if (!that.isValid()) {
          return NaN;
        }
        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
        units = normalizeUnits(units);
        switch (units) {
          case "year":
            output = monthDiff(this, that) / 12;
            break;
          case "month":
            output = monthDiff(this, that);
            break;
          case "quarter":
            output = monthDiff(this, that) / 3;
            break;
          case "second":
            output = (this - that) / 1e3;
            break;
          case "minute":
            output = (this - that) / 6e4;
            break;
          case "hour":
            output = (this - that) / 36e5;
            break;
          case "day":
            output = (this - that - zoneDelta) / 864e5;
            break;
          case "week":
            output = (this - that - zoneDelta) / 6048e5;
            break;
          default:
            output = this - that;
        }
        return asFloat ? output : absFloor(output);
      }
      function monthDiff(a, b) {
        if (a.date() < b.date()) {
          return -monthDiff(b, a);
        }
        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), anchor = a.clone().add(wholeMonthDiff, "months"), anchor2, adjust;
        if (b - anchor < 0) {
          anchor2 = a.clone().add(wholeMonthDiff - 1, "months");
          adjust = (b - anchor) / (anchor - anchor2);
        } else {
          anchor2 = a.clone().add(wholeMonthDiff + 1, "months");
          adjust = (b - anchor) / (anchor2 - anchor);
        }
        return -(wholeMonthDiff + adjust) || 0;
      }
      hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
      hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
      function toString() {
        return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
      }
      function toISOString(keepOffset) {
        if (!this.isValid()) {
          return null;
        }
        var utc = keepOffset !== true, m = utc ? this.clone().utc() : this;
        if (m.year() < 0 || m.year() > 9999) {
          return formatMoment(
            m,
            utc ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"
          );
        }
        if (isFunction2(Date.prototype.toISOString)) {
          if (utc) {
            return this.toDate().toISOString();
          } else {
            return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", formatMoment(m, "Z"));
          }
        }
        return formatMoment(
          m,
          utc ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"
        );
      }
      function inspect() {
        if (!this.isValid()) {
          return "moment.invalid(/* " + this._i + " */)";
        }
        var func = "moment", zone = "", prefix, year, datetime, suffix;
        if (!this.isLocal()) {
          func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone";
          zone = "Z";
        }
        prefix = "[" + func + '("]';
        year = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY";
        datetime = "-MM-DD[T]HH:mm:ss.SSS";
        suffix = zone + '[")]';
        return this.format(prefix + year + datetime + suffix);
      }
      function format(inputString) {
        if (!inputString) {
          inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
        }
        var output = formatMoment(this, inputString);
        return this.localeData().postformat(output);
      }
      function from2(time, withoutSuffix) {
        if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
          return createDuration({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix);
        } else {
          return this.localeData().invalidDate();
        }
      }
      function fromNow(withoutSuffix) {
        return this.from(createLocal(), withoutSuffix);
      }
      function to2(time, withoutSuffix) {
        if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
          return createDuration({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix);
        } else {
          return this.localeData().invalidDate();
        }
      }
      function toNow(withoutSuffix) {
        return this.to(createLocal(), withoutSuffix);
      }
      function locale2(key) {
        var newLocaleData;
        if (key === void 0) {
          return this._locale._abbr;
        } else {
          newLocaleData = getLocale(key);
          if (newLocaleData != null) {
            this._locale = newLocaleData;
          }
          return this;
        }
      }
      var lang = deprecate(
        "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",
        function(key) {
          if (key === void 0) {
            return this.localeData();
          } else {
            return this.locale(key);
          }
        }
      );
      function localeData() {
        return this._locale;
      }
      var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
      function mod$1(dividend, divisor) {
        return (dividend % divisor + divisor) % divisor;
      }
      function localStartOfDate(y, m, d) {
        if (y < 100 && y >= 0) {
          return new Date(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
          return new Date(y, m, d).valueOf();
        }
      }
      function utcStartOfDate(y, m, d) {
        if (y < 100 && y >= 0) {
          return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
          return Date.UTC(y, m, d);
        }
      }
      function startOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === void 0 || units === "millisecond" || !this.isValid()) {
          return this;
        }
        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
        switch (units) {
          case "year":
            time = startOfDate(this.year(), 0, 1);
            break;
          case "quarter":
            time = startOfDate(
              this.year(),
              this.month() - this.month() % 3,
              1
            );
            break;
          case "month":
            time = startOfDate(this.year(), this.month(), 1);
            break;
          case "week":
            time = startOfDate(
              this.year(),
              this.month(),
              this.date() - this.weekday()
            );
            break;
          case "isoWeek":
            time = startOfDate(
              this.year(),
              this.month(),
              this.date() - (this.isoWeekday() - 1)
            );
            break;
          case "day":
          case "date":
            time = startOfDate(this.year(), this.month(), this.date());
            break;
          case "hour":
            time = this._d.valueOf();
            time -= mod$1(
              time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
              MS_PER_HOUR
            );
            break;
          case "minute":
            time = this._d.valueOf();
            time -= mod$1(time, MS_PER_MINUTE);
            break;
          case "second":
            time = this._d.valueOf();
            time -= mod$1(time, MS_PER_SECOND);
            break;
        }
        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
      }
      function endOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === void 0 || units === "millisecond" || !this.isValid()) {
          return this;
        }
        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
        switch (units) {
          case "year":
            time = startOfDate(this.year() + 1, 0, 1) - 1;
            break;
          case "quarter":
            time = startOfDate(
              this.year(),
              this.month() - this.month() % 3 + 3,
              1
            ) - 1;
            break;
          case "month":
            time = startOfDate(this.year(), this.month() + 1, 1) - 1;
            break;
          case "week":
            time = startOfDate(
              this.year(),
              this.month(),
              this.date() - this.weekday() + 7
            ) - 1;
            break;
          case "isoWeek":
            time = startOfDate(
              this.year(),
              this.month(),
              this.date() - (this.isoWeekday() - 1) + 7
            ) - 1;
            break;
          case "day":
          case "date":
            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
            break;
          case "hour":
            time = this._d.valueOf();
            time += MS_PER_HOUR - mod$1(
              time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
              MS_PER_HOUR
            ) - 1;
            break;
          case "minute":
            time = this._d.valueOf();
            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
            break;
          case "second":
            time = this._d.valueOf();
            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
            break;
        }
        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
      }
      function valueOf() {
        return this._d.valueOf() - (this._offset || 0) * 6e4;
      }
      function unix() {
        return Math.floor(this.valueOf() / 1e3);
      }
      function toDate() {
        return new Date(this.valueOf());
      }
      function toArray() {
        var m = this;
        return [
          m.year(),
          m.month(),
          m.date(),
          m.hour(),
          m.minute(),
          m.second(),
          m.millisecond()
        ];
      }
      function toObject() {
        var m = this;
        return {
          years: m.year(),
          months: m.month(),
          date: m.date(),
          hours: m.hours(),
          minutes: m.minutes(),
          seconds: m.seconds(),
          milliseconds: m.milliseconds()
        };
      }
      function toJSON() {
        return this.isValid() ? this.toISOString() : null;
      }
      function isValid$2() {
        return isValid(this);
      }
      function parsingFlags() {
        return extend({}, getParsingFlags(this));
      }
      function invalidAt() {
        return getParsingFlags(this).overflow;
      }
      function creationData() {
        return {
          input: this._i,
          format: this._f,
          locale: this._locale,
          isUTC: this._isUTC,
          strict: this._strict
        };
      }
      addFormatToken("N", 0, 0, "eraAbbr");
      addFormatToken("NN", 0, 0, "eraAbbr");
      addFormatToken("NNN", 0, 0, "eraAbbr");
      addFormatToken("NNNN", 0, 0, "eraName");
      addFormatToken("NNNNN", 0, 0, "eraNarrow");
      addFormatToken("y", ["y", 1], "yo", "eraYear");
      addFormatToken("y", ["yy", 2], 0, "eraYear");
      addFormatToken("y", ["yyy", 3], 0, "eraYear");
      addFormatToken("y", ["yyyy", 4], 0, "eraYear");
      addRegexToken("N", matchEraAbbr);
      addRegexToken("NN", matchEraAbbr);
      addRegexToken("NNN", matchEraAbbr);
      addRegexToken("NNNN", matchEraName);
      addRegexToken("NNNNN", matchEraNarrow);
      addParseToken(
        ["N", "NN", "NNN", "NNNN", "NNNNN"],
        function(input, array, config, token2) {
          var era = config._locale.erasParse(input, token2, config._strict);
          if (era) {
            getParsingFlags(config).era = era;
          } else {
            getParsingFlags(config).invalidEra = input;
          }
        }
      );
      addRegexToken("y", matchUnsigned);
      addRegexToken("yy", matchUnsigned);
      addRegexToken("yyy", matchUnsigned);
      addRegexToken("yyyy", matchUnsigned);
      addRegexToken("yo", matchEraYearOrdinal);
      addParseToken(["y", "yy", "yyy", "yyyy"], YEAR);
      addParseToken(["yo"], function(input, array, config, token2) {
        var match;
        if (config._locale._eraYearOrdinalRegex) {
          match = input.match(config._locale._eraYearOrdinalRegex);
        }
        if (config._locale.eraYearOrdinalParse) {
          array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
        } else {
          array[YEAR] = parseInt(input, 10);
        }
      });
      function localeEras(m, format2) {
        var i, l, date, eras = this._eras || getLocale("en")._eras;
        for (i = 0, l = eras.length; i < l; ++i) {
          switch (typeof eras[i].since) {
            case "string":
              date = hooks(eras[i].since).startOf("day");
              eras[i].since = date.valueOf();
              break;
          }
          switch (typeof eras[i].until) {
            case "undefined":
              eras[i].until = Infinity;
              break;
            case "string":
              date = hooks(eras[i].until).startOf("day").valueOf();
              eras[i].until = date.valueOf();
              break;
          }
        }
        return eras;
      }
      function localeErasParse(eraName, format2, strict) {
        var i, l, eras = this.eras(), name, abbr, narrow;
        eraName = eraName.toUpperCase();
        for (i = 0, l = eras.length; i < l; ++i) {
          name = eras[i].name.toUpperCase();
          abbr = eras[i].abbr.toUpperCase();
          narrow = eras[i].narrow.toUpperCase();
          if (strict) {
            switch (format2) {
              case "N":
              case "NN":
              case "NNN":
                if (abbr === eraName) {
                  return eras[i];
                }
                break;
              case "NNNN":
                if (name === eraName) {
                  return eras[i];
                }
                break;
              case "NNNNN":
                if (narrow === eraName) {
                  return eras[i];
                }
                break;
            }
          } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
            return eras[i];
          }
        }
      }
      function localeErasConvertYear(era, year) {
        var dir = era.since <= era.until ? 1 : -1;
        if (year === void 0) {
          return hooks(era.since).year();
        } else {
          return hooks(era.since).year() + (year - era.offset) * dir;
        }
      }
      function getEraName() {
        var i, l, val, eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
          val = this.clone().startOf("day").valueOf();
          if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].name;
          }
          if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].name;
          }
        }
        return "";
      }
      function getEraNarrow() {
        var i, l, val, eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
          val = this.clone().startOf("day").valueOf();
          if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].narrow;
          }
          if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].narrow;
          }
        }
        return "";
      }
      function getEraAbbr() {
        var i, l, val, eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
          val = this.clone().startOf("day").valueOf();
          if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].abbr;
          }
          if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].abbr;
          }
        }
        return "";
      }
      function getEraYear() {
        var i, l, dir, val, eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
          dir = eras[i].since <= eras[i].until ? 1 : -1;
          val = this.clone().startOf("day").valueOf();
          if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {
            return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;
          }
        }
        return this.year();
      }
      function erasNameRegex(isStrict) {
        if (!hasOwnProp(this, "_erasNameRegex")) {
          computeErasParse.call(this);
        }
        return isStrict ? this._erasNameRegex : this._erasRegex;
      }
      function erasAbbrRegex(isStrict) {
        if (!hasOwnProp(this, "_erasAbbrRegex")) {
          computeErasParse.call(this);
        }
        return isStrict ? this._erasAbbrRegex : this._erasRegex;
      }
      function erasNarrowRegex(isStrict) {
        if (!hasOwnProp(this, "_erasNarrowRegex")) {
          computeErasParse.call(this);
        }
        return isStrict ? this._erasNarrowRegex : this._erasRegex;
      }
      function matchEraAbbr(isStrict, locale3) {
        return locale3.erasAbbrRegex(isStrict);
      }
      function matchEraName(isStrict, locale3) {
        return locale3.erasNameRegex(isStrict);
      }
      function matchEraNarrow(isStrict, locale3) {
        return locale3.erasNarrowRegex(isStrict);
      }
      function matchEraYearOrdinal(isStrict, locale3) {
        return locale3._eraYearOrdinalRegex || matchUnsigned;
      }
      function computeErasParse() {
        var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i, l, erasName, erasAbbr, erasNarrow, eras = this.eras();
        for (i = 0, l = eras.length; i < l; ++i) {
          erasName = regexEscape(eras[i].name);
          erasAbbr = regexEscape(eras[i].abbr);
          erasNarrow = regexEscape(eras[i].narrow);
          namePieces.push(erasName);
          abbrPieces.push(erasAbbr);
          narrowPieces.push(erasNarrow);
          mixedPieces.push(erasName);
          mixedPieces.push(erasAbbr);
          mixedPieces.push(erasNarrow);
        }
        this._erasRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
        this._erasNameRegex = new RegExp("^(" + namePieces.join("|") + ")", "i");
        this._erasAbbrRegex = new RegExp("^(" + abbrPieces.join("|") + ")", "i");
        this._erasNarrowRegex = new RegExp(
          "^(" + narrowPieces.join("|") + ")",
          "i"
        );
      }
      addFormatToken(0, ["gg", 2], 0, function() {
        return this.weekYear() % 100;
      });
      addFormatToken(0, ["GG", 2], 0, function() {
        return this.isoWeekYear() % 100;
      });
      function addWeekYearFormatToken(token2, getter) {
        addFormatToken(0, [token2, token2.length], 0, getter);
      }
      addWeekYearFormatToken("gggg", "weekYear");
      addWeekYearFormatToken("ggggg", "weekYear");
      addWeekYearFormatToken("GGGG", "isoWeekYear");
      addWeekYearFormatToken("GGGGG", "isoWeekYear");
      addRegexToken("G", matchSigned);
      addRegexToken("g", matchSigned);
      addRegexToken("GG", match1to2, match2);
      addRegexToken("gg", match1to2, match2);
      addRegexToken("GGGG", match1to4, match4);
      addRegexToken("gggg", match1to4, match4);
      addRegexToken("GGGGG", match1to6, match6);
      addRegexToken("ggggg", match1to6, match6);
      addWeekParseToken(
        ["gggg", "ggggg", "GGGG", "GGGGG"],
        function(input, week, config, token2) {
          week[token2.substr(0, 2)] = toInt(input);
        }
      );
      addWeekParseToken(["gg", "GG"], function(input, week, config, token2) {
        week[token2] = hooks.parseTwoDigitYear(input);
      });
      function getSetWeekYear(input) {
        return getSetWeekYearHelper.call(
          this,
          input,
          this.week(),
          this.weekday() + this.localeData()._week.dow,
          this.localeData()._week.dow,
          this.localeData()._week.doy
        );
      }
      function getSetISOWeekYear(input) {
        return getSetWeekYearHelper.call(
          this,
          input,
          this.isoWeek(),
          this.isoWeekday(),
          1,
          4
        );
      }
      function getISOWeeksInYear() {
        return weeksInYear(this.year(), 1, 4);
      }
      function getISOWeeksInISOWeekYear() {
        return weeksInYear(this.isoWeekYear(), 1, 4);
      }
      function getWeeksInYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
      }
      function getWeeksInWeekYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
      }
      function getSetWeekYearHelper(input, week, weekday, dow, doy) {
        var weeksTarget;
        if (input == null) {
          return weekOfYear(this, dow, doy).year;
        } else {
          weeksTarget = weeksInYear(input, dow, doy);
          if (week > weeksTarget) {
            week = weeksTarget;
          }
          return setWeekAll.call(this, input, week, weekday, dow, doy);
        }
      }
      function setWeekAll(weekYear, week, weekday, dow, doy) {
        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
        this.year(date.getUTCFullYear());
        this.month(date.getUTCMonth());
        this.date(date.getUTCDate());
        return this;
      }
      addFormatToken("Q", 0, "Qo", "quarter");
      addRegexToken("Q", match1);
      addParseToken("Q", function(input, array) {
        array[MONTH] = (toInt(input) - 1) * 3;
      });
      function getSetQuarter(input) {
        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
      }
      addFormatToken("D", ["DD", 2], "Do", "date");
      addRegexToken("D", match1to2, match1to2NoLeadingZero);
      addRegexToken("DD", match1to2, match2);
      addRegexToken("Do", function(isStrict, locale3) {
        return isStrict ? locale3._dayOfMonthOrdinalParse || locale3._ordinalParse : locale3._dayOfMonthOrdinalParseLenient;
      });
      addParseToken(["D", "DD"], DATE);
      addParseToken("Do", function(input, array) {
        array[DATE] = toInt(input.match(match1to2)[0]);
      });
      var getSetDayOfMonth = makeGetSet("Date", true);
      addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear");
      addRegexToken("DDD", match1to3);
      addRegexToken("DDDD", match3);
      addParseToken(["DDD", "DDDD"], function(input, array, config) {
        config._dayOfYear = toInt(input);
      });
      function getSetDayOfYear(input) {
        var dayOfYear = Math.round(
          (this.clone().startOf("day") - this.clone().startOf("year")) / 864e5
        ) + 1;
        return input == null ? dayOfYear : this.add(input - dayOfYear, "d");
      }
      addFormatToken("m", ["mm", 2], 0, "minute");
      addRegexToken("m", match1to2, match1to2HasZero);
      addRegexToken("mm", match1to2, match2);
      addParseToken(["m", "mm"], MINUTE);
      var getSetMinute = makeGetSet("Minutes", false);
      addFormatToken("s", ["ss", 2], 0, "second");
      addRegexToken("s", match1to2, match1to2HasZero);
      addRegexToken("ss", match1to2, match2);
      addParseToken(["s", "ss"], SECOND);
      var getSetSecond = makeGetSet("Seconds", false);
      addFormatToken("S", 0, 0, function() {
        return ~~(this.millisecond() / 100);
      });
      addFormatToken(0, ["SS", 2], 0, function() {
        return ~~(this.millisecond() / 10);
      });
      addFormatToken(0, ["SSS", 3], 0, "millisecond");
      addFormatToken(0, ["SSSS", 4], 0, function() {
        return this.millisecond() * 10;
      });
      addFormatToken(0, ["SSSSS", 5], 0, function() {
        return this.millisecond() * 100;
      });
      addFormatToken(0, ["SSSSSS", 6], 0, function() {
        return this.millisecond() * 1e3;
      });
      addFormatToken(0, ["SSSSSSS", 7], 0, function() {
        return this.millisecond() * 1e4;
      });
      addFormatToken(0, ["SSSSSSSS", 8], 0, function() {
        return this.millisecond() * 1e5;
      });
      addFormatToken(0, ["SSSSSSSSS", 9], 0, function() {
        return this.millisecond() * 1e6;
      });
      addRegexToken("S", match1to3, match1);
      addRegexToken("SS", match1to3, match2);
      addRegexToken("SSS", match1to3, match3);
      var token, getSetMillisecond;
      for (token = "SSSS"; token.length <= 9; token += "S") {
        addRegexToken(token, matchUnsigned);
      }
      function parseMs(input, array) {
        array[MILLISECOND] = toInt(("0." + input) * 1e3);
      }
      for (token = "S"; token.length <= 9; token += "S") {
        addParseToken(token, parseMs);
      }
      getSetMillisecond = makeGetSet("Milliseconds", false);
      addFormatToken("z", 0, 0, "zoneAbbr");
      addFormatToken("zz", 0, 0, "zoneName");
      function getZoneAbbr() {
        return this._isUTC ? "UTC" : "";
      }
      function getZoneName() {
        return this._isUTC ? "Coordinated Universal Time" : "";
      }
      var proto = Moment.prototype;
      proto.add = add;
      proto.calendar = calendar$1;
      proto.clone = clone3;
      proto.diff = diff;
      proto.endOf = endOf;
      proto.format = format;
      proto.from = from2;
      proto.fromNow = fromNow;
      proto.to = to2;
      proto.toNow = toNow;
      proto.get = stringGet;
      proto.invalidAt = invalidAt;
      proto.isAfter = isAfter;
      proto.isBefore = isBefore;
      proto.isBetween = isBetween;
      proto.isSame = isSame;
      proto.isSameOrAfter = isSameOrAfter;
      proto.isSameOrBefore = isSameOrBefore;
      proto.isValid = isValid$2;
      proto.lang = lang;
      proto.locale = locale2;
      proto.localeData = localeData;
      proto.max = prototypeMax;
      proto.min = prototypeMin;
      proto.parsingFlags = parsingFlags;
      proto.set = stringSet;
      proto.startOf = startOf;
      proto.subtract = subtract;
      proto.toArray = toArray;
      proto.toObject = toObject;
      proto.toDate = toDate;
      proto.toISOString = toISOString;
      proto.inspect = inspect;
      if (typeof Symbol !== "undefined" && Symbol.for != null) {
        proto[Symbol.for("nodejs.util.inspect.custom")] = function() {
          return "Moment<" + this.format() + ">";
        };
      }
      proto.toJSON = toJSON;
      proto.toString = toString;
      proto.unix = unix;
      proto.valueOf = valueOf;
      proto.creationData = creationData;
      proto.eraName = getEraName;
      proto.eraNarrow = getEraNarrow;
      proto.eraAbbr = getEraAbbr;
      proto.eraYear = getEraYear;
      proto.year = getSetYear;
      proto.isLeapYear = getIsLeapYear;
      proto.weekYear = getSetWeekYear;
      proto.isoWeekYear = getSetISOWeekYear;
      proto.quarter = proto.quarters = getSetQuarter;
      proto.month = getSetMonth;
      proto.daysInMonth = getDaysInMonth;
      proto.week = proto.weeks = getSetWeek;
      proto.isoWeek = proto.isoWeeks = getSetISOWeek;
      proto.weeksInYear = getWeeksInYear;
      proto.weeksInWeekYear = getWeeksInWeekYear;
      proto.isoWeeksInYear = getISOWeeksInYear;
      proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
      proto.date = getSetDayOfMonth;
      proto.day = proto.days = getSetDayOfWeek;
      proto.weekday = getSetLocaleDayOfWeek;
      proto.isoWeekday = getSetISODayOfWeek;
      proto.dayOfYear = getSetDayOfYear;
      proto.hour = proto.hours = getSetHour;
      proto.minute = proto.minutes = getSetMinute;
      proto.second = proto.seconds = getSetSecond;
      proto.millisecond = proto.milliseconds = getSetMillisecond;
      proto.utcOffset = getSetOffset;
      proto.utc = setOffsetToUTC;
      proto.local = setOffsetToLocal;
      proto.parseZone = setOffsetToParsedOffset;
      proto.hasAlignedHourOffset = hasAlignedHourOffset;
      proto.isDST = isDaylightSavingTime;
      proto.isLocal = isLocal;
      proto.isUtcOffset = isUtcOffset;
      proto.isUtc = isUtc;
      proto.isUTC = isUtc;
      proto.zoneAbbr = getZoneAbbr;
      proto.zoneName = getZoneName;
      proto.dates = deprecate(
        "dates accessor is deprecated. Use date instead.",
        getSetDayOfMonth
      );
      proto.months = deprecate(
        "months accessor is deprecated. Use month instead",
        getSetMonth
      );
      proto.years = deprecate(
        "years accessor is deprecated. Use year instead",
        getSetYear
      );
      proto.zone = deprecate(
        "moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",
        getSetZone
      );
      proto.isDSTShifted = deprecate(
        "isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",
        isDaylightSavingTimeShifted
      );
      function createUnix(input) {
        return createLocal(input * 1e3);
      }
      function createInZone() {
        return createLocal.apply(null, arguments).parseZone();
      }
      function preParsePostFormat(string) {
        return string;
      }
      var proto$1 = Locale.prototype;
      proto$1.calendar = calendar;
      proto$1.longDateFormat = longDateFormat;
      proto$1.invalidDate = invalidDate;
      proto$1.ordinal = ordinal;
      proto$1.preparse = preParsePostFormat;
      proto$1.postformat = preParsePostFormat;
      proto$1.relativeTime = relativeTime;
      proto$1.pastFuture = pastFuture;
      proto$1.set = set2;
      proto$1.eras = localeEras;
      proto$1.erasParse = localeErasParse;
      proto$1.erasConvertYear = localeErasConvertYear;
      proto$1.erasAbbrRegex = erasAbbrRegex;
      proto$1.erasNameRegex = erasNameRegex;
      proto$1.erasNarrowRegex = erasNarrowRegex;
      proto$1.months = localeMonths;
      proto$1.monthsShort = localeMonthsShort;
      proto$1.monthsParse = localeMonthsParse;
      proto$1.monthsRegex = monthsRegex;
      proto$1.monthsShortRegex = monthsShortRegex;
      proto$1.week = localeWeek;
      proto$1.firstDayOfYear = localeFirstDayOfYear;
      proto$1.firstDayOfWeek = localeFirstDayOfWeek;
      proto$1.weekdays = localeWeekdays;
      proto$1.weekdaysMin = localeWeekdaysMin;
      proto$1.weekdaysShort = localeWeekdaysShort;
      proto$1.weekdaysParse = localeWeekdaysParse;
      proto$1.weekdaysRegex = weekdaysRegex;
      proto$1.weekdaysShortRegex = weekdaysShortRegex;
      proto$1.weekdaysMinRegex = weekdaysMinRegex;
      proto$1.isPM = localeIsPM;
      proto$1.meridiem = localeMeridiem;
      function get$1(format2, index, field, setter) {
        var locale3 = getLocale(), utc = createUTC().set(setter, index);
        return locale3[field](utc, format2);
      }
      function listMonthsImpl(format2, index, field) {
        if (isNumber2(format2)) {
          index = format2;
          format2 = void 0;
        }
        format2 = format2 || "";
        if (index != null) {
          return get$1(format2, index, field, "month");
        }
        var i, out = [];
        for (i = 0; i < 12; i++) {
          out[i] = get$1(format2, i, field, "month");
        }
        return out;
      }
      function listWeekdaysImpl(localeSorted, format2, index, field) {
        if (typeof localeSorted === "boolean") {
          if (isNumber2(format2)) {
            index = format2;
            format2 = void 0;
          }
          format2 = format2 || "";
        } else {
          format2 = localeSorted;
          index = format2;
          localeSorted = false;
          if (isNumber2(format2)) {
            index = format2;
            format2 = void 0;
          }
          format2 = format2 || "";
        }
        var locale3 = getLocale(), shift = localeSorted ? locale3._week.dow : 0, i, out = [];
        if (index != null) {
          return get$1(format2, (index + shift) % 7, field, "day");
        }
        for (i = 0; i < 7; i++) {
          out[i] = get$1(format2, (i + shift) % 7, field, "day");
        }
        return out;
      }
      function listMonths(format2, index) {
        return listMonthsImpl(format2, index, "months");
      }
      function listMonthsShort(format2, index) {
        return listMonthsImpl(format2, index, "monthsShort");
      }
      function listWeekdays(localeSorted, format2, index) {
        return listWeekdaysImpl(localeSorted, format2, index, "weekdays");
      }
      function listWeekdaysShort(localeSorted, format2, index) {
        return listWeekdaysImpl(localeSorted, format2, index, "weekdaysShort");
      }
      function listWeekdaysMin(localeSorted, format2, index) {
        return listWeekdaysImpl(localeSorted, format2, index, "weekdaysMin");
      }
      getSetGlobalLocale("en", {
        eras: [
          {
            since: "0001-01-01",
            until: Infinity,
            offset: 1,
            name: "Anno Domini",
            narrow: "AD",
            abbr: "AD"
          },
          {
            since: "0000-12-31",
            until: -Infinity,
            offset: 1,
            name: "Before Christ",
            narrow: "BC",
            abbr: "BC"
          }
        ],
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function(number) {
          var b = number % 10, output = toInt(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th";
          return number + output;
        }
      });
      hooks.lang = deprecate(
        "moment.lang is deprecated. Use moment.locale instead.",
        getSetGlobalLocale
      );
      hooks.langData = deprecate(
        "moment.langData is deprecated. Use moment.localeData instead.",
        getLocale
      );
      var mathAbs = Math.abs;
      function abs() {
        var data = this._data;
        this._milliseconds = mathAbs(this._milliseconds);
        this._days = mathAbs(this._days);
        this._months = mathAbs(this._months);
        data.milliseconds = mathAbs(data.milliseconds);
        data.seconds = mathAbs(data.seconds);
        data.minutes = mathAbs(data.minutes);
        data.hours = mathAbs(data.hours);
        data.months = mathAbs(data.months);
        data.years = mathAbs(data.years);
        return this;
      }
      function addSubtract$1(duration, input, value, direction) {
        var other = createDuration(input, value);
        duration._milliseconds += direction * other._milliseconds;
        duration._days += direction * other._days;
        duration._months += direction * other._months;
        return duration._bubble();
      }
      function add$1(input, value) {
        return addSubtract$1(this, input, value, 1);
      }
      function subtract$1(input, value) {
        return addSubtract$1(this, input, value, -1);
      }
      function absCeil(number) {
        if (number < 0) {
          return Math.floor(number);
        } else {
          return Math.ceil(number);
        }
      }
      function bubble() {
        var milliseconds2 = this._milliseconds, days2 = this._days, months2 = this._months, data = this._data, seconds2, minutes2, hours2, years2, monthsFromDays;
        if (!(milliseconds2 >= 0 && days2 >= 0 && months2 >= 0 || milliseconds2 <= 0 && days2 <= 0 && months2 <= 0)) {
          milliseconds2 += absCeil(monthsToDays(months2) + days2) * 864e5;
          days2 = 0;
          months2 = 0;
        }
        data.milliseconds = milliseconds2 % 1e3;
        seconds2 = absFloor(milliseconds2 / 1e3);
        data.seconds = seconds2 % 60;
        minutes2 = absFloor(seconds2 / 60);
        data.minutes = minutes2 % 60;
        hours2 = absFloor(minutes2 / 60);
        data.hours = hours2 % 24;
        days2 += absFloor(hours2 / 24);
        monthsFromDays = absFloor(daysToMonths(days2));
        months2 += monthsFromDays;
        days2 -= absCeil(monthsToDays(monthsFromDays));
        years2 = absFloor(months2 / 12);
        months2 %= 12;
        data.days = days2;
        data.months = months2;
        data.years = years2;
        return this;
      }
      function daysToMonths(days2) {
        return days2 * 4800 / 146097;
      }
      function monthsToDays(months2) {
        return months2 * 146097 / 4800;
      }
      function as(units) {
        if (!this.isValid()) {
          return NaN;
        }
        var days2, months2, milliseconds2 = this._milliseconds;
        units = normalizeUnits(units);
        if (units === "month" || units === "quarter" || units === "year") {
          days2 = this._days + milliseconds2 / 864e5;
          months2 = this._months + daysToMonths(days2);
          switch (units) {
            case "month":
              return months2;
            case "quarter":
              return months2 / 3;
            case "year":
              return months2 / 12;
          }
        } else {
          days2 = this._days + Math.round(monthsToDays(this._months));
          switch (units) {
            case "week":
              return days2 / 7 + milliseconds2 / 6048e5;
            case "day":
              return days2 + milliseconds2 / 864e5;
            case "hour":
              return days2 * 24 + milliseconds2 / 36e5;
            case "minute":
              return days2 * 1440 + milliseconds2 / 6e4;
            case "second":
              return days2 * 86400 + milliseconds2 / 1e3;
            case "millisecond":
              return Math.floor(days2 * 864e5) + milliseconds2;
            default:
              throw new Error("Unknown unit " + units);
          }
        }
      }
      function makeAs(alias) {
        return function() {
          return this.as(alias);
        };
      }
      var asMilliseconds = makeAs("ms"), asSeconds = makeAs("s"), asMinutes = makeAs("m"), asHours = makeAs("h"), asDays = makeAs("d"), asWeeks = makeAs("w"), asMonths = makeAs("M"), asQuarters = makeAs("Q"), asYears = makeAs("y"), valueOf$1 = asMilliseconds;
      function clone$1() {
        return createDuration(this);
      }
      function get$2(units) {
        units = normalizeUnits(units);
        return this.isValid() ? this[units + "s"]() : NaN;
      }
      function makeGetter(name) {
        return function() {
          return this.isValid() ? this._data[name] : NaN;
        };
      }
      var milliseconds = makeGetter("milliseconds"), seconds = makeGetter("seconds"), minutes = makeGetter("minutes"), hours = makeGetter("hours"), days = makeGetter("days"), months = makeGetter("months"), years = makeGetter("years");
      function weeks() {
        return absFloor(this.days() / 7);
      }
      var round2 = Math.round, thresholds = {
        ss: 44,
        // a few seconds to seconds
        s: 45,
        // seconds to minute
        m: 45,
        // minutes to hour
        h: 22,
        // hours to day
        d: 26,
        // days to month/week
        w: null,
        // weeks to month
        M: 11
        // months to year
      };
      function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale3) {
        return locale3.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
      }
      function relativeTime$1(posNegDuration, withoutSuffix, thresholds2, locale3) {
        var duration = createDuration(posNegDuration).abs(), seconds2 = round2(duration.as("s")), minutes2 = round2(duration.as("m")), hours2 = round2(duration.as("h")), days2 = round2(duration.as("d")), months2 = round2(duration.as("M")), weeks2 = round2(duration.as("w")), years2 = round2(duration.as("y")), a = seconds2 <= thresholds2.ss && ["s", seconds2] || seconds2 < thresholds2.s && ["ss", seconds2] || minutes2 <= 1 && ["m"] || minutes2 < thresholds2.m && ["mm", minutes2] || hours2 <= 1 && ["h"] || hours2 < thresholds2.h && ["hh", hours2] || days2 <= 1 && ["d"] || days2 < thresholds2.d && ["dd", days2];
        if (thresholds2.w != null) {
          a = a || weeks2 <= 1 && ["w"] || weeks2 < thresholds2.w && ["ww", weeks2];
        }
        a = a || months2 <= 1 && ["M"] || months2 < thresholds2.M && ["MM", months2] || years2 <= 1 && ["y"] || ["yy", years2];
        a[2] = withoutSuffix;
        a[3] = +posNegDuration > 0;
        a[4] = locale3;
        return substituteTimeAgo.apply(null, a);
      }
      function getSetRelativeTimeRounding(roundingFunction) {
        if (roundingFunction === void 0) {
          return round2;
        }
        if (typeof roundingFunction === "function") {
          round2 = roundingFunction;
          return true;
        }
        return false;
      }
      function getSetRelativeTimeThreshold(threshold, limit) {
        if (thresholds[threshold] === void 0) {
          return false;
        }
        if (limit === void 0) {
          return thresholds[threshold];
        }
        thresholds[threshold] = limit;
        if (threshold === "s") {
          thresholds.ss = limit - 1;
        }
        return true;
      }
      function humanize(argWithSuffix, argThresholds) {
        if (!this.isValid()) {
          return this.localeData().invalidDate();
        }
        var withSuffix = false, th = thresholds, locale3, output;
        if (typeof argWithSuffix === "object") {
          argThresholds = argWithSuffix;
          argWithSuffix = false;
        }
        if (typeof argWithSuffix === "boolean") {
          withSuffix = argWithSuffix;
        }
        if (typeof argThresholds === "object") {
          th = Object.assign({}, thresholds, argThresholds);
          if (argThresholds.s != null && argThresholds.ss == null) {
            th.ss = argThresholds.s - 1;
          }
        }
        locale3 = this.localeData();
        output = relativeTime$1(this, !withSuffix, th, locale3);
        if (withSuffix) {
          output = locale3.pastFuture(+this, output);
        }
        return locale3.postformat(output);
      }
      var abs$1 = Math.abs;
      function sign2(x) {
        return (x > 0) - (x < 0) || +x;
      }
      function toISOString$1() {
        if (!this.isValid()) {
          return this.localeData().invalidDate();
        }
        var seconds2 = abs$1(this._milliseconds) / 1e3, days2 = abs$1(this._days), months2 = abs$1(this._months), minutes2, hours2, years2, s, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign;
        if (!total) {
          return "P0D";
        }
        minutes2 = absFloor(seconds2 / 60);
        hours2 = absFloor(minutes2 / 60);
        seconds2 %= 60;
        minutes2 %= 60;
        years2 = absFloor(months2 / 12);
        months2 %= 12;
        s = seconds2 ? seconds2.toFixed(3).replace(/\.?0+$/, "") : "";
        totalSign = total < 0 ? "-" : "";
        ymSign = sign2(this._months) !== sign2(total) ? "-" : "";
        daysSign = sign2(this._days) !== sign2(total) ? "-" : "";
        hmsSign = sign2(this._milliseconds) !== sign2(total) ? "-" : "";
        return totalSign + "P" + (years2 ? ymSign + years2 + "Y" : "") + (months2 ? ymSign + months2 + "M" : "") + (days2 ? daysSign + days2 + "D" : "") + (hours2 || minutes2 || seconds2 ? "T" : "") + (hours2 ? hmsSign + hours2 + "H" : "") + (minutes2 ? hmsSign + minutes2 + "M" : "") + (seconds2 ? hmsSign + s + "S" : "");
      }
      var proto$2 = Duration.prototype;
      proto$2.isValid = isValid$1;
      proto$2.abs = abs;
      proto$2.add = add$1;
      proto$2.subtract = subtract$1;
      proto$2.as = as;
      proto$2.asMilliseconds = asMilliseconds;
      proto$2.asSeconds = asSeconds;
      proto$2.asMinutes = asMinutes;
      proto$2.asHours = asHours;
      proto$2.asDays = asDays;
      proto$2.asWeeks = asWeeks;
      proto$2.asMonths = asMonths;
      proto$2.asQuarters = asQuarters;
      proto$2.asYears = asYears;
      proto$2.valueOf = valueOf$1;
      proto$2._bubble = bubble;
      proto$2.clone = clone$1;
      proto$2.get = get$2;
      proto$2.milliseconds = milliseconds;
      proto$2.seconds = seconds;
      proto$2.minutes = minutes;
      proto$2.hours = hours;
      proto$2.days = days;
      proto$2.weeks = weeks;
      proto$2.months = months;
      proto$2.years = years;
      proto$2.humanize = humanize;
      proto$2.toISOString = toISOString$1;
      proto$2.toString = toISOString$1;
      proto$2.toJSON = toISOString$1;
      proto$2.locale = locale2;
      proto$2.localeData = localeData;
      proto$2.toIsoString = deprecate(
        "toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",
        toISOString$1
      );
      proto$2.lang = lang;
      addFormatToken("X", 0, 0, "unix");
      addFormatToken("x", 0, 0, "valueOf");
      addRegexToken("x", matchSigned);
      addRegexToken("X", matchTimestamp);
      addParseToken("X", function(input, array, config) {
        config._d = new Date(parseFloat(input) * 1e3);
      });
      addParseToken("x", function(input, array, config) {
        config._d = new Date(toInt(input));
      });
      hooks.version = "2.30.1";
      setHookCallback(createLocal);
      hooks.fn = proto;
      hooks.min = min;
      hooks.max = max;
      hooks.now = now;
      hooks.utc = createUTC;
      hooks.unix = createUnix;
      hooks.months = listMonths;
      hooks.isDate = isDate;
      hooks.locale = getSetGlobalLocale;
      hooks.invalid = createInvalid;
      hooks.duration = createDuration;
      hooks.isMoment = isMoment;
      hooks.weekdays = listWeekdays;
      hooks.parseZone = createInZone;
      hooks.localeData = getLocale;
      hooks.isDuration = isDuration;
      hooks.monthsShort = listMonthsShort;
      hooks.weekdaysMin = listWeekdaysMin;
      hooks.defineLocale = defineLocale;
      hooks.updateLocale = updateLocale;
      hooks.locales = listLocales;
      hooks.weekdaysShort = listWeekdaysShort;
      hooks.normalizeUnits = normalizeUnits;
      hooks.relativeTimeRounding = getSetRelativeTimeRounding;
      hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
      hooks.calendarFormat = getCalendarFormat;
      hooks.prototype = proto;
      hooks.HTML5_FMT = {
        DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
        // <input type="datetime-local" />
        DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
        // <input type="datetime-local" step="1" />
        DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
        // <input type="datetime-local" step="0.001" />
        DATE: "YYYY-MM-DD",
        // <input type="date" />
        TIME: "HH:mm",
        // <input type="time" />
        TIME_SECONDS: "HH:mm:ss",
        // <input type="time" step="1" />
        TIME_MS: "HH:mm:ss.SSS",
        // <input type="time" step="0.001" />
        WEEK: "GGGG-[W]WW",
        // <input type="week" />
        MONTH: "YYYY-MM"
        // <input type="month" />
      };
      return hooks;
    });
  }
});

// src/main.ts
var main_exports = {};
__export(main_exports, {
  default: () => SRPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian11 = require("obsidian");
var graph = __toESM(require_lib());

// src/settings.ts
var import_obsidian2 = require("obsidian");

// src/lang/helpers.ts
var import_obsidian = require("obsidian");

// src/lang/locale/af.ts
var af_default = {};

// src/lang/locale/ar.ts
var ar_default = {
  // flashcard-modal.tsx
  DECKS: "\u0627\u0644\u0631\u064F\u0632\u0645\u064E\u0627\u062A",
  DUE_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u064F\u0633\u062A\u062D\u0642\u0629",
  NEW_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u062C\u062F\u064A\u062F\u0629",
  TOTAL_CARDS: "\u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
  BACK: "\u0631\u062C\u0648\u0639",
  SKIP: "Skip",
  EDIT_CARD: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
  RESET_CARD_PROGRESS: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645\u0652 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
  HARD: "\u0635\u0639\u0628",
  GOOD: "\u062C\u064A\u062F",
  EASY: "\u0633\u0647\u0644",
  SHOW_ANSWER: "\u0623\u0638\u0647\u0650\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
  CARD_PROGRESS_RESET: ".\u062A\u0645\u0651\u064E\u062A \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
  SAVE: "\u062D\u0641\u0638",
  CANCEL: "\u0625\u0644\u063A\u0627\u0621",
  NO_INPUT: ".\u0644\u0645 \u064A\u062A\u0650\u0645 \u062A\u0642\u062F\u064A\u0645 \u0623\u064A \u0645\u064F\u062F\u062E\u0644\u0627\u062A",
  CURRENT_EASE_HELP_TEXT: ":\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629",
  CURRENT_INTERVAL_HELP_TEXT: ":\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0627\u0644\u062D\u0627\u0644\u064A",
  CARD_GENERATED_FROM: "${notePath} :\u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
  REVIEW_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
  REVIEW_DIFFICULTY_FILE_MENU: "${difficulty} :\u0645\u0631\u0627\u062C\u0639\u0629",
  REVIEW_NOTE_DIFFICULTY_CMD: "${difficulty} \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640",
  CRAM_ALL_CARDS: "\u062D\u062F\u062F \u0631\u064F\u0632\u0645\u064E\u0629 \u0644\u0644\u062D\u0634\u0631",
  REVIEW_ALL_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A",
  REVIEW_CARDS_IN_NOTE: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A  \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629",
  CRAM_CARDS_IN_NOTE: "\u0623\u062D\u0634\u0631 \u062C\u0645\u064A\u0639 \u0628\u0637\u0627\u0642\u0627\u062A \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629",
  VIEW_STATS: "\u0639\u0631\u0636 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 ${dueFlashcardsCount},\u0645\u0644\u0627\u062D\u0638\u0627\u062A ${dueNotesCount}:\u0645\u0631\u0627\u062C\u0639\u0629",
  SYNC_TIME_TAKEN: "${t}ms \u0627\u0633\u062A\u063A\u0631\u0627\u0642 \u0627\u0644\u0645\u0632\u0627\u0645\u0646\u0629",
  NOTE_IN_IGNORED_FOLDER: ".\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u0636\u0645\u0646 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0630\u064A \u062A\u0645 \u062A\u062C\u0627\u0647\u0644\u0647 (\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)",
  PLEASE_TAG_NOTE: ".\u064A\u0631\u062C\u0649 \u0648\u0636\u0639 \u0648\u0633\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0628\u0634\u0643\u0644 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629 (\u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)",
  RESPONSE_RECEIVED: ".\u0627\u0633\u062A\u064F\u0644\u0645\u062A \u0627\u0644\u0627\u0633\u062A\u062C\u0627\u0628\u0629",
  NO_DECK_EXISTS: "${deckName} \u0644\u0627 \u064A\u0648\u062C\u062F \u0631\u064F\u0632\u0645\u064E\u0629",
  ALL_CAUGHT_UP: "\u{1F606} \u0644\u0642\u062F \u062A\u0645 \u0627\u0644\u0642\u0628\u0636 \u0639\u0644\u064A\u0643\u0645 \u062C\u0645\u064A\u0639\u0627 \u0627\u0644\u0622\u0646",
  // scheduling.ts
  DAYS_STR_IVL: "\u064A\u0648\u0645/\u0623\u064A\u0627\u0645 ${interval}",
  MONTHS_STR_IVL: "\u0634\u0647\u0631/\u0623\u0634\u0647\u0631 ${interval}",
  YEARS_STR_IVL: "\u0633\u0646\u0629/\u0633\u0646\u0648\u0627\u062A ${interval}",
  DAYS_STR_IVL_MOBILE: "\u064A${interval}",
  MONTHS_STR_IVL_MOBILE: "\u0634${interval}",
  YEARS_STR_IVL_MOBILE: "\u0633${interval}",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition Plugin - Settings",
  CHECK_WIKI: '.<a href="${wiki_url}">wiki</a> \u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u060C \u062A\u062D\u0642\u0642 \u0645\u0646',
  FOLDERS_TO_IGNORE: "\u0645\u062C\u0644\u062F\u0627\u062A \u0644\u062A\u062C\u0627\u0647\u0644\u0647\u0627",
  FOLDERS_TO_IGNORE_DESC: "Templates Meta/Scripts : \u0623\u062F\u062E\u0644 \u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0644\u062F \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0648\u0627\u0633\u0637\u0629 \u0633\u0637\u0648\u0631 \u062C\u062F\u064A\u062F\u0629,\u0645\u062B\u0627\u0644",
  FLASHCARDS: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
  FLASHCARD_EASY_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0633\u0647\u0644",
  FLASHCARD_GOOD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u062C\u064A\u062F",
  FLASHCARD_HARD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0635\u0639\u0628",
  FLASHCARD_EASY_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0633\u0647\u0644',
  FLASHCARD_GOOD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u062C\u064A\u062F',
  FLASHCARD_HARD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0635\u0639\u0628',
  FLASHCARD_TAGS: "\u0648\u064F\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
  FLASHCARD_TAGS_DESC: "#2\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u064F\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u0623\u0633\u0637\u0631 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A# \u0631\u0632\u0645\u06293# \u0631\u0632\u0645\u0629",
  CONVERT_FOLDERS_TO_DECKS: "\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u0623\u0635\u0644\u064A\u0629 \u0648 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629\u061F",
  CONVERT_FOLDERS_TO_DECKS_DESC: ".\u0647\u0630\u0627 \u0647\u0648 \u0628\u062F\u064A\u0644 \u0644\u062E\u064A\u0627\u0631 \u0648\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0623\u0639\u0644\u0627\u0647",
  INLINE_SCHEDULING_COMMENTS: "\u062D\u0641\u0638 \u062A\u0639\u0644\u064A\u0642 \u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0633\u0637\u0631 \u0645\u062B\u0644 \u0627\u0644\u0633\u0637\u0631 \u0627\u0644\u0623\u062E\u064A\u0631 \u0644\u0644\u0628\u0637\u0627\u0642\u0629 \u061F",
  INLINE_SCHEDULING_COMMENTS_DESC: "\u0644\u0627 \u062A\u0643\u0633\u0631 \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 HTML \u0633\u064A\u0624\u062F\u064A \u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0625\u0644\u0649 \u062C\u0639\u0644 \u062A\u0639\u0644\u064A\u0642\u0627\u062A",
  BURY_SIBLINGS_TILL_NEXT_DAY: "\u0623\u062E\u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u062D\u062A\u0649 \u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u062A\u0627\u0644\u064A",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "cloze deletions : \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u0647\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646 \u0646\u0641\u0633 \u0646\u0635 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0643\u0640",
  SHOW_CARD_CONTEXT: "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u064A\u0627\u0642 \u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A\u061F",
  SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading",
  CARD_MODAL_HEIGHT_PERCENT: "\u0646\u0633\u0628\u0629 \u0627\u0631\u062A\u0641\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
  CARD_MODAL_SIZE_PERCENT_DESC: "\u064A\u062C\u0628 \u0636\u0628\u0637\u0647\u0627 \u0639\u0644\u0649 100 \u066A \u0639\u0644\u0649 \u0627\u0644\u0647\u0627\u062A\u0641 \u0627\u0644\u0645\u062D\u0645\u0648\u0644 \u0623\u0648 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0635\u0648\u0631 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u064B\u0627",
  RESET_DEFAULT: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A",
  CARD_MODAL_WIDTH_PERCENT: "\u0646\u0633\u0628\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u0637\u0627\u0642\u0629",
  RANDOMIZE_CARD_ORDER: "\u062A\u0631\u062A\u064A\u0628 \u0628\u0637\u0627\u0642\u0629 \u0639\u0634\u0648\u0627\u0626\u064A \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629\u061F",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "\u061Fcloze \u062A\u0639\u0637\u064A\u0644 \u0628\u0637\u0627\u0642\u0627\u062A",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?",
  INLINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0636\u0645\u0646\u0629",
  FIX_SEPARATORS_MANUALLY_WARNING: "\u0636\u0639 \u0641\u064A \u062D\u0633\u0627\u0628\u0643 \u0623\u0646\u0647 \u0628\u0639\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u060C \u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u062A\u0639\u062F\u064A\u0644 \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u0644\u062F\u064A\u0643 \u0628\u0627\u0644\u0641\u0639\u0644 \u064A\u062F\u0648\u064A\u064B\u0627",
  INLINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u0636\u0645\u0646\u0629",
  MULTILINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629",
  NOTES: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A",
  REVIEW_PANE_ON_STARTUP: "\u062A\u0645\u0643\u064A\u0646 \u062C\u0632\u0621 \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0639\u0646\u062F \u0628\u062F\u0621 \u0627\u0644\u062A\u0634\u063A\u064A\u0644",
  TAGS_TO_REVIEW: "\u0648\u0633\u0648\u0645 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
  TAGS_TO_REVIEW_DESC: "#\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u062E\u0637\u0648\u0637 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A : \u0645\u0631\u0627\u062C\u0639\u0629# \u0648\u0633\u06452# \u0648\u0633\u06453",
  OPEN_RANDOM_NOTE: "\u0627\u0641\u062A\u062D \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
  OPEN_RANDOM_NOTE_DESC: "(Pagerank) \u0639\u0646\u062F \u062A\u0639\u0637\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u060C\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0633\u064A\u062A\u0645 \u062A\u0631\u062A\u064A\u0628\u064F\u0647\u0627 \u062D\u0633\u0628 \u0627\u0644\u0623\u0647\u0645\u064A\u0629",
  AUTO_NEXT_NOTE: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0628\u0639\u062F \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u062A\u0639\u0637\u064A\u0644 \u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u060C \u0623\u064A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629:\u0627\u0644\u0633\u0647\u0644 \u0627\u0644\u0635\u0639\u0628 \u0627\u0644\u062C\u064A\u062F",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u0639\u0646\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 Obsidian \u0623\u0639\u062F \u062A\u0634\u063A\u064A\u0644 , command hotkeys. \u0628\u0639\u062F \u0627\u0644\u062A\u0639\u0637\u064A\u0644 \u060C \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645",
  MAX_N_DAYS_REVIEW_QUEUE: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 \u0627\u0644\u062A\u064A \u064A\u062C\u0628 \u0639\u0631\u0636\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u064A\u0645\u0646\u0649",
  MIN_ONE_DAY: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 1 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
  VALID_NUMBER_WARNING: "\u064A\u0631\u062C\u0649 \u062A\u0642\u062F\u064A\u0645 \u0631\u0642\u0645 \u0635\u0627\u0644\u062D",
  UI_PREFERENCES: "\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u064A \u0644\u0644\u0631\u064F\u0632\u0645 \u0645\u0648\u0633\u0639 \u0628\u062D\u064A\u062B \u062A\u0637\u0647\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629 \u0643\u0644\u0647\u0627",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: " \u0639\u0637\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0644\u0637\u064A \u0627\u0644\u0631\u064F\u0632\u0645 \u0627\u0644\u0645\u062A\u062F\u0627\u062E\u0644\u0629 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 , \u0645\u0641\u064A\u062F \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0631\u064F\u0632\u0645 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0645\u0644\u0641",
  ALGORITHM: "\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629",
  CHECK_ALGORITHM_WIKI: '<a href="${algo_url}">algorithm implementation</a> :\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u062D\u0642\u0642 \u0645\u0646',
  BASE_EASE: "\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629",
  BASE_EASE_DESC: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 130 \u060C \u0648\u064A\u0641\u0636\u0644 \u062D\u0648\u0627\u0644\u064A 250.",
  BASE_EASE_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629 130 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.",
  LAPSE_INTERVAL_CHANGE: "\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u064A\u062A\u063A\u064A\u0631 \u0639\u0646\u062F \u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 \u0635\u0639\u0628\u0629",
  LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.",
  EASY_BONUS: "\u0645\u0643\u0627\u0641\u0623\u0629 \u0633\u0647\u0644\u0629",
  EASY_BONUS_DESC: "\u062A\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 \u0636\u0628\u0637 \u0627\u0644\u0641\u0631\u0642 \u0641\u064A \u0627\u0644\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A\u0629 \u0628\u064A\u0646 \u0627\u0644\u0631\u062F \u0627\u0644\u062C\u064A\u062F \u0648\u0627\u0644\u0633\u0647\u0644 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 (\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 100 \u066A).",
  EASY_BONUS_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 100 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.",
  MAX_INTERVAL: "Maximum interval in days",
  MAX_INTERVAL_DESC: "\u064A\u062A\u064A\u062D \u0644\u0643 \u0648\u0636\u0639 \u062D\u062F \u0623\u0639\u0644\u0649  \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A (\u0627\u0641\u062A\u0631\u0627\u0636\u064A = 100 \u0639\u0627\u0645).",
  MAX_INTERVAL_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0644\u0645\u062F\u0629 \u064A\u0648\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.",
  MAX_LINK_CONTRIB: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0631\u062A\u0628\u0627\u0637",
  MAX_LINK_CONTRIB_DESC: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0644\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0645\u0631\u062C\u062D\u0629 \u0644\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629 \u0628\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629.",
  LOGGING: "\u062A\u0633\u062C\u064A\u0644",
  DISPLAY_DEBUG_INFO: "\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649 \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u0637\u0648\u0631\u061F",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629",
  CLOSE: "\u0623\u063A\u0644\u0642",
  NEW: "\u062C\u062F\u064A\u062F",
  YESTERDAY: "\u0627\u0644\u0628\u0627\u0631\u062D\u0629",
  TODAY: "\u0627\u0644\u064A\u0648\u0645",
  TOMORROW: "\u0627\u0644\u063A\u062F",
  // stats-modal.tsx
  STATS_TITLE: "\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A",
  MONTH: "\u0634\u0647\u0631",
  QUARTER: "\u0631\u0628\u0639 \u0627\u0644\u0633\u0646\u0629",
  YEAR: "\u0633\u0646\u0629",
  LIFETIME: "",
  FORECAST: "",
  FORECAST_DESC: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644",
  SCHEDULED: "\u0627\u0644\u0645\u0642\u0631\u0631",
  DAYS: "\u0623\u064A\u0627\u0645",
  NUMBER_OF_CARDS: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
  REVIEWS_PER_DAY: "\u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A/\u0627\u0644\u064A\u0648\u0645 ${avg} :\u0645\u062A\u0648\u0633\u0637",
  INTERVALS: "\u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0646\u064A\u0629",
  INTERVALS_DESC: "\u0627\u0644\u062A\u0623\u062E\u064A\u0631 \u062D\u062A\u0649 \u064A\u062A\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A \u0645\u0631\u0629 \u0623\u062E\u0631\u0649",
  COUNT: "\u0639\u062F\u062F",
  INTERVALS_SUMMARY: "${longest} : \u0623\u0637\u0648\u0644 \u0641\u0627\u0635\u0644 \u0632\u0645\u0646\u064A ,${avg} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A",
  EASES: "\u0627\u0644\u0633\u0647\u0648\u0644\u0629",
  EASES_SUMMARY: "${avgEase} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0633\u0647\u0648\u0644\u0629",
  CARD_TYPES: "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A",
  CARD_TYPES_DESC: "\u0648\u0647\u0630\u0627 \u064A\u0634\u0645\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062E\u0641\u064A\u0629 \u0643\u0630\u0644\u0643 \u060C \u0625\u0646 \u0648\u062C\u062F\u062A",
  CARD_TYPE_NEW: "\u062C\u062F\u064A\u062F\u0629",
  CARD_TYPE_YOUNG: "\u0635\u063A\u064A\u0631\u0629",
  CARD_TYPE_MATURE: "\u0646\u0627\u0636\u062C\u0629",
  CARD_TYPES_SUMMARY: " ${totalCardsCount} :\u0625\u062C\u0645\u0627\u0644\u064A \u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A"
};

// src/lang/locale/cz.ts
var cz_default = {
  // flashcard-modal.tsx
  DECKS: "Bal\xED\u010Dky",
  DUE_CARDS: "Karti\u010Dky po term\xEDnu",
  NEW_CARDS: "Nov\xE9 karti\u010Dky",
  TOTAL_CARDS: "Karti\u010Dek celkem",
  BACK: "Back",
  SKIP: "Skip",
  EDIT_CARD: "Edit Card",
  RESET_CARD_PROGRESS: "Vynulovat pokrok karti\u010Dky",
  HARD: "Te\u017Ek\xE9",
  GOOD: "Dobr\xE9",
  EASY: "Jednoduch\xE9",
  SHOW_ANSWER: "Uk\xE1zat odpov\u011B\u010F",
  CARD_PROGRESS_RESET: "Pokrok karti\u010Dky byl vynulov\xE1n.",
  SAVE: "Save",
  CANCEL: "Cancel",
  NO_INPUT: "No input provided.",
  CURRENT_EASE_HELP_TEXT: "Current Ease: ",
  CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
  CARD_GENERATED_FROM: "Generated from: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Otev\u0159\xEDt pozn\xE1mku k revizi",
  REVIEW_CARDS: "Pozn\xE1mek k revizi",
  REVIEW_DIFFICULTY_FILE_MENU: "Revize: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Ozna\u010Dit pozn\xE1mku jako ${difficulty}",
  REVIEW_ALL_CARDS: "Revidovat karti\u010Dky ve v\u0161ech pozn\xE1mk\xE1ch",
  CRAM_ALL_CARDS: "Select a deck to cram",
  REVIEW_CARDS_IN_NOTE: "Revidovat karti\u010Dky v t\xE9to pozn\xE1mce.",
  CRAM_CARDS_IN_NOTE: "Cram karti\u010Dky v t\xE9to pozn\xE1mce.",
  VIEW_STATS: "Uk\xE1zat statistiky",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Revize: ${dueNotesCount} pozn\xE1mek, ${dueFlashcardsCount} karti\u010Dek po term\xEDnu",
  SYNC_TIME_TAKEN: "Synchronizace trvala ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "Pozn\xE1mka je ulo\u017Eena v ignorovan\xE9 slo\u017Ece (zkontrolujte nastaven\xED).",
  PLEASE_TAG_NOTE: "Pros\xEDm ozna\u010Dne pozn\xE1mku odpov\xEDdaj\xEDc\xEDm tagem pro revizi (v nastaven\xED).",
  RESPONSE_RECEIVED: "Odpov\u011B\u010F p\u0159ijata.",
  NO_DECK_EXISTS: "Neexistuje \u017E\xE1dn\xFD bal\xED\u010Dek pro ${deckName}",
  ALL_CAUGHT_UP: "V\u0161e zrevidov\xE1no",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} den/dn\xED",
  MONTHS_STR_IVL: "${interval} m\u011Bs\xEDc(\u016F)",
  YEARS_STR_IVL: "${interval} rok(\u016F)",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}r",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition Plugin - Nastaven\xED",
  CHECK_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "Ignorovan\xE9 slo\u017Eky",
  FOLDERS_TO_IGNORE_DESC: "Zadejte cesty ke slo\u017Ek\xE1m odd\u011Blen\xE9 od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDkad. \u0160ablony Meta/Scripts",
  FLASHCARDS: "Karti\u010Dky",
  FLASHCARD_EASY_LABEL: "Easy Button Text",
  FLASHCARD_GOOD_LABEL: "Good Button Text",
  FLASHCARD_HARD_LABEL: "Hard Button Text",
  FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
  FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
  FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
  FLASHCARD_TAGS: "Tag pro karti\u010Dky",
  FLASHCARD_TAGS_DESC: "Zadete tagy ood\u011Blen\xE9 mezerou nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad. #karti\u010Dky #bal\xED\u010Dke2 #bal\xED\u010Dek3.",
  CONVERT_FOLDERS_TO_DECKS: "P\u0159ev\xE9st slo\u017Eky na bal\xED\u010Dky a podbal\xED\u010Dky?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "Toto je alternativa k tag\u016Fm karti\u010Dek viz nastaven\xED v\xFD\u0161e.",
  INLINE_SCHEDULING_COMMENTS: "Ulo\u017Eit pl\xE1novac\xED koment\xE1\u0159 na stejn\xFD \u0159\xE1dek jako posledn\xED polo\u017Eka karti\u010Dky?",
  INLINE_SCHEDULING_COMMENTS_DESC: "Zapnut\xED t\xE9to volby zp\u016Fsob\xED, \u017Ee HTML koment\xE1\u0159e nebudou rozb\xEDjet form\xE1tov\xE1n\xED list\u016F.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Odlo\u017Eit p\u0159\xEDbuzn\xE9 karti\u010Dky na dal\u0161\xED den?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "P\u0159\xEDbuzn\xE9 karti\u010Dky jsou karti\u010Dky generovan\xE9 z textu stejn\xE9 pozn\xE1mky nap\u0159\xEDklad cloze smaz\xE1n\xED",
  SHOW_CARD_CONTEXT: "Uk\xE1zat kontext v karti\u010Dce?",
  SHOW_CARD_CONTEXT_DESC: "nap\u0159\xEDklad Titulek > Nadpis1 > Podnadpis > ... > Podnadpis",
  CARD_MODAL_HEIGHT_PERCENT: "V\xFD\u0161ka karti\u010Dek v procentech",
  CARD_MODAL_SIZE_PERCENT_DESC: "M\u011Blo by b\xFDt nastaveno na 100% na mobilu nebo kdy\u017E pou\u017E\xEDv\xE1te velk\xE9 obr\xE1zky",
  RESET_DEFAULT: "Resetovat v\xFDchoz\xED nastaven\xED",
  CARD_MODAL_WIDTH_PERCENT: "\u0160\xED\u0159ka karti\u010Dek v procentech",
  RANDOMIZE_CARD_ORDER: "N\xE1hodn\u011B zm\u011Bnit po\u0159ad\xED karti\u010Dek b\u011Bhem revize?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "Vypnout cloze karti\u010Dky?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "P\u0159ev\xE9st ==zv\xFDrazn\u011Bn\xED== na clozes?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "P\u0159ev\xE9st **tu\u010Dn\xFD text** na clozes?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "P\u0159ev\xE9st {{slo\u017Een\xE9 z\xE1vorky}} na clozes?",
  INLINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro inline karti\u010Dky",
  FIX_SEPARATORS_MANUALLY_WARNING: "Pozor. Jakmile toto zm\u011Bn\xEDte, budete muset ru\u010Dn\u011B upravit v\u0161echny existuj\xEDc\xED karti\u010Dky.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro oto\u010Den\xE9 inline karti\u010Dky",
  MULTILINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkov\xE9 karti\u010Dky",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkove oto\u010Den\xE9 karti\u010Dky",
  NOTES: "Pozn\xE1mky",
  REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
  TAGS_TO_REVIEW: "Tag pro revizi",
  TAGS_TO_REVIEW_DESC: "Zadejte tagy odd\u011Blen\xE9 mezerami nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad #review #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "Otev\u0159\xEDt n\xE1hodnou pozn\xE1mku pro revizi",
  OPEN_RANDOM_NOTE_DESC: "Pokud toto vypnete, pozn\xE1mky budou \u0159azeny dle d\u016Fle\u017Eitosti (PageRank).",
  AUTO_NEXT_NOTE: "Otev\u0159\xEDt automaticky dal\u0161\xED pozn\xE1mku po dokon\u010Den\xED revize",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Vypnout volby revize v menu souboru nap\u0159\xEDklad 'Revize: Jednoduch\xE9'",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Po vypnut\xED m\u016F\u017Eete pou\u017E\xEDvat kl\xE1vesov\xE9 zkratky. Restartujte Obsidian po zm\u011Bn\u011B nastaven\xED.",
  MAX_N_DAYS_REVIEW_QUEUE: "Maxim\xE1ln\xED po\u010Det dn\xED zobrazen\xFDch v prav\xE9m panelu",
  MIN_ONE_DAY: "Po\u010Det dn\xED mus\xED b\xFDt minim\xE1ln\u011B 1.",
  VALID_NUMBER_WARNING: "Pros\xEDm zadejte validn\xED \u010D\xEDslo.",
  UI_PREFERENCES: "P\u0159edvolby u\u017Eivatelsk\xE9ho rozhran\xED",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Stromy bal\xED\u010Dky by m\u011Bly b\xFDt zpo\u010D\xE1tku zobrazeny jako rozbalen\xE9",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Vypn\u011Bte toto, chcete-li sbalit vno\u0159en\xE9 bal\xED\u010Dky na stejn\xE9 kart\u011B. To je u\u017Eite\u010Dn\xE9, pokud m\xE1te karti\u010Dky, kter\xE9 pat\u0159\xED k mnoha bal\xED\u010Dk\u016Fm ve stejn\xE9m souboru.",
  ALGORITHM: "Algoritmus",
  CHECK_ALGORITHM_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na <a href="${algo_url}">popis algoritmu</a>.',
  BASE_EASE: "Z\xE1kladn\xED slo\u017Eitost",
  BASE_EASE_DESC: "minimum = 130, nejl\xE9pe p\u0159ibli\u017En\u011B 250.",
  BASE_EASE_MIN_WARNING: "Z\xE1kladn\xED slo\u017Eitost mus\xED b\xFDt minim\xE1ln\u011B 130.",
  LAPSE_INTERVAL_CHANGE: "Zm\u011Bna intervalu pokud karti\u010Dku/pozn\xE1mku ozna\u010D\xEDte jako slo\u017Eitou",
  LAPSE_INTERVAL_CHANGE_DESC: "nov\xFD_inteval = star\xFD_interval * zm\u011Bna_intevalu / 100.",
  EASY_BONUS: "Bonus pro jednoduch\xE9",
  EASY_BONUS_DESC: "Tento bonus umo\u017E\u0148uje nastavit rozd\xEDl intervalu mezi jednoduch\xFDmi a dobr\xFDmi karti\u010Dkami/pozn\xE1mkami (minimum = 100%).",
  EASY_BONUS_MIN_WARNING: "Bonus pro jednoduchost mus\xED b\xFDt minim\xE1ln\u011B 100.",
  MAX_INTERVAL: "Maximum interval in days",
  MAX_INTERVAL_DESC: "Umo\u017E\u0148uje nastavit horn\xED limit pro interval (defaultn\u011B = 100 let).",
  MAX_INTERVAL_MIN_WARNING: "Maxim\xE1ln\xED interval mus\xED b\xFDt alespo\u0148 1 den.",
  MAX_LINK_CONTRIB: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bv\u011Bk prolinkov\xE1n\xED",
  MAX_LINK_CONTRIB_DESC: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bvek v\xE1\u017Een\xE9 slo\u017Eitosti prolinkovan\xFDch pozn\xE1mek pou\u017Eit\xFD pro ur\u010Den\xED po\u010D\xE1te\u010Dn\xED slo\u017Eitosti.",
  LOGGING: "Zaznamen\xE1v\xE1m",
  DISPLAY_DEBUG_INFO: "Zobrazit informace pro lad\u011Bn\xED na v\xFDvoj\xE1\u0159sk\xE9 konzoli?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "Fronta pozn\xE1mek k revizi",
  CLOSE: "Uzav\u0159en\xE9",
  NEW: "Nov\xE9",
  YESTERDAY: "V\u010Dera",
  TODAY: "Dnes",
  TOMORROW: "Z\xEDtra",
  // stats-modal.tsx
  STATS_TITLE: "Statistiky",
  MONTH: "M\u011Bs\xEDc",
  QUARTER: "\u010Ctvrtlet\xED",
  YEAR: "Rok",
  LIFETIME: "Celkov\u011B",
  FORECAST: "P\u0159edpov\u011B\u010F",
  FORECAST_DESC: "Celkov\xFD po\u010Det karti\u010Dek, kter\xFDm vypr\u0161\xED term\xEDn",
  SCHEDULED: "Napl\xE1nov\xE1no",
  DAYS: "Dn\xED",
  NUMBER_OF_CARDS: "Po\u010Det karti\u010Dek",
  REVIEWS_PER_DAY: "Pr\u016Fm\u011Br: ${avg} revize/den",
  INTERVALS: "Intervaly",
  INTERVALS_DESC: "Doba, za kterou bude znovu zobrazeno k revize",
  COUNT: "Po\u010Det",
  INTERVALS_SUMMARY: "Pr\u016Fm\u011Brn\xFD interval: ${avg}, Nejdel\u0161\xED interval: ${longest}",
  EASES: "Slo\u017Eitost",
  EASES_SUMMARY: "Pr\u016Fm\u011Brn\xE1 slo\u017Eitost: ${avgEase}",
  CARD_TYPES: "Typy karti\u010Dek",
  CARD_TYPES_DESC: "Obsahuje i odlo\u017Een\xE9 karti\u010Dky (pokud existuj\xED)",
  CARD_TYPE_NEW: "Nov\xE1",
  CARD_TYPE_YOUNG: "Mlad\xE1",
  CARD_TYPE_MATURE: "Dosp\u011Bl\xE1",
  CARD_TYPES_SUMMARY: "Karti\u010Dek celkem: ${totalCardsCount}"
};

// src/lang/locale/bn.ts
var bn_default = {};

// src/lang/locale/da.ts
var da_default = {};

// src/lang/locale/de.ts
var de_default = {
  // flashcard-modal.tsx
  DECKS: "Stapel",
  DUE_CARDS: "Anstehende Karten",
  NEW_CARDS: "Neue Karten",
  TOTAL_CARDS: "Alle Karten",
  BACK: "Back",
  SKIP: "Skip",
  EDIT_CARD: "Edit Card",
  RESET_CARD_PROGRESS: "Kartenfortschritt zur\xFCcksetzten",
  HARD: "Schwer",
  GOOD: "Gut",
  EASY: "Einfach",
  SHOW_ANSWER: "Zeige Antwort",
  CARD_PROGRESS_RESET: "Kartenfortschritt wurde zur\xFCckgesetzt.",
  SAVE: "Save",
  CANCEL: "Cancel",
  NO_INPUT: "No input provided.",
  CURRENT_EASE_HELP_TEXT: "Current Ease: ",
  CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
  CARD_GENERATED_FROM: "Generated from: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Notiz zur Wiederholung \xF6ffnen",
  REVIEW_CARDS: "Lernkarten wiederholen",
  REVIEW_DIFFICULTY_FILE_MENU: "Notiz abschliessen als: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Notiz abschliessen als: ${difficulty}",
  REVIEW_ALL_CARDS: "Alle Lernkarten wiederholen",
  CRAM_ALL_CARDS: "Select a deck to cram",
  REVIEW_CARDS_IN_NOTE: "Lernkarten in dieser Notiz wiederholen",
  CRAM_CARDS_IN_NOTE: "Lernkarten in dieser Notiz pauken.",
  VIEW_STATS: "Statistiken anzeigen",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Wiederholung: ${dueNotesCount} Notiz(en), ${dueFlashcardsCount} Karte(n) anstehend",
  SYNC_TIME_TAKEN: "Sync dauerte ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "Notiz befindet sich in einem ausgeschlossenen Ordner (siehe Einstellungen).",
  PLEASE_TAG_NOTE: "Bitte die Notiz f\xFCr Wiederholungen entsprechend taggen (siehe Einstellungen).",
  RESPONSE_RECEIVED: "Antwort erhalten.",
  NO_DECK_EXISTS: "Kein Stapel f\xFCr ${deckName} gefunden.",
  ALL_CAUGHT_UP: "Yuhu! Alles geschafft! :D.",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} Tag(e)",
  MONTHS_STR_IVL: "${interval} Monat(e)",
  YEARS_STR_IVL: "${interval} Jahr(e)",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}y",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition Plugin - Einstellungen",
  CHECK_WIKI: 'Weitere Informationen gibt es im <a href="${wiki_url}">Wiki</a> (english).',
  FOLDERS_TO_IGNORE: "Ausgeschlossene Ordner",
  FOLDERS_TO_IGNORE_DESC: "Mehrere Ordner mit Zeilenumbr\xFCchen getrennt angeben. Bsp. OrdnerA[Zeilenumbruch]OrdnerB/Unterordner",
  FLASHCARDS: "Lernkarten",
  FLASHCARD_EASY_LABEL: "Easy Button Text",
  FLASHCARD_GOOD_LABEL: "Good Button Text",
  FLASHCARD_HARD_LABEL: "Hard Button Text",
  FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
  FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
  FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
  FLASHCARD_TAGS: "Lernkarten Tags",
  FLASHCARD_TAGS_DESC: "Mehrere Tags mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angeben. Bsp. #karte #stapel2 #stapel3.",
  CONVERT_FOLDERS_TO_DECKS: "Ordner in Stapel und Substapel umwandeln?",
  CONVERT_FOLDERS_TO_DECKS_DESC: 'Eine Alternative zur oberen "Lernkarten Tags" Option.',
  INLINE_SCHEDULING_COMMENTS: "Den Fortschritt in der gleichen Zeile wie die letzte Zeile einer Lernkartei speichern?",
  INLINE_SCHEDULING_COMMENTS_DESC: "Wenn aktiviert, wird der HTML Kommentar die umgebende Liste nicht aufbrechen.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Verwandte Karten auf den n\xE4chsten Tag verlegen?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Verwandte Karten sind aus der gleichen Karte generiert worden (z.B. L\xFCckentextkarten oder beidseitige Karten).",
  SHOW_CARD_CONTEXT: "Kontext in den Karten anzeigen?",
  SHOW_CARD_CONTEXT_DESC: "Bsp. Titel > \xDCberschrift 1 > Sektion > ... > Untersektion",
  CARD_MODAL_HEIGHT_PERCENT: "H\xF6he der Lernkartei in Prozent",
  CARD_MODAL_SIZE_PERCENT_DESC: "Auf kleinen Bildschirmen (z.B. Smartphones) oder bei sehr grossen Bildern sollte dieser Wert auf 100% gesetzt werden.",
  RESET_DEFAULT: "Standardeinstellung wiederherstellen",
  CARD_MODAL_WIDTH_PERCENT: "Breite einer Lernkarte in Prozent",
  RANDOMIZE_CARD_ORDER: "W\xE4hrend der Wiederhoung die Reihenfolge zuf\xE4llig mischen?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "L\xFCckentextkarten (cloze deletions) deaktivieren?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "==Hervorgehobenen== Text in L\xFCckentextkarten umwandeln?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "**Fettgedruckten** Text in L\xFCckentextkarten umwandeln?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{Geschweifte Klammern}} Text in L\xFCckentextkarten umwandeln?",
  INLINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige Lernkarten",
  FIX_SEPARATORS_MANUALLY_WARNING: "Wenn diese Einstellung ge\xE4ndert wird, dann m\xFCssen die entsprechenden Lernkarten manuell angepasst werden.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige beidseitige Lernkarten",
  MULTILINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige Lernkarten",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige beidseitige Lernkarten",
  NOTES: "Notizen",
  REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
  TAGS_TO_REVIEW: "Zu wiederholende Tags",
  TAGS_TO_REVIEW_DESC: "Mehrere Tags k\xF6nnen mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angegeben werden. Bsp. #karte #tag1 #tag2.",
  OPEN_RANDOM_NOTE: "Zuf\xE4llige Karten wiederholen",
  OPEN_RANDOM_NOTE_DESC: "Wenn dies deaktiviert wird, dann werden die Notizen nach Wichtigkeit wiederholt (PageRank).",
  AUTO_NEXT_NOTE: "Nach einer Wiederholung automatisch die n\xE4chste Karte \xF6ffnen",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Optionen zur Wiederholung im Men\xFC einer Datei deaktivieren. Bsp. Wiederholen: Einfach Gut Schwer",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Nach dem Deaktivieren k\xF6nnen die Tastenk\xFCrzel zur Wiederholung verwendet werden. Obsidian muss nach einer \xC4nderung neu geladen weren.",
  MAX_N_DAYS_REVIEW_QUEUE: "Maximale Anzahl anstehender Notizen, die im rechten Fensterbereich angezeigt werden",
  MIN_ONE_DAY: "Anzahl der Tage muss mindestens 1 sein.",
  VALID_NUMBER_WARNING: "Bitte eine g\xFCltige Zahl eingeben.",
  UI_PREFERENCES: "Einstellungen der Benutzeroberfl\xE4che",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deckb\xE4ume sollten anf\xE4nglich erweitert angezeigt werden",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Deaktivieren Sie dies, um verschachtelte Decks in derselben Karte zu reduzieren. N\xFCtzlich, wenn Sie Karten haben, die zu vielen Decks in derselben Datei geh\xF6ren.",
  ALGORITHM: "Algorithmus",
  CHECK_ALGORITHM_WIKI: 'Weiterf\xFChrende Informationen: <a href="${algo_url}">Implementierung des Algorithmus</a> (english).',
  BASE_EASE: "Basis der Einfachheit",
  BASE_EASE_DESC: "Minimum ist 130. Empfohlen wird ca. 250.",
  BASE_EASE_MIN_WARNING: "Basis der Einfachheit muss mindestens 130 sein.",
  LAPSE_INTERVAL_CHANGE: "Anpassungsfaktor des Intervalls wenn eine Notiz / Karte 'Schwer' abgeschlossen wird",
  LAPSE_INTERVAL_CHANGE_DESC: "neuesIntervall = altesIntervall * anpassungsfaktor / 100.",
  EASY_BONUS: "Einfachheit-Bonus",
  EASY_BONUS_DESC: "Der Einfachheit-Bonus gibt an um welchen Faktor (in Prozent) das Intervall l\xE4nger sein soll, wenn eine Notiz / Karte 'Einfach' statt 'Gut' abgeschlossen wird. Minimum ist 100%.",
  EASY_BONUS_MIN_WARNING: "Der Einfachheit-Bonus muss mindestens 100 sein.",
  MAX_INTERVAL: "Maximum interval in days",
  MAX_INTERVAL_DESC: "Das maximale Intervall (in Tagen) f\xFCr Wiederholungen. Standard sind 100 Jahre.",
  MAX_INTERVAL_MIN_WARNING: "Das maximale Interall muss mindestens ein Tag sein.",
  MAX_LINK_CONTRIB: "Maximaler Einfluss von Links",
  MAX_LINK_CONTRIB_DESC: "Maximaler Einfluss der Einfachheiten verlinkter Notizen zur gewichteten initialen Einfachheit einer neuen Lernkarte.",
  LOGGING: "Logging",
  DISPLAY_DEBUG_INFO: "Informationen zum Debugging in der Entwicklerkonsole anzeigen?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "Anstehende Notizen zur Wiederholung",
  CLOSE: "Schliessen",
  NEW: "Neu",
  YESTERDAY: "Gestern",
  TODAY: "Heute",
  TOMORROW: "Morgen",
  // stats-modal.tsx
  STATS_TITLE: "Statistiken",
  MONTH: "Month",
  QUARTER: "Quarter",
  YEAR: "Year",
  LIFETIME: "Lifetime",
  FORECAST: "Prognose",
  FORECAST_DESC: "Anzahl der k\xFCnftig anstehenden Karten",
  SCHEDULED: "Anstehend",
  DAYS: "Tage",
  NUMBER_OF_CARDS: "Anzahl der Karten",
  REVIEWS_PER_DAY: "Durchschnitt: ${avg} Wiederholungen/Tag",
  INTERVALS: "Intervalle",
  INTERVALS_DESC: "Intervalle bis Wiederholungen anstehen",
  COUNT: "Anzahl",
  INTERVALS_SUMMARY: "Durchschnittliches Intervall: ${avg}, L\xE4ngstes Intervall: ${longest}",
  EASES: "Einfachheit",
  EASES_SUMMARY: "Durchschnittliche Einfachheit: ${avgEase}",
  CARD_TYPES: "Kategorisierung",
  CARD_TYPES_DESC: "Verlegte Karten eingeschlossen",
  CARD_TYPE_NEW: "Neu",
  CARD_TYPE_YOUNG: "Jung",
  CARD_TYPE_MATURE: "Ausgereift",
  CARD_TYPES_SUMMARY: "Insgesamt ${totalCardsCount} Karten"
};

// src/lang/locale/en.ts
var en_default = {
  // flashcard-modal.tsx
  DECKS: "Decks",
  DUE_CARDS: "Due Cards",
  NEW_CARDS: "New Cards",
  TOTAL_CARDS: "Total Cards",
  BACK: "Back",
  SKIP: "Skip",
  EDIT_CARD: "Edit Card",
  RESET_CARD_PROGRESS: "Reset card's progress",
  HARD: "Hard",
  GOOD: "Good",
  EASY: "Easy",
  SHOW_ANSWER: "Show Answer",
  CARD_PROGRESS_RESET: "Card's progress has been reset.",
  SAVE: "Save",
  CANCEL: "Cancel",
  NO_INPUT: "No input provided.",
  CURRENT_EASE_HELP_TEXT: "Current Ease: ",
  CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
  CARD_GENERATED_FROM: "Generated from: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Open a note for review",
  REVIEW_CARDS: "Review flashcards",
  REVIEW_DIFFICULTY_FILE_MENU: "Review: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Review note as ${difficulty}",
  CRAM_ALL_CARDS: "Select a deck to cram",
  REVIEW_ALL_CARDS: "Review flashcards from all notes",
  REVIEW_CARDS_IN_NOTE: "Review flashcards in this note",
  CRAM_CARDS_IN_NOTE: "Cram flashcards in this note",
  VIEW_STATS: "View statistics",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Review: ${dueNotesCount} note(s), ${dueFlashcardsCount} card(s) due",
  SYNC_TIME_TAKEN: "Sync took ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "Note is saved under ignored folder (check settings).",
  PLEASE_TAG_NOTE: "Please tag the note appropriately for reviewing (in settings).",
  RESPONSE_RECEIVED: "Response received.",
  NO_DECK_EXISTS: "No deck exists for ${deckName}",
  ALL_CAUGHT_UP: "You're all caught up now :D.",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} day(s)",
  MONTHS_STR_IVL: "${interval} month(s)",
  YEARS_STR_IVL: "${interval} year(s)",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}y",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition Plugin - Settings",
  CHECK_WIKI: 'For more information, check the <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "Folders to ignore",
  FOLDERS_TO_IGNORE_DESC: "Enter folder paths separated by newlines i.e. Templates Meta/Scripts",
  FLASHCARDS: "Flashcards",
  FLASHCARD_EASY_LABEL: "Easy Button Text",
  FLASHCARD_GOOD_LABEL: "Good Button Text",
  FLASHCARD_HARD_LABEL: "Hard Button Text",
  FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
  FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
  FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
  FLASHCARD_TAGS: "Flashcard tags",
  FLASHCARD_TAGS_DESC: "Enter tags separated by spaces or newlines i.e. #flashcards #deck2 #deck3.",
  CONVERT_FOLDERS_TO_DECKS: "Convert folders to decks and subdecks?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "This is an alternative to the Flashcard tags option above.",
  INLINE_SCHEDULING_COMMENTS: "Save scheduling comment on the same line as the flashcard's last line?",
  INLINE_SCHEDULING_COMMENTS_DESC: "Turning this on will make the HTML comments not break list formatting.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Bury sibling cards until the next day?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Siblings are cards generated from the same card text i.e. cloze deletions",
  SHOW_CARD_CONTEXT: "Show context in cards?",
  SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading",
  CARD_MODAL_HEIGHT_PERCENT: "Flashcard Height Percentage",
  CARD_MODAL_SIZE_PERCENT_DESC: "Should be set to 100% on mobile or if you have very large images",
  RESET_DEFAULT: "Reset to default",
  CARD_MODAL_WIDTH_PERCENT: "Flashcard Width Percentage",
  RANDOMIZE_CARD_ORDER: "Randomize card order during review?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "Disable cloze cards?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?",
  INLINE_CARDS_SEPARATOR: "Separator for inline flashcards",
  FIX_SEPARATORS_MANUALLY_WARNING: "Note that after changing this you have to manually edit any flashcards you already have.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Separator for inline reversed flashcards",
  MULTILINE_CARDS_SEPARATOR: "Separator for multiline flashcards",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator for multiline reversed flashcards",
  NOTES: "Notes",
  REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
  TAGS_TO_REVIEW: "Tags to review",
  TAGS_TO_REVIEW_DESC: "Enter tags separated by spaces or newlines i.e. #review #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "Open a random note for review",
  OPEN_RANDOM_NOTE_DESC: "When you turn this off, notes are ordered by importance (PageRank).",
  AUTO_NEXT_NOTE: "Open next note automatically after a review",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Disable review options in the file menu i.e. Review: Easy Good Hard",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "After disabling, you can review using the command hotkeys. Reload Obsidian after changing this.",
  MAX_N_DAYS_REVIEW_QUEUE: "Maximum number of days to display on right panel",
  MIN_ONE_DAY: "The number of days must be at least 1.",
  VALID_NUMBER_WARNING: "Please provide a valid number.",
  UI_PREFERENCES: "UI Preferences",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deck trees should be initially displayed as expanded",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Turn this off to collapse nested decks in the same card. Useful if you have cards which belong to many decks in the same file.",
  ALGORITHM: "Algorithm",
  CHECK_ALGORITHM_WIKI: 'For more information, check the <a href="${algo_url}">algorithm implementation</a>.',
  BASE_EASE: "Base ease",
  BASE_EASE_DESC: "minimum = 130, preferrably approximately 250.",
  BASE_EASE_MIN_WARNING: "The base ease must be at least 130.",
  LAPSE_INTERVAL_CHANGE: "Interval change when you review a flashcard/note as hard",
  LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.",
  EASY_BONUS: "Easy Bonus",
  EASY_BONUS_DESC: "The easy bonus allows you to set the difference in intervals between answering Good and Easy on a flashcard/note (minimum = 100%).",
  EASY_BONUS_MIN_WARNING: "The easy bonus must be at least 100.",
  MAX_INTERVAL: "Maximum interval in days",
  MAX_INTERVAL_DESC: "Allows you to place an upper limit on the interval (default = 100 years).",
  MAX_INTERVAL_MIN_WARNING: "The maximum interval must be at least 1 day.",
  MAX_LINK_CONTRIB: "Maximum link contribution",
  MAX_LINK_CONTRIB_DESC: "Maximum contribution of the weighted ease of linked notes to the initial ease.",
  LOGGING: "Logging",
  DISPLAY_DEBUG_INFO: "Display debugging information on the developer console?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "Notes Review Queue",
  CLOSE: "Close",
  NEW: "New",
  YESTERDAY: "Yesterday",
  TODAY: "Today",
  TOMORROW: "Tomorrow",
  // stats-modal.tsx
  STATS_TITLE: "Statistics",
  MONTH: "Month",
  QUARTER: "Quarter",
  YEAR: "Year",
  LIFETIME: "Lifetime",
  FORECAST: "Forecast",
  FORECAST_DESC: "The number of cards due in the future",
  SCHEDULED: "Scheduled",
  DAYS: "Days",
  NUMBER_OF_CARDS: "Number of cards",
  REVIEWS_PER_DAY: "Average: ${avg} reviews/day",
  INTERVALS: "Intervals",
  INTERVALS_DESC: "Delays until reviews are shown again",
  COUNT: "Count",
  INTERVALS_SUMMARY: "Average interval: ${avg}, Longest interval: ${longest}",
  EASES: "Eases",
  EASES_SUMMARY: "Average ease: ${avgEase}",
  CARD_TYPES: "Card Types",
  CARD_TYPES_DESC: "This includes buried cards as well, if any",
  CARD_TYPE_NEW: "New",
  CARD_TYPE_YOUNG: "Young",
  CARD_TYPE_MATURE: "Mature",
  CARD_TYPES_SUMMARY: "Total cards: ${totalCardsCount}"
};

// src/lang/locale/en-gb.ts
var en_gb_default = {};

// src/lang/locale/es.ts
var es_default = {
  // flashcard-modal.tsx
  DECKS: "Mazos",
  DUE_CARDS: "Tarjetas Vencidas",
  NEW_CARDS: "Tarjetas Nuevas",
  TOTAL_CARDS: "Tarjetas Totales",
  BACK: "Atr\xE1s",
  SKIP: "Saltar",
  EDIT_CARD: "Editar Tarjeta",
  RESET_CARD_PROGRESS: "Reiniciar progreso de la tarjeta",
  HARD: "Dif\xEDcil",
  GOOD: "Bien",
  EASY: "F\xE1cil",
  SHOW_ANSWER: "Mostrar Respuesta",
  CARD_PROGRESS_RESET: "El progreso de la tarjeta se ha reiniciado.",
  SAVE: "Guardar",
  CANCEL: "Cancelar",
  NO_INPUT: "Se ha prove\xEDdo entrada.",
  CURRENT_EASE_HELP_TEXT: "Facilidad Actual: ",
  CURRENT_INTERVAL_HELP_TEXT: "Intervalo Actual: ",
  CARD_GENERATED_FROM: "Generado Desde: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Abrir nota para revisi\xF3n",
  REVIEW_CARDS: "Revisar Tarjetas",
  REVIEW_DIFFICULTY_FILE_MENU: "Revisar: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Revisar nota como ${difficulty}",
  CRAM_ALL_CARDS: "Selecciona un mazo a memorizar",
  REVIEW_ALL_CARDS: "Revisar tarjetas de todas las notas",
  REVIEW_CARDS_IN_NOTE: "Revisar tarjetas en esta nota",
  CRAM_CARDS_IN_NOTE: "Memorizar tarjetas en esta nota",
  VIEW_STATS: "Ver estad\xEDsticas",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Revisar: ${dueNotesCount} nota(s), ${dueFlashcardsCount} tarjetas vencidas",
  SYNC_TIME_TAKEN: "La sincronizaci\xF3n tom\xF3 ${t} milisegundos",
  NOTE_IN_IGNORED_FOLDER: "La nota est\xE1 guardada en un directorio ignorado (revisa los ajustes).",
  PLEASE_TAG_NOTE: "Por favor etiquete apropiadamente la nota para revisi\xF3n (en los ajustes).",
  RESPONSE_RECEIVED: "Respuesta Recibida",
  NO_DECK_EXISTS: "No existen mazos para: ${deckName}",
  ALL_CAUGHT_UP: "\xA1Est\xE1s al d\xEDa! \u{1F603}",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} d\xEDa(s)",
  MONTHS_STR_IVL: "${interval} mes(es)",
  YEARS_STR_IVL: "${interval} a\xF1o(s)",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}a",
  // settings.ts
  SETTINGS_HEADER: "Extensi\xF3n de Repetici\xF3n Espaciada - Ajustes",
  CHECK_WIKI: 'Para m\xE1s informaci\xF3n revisa la <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "Directorios a ignorar",
  FOLDERS_TO_IGNORE_DESC: "Escriba las rutas de los directorios separadas por saltos de l\xEDnea, por ejemplo, Plantillas Extra/Guiones",
  FLASHCARDS: "Tarjetas de Memorizaci\xF3n",
  FLASHCARD_EASY_LABEL: "Texto del bot\xF3n: F\xE1cil",
  FLASHCARD_GOOD_LABEL: "Texto del bot\xF3n: Bien",
  FLASHCARD_HARD_LABEL: "Texto del bot\xF3n: Dif\xEDcil",
  FLASHCARD_EASY_DESC: "Personalize la etiqueta para el bot\xF3n: F\xE1cil",
  FLASHCARD_GOOD_DESC: "Personalize la etiqueta para el bot\xF3n: Bien",
  FLASHCARD_HARD_DESC: "Personalize la etiqueta para el bot\xF3n: Dif\xEDcil",
  FLASHCARD_TAGS: "Etiquetas de las Tarjetas de Memorizaci\xF3n",
  FLASHCARD_TAGS_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDnea, por ejemplo, #memorizar #mazo2 #mazo3",
  CONVERT_FOLDERS_TO_DECKS: "\xBFConvertir directorios a mazos y submazos?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "Esta es una opci\xF3n alternativa a las etiquetas de las Tarjetas de Memorizaci\xF3n.",
  INLINE_SCHEDULING_COMMENTS: "\xBFGuardar el comentario para programaci\xF3n de las tarjetas en la \xFAltima l\xEDnea?",
  INLINE_SCHEDULING_COMMENTS_DESC: "Activar esto har\xE1 que los comentarios HTML no rompan el formato de las listas.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "\xBFEnterrar tarjetas hermanas hasta el siguiente d\xEDa?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Los hermanos son tarjetas generadas del mismo texto de la tarjeta, por ejemplo, deletreos de huecos (cloze deletions en ingl\xE9s)",
  SHOW_CARD_CONTEXT: "\xBFMostrar contexto en las tarjetas?",
  SHOW_CARD_CONTEXT_DESC: "Por Ejemplo: T\xEDtulo > Cabecera > Sub-Cabecera > ... > Sub-Cabecera",
  CARD_MODAL_HEIGHT_PERCENT: "Porcentaje de la altura de las tarjetas de memoria",
  CARD_MODAL_SIZE_PERCENT_DESC: "Deber\xEDa ser establecido en 100% si tienes im\xE1genes grandes",
  RESET_DEFAULT: "Reiniciar a la configuraci\xF3n por defecto",
  CARD_MODAL_WIDTH_PERCENT: "Porcentaje del ancho de las tarjetas de memoria",
  RANDOMIZE_CARD_ORDER: "\xBFAleatorizar el orden de las tarjetas para revisi\xF3n?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "\xBFDeshabilitar deletreo de huecos en las tarjetas?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "\xBFConvertir ==resaltados== a deletreo de huecos?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "\xBFConvertir **texto en negrita** a deletreo de huecos?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "\xBFConvertir {{llaves rizadas}} a deletreo de huecos?",
  INLINE_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n en l\xEDnea",
  FIX_SEPARATORS_MANUALLY_WARNING: "Note que despu\xE9s de cambiar este ajuste, tendr\xE1 que cambiar manualmente todas las notas que tenga.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n para tarjetas de notas invertidas",
  MULTILINE_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea invertidas",
  NOTES: "Notes",
  REVIEW_PANE_ON_STARTUP: "Activar panel de revisi\xF3n de notas al arrancar",
  TAGS_TO_REVIEW: "Etiquetas a revisar",
  TAGS_TO_REVIEW_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDneas, por ejemplo, #revisi\xF3n #etiqueta2 #etiqueta3.",
  OPEN_RANDOM_NOTE: "Abrir una nota al azar para revisar",
  OPEN_RANDOM_NOTE_DESC: "Cuando deshabilita esto, las notas son ordenadas por importancia (Algoritmo PageRank).",
  AUTO_NEXT_NOTE: "Abrir la siguiente nota autom\xE1ticamente despu\xE9s de una revisi\xF3n",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Deshabilitar opciones de revisi\xF3n en el men\xFA de archivo, por ejemplo, Revisi\xF3n: F\xE1cil Bien Dif\xEDcil",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Despu\xE9s de deshabilitarlo, puede hacer las revisiones utilizando atajos de teclado. Reinicie Obsidian despu\xE9s de cambiar esto.",
  MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de d\xEDas a mostrar en el panel derecho.",
  MIN_ONE_DAY: "El n\xFAmero de d\xEDas debe ser al menos uno.",
  VALID_NUMBER_WARNING: "Por favor especifique un n\xFAmero v\xE1lido.",
  UI_PREFERENCES: "Preferencias de la interfaz de usuario.",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Los \xE1rboles de mazos deber\xEDan ser expandidos al inicio.",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desactiva esto para contraer mazos anidados en la misma tarjeta. \xDAtil si tienes tarjetas que pertenecen a muchos mazos en el mismo archivo.",
  ALGORITHM: "Algoritmo",
  CHECK_ALGORITHM_WIKI: 'Para m\xE1s informaci\xF3n, revisa la <a href="${algo_url}">implementaci\xF3n del algoritmo</a>.',
  BASE_EASE: "Base ease",
  BASE_EASE_DESC: "El m\xEDnimo es 130, es preferible que est\xE9 aproximado a 250.",
  BASE_EASE_MIN_WARNING: "La facilidad base de las tarjetas debe ser al menos 130.",
  LAPSE_INTERVAL_CHANGE: "El intervalo cambiar\xE1 cuando se revise una tarjeta o nota como Dif\xEDcil.",
  LAPSE_INTERVAL_CHANGE_DESC: "NuevoInterval = ViejoIntervalo * CambioDeIntervalo / 100.",
  EASY_BONUS: "Bonificaci\xF3n para F\xE1cil",
  EASY_BONUS_DESC: "La bonificaci\xF3n para F\xE1cil te permite establecer la diferencia entre intervalos al responder Bien y F\xE1cil en las tarjetas o notas (m\xEDnimo = 100%).",
  EASY_BONUS_MIN_WARNING: "El bono de facilidad debe ser al menos 100.",
  MAX_INTERVAL: "Intervalo m\xE1ximo en d\xEDas",
  MAX_INTERVAL_DESC: "Te permite establecer un l\xEDmite mayor en el intervalo (por defecto es de 100 a\xF1os).",
  MAX_INTERVAL_MIN_WARNING: "El intervalo m\xE1ximo debe ser de al menos un d\xEDa.",
  MAX_LINK_CONTRIB: "Contribuci\xF3n m\xE1xima de las notas vinculadas.",
  MAX_LINK_CONTRIB_DESC: "Contribuci\xF3n m\xE1xima de la facilidad ponderada de las notas vinculadas a la facilidad inicial.",
  LOGGING: "Registro",
  DISPLAY_DEBUG_INFO: "\xBFMostrar informaci\xF3n de depuraci\xF3n en la consola de desarrollador?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "Cola de notas a revisar",
  CLOSE: "Cerrar",
  NEW: "Nuevo",
  YESTERDAY: "Ayer",
  TODAY: "Hoy",
  TOMORROW: "Ma\xF1ana",
  // stats-modal.tsx
  STATS_TITLE: "Estad\xEDsticas",
  MONTH: "Mes",
  QUARTER: "Trimestre o Cuatrimestre",
  // En Inglés: Quarter.
  YEAR: "A\xF1o",
  LIFETIME: "Tiempo de Vida",
  FORECAST: "Pron\xF3stico",
  FORECAST_DESC: "El n\xFAmero de tarjetas vencidas en el futuro",
  SCHEDULED: "Programado",
  DAYS: "D\xEDas",
  NUMBER_OF_CARDS: "N\xFAmero de tarjetas",
  REVIEWS_PER_DAY: "Carga: ${avg} Revisiones por d\xEDa",
  INTERVALS: "Intervalos",
  INTERVALS_DESC: "Retrasos hasta que las revisiones se muestren de nuevo",
  COUNT: "Conteo",
  INTERVALS_SUMMARY: "Intervalo de carga: ${avg}, Intervalo mayor: ${longest}",
  EASES: "Facilidad",
  EASES_SUMMARY: "Carga de Facilidad: ${avgEase}",
  CARD_TYPES: "Tipos de tarjetas",
  CARD_TYPES_DESC: "Esto incluye tambi\xE9n a las tarjetas enterradas, si las hay",
  CARD_TYPE_NEW: "Nueva",
  CARD_TYPE_YOUNG: "Joven",
  CARD_TYPE_MATURE: "Madura",
  CARD_TYPES_SUMMARY: "Tarjetas Totales: ${totalCardsCount}"
};

// src/lang/locale/fr.ts
var fr_default = {};

// src/lang/locale/hi.ts
var hi_default = {};

// src/lang/locale/id.ts
var id_default = {};

// src/lang/locale/it.ts
var it_default = {
  // flashcard-modal.tsx
  DECKS: "Mazzi",
  DUE_CARDS: "Schede da fare",
  NEW_CARDS: "Schede nuove",
  TOTAL_CARDS: "Schede totali",
  BACK: "Indietro",
  SKIP: "Salta",
  EDIT_CARD: "Modifica scheda",
  RESET_CARD_PROGRESS: "Ripristina i progressi della scheda",
  HARD: "Difficile",
  GOOD: "Buono",
  EASY: "Facile",
  SHOW_ANSWER: "Mostra risposta",
  CARD_PROGRESS_RESET: "I progressi della scheda sono stati ripristinati",
  SAVE: "Salva",
  CANCEL: "Cancella",
  NO_INPUT: "Non \xE8 stato provvisto alcun input",
  CURRENT_EASE_HELP_TEXT: "Difficolt\xE0 attuale: ",
  CURRENT_INTERVAL_HELP_TEXT: "Intervallo attuale: ",
  CARD_GENERATED_FROM: "Generato da: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Apri una nota per rivisita",
  REVIEW_CARDS: "Rivisita schede",
  REVIEW_DIFFICULTY_FILE_MENU: "Rivisita: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Revisita note come ${difficulty}",
  CRAM_ALL_CARDS: "Seleziona un mazzo da memorizzare",
  REVIEW_ALL_CARDS: "Seleziona schede da rivedere",
  REVIEW_CARDS_IN_NOTE: "Rivedi schede in questa nota",
  CRAM_CARDS_IN_NOTE: "Memorizza schede in questa nota",
  VIEW_STATS: "Vedi statistiche",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Da rivedere: ${dueNotesCount} scheda/e, ${dueFlashcardsCount} schede in ritardo",
  SYNC_TIME_TAKEN: "Sincronizzato in ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "La nota \xE8 salvata in una cartella ignorata (rivedi le impostazioni).",
  PLEASE_TAG_NOTE: "Per favore etichetta la nota appropriatamente per la revisione (nelle impostazioni).",
  RESPONSE_RECEIVED: "Risposta ricevuta.",
  NO_DECK_EXISTS: "Non esistono mazzi per ${deckName}",
  ALL_CAUGHT_UP: "Sei al passo! :D.",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} giorno/i",
  MONTHS_STR_IVL: "${interval} mese/i",
  YEARS_STR_IVL: "${interval} anno/i",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}y",
  // settings.ts
  SETTINGS_HEADER: "Plugin per ripetizione spaziata - Impostazioni",
  CHECK_WIKI: 'Per maggiori informazioni, rivolgersi alla <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "Cartelle da ignorare",
  FOLDERS_TO_IGNORE_DESC: "Inserisci i percorsi delle cartelle separati da a capo, per esempio, Templates Meta/Scripts",
  FLASHCARDS: "Schede",
  FLASHCARD_EASY_LABEL: "Testo del bottone facile",
  FLASHCARD_GOOD_LABEL: "Testo del bottone buono",
  FLASHCARD_HARD_LABEL: "Testo del bottone difficile",
  FLASHCARD_EASY_DESC: 'Personalizza il testo per il pulsante "Facile"',
  FLASHCARD_GOOD_DESC: 'Personalizza il testo per il pulsante "Buono"',
  FLASHCARD_HARD_DESC: 'Personalizza il testo per il pulsante "Difficile"',
  FLASHCARD_TAGS: "Etichette delle schede",
  FLASHCARD_TAGS_DESC: "Inserire etichette separate da spazi o a capi, per esempio #flashcards #deck2 #deck3.",
  CONVERT_FOLDERS_TO_DECKS: "Trasformare cartelle in mazzi e sotto-mazzi?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "Questa \xE8 un'alternativa all'opzione delle etichette delle schede sopra.",
  INLINE_SCHEDULING_COMMENTS: "Salvare il commento per l'orario sulla stessa linea dell'ultimna linea della scheda?",
  INLINE_SCHEDULING_COMMENTS_DESC: "Attivando quest'impostazione far\xF2 s\xEC che i commento HTML non rompino la formattazione delle liste.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Sotterrare schede sorelle fino al giorno dopo?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Le schede sorelle sono schede generate dallo stesso testo della scheda, per esempio i.e. cloze deletions",
  SHOW_CARD_CONTEXT: "Mostrare contesto nelle schede?",
  SHOW_CARD_CONTEXT_DESC: "per esempio, Titolo > Intestazione 1 > Sottotitolo 1 > ... > Sottotitolo",
  CARD_MODAL_HEIGHT_PERCENT: "Percentuale altezza schede",
  CARD_MODAL_SIZE_PERCENT_DESC: "Dovrebbe essere 100% se sei su telefono o se hai immagini molto grandi",
  RESET_DEFAULT: "Reimposta alle impostazioni iniziali",
  CARD_MODAL_WIDTH_PERCENT: "Percentuale di larghezza delle schede",
  RANDOMIZE_CARD_ORDER: "Rendere casuale l'ordine delle schede durante la revisione?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "L'ordine in cui le schede saranno visualizzate all'interno del mazzo",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequenzialmente dentro il mazzo (prima schede nuove)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequenzialmente dentro il mazzo (prima schede in ritardo)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "A caso dentro il mazzo (prima schede nuove)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "A caso dentro il mazzo (prima schede in ritardo)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Scheda a caso da mazzo a caso",
  REVIEW_DECK_ORDER: "L'ordine in cui i mazzi vengono mostrati durante la revisione",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequenzialmente (quando le schede nel mazzo precedente saranno state riviste)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "A caso (quando le schede nel mazzo precedente saranno state riviste)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Scheda a caso da mazzo a caso",
  DISABLE_CLOZE_CARDS: "Disabilita schede con spazi da riempire?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "Convertire ==testo evidenziato== in spazi da riempire?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "Convertire **testo in grassetto** in spazi da riempire",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convertire {{parentesi graffe}} in spazi da riempire?",
  INLINE_CARDS_SEPARATOR: "Separatore per schede sulla stessa riga",
  FIX_SEPARATORS_MANUALLY_WARNING: "Si avvisa che dopo aver cambiato questo dovrai manualmente modificare le schede che hai gi\xE0.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Separatore per schede all'incontrario sulla stessa riga",
  MULTILINE_CARDS_SEPARATOR: "Separatore per schede su pi\xF9 righe",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Separatore per schede all'incontrario su pi\xF9 righe",
  NOTES: "Note",
  REVIEW_PANE_ON_STARTUP: "Abilita il pannello di revisione note all'avvio",
  TAGS_TO_REVIEW: "Etichette da rivedere",
  TAGS_TO_REVIEW_DESC: "Inserisci le etichette separate da spazi o a capi, tipo #review #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "Apri una nota a caso per revisione",
  OPEN_RANDOM_NOTE_DESC: "Quando lo disabiliti, le note saranno ordinate per importanza (PageRank).",
  AUTO_NEXT_NOTE: "Apri la prossima nota automaticamente dopo la revisione",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Disabilita le opzioni di revisioni nel men\xF9 di file, per esempio Revisione: Facile Buono Difficile",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Dopo avermi disattivato, puoi iniziare una revisione con le combinazioni di testi per il comando. Riavvia Obsidian dopo avermi cambiato.",
  MAX_N_DAYS_REVIEW_QUEUE: "Numero di giorni massimi da visualizzare nel pannello di destra",
  MIN_ONE_DAY: "Il numero di giorni deve essere almeno 1.",
  VALID_NUMBER_WARNING: "Per favore, mettere un numero valido.",
  UI_PREFERENCES: "Preferenze di interfaccia",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Alberti di mazzi dovrebbero essere inizialmente visualizzate come espansi",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Disabilitami per collassare mazzi annidati nella stessa scheda. Utile se hai schede che appartengono a pi\xF9 mazzi nello stesso file.",
  ALGORITHM: "Algoritmo",
  CHECK_ALGORITHM_WIKI: "Per maggiori informazioni, visita <a href='${algo_url}'>l'implementazione dell'algoritmo</a>.",
  BASE_EASE: "Difficolt\xE0 base",
  BASE_EASE_DESC: "mino = 130, preferibilmente circa 250.",
  BASE_EASE_MIN_WARNING: "La difficolt\xE0 base deve essere di almeno 130.",
  LAPSE_INTERVAL_CHANGE: "L'intervallo cambier\xE0 segnando una scheda / nota come difficile",
  LAPSE_INTERVAL_CHANGE_DESC: "Intervallo nuovo = intervallo vecchio * cambio intervallo / 100.",
  EASY_BONUS: "Bonus facilit\xE0",
  EASY_BONUS_DESC: "Il bonus facilit\xE0 ti permette di impostare le differenze negli intervalli tra il rispondere Buono e Facile su una scheda o nota (minimo 100%).",
  EASY_BONUS_MIN_WARNING: "Il bonus facilit\xE0 deve essere di almeno 100.",
  MAX_INTERVAL: "Intervallo massimo in giorni",
  MAX_INTERVAL_DESC: "Ti permette di mettere un limite massimo all'intervallo (default 100 anni).",
  MAX_INTERVAL_MIN_WARNING: "L'intervallo massimo deve essere di almeno 1 giorno.",
  MAX_LINK_CONTRIB: "Contributo massimo delle note collegate",
  MAX_LINK_CONTRIB_DESC: "Contributo massimo della difficolt\xE0 pasata delle note collegate alla difficolt\xE0 iniziale.",
  LOGGING: "Registrando",
  DISPLAY_DEBUG_INFO: "Visualizza informazione di debug sulla console per sviluppatori?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "Coda di note da rivedere",
  CLOSE: "Chiusi",
  NEW: "Nuovo/a",
  YESTERDAY: "Ieri",
  TODAY: "Oggi",
  TOMORROW: "Domani",
  // stats-modal.tsx
  STATS_TITLE: "Statistiche",
  MONTH: "Mese",
  QUARTER: "Trimestre",
  YEAR: "Anno",
  LIFETIME: "Per tutta la vita",
  FORECAST: "Previsione",
  FORECAST_DESC: "Il numero di schede che saranno in ritardo in futuro",
  SCHEDULED: "Programmate",
  DAYS: "Giorni",
  NUMBER_OF_CARDS: "Numero di schede",
  REVIEWS_PER_DAY: "Media: ${avg} revisioni/giorno",
  INTERVALS: "Intervalli",
  INTERVALS_DESC: "Ritardi finch\xE9 le revisioni saranno visualizzate di nuovo",
  COUNT: "Conta",
  INTERVALS_SUMMARY: "Intervallo medio: ${avg}, Intervallo massimo: ${longest}",
  EASES: "Difficolt\xE0",
  EASES_SUMMARY: "Difficolt\xE0 media: ${avgEase}",
  CARD_TYPES: "Tipi di schede",
  CARD_TYPES_DESC: "Include eventuali schede sepolte",
  CARD_TYPE_NEW: "Nuove",
  CARD_TYPE_YOUNG: "Giovani",
  CARD_TYPE_MATURE: "Mature",
  CARD_TYPES_SUMMARY: "Schede tottali: ${totalCardsCount}"
};

// src/lang/locale/ja.ts
var ja_default = {
  // flashcard-modal.tsx
  DECKS: "\u30C7\u30C3\u30AD",
  DUE_CARDS: "\u671F\u65E5\u306E\u30AB\u30FC\u30C9",
  NEW_CARDS: "\u65B0\u898F\u306E\u30AB\u30FC\u30C9",
  TOTAL_CARDS: "\u30AB\u30FC\u30C9\u5408\u8A08",
  BACK: "Back",
  SKIP: "Skip",
  EDIT_CARD: "Edit Card",
  RESET_CARD_PROGRESS: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u3092\u30EA\u30BB\u30C3\u30C8",
  HARD: "Hard",
  GOOD: "Good",
  EASY: "Easy",
  SHOW_ANSWER: "\u89E3\u7B54\u3092\u8868\u793A",
  CARD_PROGRESS_RESET: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u304C\u30EA\u30BB\u30C3\u30C8\u3055\u308C\u307E\u3057\u305F\u3002",
  SAVE: "Save",
  CANCEL: "Cancel",
  NO_INPUT: "No input provided.",
  CURRENT_EASE_HELP_TEXT: "Current Ease: ",
  CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
  CARD_GENERATED_FROM: "Generated from: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30CE\u30FC\u30C8\u3092\u958B\u304F",
  REVIEW_CARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u30EC\u30D3\u30E5\u30FC",
  REVIEW_DIFFICULTY_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "\u30CE\u30FC\u30C8\u3092${difficulty}\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
  REVIEW_ALL_CARDS: "\u3059\u3079\u3066\u306E\u30CE\u30FC\u30C8\u304B\u3089\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
  CRAM_ALL_CARDS: "Select a deck to cram",
  REVIEW_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
  CRAM_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u8A70\u3081\u8FBC\u307F\u5B66\u7FD2\u3059\u308B",
  VIEW_STATS: "\u7D71\u8A08\u3092\u95B2\u89A7\u3059\u308B",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "\u30EC\u30D3\u30E5\u30FC: ${dueNotesCount}\u30CE\u30FC\u30C8, ${dueFlashcardsCount}\u30AB\u30FC\u30C9\u304C\u671F\u65E5",
  SYNC_TIME_TAKEN: "\u540C\u671F\u306B${t}ms\u304B\u304B\u308A\u307E\u3057\u305F\u3002",
  NOTE_IN_IGNORED_FOLDER: "\u30CE\u30FC\u30C8\u304C\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002",
  PLEASE_TAG_NOTE: "\u30EC\u30D3\u30E5\u30FC\u3092\u884C\u3046\u306B\u306F\u30CE\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u6B63\u3057\u304F\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u304F\u3060\u3055\u3044(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002",
  RESPONSE_RECEIVED: "\u7B54\u3048\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\u3002",
  NO_DECK_EXISTS: "${deckName}\u306B\u306F\u30C7\u30C3\u30AD\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002",
  ALL_CAUGHT_UP: "\u4ECA\u65E5\u306E\u8AB2\u984C\u3092\u3059\u3079\u3066\u9054\u6210\u3057\u307E\u3057\u305F :D",
  // scheduling.ts
  DAYS_STR_IVL: "${interval}\u65E5\u5F8C",
  MONTHS_STR_IVL: "${interval}\u6708\u5F8C",
  YEARS_STR_IVL: "${interval}\u5E74\u5F8C",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}y",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition Plugin - \u8A2D\u5B9A",
  CHECK_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306F<a href="${wiki_url}">wiki</a>\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
  FOLDERS_TO_IGNORE: "\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0",
  FOLDERS_TO_IGNORE_DESC: '\u30D5\u30A9\u30EB\u30C0\u30D1\u30B9\u3092\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"Templates Meta/Scripts" \u306E\u3088\u3046\u306A\u30B9\u30DA\u30FC\u30B9\u306B\u3088\u308B\u533A\u5207\u308A\u3067\u306E\u66F8\u304D\u65B9\u306F\u7121\u52B9\u3067\u3059\u3002',
  FLASHCARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9",
  FLASHCARD_EASY_LABEL: "Easy Button Text",
  FLASHCARD_GOOD_LABEL: "Good Button Text",
  FLASHCARD_HARD_LABEL: "Hard Button Text",
  FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
  FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
  FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
  FLASHCARD_TAGS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0",
  FLASHCARD_TAGS_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#flashcards #deck2 #deck3"',
  CONVERT_FOLDERS_TO_DECKS: "\u30D5\u30A9\u30EB\u30C0\u3092\u30C7\u30C3\u30AD\u3068\u30B5\u30D6\u30C7\u30C3\u30AD\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
  CONVERT_FOLDERS_TO_DECKS_DESC: "\u3053\u308C\u306F\u4E0A\u8A18\u306E\u30BF\u30B0\u3092\u4F7F\u7528\u3057\u305F\u30C7\u30C3\u30AD\u69CB\u7BC9\u306E\u4EE3\u66FF\u3068\u306A\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3059\u3002",
  INLINE_SCHEDULING_COMMENTS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6700\u7D42\u884C\u3068\u540C\u4E00\u306E\u884C\u306B\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u30B3\u30E1\u30F3\u30C8\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F",
  INLINE_SCHEDULING_COMMENTS_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u5316\u3059\u308B\u3068\u3001HTML\u30B3\u30E1\u30F3\u30C8\u306B\u3088\u3063\u3066Markdown\u306E\u30EA\u30B9\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u304C\u5D29\u308C\u306A\u304F\u306A\u308A\u307E\u3059\u3002",
  BURY_SIBLINGS_TILL_NEXT_DAY: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u307E\u3067\u30B7\u30D6\u30EA\u30F3\u30B0\u3092\u5EF6\u671F\u3057\u307E\u3059\u304B\uFF1F",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u30B7\u30D6\u30EA\u30F3\u30B0\u306F\u540C\u4E00\u306E\u30AB\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u304B\u3089\u751F\u6210\u3055\u308C\u305F\u30AB\u30FC\u30C9\u3001\u3064\u307E\u308A\u7A74\u57CB\u3081\u554F\u984C\u306E\u6D3E\u751F\u30AB\u30FC\u30C9\u3067\u3059\u3002",
  SHOW_CARD_CONTEXT: "\u30AB\u30FC\u30C9\u306B\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F",
  SHOW_CARD_CONTEXT_DESC: "\uFF62\u30BF\u30A4\u30C8\u30EB > \u898B\u51FA\u3057 1 > \u526F\u898B\u51FA\u3057 > ... > \u526F\u898B\u51FA\u3057\uFF63\u306E\u8868\u793A\u3092\u884C\u3046\u304B\u3069\u3046\u304B\u3092\u6C7A\u3081\u307E\u3059\u3002",
  CARD_MODAL_HEIGHT_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u7E26\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8",
  CARD_MODAL_SIZE_PERCENT_DESC: "\u30E2\u30D0\u30A4\u30EB\u7248\u3001\u307E\u305F\u306F\u975E\u5E38\u306B\u5927\u304D\u306A\u30B5\u30A4\u30BA\u306E\u753B\u50CF\u304C\u3042\u308B\u5834\u5408\u306B\u306F100%\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002",
  RESET_DEFAULT: "\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306B\u30EA\u30BB\u30C3\u30C8\u3059\u308B",
  CARD_MODAL_WIDTH_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6A2A\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8",
  RANDOMIZE_CARD_ORDER: "\u30EC\u30D3\u30E5\u30FC\u4E2D\u306E\u30AB\u30FC\u30C9\u306E\u9806\u756A\u3092\u30E9\u30F3\u30C0\u30E0\u306B\u3057\u307E\u3059\u304B\uFF1F",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "\u7A74\u57CB\u3081\u30AB\u30FC\u30C9\u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "==\u30CF\u30A4\u30E9\u30A4\u30C8==\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
  CONVERT_BOLD_TEXT_TO_CLOZES: "**\u30DC\u30FC\u30EB\u30C9\u4F53**\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{\u4E2D\u62EC\u5F27}}\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F",
  INLINE_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
  FIX_SEPARATORS_MANUALLY_WARNING: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3059\u308B\u5834\u5408\u306B\u306F\u3001\u4F5C\u6210\u6E08\u307F\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u624B\u52D5\u3067\u7DE8\u96C6\u3057\u76F4\u3059\u5FC5\u8981\u304C\u3042\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  INLINE_REVERSED_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
  MULTILINE_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC",
  NOTES: "\u30CE\u30FC\u30C8",
  REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
  TAGS_TO_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0",
  TAGS_TO_REVIEW_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#review #tag2 #tag3"',
  OPEN_RANDOM_NOTE: "\u30E9\u30F3\u30C0\u30E0\u306B\u30CE\u30FC\u30C8\u3092\u958B\u3044\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B",
  OPEN_RANDOM_NOTE_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u72B6\u614B\u3067\u306F\u3001\u30CE\u30FC\u30C8\u306F\u91CD\u8981\u5EA6(\u30DA\u30FC\u30B8\u30E9\u30F3\u30AF)\u306B\u3088\u308B\u9806\u756A\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002",
  AUTO_NEXT_NOTE: "\u30EC\u30D3\u30E5\u30FC\u5F8C\u306B\u6B21\u306E\u30CE\u30FC\u30C8\u3092\u81EA\u52D5\u7684\u306B\u958B\u304F",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u30D5\u30A1\u30A4\u30EB\u30E1\u30CB\u30E5\u30FC\u3067\u306E\u30EC\u30D3\u30E5\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u5316(\uFF62\u30EC\u30D3\u30E5\u30FC: Easy\uFF63\u7B49\u306E\u9805\u76EE\u3092\u975E\u8868\u793A\u306B\u3059\u308B)",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u7121\u52B9\u5316\u3057\u305F\u5F8C\u3001\u30B3\u30DE\u30F3\u30C9\u30DB\u30C3\u30C8\u30AD\u30FC\u3092\u4F7F\u3063\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u3053\u3068\u304C\u53EF\u80FD\u306B\u306A\u308A\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3057\u305F\u5834\u5408\u306B\u306FObsidian\u3092\u30EA\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u30D1\u30CD\u30EB\u306B\u8868\u793A\u3059\u308B\u6700\u5927\u306E\u65E5\u6570",
  MIN_ONE_DAY: "\u65E5\u6570\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  VALID_NUMBER_WARNING: "\u6709\u52B9\u306A\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  UI_PREFERENCES: "\u30E6\u30FC\u30B6\u30FC \u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u306E\u8A2D\u5B9A",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u30C7\u30C3\u30AD \u30C4\u30EA\u30FC\u306F\u6700\u521D\u306F\u5C55\u958B\u3057\u3066\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u3053\u308C\u3092\u30AA\u30D5\u306B\u3059\u308B\u3068\u3001\u540C\u3058\u30AB\u30FC\u30C9\u5185\u306E\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30C7\u30C3\u30AD\u304C\u6298\u308A\u305F\u305F\u307E\u308C\u307E\u3059\u3002\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u591A\u304F\u306E\u30C7\u30C3\u30AD\u306B\u5C5E\u3059\u308B\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u4FBF\u5229\u3067\u3059\u3002",
  ALGORITHM: "\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0",
  CHECK_ALGORITHM_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306F<a href="${algo_url}">\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u5B9F\u88C5</a>\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
  BASE_EASE: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055",
  BASE_EASE_DESC: "\u6700\u5C0F\u5024\u306F130\u3067\u3059\u304C\u3001 \u9069\u6B63\u5024\u306F\u304A\u304A\u3088\u305D250\u3067\u3059\u3002",
  BASE_EASE_MIN_WARNING: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055\u306B\u306F130\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  LAPSE_INTERVAL_CHANGE: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u969B\u306E\u9593\u9694\u5909\u66F4",
  LAPSE_INTERVAL_CHANGE_DESC: '"\u65B0\u3057\u3044\u9593\u9694 = \u4EE5\u524D\u306E\u9593\u9694 * \u9593\u9694\u5909\u66F4 / 100" \u3068\u3057\u3066\u8A08\u7B97\u3055\u308C\u307E\u3059\u3002',
  EASY_BONUS: "Easy\u30DC\u30FC\u30CA\u30B9",
  EASY_BONUS_DESC: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u3088\u3063\u3066\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u306B\u304A\u3051\u308B\u9593\u9694\u306E\u5DEE\u5206\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059(\u6700\u5C0F\u5024 = 100%)\u3002",
  EASY_BONUS_MIN_WARNING: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u306F100\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  MAX_INTERVAL: "Maximum interval in days",
  MAX_INTERVAL_DESC: "\u9593\u9694\u306B\u4E0A\u9650\u5024\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 = 100\u5E74)\u3002",
  MAX_INTERVAL_MIN_WARNING: "\u9593\u9694\u306E\u6700\u5927\u5024\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  MAX_LINK_CONTRIB: "\u30EA\u30F3\u30AF\u30B3\u30F3\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u306E\u6700\u5927\u5024",
  MAX_LINK_CONTRIB_DESC: "\u6700\u521D\u306E\u6613\u3057\u3055\u306B\u5BFE\u3057\u3066\u3001\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30CE\u30FC\u30C8\u306E\u91CD\u307F\u4ED8\u3051\u3055\u308C\u305F\u6613\u3057\u3055\u304C\u5BC4\u4E0E\u3059\u308B\u6700\u5927\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  LOGGING: "\u30ED\u30B0\u7BA1\u7406",
  DISPLAY_DEBUG_INFO: "\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u3066\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "\u30CE\u30FC\u30C8\u30EC\u30D3\u30E5\u30FC\u306E\u30AD\u30E5\u30FC",
  CLOSE: "\u9589\u3058\u308B",
  NEW: "\u65B0\u898F",
  YESTERDAY: "\u6628\u65E5",
  TODAY: "\u4ECA\u65E5",
  TOMORROW: "\u660E\u65E5",
  // stats-modal.tsx
  STATS_TITLE: "\u7D71\u8A08",
  MONTH: "Month",
  QUARTER: "Quarter",
  YEAR: "Year",
  LIFETIME: "Lifetime",
  FORECAST: "\u4E88\u6E2C",
  FORECAST_DESC: "\u5FA9\u7FD2\u671F\u65E5\u304C\u6765\u308B\u30AB\u30FC\u30C9\u306E\u679A\u6570",
  SCHEDULED: "\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u6E08\u307F",
  DAYS: "\u65E5",
  NUMBER_OF_CARDS: "\u30AB\u30FC\u30C9\u6570",
  REVIEWS_PER_DAY: "\u5E73\u5747: ${avg}\u30EC\u30D3\u30E5\u30FC/\u65E5",
  INTERVALS: "\u9593\u9694",
  INTERVALS_DESC: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u4E88\u5B9A\u65E5",
  COUNT: "\u30AB\u30A6\u30F3\u30C8",
  INTERVALS_SUMMARY: "\u9593\u9694\u306E\u5E73\u5747\u5024: ${avg}, \u6700\u9577\u306E\u9593\u9694: ${longest}",
  EASES: "\u6613\u3057\u3055",
  EASES_SUMMARY: "\u6613\u3057\u3055\u306E\u5E73\u5747\u5024: ${avgEase}",
  CARD_TYPES: "\u30AB\u30FC\u30C9\u30BF\u30A4\u30D7",
  CARD_TYPES_DESC: "\u5EF6\u671F\u306E\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3053\u308C\u306B\u542B\u307E\u308C\u307E\u3059",
  CARD_TYPE_NEW: "\u65B0\u898F",
  CARD_TYPE_YOUNG: "\u5FA9\u7FD2(\u521D\u671F)",
  CARD_TYPE_MATURE: "\u5FA9\u7FD2(\u5F8C\u671F)",
  CARD_TYPES_SUMMARY: "\u30AB\u30FC\u30C9\u306E\u5408\u8A08: ${totalCardsCount}\u679A"
};

// src/lang/locale/ko.ts
var ko_default = {
  // flashcard-modal.tsx
  DECKS: "\uB371",
  DUE_CARDS: "\uB2E4\uC2DC \uBCFC \uCE74\uB4DC\uB4E4",
  NEW_CARDS: "\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB4E4",
  TOTAL_CARDS: "\uC804\uCCB4 \uCE74\uB4DC\uB4E4",
  BACK: "Back",
  SKIP: "Skip",
  EDIT_CARD: "Edit Card",
  RESET_CARD_PROGRESS: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.",
  HARD: "\uC5B4\uB824\uC6C0(Hard)",
  GOOD: "\uC88B\uC74C(Good)",
  EASY: "\uC26C\uC6C0(Easy)",
  SHOW_ANSWER: "\uC815\uB2F5 \uD655\uC778\uD558\uAE30",
  CARD_PROGRESS_RESET: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC774 \uCD08\uAE30\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
  SAVE: "Save",
  CANCEL: "Cancel",
  NO_INPUT: "No input provided.",
  CURRENT_EASE_HELP_TEXT: "Current Ease: ",
  CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ",
  CARD_GENERATED_FROM: "Generated from: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uC5F4\uAE30",
  REVIEW_CARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB9AC\uBDF0",
  REVIEW_DIFFICULTY_FILE_MENU: "\uB9AC\uBDF0: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "\uB178\uD2B8\uB97C ${difficulty}\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
  REVIEW_ALL_CARDS: "\uBAA8\uB4E0 \uB178\uD2B8\uB4E4\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
  CRAM_ALL_CARDS: "Select a deck to cram",
  REVIEW_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4",
  CRAM_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uBCBC\uB77D\uCE58\uAE30\uD569\uB2C8\uB2E4.",
  VIEW_STATS: "\uD1B5\uACC4 \uD655\uC778",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "--\uB9AC\uBDF0: ${dueNotesCount} \uB178\uD2B8, ${dueFlashcardsCount} \uCE74\uB4DC \uB0A8\uC558\uC2B5\uB2C8\uB2E4.",
  SYNC_TIME_TAKEN: "\uB3D9\uAE30\uD654\uC5D0 ${t}\uBC00\uB9AC\uCD08 \uAC78\uB838\uC2B5\uB2C8\uB2E4",
  NOTE_IN_IGNORED_FOLDER: "\uB178\uD2B8\uAC00 \uBB34\uC2DC\uB41C \uD3F4\uB354 \uC544\uB798\uC5D0 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)",
  PLEASE_TAG_NOTE: "\uB9AC\uBDF0\uB97C \uD558\uAE30\uC704\uD574 \uB178\uD2B8\uC5D0 \uC801\uC808\uD788 \uD0DC\uADF8\uD574\uC8FC\uC138\uC694. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)",
  RESPONSE_RECEIVED: "\uC694\uCCAD\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
  NO_DECK_EXISTS: "${deckName}\uC774\uB77C\uB294 \uC774\uB984\uC758 \uB371\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
  ALL_CAUGHT_UP: "\uBAA8\uB450 \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4. :D",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} \uC77C \uD6C4",
  MONTHS_STR_IVL: "${interval} \uAC1C\uC6D4 \uD6C4",
  YEARS_STR_IVL: "${interval} \uB144 \uD6C4",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}y",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition Plugin - \uC124\uC815",
  CHECK_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, <a href="${wiki_url}">wiki</a>\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.',
  FOLDERS_TO_IGNORE: "\uBB34\uC2DC\uD560 \uD3F4\uB354\uB4E4",
  FOLDERS_TO_IGNORE_DESC: "\uD3F4\uB354 \uACBD\uB85C\uB97C \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. 'Templates Meta/Scripts' \uC640 \uAC19\uC774 \uC785\uB825\uD558\uB294 \uAC83\uC740 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
  FLASHCARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC",
  FLASHCARD_EASY_LABEL: "Easy Button Text",
  FLASHCARD_GOOD_LABEL: "Good Button Text",
  FLASHCARD_HARD_LABEL: "Hard Button Text",
  FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button',
  FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button',
  FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button',
  FLASHCARD_TAGS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8",
  FLASHCARD_TAGS_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#flashcards #deck2 #deck3'",
  CONVERT_FOLDERS_TO_DECKS: "\uD3F4\uB354\uB97C \uB371\uACFC \uC11C\uBE0C\uB371\uC73C\uB85C \uC0AC\uC6A9\uD560\uAE4C\uC694?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "\uC774 \uAE30\uB2A5\uC740 \uC704\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8 \uC635\uC158\uC744 \uB300\uCCB4\uD569\uB2C8\uB2E4.",
  INLINE_SCHEDULING_COMMENTS: "\uD50C\uB798\uC2DC\uCE74\uB4DC\uC758 \uB9C8\uC9C0\uB9C9 \uC904\uACFC \uB3D9\uC77C\uD55C \uC904\uC5D0 \uC2A4\uCF00\uC904\uB9C1 \uCF54\uBA58\uD2B8\uB97C \uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  INLINE_SCHEDULING_COMMENTS_DESC: "\uC774 \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 HTML \uC8FC\uC11D\uC774 \uBAA9\uB85D\uC758 \uD3EC\uB9E4\uD305\uC744 \uBB34\uB108\uD2B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Sibling \uCE74\uB4DC\uB97C \uB2E4\uC74C\uB0A0\uAE4C\uC9C0 \uBB3B\uC5B4\uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Sibling \uCE74\uB4DC\uB294 \uB3D9\uC77C\uD55C \uCE74\uB4DC \uD14D\uC2A4\uD2B8\uC5D0\uC11C \uC0DD\uC131\uB41C \uCE74\uB4DC\uC785\uB2C8\uB2E4. i.e. cloze deletions",
  SHOW_CARD_CONTEXT: "\uCE74\uB4DC\uC758 \uBB38\uB9E5(context)\uC744 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  SHOW_CARD_CONTEXT_DESC: "\uCE74\uB4DC\uC5D0\uC11C 'Title > Heading 1 > Subheading > ... > Subheading' \uC758 \uD45C\uC2DC\uB97C \uD560\uC9C0 \uC124\uC815\uD569\uB2C8\uB2E4.",
  CARD_MODAL_HEIGHT_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB192\uC774 \uBE44\uC728",
  CARD_MODAL_SIZE_PERCENT_DESC: "\uBAA8\uBC14\uC77C \uBC84\uC804 \uD639\uC740 \uB9E4\uC6B0 \uD070 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uACBD\uC6B0 100%\uB85C \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.",
  RESET_DEFAULT: "\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654",
  CARD_MODAL_WIDTH_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB108\uBE44 \uBE44\uC728",
  RANDOMIZE_CARD_ORDER: "\uB9AC\uBDF0\uC911\uC778 \uCE74\uB4DC\uC758 \uC21C\uC11C\uB97C \uB79C\uB364\uC73C\uB85C \uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "\uBE48 \uCE78 \uCC44\uC6B0\uAE30 \uCE74\uB4DC\uB97C \uBE44\uD65C\uC131\uD654\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "==hightlights== \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "**bolded text** \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{curly brackets}} \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  INLINE_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
  FIX_SEPARATORS_MANUALLY_WARNING: "\uC8FC\uC758: \uC774 \uC635\uC158\uC744 \uC218\uC815\uD55C \uD6C4\uC5D0\uB294 \uC774\uBBF8 \uC791\uC131\uB41C \uD50C\uB798\uC2DC\uCE74\uB4DC\uB97C \uC218\uB3D9\uC73C\uB85C \uC218\uC815\uD574\uC57C \uD568\uC744 \uC8FC\uC758\uD558\uC2ED\uC2DC\uC624.",
  INLINE_REVERSED_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
  MULTILINE_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790",
  NOTES: "\uB178\uD2B8",
  REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup",
  TAGS_TO_REVIEW: "\uB9AC\uBDF0\uC5D0 \uC0AC\uC6A9\uD560 \uD0DC\uADF8",
  TAGS_TO_REVIEW_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#review #tag2 #tag3'",
  OPEN_RANDOM_NOTE: "\uB9AC\uBDF0\uB97C \uC704\uD574 \uB79C\uB364 \uB178\uD2B8\uB97C \uC5FD\uB2C8\uB2E4.",
  OPEN_RANDOM_NOTE_DESC: "\uC774 \uC635\uC158\uC774 \uAEBC\uC838\uC788\uC73C\uBA74, \uB178\uD2B8\uB294 \uC911\uC694\uB3C4(\uD398\uC774\uC9C0 \uB7AD\uD06C)\uC5D0 \uB530\uB77C \uC815\uB82C\uB429\uB2C8\uB2E4.",
  AUTO_NEXT_NOTE: "\uB9AC\uBDF0 \uD6C4\uC5D0 \uB2E4\uC74C \uB178\uD2B8\uB97C \uC790\uB3D9\uC73C\uB85C \uC5FD\uB2C8\uB2E4.",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "\uD30C\uC77C \uBA54\uB274\uC5D0\uC11C\uC758 \uB9AC\uBDF0 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD569\uB2C8\uB2E4. \uC608) \uB9AC\uBDF0: Easy Good Hard",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\uC774 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD55C \uD6C4, \uBA85\uB839 \uB2E8\uCD95\uD0A4\uB97C \uC774\uC6A9\uD574 \uB9AC\uBDF0\uD558\uC2E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC635\uC158\uC744 \uBCC0\uACBD\uD55C \uD6C4\uC5D0 \uC635\uC2DC\uB514\uC5B8\uC744 \uC0C8\uB85C\uACE0\uCE68 \uD558\uC2ED\uC2DC\uC624.",
  MAX_N_DAYS_REVIEW_QUEUE: "\uC624\uB978\uCABD \uD328\uB110\uC5D0 \uD45C\uC2DC\uD560 \uCD5C\uB300 \uC77C\uC218",
  MIN_ONE_DAY: "\uC801\uC5B4\uB3C4 1\uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
  VALID_NUMBER_WARNING: "\uC720\uD6A8\uD55C \uC22B\uC790\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.",
  UI_PREFERENCES: "\uC0AC\uC6A9\uC790 \uC778\uD130\uD398\uC774\uC2A4 \uAE30\uBCF8 \uC124\uC815",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\uB371 \uD2B8\uB9AC\uB294 \uCC98\uC74C\uC5D0 \uD655\uC7A5\uB41C \uAC83\uC73C\uB85C \uD45C\uC2DC\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\uAC19\uC740 \uCE74\uB4DC\uC5D0 \uC911\uCCA9\uB41C \uB371\uC744 \uC811\uC73C\uB824\uBA74 \uC774 \uC635\uC158\uC744 \uB044\uC2ED\uC2DC\uC624. \uAC19\uC740 \uD30C\uC77C\uC5D0 \uC5EC\uB7EC \uB371\uC5D0 \uC18D\uD55C \uCE74\uB4DC\uAC00 \uC788\uB294 \uACBD\uC6B0 \uC720\uC6A9\uD569\uB2C8\uB2E4.",
  ALGORITHM: "\uC54C\uACE0\uB9AC\uC998",
  CHECK_ALGORITHM_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, <a href="${algo_url}">algorithm implementation</a>\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.',
  BASE_EASE: "\uAE30\uBCF8 ease",
  BASE_EASE_DESC: "\uCD5C\uC19F\uAC12 = 130, \uC801\uC815\uCE58\uB294 \uB300\uB7B5 250\uC785\uB2C8\uB2E4.",
  BASE_EASE_MIN_WARNING: "\uAE30\uBCF8 ease\uB294 \uC801\uC5B4\uB3C4 130 \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
  LAPSE_INTERVAL_CHANGE: "\uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(Hard)\uC73C\uB85C \uB9AC\uBDF0\uD588\uC744 \uB54C\uC758 \uAC04\uACA9 \uBCC0\uACBD",
  LAPSE_INTERVAL_CHANGE_DESC: "\uC0C8\uB85C\uC6B4 \uAC04\uACA9 = \uC774\uC804 \uAC04\uACA9 * \uAC04\uACA9\uBCC0\uACBD \uAC12 / 100.",
  EASY_BONUS: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4",
  EASY_BONUS_DESC: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uC5D0\uC11C \uC88B\uC74C(Good)\uACFC \uC26C\uC6C0(Easy) \uC0AC\uC774\uC758 \uAC04\uACA9 \uCC28\uC774\uB97C \uC124\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uCD5C\uC18C = 100%)",
  EASY_BONUS_MIN_WARNING: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uC801\uC5B4\uB3C4 100\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
  MAX_INTERVAL: "Maximum interval in days",
  MAX_INTERVAL_DESC: "\uAC04\uACA9\uC758 \uC0C1\uD55C\uC120\uC744 \uB458 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12 = 100\uB144)",
  MAX_INTERVAL_MIN_WARNING: "\uCD5C\uB300 \uAC04\uACA9\uC740 \uC801\uC5B4\uB3C4 1\uC77C\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
  MAX_LINK_CONTRIB: "\uCD5C\uB300 \uC5F0\uACB0 \uAE30\uC5EC\uB3C4",
  MAX_LINK_CONTRIB_DESC: "\uB9C1\uD06C\uB41C \uB178\uD2B8\uC758 \uCD08\uAE30 ease\uC5D0 \uB300\uD55C \uAC00\uC911\uCE58\uAC00 \uC801\uC6A9\uB41C ease\uC758 \uCD5C\uB300 \uAE30\uC5EC\uB3C4\uC785\uB2C8\uB2E4.",
  LOGGING: "\uB85C\uAE45",
  DISPLAY_DEBUG_INFO: "\uB514\uBC84\uAE45 \uC815\uBCF4\uB97C \uAC1C\uBC1C\uC790 \uCF58\uC194\uC5D0 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uB300\uAE30\uC5F4",
  CLOSE: "\uB2EB\uAE30",
  NEW: "New",
  YESTERDAY: "\uC5B4\uC81C",
  TODAY: "\uC624\uB298",
  TOMORROW: "\uB0B4\uC77C",
  // stats-modal.tsx
  STATS_TITLE: "\uD1B5\uACC4",
  MONTH: "\uC6D4",
  QUARTER: "\uBD84\uAE30",
  YEAR: "\uB144",
  LIFETIME: "\uD3C9\uC0DD",
  FORECAST: "\uC608\uCE21",
  FORECAST_DESC: "\uC774\uD6C4\uC5D0 \uD559\uC2B5\uD560 \uCE74\uB4DC\uC758 \uC218",
  SCHEDULED: "Scheduled",
  DAYS: "\uC77C",
  NUMBER_OF_CARDS: "\uCE74\uB4DC\uC758 \uC218",
  REVIEWS_PER_DAY: "\uD3C9\uADE0: ${avg} \uB9AC\uBDF0/\uC77C",
  INTERVALS: "\uAC04\uACA9",
  INTERVALS_DESC: "\uB9AC\uBDF0\uB97C \uB2E4\uC2DC \uD560 \uB54C \uAE4C\uC9C0\uC758 \uAE30\uAC04",
  COUNT: "Count",
  INTERVALS_SUMMARY: "\uD3C9\uADE0 \uAC04\uACA9: ${avg}, \uAC00\uC7A5 \uAE34 \uAC04\uACA9: ${longest}",
  EASES: "Eases",
  EASES_SUMMARY: "Average ease: ${avgEase}",
  CARD_TYPES: "\uCE74\uB4DC \uD0C0\uC785",
  CARD_TYPES_DESC: "\uC5EC\uAE30\uC5D0\uB294 \uBB3B\uC5B4\uB454 \uCE74\uB4DC\uB3C4 \uD3EC\uD568\uB429\uB2C8\uB2E4.",
  CARD_TYPE_NEW: "New",
  CARD_TYPE_YOUNG: "Young",
  CARD_TYPE_MATURE: "Mature",
  CARD_TYPES_SUMMARY: "\uC804\uCCB4 \uCE74\uB4DC \uC218: ${totalCardsCount}"
};

// src/lang/locale/mr.ts
var mr_default = {};

// src/lang/locale/nl.ts
var nl_default = {};

// src/lang/locale/no.ts
var no_default = {};

// src/lang/locale/pl.ts
var pl_default = {
  // flashcard-modal.tsx
  DECKS: "Talie",
  DUE_CARDS: "Fiszki z terminem",
  NEW_CARDS: "Nowe fiszki",
  TOTAL_CARDS: "Wszystkie karty",
  BACK: "Wstecz",
  SKIP: "Pomi\u0144",
  EDIT_CARD: "Edytuj kart\u0119",
  RESET_CARD_PROGRESS: "Zresetuj post\u0119p karty",
  HARD: "Trudne",
  GOOD: "\u015Arednio Trudne",
  EASY: "\u0141atwe",
  SHOW_ANSWER: "Poka\u017C odpowied\u017A",
  CARD_PROGRESS_RESET: "Post\u0119p karty zosta\u0142 zresetowany.",
  SAVE: "Zapisz",
  CANCEL: "Anuluj",
  NO_INPUT: "Nie wprowadzono warto\u015Bci.",
  CURRENT_EASE_HELP_TEXT: "Aktualna \u0142atwo\u015B\u0107: ",
  CURRENT_INTERVAL_HELP_TEXT: "Aktualny interwa\u0142: ",
  CARD_GENERATED_FROM: "Wygenerowano z: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Otw\xF3rz notatk\u0119 do przegl\u0105du",
  REVIEW_CARDS: "Przegl\u0105daj fiszki",
  REVIEW_DIFFICULTY_FILE_MENU: "Przegl\u0105daj: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Przegl\u0105daj notatk\u0119 jako ${difficulty}",
  CRAM_ALL_CARDS: "Wybierz tali\u0119 do intensywnego uczenia",
  REVIEW_ALL_CARDS: "Przegl\u0105daj fiszki ze wszystkich notatek",
  REVIEW_CARDS_IN_NOTE: "Przegl\u0105daj fiszki w tej notatce",
  CRAM_CARDS_IN_NOTE: "Intensywne uczenie fiszek w tej notatce",
  VIEW_STATS: "Wy\u015Bwietl statystyki",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Przegl\u0105daj: ${dueNotesCount} notatek, ${dueFlashcardsCount} fiszek z terminem",
  SYNC_TIME_TAKEN: "Synchronizacja zaj\u0119\u0142a ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "Notatka jest zapisana w folderze zignorowanym (sprawd\u017A ustawienia).",
  PLEASE_TAG_NOTE: "Prosz\u0119 odpowiednio otagowa\u0107 notatk\u0119 do przegl\u0105du (w ustawieniach).",
  RESPONSE_RECEIVED: "Otrzymano odpowied\u017A.",
  NO_DECK_EXISTS: "Nie istnieje talia o nazwie ${deckName}",
  ALL_CAUGHT_UP: "Jeste\u015B teraz na bie\u017C\u0105co :D.",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} dni",
  MONTHS_STR_IVL: "${interval} miesi\u0119cy",
  YEARS_STR_IVL: "${interval} lata",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}r",
  // settings.ts
  SETTINGS_HEADER: "Spaced Repetition - Ustawienia",
  CHECK_WIKI: 'Aby uzyska\u0107 wi\u0119cej informacji, sprawd\u017A <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "Foldery do zignorowania",
  FOLDERS_TO_IGNORE_DESC: "Wprowad\u017A \u015Bcie\u017Cki folder\xF3w oddzielone nowymi liniami, np. Szablony Meta/Scripts",
  FLASHCARDS: "Fiszki",
  FLASHCARD_EASY_LABEL: "Tekst przycisku \u0141atwe",
  FLASHCARD_GOOD_LABEL: "Tekst przycisku \u015Arednio trudne",
  FLASHCARD_HARD_LABEL: "Tekst przycisku Trudne",
  FLASHCARD_EASY_DESC: 'Dostosuj etykiet\u0119 dla przycisku "\u0141atwe"',
  FLASHCARD_GOOD_DESC: 'Dostosuj etykiet\u0119 dla przycisku "\u015Arednio trudne"',
  FLASHCARD_HARD_DESC: 'Dostosuj etykiet\u0119 dla przycisku "Trudne"',
  FLASHCARD_TAGS: "Tagi fiszek",
  FLASHCARD_TAGS_DESC: "Wprowad\u017A tagi oddzielone spacj\u0105 lub nowymi liniami, np. #fiszki #talia2 #talia3.",
  CONVERT_FOLDERS_TO_DECKS: "Czy konwertowa\u0107 foldery na talie i podtalie?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "Jest to alternatywa dla opcji tag\xF3w fiszek powy\u017Cej.",
  INLINE_SCHEDULING_COMMENTS: "Czy zachowa\u0107 komentarz harmonogramowania w tej samej linii co ostatnia linia fiszki?",
  INLINE_SCHEDULING_COMMENTS_DESC: "W\u0142\u0105czenie tej opcji sprawi, \u017Ce komentarze HTML nie b\u0119d\u0105 przerywa\u0107 formatowania listy.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Czy ukrywa\u0107 karty rodze\u0144stwa do nast\u0119pnego dnia?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Rodze\u0144stwo to karty wygenerowane z tego samego tekstu karty, np. usuni\u0119cia zamaskowane",
  SHOW_CARD_CONTEXT: "Czy pokazywa\u0107 kontekst na kartach?",
  SHOW_CARD_CONTEXT_DESC: "np. Tytu\u0142 > Nag\u0142\xF3wek 1 > Podnag\u0142\xF3wek > ... > Podnag\u0142\xF3wek",
  CARD_MODAL_HEIGHT_PERCENT: "Procentowa wysoko\u015B\u0107 fiszki",
  CARD_MODAL_SIZE_PERCENT_DESC: "Powinno by\u0107 ustawione na 100% na urz\u0105dzeniach mobilnych lub gdy masz bardzo du\u017Ce obrazy",
  RESET_DEFAULT: "Zresetuj do domy\u015Blnych",
  CARD_MODAL_WIDTH_PERCENT: "Procentowa szeroko\u015B\u0107 fiszki",
  RANDOMIZE_CARD_ORDER: "Czy losowa\u0107 kolejno\u015B\u0107 kart podczas przegl\u0105du?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Kolejno\u015B\u0107 kart w talii wy\u015Bwietlana podczas przegl\u0105dania",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Kolejno w ramach talii (Najpierw wszystkie nowe karty)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Kolejno w ramach talii (Najpierw wszystkie karty z terminem)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Losowo w ramach talii (Najpierw wszystkie nowe karty)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Losowo w ramach talii (Najpierw wszystkie karty z terminem)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Losowa karta z losowej talii",
  REVIEW_DECK_ORDER: "Kolejno\u015B\u0107 talii wy\u015Bwietlana podczas przegl\u0105dania",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Kolejno (gdy wszystkie karty w poprzedniej talii przegl\u0105dni\u0119te)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Losowo (gdy wszystkie karty w poprzedniej talii przegl\u0105dni\u0119te)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Losowa karta z losowej talii",
  DISABLE_CLOZE_CARDS: "Wy\u0142\u0105czy\u0107 karty zamaskowane?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "Konwertowa\u0107 ==pod\u015Bwietlenia== na karty zamaskowane?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "Konwertowa\u0107 pogrubiony tekst na karty zamaskowane?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "Konwertowa\u0107 {{klamry}} na karty zamaskowane?",
  INLINE_CARDS_SEPARATOR: "Separator dla kart zamaskowanych w linii",
  FIX_SEPARATORS_MANUALLY_WARNING: "Pami\u0119taj, \u017Ce po zmianie tego musisz r\u0119cznie edytowa\u0107 wszystkie karty zamaskowane, kt\xF3re ju\u017C masz.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Separator dla kart zamaskowanych odwr\xF3conych w linii",
  MULTILINE_CARDS_SEPARATOR: "Separator dla kart zamaskowanych wieloliniowych",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator dla kart zamaskowanych odwr\xF3conych wieloliniowych",
  NOTES: "Notatki",
  REVIEW_PANE_ON_STARTUP: "W\u0142\u0105czy\u0107 panel przegl\u0105du notatek przy starcie",
  TAGS_TO_REVIEW: "Tagi do przegl\u0105du",
  TAGS_TO_REVIEW_DESC: "Wprowad\u017A tagi oddzielone spacj\u0105 lub nowymi liniami, np. #przegl\u0105d #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "Otw\xF3rz losow\u0105 notatk\u0119 do przegl\u0105du",
  OPEN_RANDOM_NOTE_DESC: "Po wy\u0142\u0105czeniu tej opcji notatki s\u0105 uporz\u0105dkowane wed\u0142ug istotno\u015Bci (PageRank).",
  AUTO_NEXT_NOTE: "Automatycznie otwiera\u0107 nast\u0119pn\u0105 notatk\u0119 po przegl\u0105dzie",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Wy\u0142\u0105czy\u0107 opcje przegl\u0105du w menu pliku, tj. Przegl\u0105d: \u0141atwe Dobrze Trudne",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Po wy\u0142\u0105czeniu mo\u017Cesz przegl\u0105da\u0107 za pomoc\u0105 skr\xF3t\xF3w klawiszowych. Po zmianie tej opcji konieczne jest ponowne za\u0142adowanie Obsidian.",
  MAX_N_DAYS_REVIEW_QUEUE: "Maksymalna liczba dni do wy\u015Bwietlenia w panelu prawym",
  MIN_ONE_DAY: "Liczba dni musi wynosi\u0107 co najmniej 1.",
  VALID_NUMBER_WARNING: "Podaj prawid\u0142ow\u0105 liczb\u0119.",
  UI_PREFERENCES: "Preferencje interfejsu u\u017Cytkownika",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Podtalie powinny by\u0107 pocz\u0105tkowo wy\u015Bwietlane rozszerzone",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Wy\u0142\u0105cz to, aby zwin\u0105\u0107 zagnie\u017Cd\u017Cone talie w tej samej karcie. Przydatne, je\u015Bli karty nale\u017C\u0105 do wielu talii w tym samym pliku.",
  ALGORITHM: "Algorytm",
  CHECK_ALGORITHM_WIKI: 'Aby uzyska\u0107 wi\u0119cej informacji, sprawd\u017A <a href="${algo_url}">implementacj\u0119 algorytmu</a>.',
  BASE_EASE: "Podstawowa \u0142atwo\u015B\u0107",
  BASE_EASE_DESC: "minimum = 130, preferowana warto\u015B\u0107 to oko\u0142o 250.",
  BASE_EASE_MIN_WARNING: "Podstawowa \u0142atwo\u015B\u0107 musi wynosi\u0107 co najmniej 130.",
  LAPSE_INTERVAL_CHANGE: "Zmiana interwa\u0142u podczas przegl\u0105dania fiszki/notatki jako trudne",
  LAPSE_INTERVAL_CHANGE_DESC: "nowyInterwa\u0142 = staryInterwa\u0142 * zmianaInterwa\u0142u / 100.",
  EASY_BONUS: "Bonus za \u0142atwe",
  EASY_BONUS_DESC: "Bonus za \u0142atwe pozwala ustawi\u0107 r\xF3\u017Cnic\u0119 w interwa\u0142ach mi\u0119dzy odpowiedziami \u015Arednio trudne i \u0141atwe na fiszce/notatce (minimum = 100%).",
  EASY_BONUS_MIN_WARNING: "Bonus za \u0142atwe musi wynosi\u0107 co najmniej 100.",
  MAX_INTERVAL: "Maksymalny interwa\u0142 w dniach",
  MAX_INTERVAL_DESC: "Pozwala na ustawienie g\xF3rnego limitu interwa\u0142u (domy\u015Blnie = 100 lat).",
  MAX_INTERVAL_MIN_WARNING: "Maksymalny interwa\u0142 musi wynosi\u0107 co najmniej 1 dzie\u0144.",
  MAX_LINK_CONTRIB: "Maksymalny wk\u0142ad \u0142\u0105cza",
  MAX_LINK_CONTRIB_DESC: "Maksymalny wk\u0142ad wa\u017Conej \u0142atwo\u015Bci po\u0142\u0105czonych notatek do pocz\u0105tkowej \u0142atwo\u015Bci.",
  LOGGING: "Logowanie",
  DISPLAY_DEBUG_INFO: "Wy\u015Bwietl informacje debugowania w konsoli deweloperskiej?",
  // sidebar.ts
  //sidebar.ts
  NOTES_REVIEW_QUEUE: "Kolejka przegl\u0105du notatek",
  CLOSE: "Zamknij",
  NEW: "Nowe",
  YESTERDAY: "Wczoraj",
  TODAY: "Dzisiaj",
  TOMORROW: "Jutro",
  // stats-modal.tsx
  STATS_TITLE: "Statystyki",
  MONTH: "Miesi\u0105c",
  QUARTER: "Kwarta\u0142",
  YEAR: "Rok",
  LIFETIME: "Ca\u0142e \u017Cycie",
  FORECAST: "Prognoza",
  FORECAST_DESC: "Liczba kart z terminem w przysz\u0142o\u015Bci",
  SCHEDULED: "Zaplanowane",
  DAYS: "Dni",
  NUMBER_OF_CARDS: "Liczba kart",
  REVIEWS_PER_DAY: "\u015Arednio: ${avg} przegl\u0105d\xF3w/dzie\u0144",
  INTERVALS: "Interwa\u0142y",
  INTERVALS_DESC: "Op\xF3\u017Anienia przed ponownym pokazaniem przegl\u0105d\xF3w",
  COUNT: "Liczba",
  INTERVALS_SUMMARY: "\u015Aredni interwa\u0142: ${avg}, Najd\u0142u\u017Cszy interwa\u0142: ${longest}",
  EASES: "\u0141atwo\u015Bci",
  EASES_SUMMARY: "\u015Arednia \u0142atwo\u015B\u0107: ${avgEase}",
  CARD_TYPES: "Typy kart",
  CARD_TYPES_DESC: "Obejmuje tak\u017Ce ukryte karty, je\u015Bli takie s\u0105",
  CARD_TYPE_NEW: "Nowe",
  CARD_TYPE_YOUNG: "M\u0142ode",
  CARD_TYPE_MATURE: "Stare",
  CARD_TYPES_SUMMARY: "\u0141\u0105czna liczba kart: ${totalCardsCount}"
};

// src/lang/locale/pt.ts
var pt_default = {};

// src/lang/locale/pt-br.ts
var pt_br_default = {
  // flashcard-modal.tsx
  DECKS: "Baralhos",
  DUE_CARDS: "Cartas para Colocar em Dia",
  NEW_CARDS: "Novas Cartas",
  TOTAL_CARDS: "Total de Cartas",
  BACK: "Voltar",
  SKIP: "Pular",
  EDIT_CARD: "Editar Cart\xE3o",
  RESET_CARD_PROGRESS: "Reiniciar o Progresso da Carta",
  HARD: "Dif\xEDcil",
  GOOD: "OK",
  EASY: "F\xE1cil",
  SHOW_ANSWER: "Mostrar Resposta",
  CARD_PROGRESS_RESET: "O Progresso da Carta foi reiniciado",
  SAVE: "Salvar",
  CANCEL: "Cancelar",
  NO_INPUT: "Nenhuma entrada fornecida.",
  CURRENT_EASE_HELP_TEXT: "Facilidade atual: ",
  CURRENT_INTERVAL_HELP_TEXT: "Intervalo atual: ",
  CARD_GENERATED_FROM: "Gerada a partir de: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "Abrir uma nota para revisar",
  REVIEW_CARDS: "Revisar flashcards",
  REVIEW_DIFFICULTY_FILE_MENU: "Revis\xE3o: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "Revisar nota como ${difficulty}",
  REVIEW_ALL_CARDS: "Revisar flashcards de todas as notas",
  CRAM_ALL_CARDS: "Selecione um baralho para revisar",
  REVIEW_CARDS_IN_NOTE: "Revisar flashcards nessa nota",
  CRAM_CARDS_IN_NOTE: "Revisar todas as flashcards nessa nota",
  VIEW_STATS: "Ver estat\xEDsticas",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "Revis\xE3o: ${dueNotesCount} nota(s), ${dueFlashcardsCount} Carta(s) para colocar em dia",
  SYNC_TIME_TAKEN: "Sincroniza\xE7\xE3o levou ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "Nota \xE9 salva na pasta ignorada (cheque as configura\xE7\xF5es).",
  PLEASE_TAG_NOTE: "Por favor etiquete a nota apropriadamente para revisar (nas configura\xE7\xF5es).",
  RESPONSE_RECEIVED: "Resposta recebida.",
  NO_DECK_EXISTS: "Nenhum baralho existe para ${deckName}",
  ALL_CAUGHT_UP: "Voc\xEA colocou tudo em dia agora :D.",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} dia(s)",
  MONTHS_STR_IVL: "${interval} m\xEAs(es)",
  YEARS_STR_IVL: "${interval} ano(s)",
  DAYS_STR_IVL_MOBILE: "${interval}d",
  MONTHS_STR_IVL_MOBILE: "${interval}m",
  YEARS_STR_IVL_MOBILE: "${interval}a",
  // settings.ts
  SETTINGS_HEADER: "Plugin Spaced Repetition - Configura\xE7\xE3o",
  CHECK_WIKI: 'Para mais informa\xE7\xF5es, cheque a <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "Pastas para ignorar",
  FOLDERS_TO_IGNORE_DESC: "Insira o caminho das pastas separado por quebras de linha ex: Templates Meta/Scripts",
  FLASHCARDS: "Flashcards",
  FLASHCARD_EASY_LABEL: "Texto do Bot\xE3o de F\xE1cil",
  FLASHCARD_GOOD_LABEL: "Texto do Bot\xE3o de OK",
  FLASHCARD_HARD_LABEL: "Texto do Bot\xE3o de Dif\xEDcil",
  FLASHCARD_EASY_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "F\xE1cil"',
  FLASHCARD_GOOD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "OK"',
  FLASHCARD_HARD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "Dif\xEDcil"',
  FLASHCARD_TAGS: "Etiquetas dos Flashcards",
  FLASHCARD_TAGS_DESC: "Insira etiquetas separadas por espa\xE7os ou quebras de linha ex: #flashcards #baralho2 #baralho3.",
  CONVERT_FOLDERS_TO_DECKS: "Converter pastas para baralhos e sub-baralhos?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "Isso \xE9 uma alternativa para a op\xE7\xE3o de etiqueta dos Flashcards em cima.",
  INLINE_SCHEDULING_COMMENTS: "Salvar coment\xE1rios de agendamento na mesma linha que a \xFAltima linha do flashcard?",
  INLINE_SCHEDULING_COMMENTS_DESC: "Ligar isso vai fazer com que os coment\xE1rios em HTML n\xE3o quebrem a formata\xE7\xE3o de listas.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "Enterrar cartas irm\xE3s at\xE9 o pr\xF3ximo dia?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Cartas irm\xE3s s\xE3o geradas pelo texto da mesma carta ex: omiss\xE3o de palavras",
  SHOW_CARD_CONTEXT: "Mostrar contexto nas cartas?",
  SHOW_CARD_CONTEXT_DESC: "ex: T\xEDtulo > Cabe\xE7alho 1 > Subcabe\xE7alho > ... > Subcabe\xE7alho",
  CARD_MODAL_HEIGHT_PERCENT: "Porcentagem da Altura do Flashcard",
  CARD_MODAL_SIZE_PERCENT_DESC: "Deveria estar configurado em 100% em dispositivos m\xF3veis ou se voc\xEA tem imagens muito grandes",
  RESET_DEFAULT: "Reiniciar para a pr\xE9-defini\xE7\xE3o",
  CARD_MODAL_WIDTH_PERCENT: "Porcentagem de Largura do Flashcard",
  RANDOMIZE_CARD_ORDER: "Aleatorizar a ordem das cartas durante a revis\xE3o?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "Order cards in a deck are displayed during review",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "Sequentially within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "Sequentially within a deck (All due cards first)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "Randomly within a deck (All new cards first)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "Randomly within a deck (All due cards first)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  REVIEW_DECK_ORDER: "Order decks are displayed during review",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "Sequentially (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "Randomly (once all cards in previous deck reviewed)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "Random card from random deck",
  DISABLE_CLOZE_CARDS: "Desabilitar cartas que usam omiss\xE3o de palavras?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "Converter ==marca-texto== em omiss\xF5es?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "Converter **texto em negrito** em omiss\xF5es?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "Converter {{chaves}} em omiss\xF5es?",
  INLINE_CARDS_SEPARATOR: "Separador para flashcards inline",
  FIX_SEPARATORS_MANUALLY_WARNING: "Note que depois de mudar isso voc\xEA vai ter que manualmente mudar quaisquer flashcards que voc\xEA tenha.",
  INLINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards inline reversos",
  MULTILINE_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas reversos",
  NOTES: "Notas",
  REVIEW_PANE_ON_STARTUP: "Habilitar painel de revis\xE3o de notas na inicializa\xE7\xE3o",
  TAGS_TO_REVIEW: "Etiquetas para revisar",
  TAGS_TO_REVIEW_DESC: "Insira etiquetas separadas por espa\xE7os ou quebra de linhas ex: #revisar #etiqueta2 #etiqueta3.",
  OPEN_RANDOM_NOTE: "Abrir uma nota aleat\xF3ria para revisar",
  OPEN_RANDOM_NOTE_DESC: "Quando voc\xEA desabilitar isso, as notas v\xE3o ser ordenadas por import\xE2ncia (PageRank).",
  AUTO_NEXT_NOTE: "Abrir a pr\xF3xima nota automaticamente depois de uma revis\xE3o",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "Desabilitar op\xE7\xF5es de revis\xE3o no menu de arquivos ex: Revis\xE3o: F\xE1cil OK Dif\xEDcil",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Depois de desabilitar, voc\xEA pode revisar usando os atalhos de comando. Reinicie Obsidian depois de mudar isso.",
  MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de dias para exibir no painel direito",
  MIN_ONE_DAY: "O n\xFAmero de dias deve ser pelo menos 1.",
  VALID_NUMBER_WARNING: "Por favor Insira um n\xFAmero v\xE1lido.",
  UI_PREFERENCES: "Prefer\xEAncias de UI",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\xC1rvores de baralhos devem inicialmente ser exibidas como expandidas",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desabilite isso para colapsar baralhos que est\xE3o um dentro do outro na mesma carta. \xDAtil se voc\xEA tem cartas que pertencem a muitos baralhos em um mesmo arquivo.",
  ALGORITHM: "Algor\xEDtmo",
  CHECK_ALGORITHM_WIKI: 'Para mais informa\xE7\xF5es, cheque a <a href="${algo_url}">implementa\xE7\xE3o do algor\xEDtmo</a>.',
  BASE_EASE: "Facilidade base",
  BASE_EASE_DESC: "m\xEDnimo = 130, preferivelmente por volta de 250.",
  BASE_EASE_MIN_WARNING: "A facilidade base deve ser pelo menos 130.",
  LAPSE_INTERVAL_CHANGE: "Mudan\xE7a de intervalo quando voc\xEA revisa um(a) flashcard/nota como dif\xEDcil",
  LAPSE_INTERVAL_CHANGE_DESC: "novoIntervalo = velhoIntervalo * mudancaIntervalo / 100.",
  EASY_BONUS: "B\xF4nus de F\xE1cil",
  EASY_BONUS_DESC: "O b\xF4nus de f\xE1cil te permite mudar a difer\xEAncia entre intervalos de responder OK e F\xE1cil em um(a) flashcard/nota (m\xEDnimo = 100%).",
  EASY_BONUS_MIN_WARNING: "O b\xF4nus de f\xE1cil deve ser pelo menos 100.",
  MAX_INTERVAL: "Intervalo m\xE1ximo em dias",
  MAX_INTERVAL_DESC: "Te permite colocar um limite m\xE1ximo no intervalo (pr\xE9-defini\xE7\xE3o = 100 anos).",
  MAX_INTERVAL_MIN_WARNING: "O intervalo m\xE1ximo deve ser pelo menos 1 dia.",
  MAX_LINK_CONTRIB: "Contribui\xE7\xE3o M\xE1xima de Links",
  MAX_LINK_CONTRIB_DESC: "Contribui\xE7\xE3o m\xE1xima da facilidade ponderada das notas linkadas \xE0 facilidade inicial.",
  LOGGING: "Logging",
  DISPLAY_DEBUG_INFO: "Mostrar informa\xE7\xE3o de debugging no console de desenvolvimento?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "Fila de Notas para Revisar",
  CLOSE: "Fechar",
  NEW: "Novo",
  YESTERDAY: "Ontem",
  TODAY: "Hoje",
  TOMORROW: "Amanh\xE3",
  // stats-modal.tsx
  STATS_TITLE: "Estat\xEDsticas",
  MONTH: "M\xEAs",
  QUARTER: "Trimestre",
  YEAR: "Ano",
  LIFETIME: "Tempo Total",
  FORECAST: "Previs\xE3o",
  FORECAST_DESC: "O n\xFAmero de cartas a serem colocadas em dia no futuro",
  SCHEDULED: "Agendado",
  DAYS: "Dias",
  NUMBER_OF_CARDS: "N\xFAmero de cartas",
  REVIEWS_PER_DAY: "M\xE9dia: ${avg} revis\xF5es/dia",
  INTERVALS: "Intervalos",
  INTERVALS_DESC: "Atrasos at\xE9 que as revis\xF5es sejam exibidas de novo",
  COUNT: "Contagem",
  INTERVALS_SUMMARY: "Intervalo em m\xE9dia: ${avg}, Maior intervalo: ${longest}",
  EASES: "Facilidades",
  EASES_SUMMARY: "Facilidade em m\xE9dia: ${avgEase}",
  CARD_TYPES: "Tipos de Cartas",
  CARD_TYPES_DESC: "Isso tamb\xE9m inclui cartas enterradas, caso existam",
  CARD_TYPE_NEW: "Novo",
  CARD_TYPE_YOUNG: "Jovem",
  CARD_TYPE_MATURE: "Amadurecido",
  CARD_TYPES_SUMMARY: "Total de cartas: ${totalCardsCount}"
};

// src/lang/locale/ro.ts
var ro_default = {};

// src/lang/locale/ru.ts
var ru_default = {
  // flashcard-modal.tsx
  DECKS: "\u041A\u043E\u043B\u043E\u0434\u044B",
  DUE_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  NEW_CARDS: "\u041D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  TOTAL_CARDS: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  BACK: "\u041D\u0430\u0437\u0430\u0434",
  SKIP: "\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C",
  EDIT_CARD: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443",
  RESET_CARD_PROGRESS: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  HARD: "\u0421\u043B\u043E\u0436\u043D\u043E",
  GOOD: "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E",
  EASY: "\u041B\u0435\u0433\u043A\u043E",
  SHOW_ANSWER: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442",
  CARD_PROGRESS_RESET: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  SAVE: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",
  CANCEL: "\u041E\u0442\u043C\u0435\u043D\u0430",
  NO_INPUT: "\u041F\u0443\u0441\u0442\u043E\u0439 \u0432\u0432\u043E\u0434.",
  CURRENT_EASE_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441: ",
  CURRENT_INTERVAL_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B: ",
  CARD_GENERATED_FROM: "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u0438\u0437: ${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F",
  REVIEW_CARDS: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  REVIEW_DIFFICULTY_FILE_MENU: "\u0418\u0437\u0443\u0447\u0435\u043D\u0438\u0435: ${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A ${difficulty}",
  CRAM_ALL_CARDS: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u0435",
  REVIEW_ALL_CARDS: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043E \u0432\u0441\u0435\u0445 \u0437\u0430\u043C\u0435\u0442\u043A\u0430\u0445",
  REVIEW_CARDS_IN_NOTE: "\u0418\u0437\u0443\u0447\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435",
  CRAM_CARDS_IN_NOTE: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435",
  VIEW_STATS: "\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443",
  OPEN_REVIEW_QUEUE_VIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043E\u0447\u0435\u0440\u0435\u0434\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u0431\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0430\u043D\u0435\u043B\u0438",
  STATUS_BAR: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C: ${dueNotesCount} \u0437\u0430\u043C\u0435\u0442\u043E\u043A, ${dueFlashcardsCount} \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  SYNC_TIME_TAKEN: "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u0437\u0430\u043D\u044F\u043B\u0430 ${t}\u043C\u0441",
  NOTE_IN_IGNORED_FOLDER: "\u0417\u0430\u043C\u0435\u0442\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u0443\u044E \u043F\u0430\u043F\u043A\u0443 (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).",
  PLEASE_TAG_NOTE: "\u0414\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u043F\u043E\u043C\u0435\u0442\u044C\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0442\u0435\u0433\u043E\u043C (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).",
  RESPONSE_RECEIVED: "\u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0435\u043D.",
  NO_DECK_EXISTS: "\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0440\u043E\u0432\u043D\u044F ${deckName}",
  ALL_CAUGHT_UP: "\u041C\u043E\u043B\u043E\u0434\u0435\u0446! \u0422\u044B \u0441\u043F\u0440\u0430\u0432\u0438\u043B\u0441\u044F \u0438 \u0434\u043E\u0448\u0435\u043B \u0434\u043E \u043A\u043E\u043D\u0446\u0430! :D",
  // scheduling.ts
  DAYS_STR_IVL: "${interval} \u0434\u043D\u0435\u0439",
  MONTHS_STR_IVL: "${interval} \u043C\u0435\u0441\u044F\u0446\u0435\u0432",
  YEARS_STR_IVL: "${interval} \u0433\u043E\u0434\u043E\u0432",
  DAYS_STR_IVL_MOBILE: "${interval}\u0434.",
  MONTHS_STR_IVL_MOBILE: "${interval}\u043C.",
  YEARS_STR_IVL_MOBILE: "${interval}\u0433.",
  // settings.ts
  SETTINGS_HEADER: "\u041F\u043B\u0430\u0433\u0438\u043D Spaced Repetition - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
  CHECK_WIKI: '\u0414\u043B\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043F\u043E\u0441\u0435\u0442\u0438\u0442\u0435: <a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0430\u043F\u043A\u0438",
  FOLDERS_TO_IGNORE_DESC: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043F\u0443\u0442\u0438 \u043F\u0430\u043F\u043E\u043A, \u043A\u0430\u0436\u0434\u044B\u0439 \u043D\u0430 \u0441\u0432\u043E\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: Templates Meta/Scripts",
  FLASHCARDS: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  FLASHCARD_EASY_LABEL: '\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"',
  FLASHCARD_GOOD_LABEL: '\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"',
  FLASHCARD_HARD_LABEL: '\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"',
  FLASHCARD_EASY_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"',
  FLASHCARD_GOOD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"',
  FLASHCARD_HARD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"',
  FLASHCARD_TAGS: "\u0422\u0435\u0433\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  FLASHCARD_TAGS_DESC: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0442\u0435\u0433\u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u043E\u043C \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #flashcards #deck2 #deck3.",
  CONVERT_FOLDERS_TO_DECKS: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0438 \u0432 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438 \u043F\u043E\u0434\u0443\u0440\u043E\u0432\u043D\u0438?",
  CONVERT_FOLDERS_TO_DECKS_DESC: "\u042D\u0442\u043E \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u043D\u043E\u043C\u0443 \u0432\u044B\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0443 \u0442\u0435\u0433\u043E\u0432 \u0444\u043B\u044D\u0448-\u043A\u0430\u0440\u0442",
  INLINE_SCHEDULING_COMMENTS: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?",
  INLINE_SCHEDULING_COMMENTS_DESC: "\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0434\u0435\u043B\u0430\u0435\u0442 \u0442\u0430\u043A, \u0447\u0442\u043E HTML \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043B\u043E\u043C\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043F\u0438\u0441\u043A\u0430.",
  BURY_SIBLINGS_TILL_NEXT_DAY: "\u041F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u0434\u043D\u044F?",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u0420\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 - \u0442\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u044B \u0438\u0437 \u043E\u0434\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430, \u043F\u0440\u0438\u043C\u0435\u0440: \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 ([...])",
  SHOW_CARD_CONTEXT: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 (\u0443\u0440\u043E\u0432\u0435\u043D\u044C) \u0432 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u0445 (\u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F)?",
  SHOW_CARD_CONTEXT_DESC: "\u043F\u0440\u0438\u043C\u0435\u0440: Title > Heading 1 > Subheading > ... > Subheading",
  CARD_MODAL_HEIGHT_PERCENT: "\u0412\u044B\u0441\u043E\u0442\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445",
  CARD_MODAL_SIZE_PERCENT_DESC: "\u0415\u0441\u043B\u0438 \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u043E\u043C, \u0432\u044B\u0441\u0442\u0430\u0432\u044C\u0442\u0435 100%. \u0418\u043D\u0430\u0447\u0435 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u043E\u0433\u0440\u043E\u043C\u043D\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",
  RESET_DEFAULT: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E-\u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",
  CARD_MODAL_WIDTH_PERCENT: "\u0428\u0438\u0440\u0438\u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445",
  RANDOMIZE_CARD_ORDER: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043A\u0430\u0440\u0442 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F?",
  REVIEW_CARD_ORDER_WITHIN_DECK: "\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442 \u043A\u043E\u043B\u043E\u0434\u044B \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043B\u043E\u0434\u044B (\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0441\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0435 \u043A\u0430\u0440\u0442\u044B)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430 \u0438\u0437 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u044B",
  REVIEW_DECK_ORDER: "\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u043E\u0434 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E  (\u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0432\u0441\u0435\u0445 \u043A\u0430\u0440\u0442 \u0438\u0437 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0439 \u043A\u043E\u043B\u043E\u0434\u044B)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u043E (\u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0432\u0441\u0435\u0445 \u043A\u0430\u0440\u0442 \u0438\u0437 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0439 \u043A\u043E\u043B\u043E\u0434\u044B)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430 \u0438\u0437 \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u044B",
  DISABLE_CLOZE_CARDS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u044B \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C ==\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442== \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
  CONVERT_BOLD_TEXT_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C **\u0436\u0438\u0440\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442** \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C {{\u0444\u0438\u0433\u0443\u0440\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438}} \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?",
  INLINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  FIX_SEPARATORS_MANUALLY_WARNING: "\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E \u0432\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438",
  INLINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  MULTILINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  NOTES: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438",
  REVIEW_PANE_ON_STARTUP: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B",
  TAGS_TO_REVIEW: "\u0422\u0435\u0433\u0438 \u0434\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F",
  TAGS_TO_REVIEW_DESC: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u0433\u0438, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u0430\u043C\u0438 \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #review #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F",
  OPEN_RANDOM_NOTE_DESC: "\u0415\u0441\u043B\u0438 \u0432\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C, \u0442\u043E \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u043E\u0442\u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u044B \u043F\u043E \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u0438 (PageRank).",
  AUTO_NEXT_NOTE: "\u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u0432 \u043C\u0435\u043D\u044E \u0444\u0430\u0439\u043B\u0430, \u0442.\u0435.: \u0418\u0437\u0443\u0447\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E \u0421\u043B\u043E\u0436\u043D\u043E",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u041F\u043E\u0441\u043B\u0435 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u043F\u0440\u0438 \u043F\u043E\u043C\u043E\u0449\u0438 \u0433\u043E\u0440\u044F\u0447\u0438\u0445 \u043A\u043B\u0430\u0432\u0438\u0448. \u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 Obsidian \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438.",
  MAX_N_DAYS_REVIEW_QUEUE: "\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u043F\u0440\u0430\u0432\u0430",
  MIN_ONE_DAY: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.",
  VALID_NUMBER_WARNING: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0435\u0435 \u0447\u0438\u0441\u043B\u043E.",
  UI_PREFERENCES: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u0414\u0435\u0440\u0435\u0432\u044C\u044F \u043A\u043E\u043B\u043E\u0434 \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0435",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043B\u043E\u0434\u044B \u043D\u0430 \u043E\u0434\u043D\u043E\u0439 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435. \u041F\u043E\u043B\u0435\u0437\u043D\u043E, \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044C \u043A\u0430\u0440\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u0430\u0442 \u043C\u043D\u043E\u0433\u0438\u043C \u043A\u043E\u043B\u043E\u0434\u0430\u043C \u0432 \u043E\u0434\u043D\u043E\u043C \u0444\u0430\u0439\u043B\u0435.",
  ALGORITHM: "\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C",
  CHECK_ALGORITHM_WIKI: '\u0417\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044C \u043A <a href="${algo_url}">\u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430</a>.',
  BASE_EASE: "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C",
  BASE_EASE_DESC: "\u043C\u0438\u043D\u0438\u043C\u0443\u043C = 130, \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u043A\u043E\u043B\u043E 250.",
  BASE_EASE_MIN_WARNING: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u043C\u0438\u043D\u0438\u043C\u0443\u043C 130.",
  LAPSE_INTERVAL_CHANGE: '\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0430 \u043F\u0440\u0438 \u0432\u044B\u0431\u043E\u0440\u0435 "\u0421\u043B\u043E\u0436\u043D\u043E" \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438/\u0437\u0430\u043C\u0435\u0442\u043A\u0438',
  LAPSE_INTERVAL_CHANGE_DESC: "\u043D\u043E\u0432\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A = \u0441\u0442\u0430\u0440\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A * \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 / 100.",
  EASY_BONUS: "\u041B\u0435\u0433\u043A\u043E: \u0431\u043E\u043D\u0443\u0441",
  EASY_BONUS_DESC: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u043D\u0438\u0446\u0443 \u0432 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430\u0445 \u043C\u0435\u0436\u0434\u0443 \u043E\u0442\u0432\u0435\u0442\u0430\u043C\u0438 \u0425\u043E\u0440\u043E\u0448\u043E \u0438 \u041B\u0435\u0433\u043A\u043E \u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435/\u0437\u0430\u043C\u0435\u0442\u043A\u0435 (\u043C\u0438\u043D. = 100%).",
  EASY_BONUS_MIN_WARNING: '\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 "\u041B\u0435\u0433\u043A\u043E" \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 100.',
  MAX_INTERVAL: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0432 \u0434\u043D\u044F\u0445",
  MAX_INTERVAL_DESC: "\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u0433\u0440\u0430\u043D\u0438\u0446\u0443 \u043D\u0430 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E = 100 \u043B\u0435\u0442).",
  MAX_INTERVAL_MIN_WARNING: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.",
  MAX_LINK_CONTRIB: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0432\u044F\u0437\u0438 (\u0441\u0441\u044B\u043B\u043A\u0438)",
  MAX_LINK_CONTRIB_DESC: '\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438" \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C".',
  LOGGING: "\u0416\u0443\u0440\u043D\u0430\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",
  DISPLAY_DEBUG_INFO: "\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430?",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435",
  CLOSE: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
  NEW: "\u041D\u043E\u0432\u044B\u0435",
  YESTERDAY: "\u0412\u0447\u0435\u0440\u0430\u0448\u043D\u0438\u0435",
  TODAY: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0435",
  TOMORROW: "\u0417\u0430\u0432\u0442\u0440\u0430\u0448\u043D\u0438\u0435",
  // stats-modal.tsx
  STATS_TITLE: "\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430",
  MONTH: "\u041C\u0435\u0441\u044F\u0446",
  QUARTER: "\u041A\u0432\u0430\u0440\u0442\u0430\u043B",
  YEAR: "\u0413\u043E\u0434",
  LIFETIME: "\u0412\u0441\u0451 \u0432\u0440\u0435\u043C\u044F",
  FORECAST: "\u041F\u0440\u043E\u0433\u043D\u043E\u0437",
  FORECAST_DESC: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0445 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F",
  SCHEDULED: "\u0417\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E",
  DAYS: "\u0414\u043D\u0438",
  NUMBER_OF_CARDS: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  REVIEWS_PER_DAY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: ${avg} \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0439 \u0432 \u0434\u0435\u043D\u044C",
  INTERVALS: "\u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u044B",
  INTERVALS_DESC: "\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F",
  COUNT: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E",
  INTERVALS_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${avg}, \u0421\u0430\u043C\u044B\u0439 \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${longest}",
  EASES: "\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u044F",
  EASES_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441\u0430: ${avgEase}",
  CARD_TYPES: "\u0422\u0438\u043F\u044B \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A",
  CARD_TYPES_DESC: "\u0412\u043A\u043B\u044E\u0447\u0430\u044F \u0441\u043F\u0440\u044F\u0442\u0430\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u0435\u0441\u043B\u0438 \u0442\u0430\u043A\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0442.",
  CARD_TYPE_NEW: "\u041D\u043E\u0432\u044B\u0445",
  CARD_TYPE_YOUNG: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u043C\u044B\u0445",
  CARD_TYPE_MATURE: "\u0418\u0437\u0443\u0447\u0435\u043D\u043D\u044B\u0445",
  CARD_TYPES_SUMMARY: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: ${totalCardsCount}"
};

// src/lang/locale/ta.ts
var ta_default = {};

// src/lang/locale/te.ts
var te_default = {};

// src/lang/locale/th.ts
var th_default = {};

// src/lang/locale/tr.ts
var tr_default = {};

// src/lang/locale/uk.ts
var uk_default = {};

// src/lang/locale/ur.ts
var ur_default = {};

// src/lang/locale/vi.ts
var vi_default = {};

// src/lang/locale/zh-cn.ts
var zh_cn_default = {
  // flashcard-modal.tsx
  DECKS: "\u5361\u7EC4",
  DUE_CARDS: "\u5230\u671F\u5361\u7247",
  NEW_CARDS: "\u65B0\u5361\u7247",
  TOTAL_CARDS: "\u5168\u90E8\u5361\u7247",
  BACK: "\u8FD4\u56DE",
  SKIP: "\u7565\u8FC7",
  EDIT_CARD: "\u7F16\u8F91\u5361\u7247",
  RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247",
  HARD: "\u8F83\u96BE",
  GOOD: "\u8BB0\u5F97",
  EASY: "\u7B80\u5355",
  SHOW_ANSWER: "\u663E\u793A\u7B54\u6848",
  CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002",
  SAVE: "\u50A8\u5B58",
  CANCEL: "\u53D6\u6D88",
  NO_INPUT: "\u6CA1\u6709\u63D0\u4F9B\u8F93\u5165\u3002",
  CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A",
  CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u95F4\u9694\uFF1A",
  CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "\u6253\u5F00\u4E00\u4E2A\u7B14\u8BB0\u5F00\u59CB\u590D\u4E60",
  REVIEW_CARDS: "\u590D\u4E60\u5361\u7247",
  REVIEW_DIFFICULTY_FILE_MENU: "\u590D\u4E60\uFF1A${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "\u6807\u8BB0\u4E3A\u201C${difficulty}\u201D",
  REVIEW_ALL_CARDS: "\u590D\u4E60\u6240\u6709\u7B14\u8BB0\u4E2D\u7684\u5361\u7247",
  CRAM_ALL_CARDS: "\u9009\u62E9\u8981\u96C6\u4E2D\u590D\u4E60\u7684\u5361\u7EC4",
  REVIEW_CARDS_IN_NOTE: "\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247",
  CRAM_CARDS_IN_NOTE: "\u96C6\u4E2D\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247",
  VIEW_STATS: "\u67E5\u770B\u6570\u636E",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "\u590D\u4E60: ${dueNotesCount} \u7B14\u8BB0, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F",
  SYNC_TIME_TAKEN: "\u540C\u6B65\u65F6\u95F4 ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "\u7B14\u8BB0\u4FDD\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F84\u4E2D\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002",
  PLEASE_TAG_NOTE: "\u8BF7\u5C06\u9700\u8981\u590D\u4E60\u7684\u7B14\u8BB0\u4E2D\u52A0\u5165\u6B63\u786E\u7684\u6807\u7B7E\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002",
  RESPONSE_RECEIVED: "\u53CD\u9988\u5DF2\u6536\u5230",
  NO_DECK_EXISTS: "\u6CA1\u6709 ${deckName} \u5361\u7EC4",
  ALL_CAUGHT_UP: "\u90FD\u590D\u4E60\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01",
  // scheduling.ts
  DAYS_STR_IVL: "${interval}\u5929",
  MONTHS_STR_IVL: "${interval}\u6708",
  YEARS_STR_IVL: "${interval}\u5E74",
  DAYS_STR_IVL_MOBILE: "${interval}\u5929",
  MONTHS_STR_IVL_MOBILE: "${interval}\u6708",
  YEARS_STR_IVL_MOBILE: "${interval}\u5E74",
  // settings.ts
  SETTINGS_HEADER: "\u95F4\u9694\u91CD\u590D\u63D2\u4EF6 - \u8BBE\u7F6E",
  CHECK_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FB<a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u6587\u4EF6\u5939",
  FOLDERS_TO_IGNORE_DESC: "\u8F93\u5165\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u7528\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts",
  FLASHCARDS: "\u5361\u7247",
  FLASHCARD_EASY_LABEL: "\u201C\u7B80\u5355\u201D\u6309\u94AE\u6587\u672C",
  FLASHCARD_GOOD_LABEL: "\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u6587\u672C",
  FLASHCARD_HARD_LABEL: "\u201C\u8F83\u96BE\u201D\u6309\u94AE\u6587\u672C",
  FLASHCARD_EASY_DESC: "\u81EA\u5B9A\u4E49\u201C\u7B80\u5355\u201D\u6309\u94AE\u7684\u6807\u7B7E",
  FLASHCARD_GOOD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u7684\u6807\u7B7E",
  FLASHCARD_HARD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8F83\u96BE\u201D\u6309\u94AE\u7684\u6807\u7B7E",
  FLASHCARD_TAGS: "\u5361\u7247\u6807\u7B7E",
  FLASHCARD_TAGS_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.",
  CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C06\u6587\u4EF6\u5939\u5185\u5BB9\u8F6C\u6362\u4E3A\u5361\u7247\u7EC4\u548C\u5B50\u5361\u7247\u7EC4\uFF1F",
  CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9009\u9879\u4E3A\u5361\u7247\u6807\u7B7E\u9009\u9879\u7684\u66FF\u4EE3\u9009\u9879\u3002",
  INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C06\u8BA1\u5212\u91CD\u590D\u65F6\u95F4\u4FDD\u5B58\u5728\u5361\u7247\u6700\u540E\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F",
  INLINE_SCHEDULING_COMMENTS_DESC: "HTML\u6CE8\u91CA\u4E0D\u518D\u7834\u574F\u5217\u8868\u683C\u5F0F",
  BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C06\u5173\u8054\u5361\u7247\u9690\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u5173\u8054\u5361\u7247\u662F\u6765\u81EA\u540C\u4E00\u5361\u7247\u7684\u4E0D\u540C\u5F62\u5F0F\uFF0C \u4F8B\u5982\uFF1A\u5B8C\u5F62\u586B\u7A7A\u5361\u7247",
  SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u663E\u793A\u4E0A\u4E0B\u6587\uFF1F",
  SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6807\u9898 > \u526F\u6807\u9898 > \u5C0F\u6807\u9898 > ... > \u5C0F\u6807\u9898",
  CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4",
  CARD_MODAL_SIZE_PERCENT_DESC: "\u8BF7\u5728\u79FB\u52A8\u7AEF\u4F7F\u7528\u5E76\u9700\u8981\u6D4F\u89C8\u8F83\u5927\u56FE\u7247\u65F6\u8BBE\u4E3A100%",
  RESET_DEFAULT: "\u91CD\u7F6E\u4E3A\u9ED8\u8BA4",
  CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BBD\u5EA6\u767E\u5206\u6BD4",
  RANDOMIZE_CARD_ORDER: "\u590D\u4E60\u65F6\u968F\u673A\u663E\u793A\u5361\u7247\uFF1F",
  REVIEW_CARD_ORDER_WITHIN_DECK: "\u590D\u4E60\u65F6\u5361\u7247\u7EC4\u5185\u7684\u5361\u7247\u6392\u5E8F",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "\u5361\u7247\u7EC4\u5185\u987A\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u4F18\u5148)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "\u5361\u7247\u7EC4\u5185\u987A\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u4F18\u5148)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "\u5361\u7247\u7EC4\u5185\u4E71\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u4F18\u5148)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "\u5361\u7247\u7EC4\u5185\u4E71\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u4F18\u5148)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "\u5361\u7247\u7EC4\u53CA\u5361\u7247\u90FD\u4E71\u5E8F",
  REVIEW_DECK_ORDER: "\u590D\u4E60\u65F6\u5361\u7247\u7EC4\u7684\u6392\u5E8F",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "\u987A\u5E8F (\u5728\u524D\u4E00\u5361\u7247\u7EC4\u5185\u5361\u7247\u90FD\u590D\u4E60\u5B8C\u540E)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "\u4E71\u5E8F (\u5728\u524D\u4E00\u5361\u7247\u7EC4\u5185\u5361\u7247\u90FD\u590D\u4E60\u5B8C\u540E)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "\u5361\u7247\u7EC4\u53CA\u5361\u7247\u90FD\u4E71\u5E8F",
  DISABLE_CLOZE_CARDS: "\u4E0D\u8FDB\u884C\u5B8C\u5F62\u586B\u7A7A\uFF1F",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C06 ==\u9AD8\u4EAE== \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F",
  CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C06 **\u7C97\u4F53** \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C06 {{\u5927\u62EC\u53F7}} \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F",
  INLINE_CARDS_SEPARATOR: "\u5355\u884C\u5361\u7247\u7684\u5206\u9694\u7B26",
  FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9009\u9879\u540E\u4F60\u5C06\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u7B26\u3002",
  INLINE_REVERSED_CARDS_SEPARATOR: "\u5355\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26",
  MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u7B26",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26",
  NOTES: "\u7B14\u8BB0",
  REVIEW_PANE_ON_STARTUP: "\u542F\u52A8\u65F6\u5F00\u542F\u7B14\u8BB0\u590D\u4E60\u7A97\u683C",
  TAGS_TO_REVIEW: "\u590D\u4E60\u6807\u7B7E",
  TAGS_TO_REVIEW_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "\u590D\u4E60\u968F\u673A\u7B14\u8BB0",
  OPEN_RANDOM_NOTE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\uFF0C\u7B14\u8BB0\u5C06\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002",
  AUTO_NEXT_NOTE: "\u590D\u4E60\u540E\u81EA\u52A8\u6253\u5F00\u4E0B\u4E00\u4E2A\u7B14\u8BB0",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u5173\u95ED\u6587\u4EF6\u9009\u5355\u4E2D\u7684\u590D\u4E60\u9009\u9879 \u4F8B\u5982\uFF1A\u590D\u4E60\uFF1A\u7B80\u5355 \u8BB0\u5F97 \u8F83\u96BE",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u540E\u4F60\u53EF\u4EE5\u4F7F\u7528\u5FEB\u6377\u952E\u5F00\u59CB\u590D\u4E60\u3002\u91CD\u65B0\u542F\u52A8Obsidian\u4F7F\u672C\u9009\u9879\u751F\u6548\u3002",
  MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u8FB9\u680F\u4E2D\u663E\u793A\u7684\u6700\u5927\u5929\u6570",
  MIN_ONE_DAY: "\u5929\u6570\u6700\u5C0F\u503C\u4E3A1",
  VALID_NUMBER_WARNING: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57\u3002",
  UI_PREFERENCES: "\u7528\u6237\u754C\u9762\u9996\u9009\u9879",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u7532\u677F\u6811\u6700\u521D\u5E94\u663E\u793A\u4E3A\u5C55\u5F00",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u53EF\u6298\u53E0\u540C\u4E00\u5F20\u5361\u7247\u4E2D\u7684\u5D4C\u5957\u724C\u7EC4\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C5E\u4E8E\u540C\u4E00\u6587\u4EF6\u4E2D\u7684\u8BB8\u591A\u5957\u724C\uFF0C\u5219\u5F88\u6709\u7528\u3002",
  ALGORITHM: "\u7B97\u6CD5",
  CHECK_ALGORITHM_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FB<a href="${algo_url}">\u7B97\u6CD5\u5B9E\u73B0</a>.',
  BASE_EASE: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6",
  BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u8350\u503C\u7EA6250.",
  BASE_EASE_MIN_WARNING: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u4E3A130\u3002",
  LAPSE_INTERVAL_CHANGE: "\u5C06\u590D\u4E60\u65F6\u6807\u6CE8\u4E3A\u201C\u8F83\u96BE\u201D\u7684\u5361\u7247\u6216\u7B14\u8BB0\u590D\u4E60\u95F4\u9694\u7F29\u77ED",
  LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u590D\u4E60\u95F4\u9694 = \u539F\u590D\u4E60\u95F4\u9694 * \u95F4\u9694\u6539\u53D8\u7CFB\u6570 / 100.",
  EASY_BONUS: "\u7B80\u5355\u5956\u52B1",
  EASY_BONUS_DESC: "\u7B80\u5355\u5956\u52B1\u8BBE\u5B9A\u201C\u8BB0\u5F97\u201D\u548C\u201C\u7B80\u5355\u201D\u5361\u7247\u6216\u7B14\u8BB0\u7684\u590D\u4E60\u95F4\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002",
  EASY_BONUS_MIN_WARNING: "\u7B80\u5355\u5956\u52B1\u81F3\u5C11\u4E3A100\u3002",
  MAX_INTERVAL: "\u6700\u5927\u95F4\u9694\uFF08\u5929\uFF09",
  MAX_INTERVAL_DESC: "\u8BBE\u5B9A\u590D\u4E60\u7684\u6700\u5927\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u503C100\u5E74\uFF09\u3002",
  MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u95F4\u9694\u81F3\u5C11\u4E3A1\u5929",
  MAX_LINK_CONTRIB: "\u6700\u5927\u94FE\u63A5\u6536\u76CA",
  MAX_LINK_CONTRIB_DESC: "\u94FE\u63A5\u7B14\u8BB0\u7684\u52A0\u6743\u638C\u63E1\u7A0B\u5EA6\u5BF9\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8D21\u732E\u3002",
  LOGGING: "\u8BB0\u5F55\u4E2D",
  DISPLAY_DEBUG_INFO: "\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u663E\u793A\u8C03\u8BD5\u4FE1\u606F\uFF1F",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "\u7B14\u8BB0\u590D\u4E60\u5E8F\u5217",
  CLOSE: "\u4E34\u8FD1",
  NEW: "\u65B0",
  YESTERDAY: "\u6628\u5929",
  TODAY: "\u4ECA\u5929",
  TOMORROW: "\u660E\u5929",
  // stats-modal.tsx
  STATS_TITLE: "\u6570\u636E",
  MONTH: "\u6708",
  QUARTER: "\u5B63",
  YEAR: "\u5E74",
  LIFETIME: "\u5168\u90E8",
  FORECAST: "\u9884\u671F",
  FORECAST_DESC: "\u5C06\u8981\u5230\u671F\u7684\u5361\u7247\u6570\u91CF",
  SCHEDULED: "\u5DF2\u6392\u671F",
  DAYS: "\u5929",
  NUMBER_OF_CARDS: "\u5361\u7247\u6570\u91CF",
  REVIEWS_PER_DAY: "\u5E73\u5747: \u590D\u4E60${avg} /\u5929",
  INTERVALS: "\u95F4\u9694",
  INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u590D\u4E60\u7684\u65F6\u95F4\u95F4\u9694",
  COUNT: "\u8BA1\u6570",
  INTERVALS_SUMMARY: "\u5E73\u5747\u95F4\u9694\u65F6\u95F4: ${avg}, \u6700\u957F\u95F4\u9694\u65F6\u95F4: ${longest}",
  EASES: "\u638C\u63E1\u7A0B\u5EA6",
  EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}",
  CARD_TYPES: "\u5361\u7247\u7C7B\u578B",
  CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C06\u663E\u793A\u9690\u85CF\u7684\u5361\u7247",
  CARD_TYPE_NEW: "\u65B0",
  CARD_TYPE_YOUNG: "\u8F83\u65B0",
  CARD_TYPE_MATURE: "\u719F\u6089",
  CARD_TYPES_SUMMARY: "\u603B\u5361\u7247\u6570: ${totalCardsCount}"
};

// src/lang/locale/zh-tw.ts
var zh_tw_default = {
  // flashcard-modal.tsx
  DECKS: "\u724C\u7D44",
  DUE_CARDS: "\u5230\u671F\u5361\u7247",
  NEW_CARDS: "\u65B0\u5361\u7247",
  TOTAL_CARDS: "\u5168\u90E8\u5361\u7247",
  BACK: "\u8FD4\u56DE",
  SKIP: "\u7565\u904E",
  EDIT_CARD: "\u7DE8\u8F2F\u5361\u7247",
  RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247",
  HARD: "\u8F03\u96E3",
  GOOD: "\u8A18\u5F97",
  EASY: "\u7C21\u55AE",
  SHOW_ANSWER: "\u986F\u793A\u7B54\u6848",
  CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002",
  SAVE: "\u5132\u5B58",
  CANCEL: "\u53D6\u6D88",
  NO_INPUT: "\u6C92\u6709\u63D0\u4F9B\u8F38\u5165\u3002",
  CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A",
  CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u9593\u9694\u6642\u9593\uFF1A",
  CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}",
  // main.ts
  OPEN_NOTE_FOR_REVIEW: "\u6253\u958B\u4E00\u500B\u7B46\u8A18\u958B\u59CB\u5FA9\u7FD2",
  REVIEW_CARDS: "\u5FA9\u7FD2\u5361\u7247",
  REVIEW_DIFFICULTY_FILE_MENU: "\u5FA9\u7FD2\uFF1A${difficulty}",
  REVIEW_NOTE_DIFFICULTY_CMD: "\u6A19\u8A18\u70BA\u300C${difficulty}\u300D",
  REVIEW_CARDS_IN_NOTE: "\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247",
  CRAM_ALL_CARDS: "\u9078\u64C7\u8981\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u7684\u724C\u7D44",
  REVIEW_ALL_CARDS: "\u5FA9\u7FD2\u6240\u6709\u7B46\u8A18\u4E2D\u7684\u5361\u7247",
  CRAM_CARDS_IN_NOTE: "\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247",
  VIEW_STATS: "\u6AA2\u8996\u6578\u64DA",
  OPEN_REVIEW_QUEUE_VIEW: "Open Notes Review Queue in sidebar",
  STATUS_BAR: "\u5FA9\u7FD2: ${dueNotesCount} \u7B46\u8A18, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F",
  SYNC_TIME_TAKEN: "\u540C\u6B65\u6642\u9593 ${t}ms",
  NOTE_IN_IGNORED_FOLDER: "\u7B46\u8A18\u5132\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F91\u4E2D\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002",
  PLEASE_TAG_NOTE: "\u8ACB\u5C07\u9700\u8981\u5FA9\u7FD2\u7684\u7B46\u8A18\u4E2D\u52A0\u5165\u6B63\u78BA\u7684\u6A19\u7C64\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002",
  RESPONSE_RECEIVED: "\u56DE\u994B\u5DF2\u6536\u5230",
  NO_DECK_EXISTS: "\u6C92\u6709 ${deckName} \u724C\u7D44",
  ALL_CAUGHT_UP: "\u90FD\u5FA9\u7FD2\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01",
  // scheduling.ts
  DAYS_STR_IVL: "${interval}\u5929",
  MONTHS_STR_IVL: "${interval}\u6708",
  YEARS_STR_IVL: "${interval}\u5E74",
  DAYS_STR_IVL_MOBILE: "${interval}\u5929",
  MONTHS_STR_IVL_MOBILE: "${interval}\u6708",
  YEARS_STR_IVL_MOBILE: "${interval}\u5E74",
  // settings.ts
  SETTINGS_HEADER: "\u9593\u9694\u91CD\u8907\u5916\u639B - \u8A2D\u5B9A",
  CHECK_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078<a href="${wiki_url}">wiki</a>.',
  FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u8CC7\u6599\u593E",
  FOLDERS_TO_IGNORE_DESC: "\u8F38\u5165\u8CC7\u6599\u593E\u8DEF\u5F91\uFF08\u7528\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts",
  FLASHCARDS: "\u5361\u7247",
  FLASHCARD_EASY_LABEL: "\u7C21\u55AE\u6309\u9215\u6587\u5B57",
  FLASHCARD_GOOD_LABEL: "\u8A18\u5F97\u6309\u9215\u6587\u5B57",
  FLASHCARD_HARD_LABEL: "\u8F03\u96E3\u6309\u9215\u6587\u5B57",
  FLASHCARD_EASY_DESC: "\u81EA\u8A02\u300C\u7C21\u55AE\u300D\u6309\u9215\u7684\u6A19\u7C64",
  FLASHCARD_GOOD_DESC: "\u81EA\u8A02\u300C\u8A18\u5F97\u300D\u6309\u9215\u7684\u6A19\u7C64",
  FLASHCARD_HARD_DESC: "\u81EA\u8A02\u300C\u8F03\u96E3\u300D\u6309\u9215\u7684\u6A19\u7C64",
  FLASHCARD_TAGS: "\u5361\u7247\u6A19\u7C64",
  FLASHCARD_TAGS_DESC: "\u8F38\u5165\u6A19\u7C64\uFF08\u7528\u7A7A\u767D\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.",
  CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C07\u8CC7\u6599\u593E\u5167\u5BB9\u8F49\u63DB\u70BA\u724C\u7D44\u548C\u5B50\u724C\u7D44\uFF1F",
  CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9078\u9805\u70BA\u5361\u7247\u6A19\u7C64\u9078\u9805\u7684\u66FF\u4EE3\u9078\u9805\u3002",
  INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C07\u8A08\u5283\u91CD\u8907\u6642\u9593\u5132\u5B58\u5728\u5361\u7247\u6700\u5F8C\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F",
  INLINE_SCHEDULING_COMMENTS_DESC: "\u52FE\u9078\u5F8CHTML\u8A3B\u89E3\u4E0D\u6703\u7834\u58DE\u5217\u8868\u683C\u5F0F\u554F\u984C\u3002",
  BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C07\u53CD\u8F49\u5361\u7247\u96B1\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F",
  BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u53CD\u8F49\u5361\u7247\u7531\u540C\u4E00\u5361\u7247\u6587\u5B57\u7522\u751F\uFF0C\u4F8B\u5982\uFF1A\u586B\u7A7A\u514B\u6F0F\u5B57",
  SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u986F\u793A\u4E0A\u4E0B\u6587\uFF1F",
  SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6A19\u984C > \u526F\u6A19\u984C > \u5C0F\u6A19\u984C > ... > \u5C0F\u6A19\u984C",
  CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4",
  CARD_MODAL_SIZE_PERCENT_DESC: "\u5728\u79FB\u52D5\u7AEF\u6216\u9700\u8981\u8F03\u5927\u5716\u7247\u6642\u61C9\u8A2D\u5B9A\u70BA100%",
  RESET_DEFAULT: "\u91CD\u7F6E\u70BA\u9810\u8A2D\u503C",
  CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BEC\u5EA6\u767E\u5206\u6BD4",
  RANDOMIZE_CARD_ORDER: "\u5FA9\u7FD2\u6642\u96A8\u6A5F\u986F\u793A\u5361\u7247\uFF1F",
  REVIEW_CARD_ORDER_WITHIN_DECK: "\u5FA9\u7FD2\u6642\u724C\u7D44\u5167\u7684\u5361\u7247\u6392\u5E8F",
  REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL: "\u724C\u7D44\u5167\u9806\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u512A\u5148)",
  REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL: "\u724C\u7D44\u5167\u9806\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u512A\u5148)",
  REVIEW_CARD_ORDER_NEW_FIRST_RANDOM: "\u724C\u7D44\u5167\u4E82\u5E8F (\u5168\u90E8\u65B0\u5361\u7247\u512A\u5148)",
  REVIEW_CARD_ORDER_DUE_FIRST_RANDOM: "\u724C\u7D44\u5167\u4E82\u5E8F (\u5168\u90E8\u5230\u671F\u5361\u7247\u512A\u5148)",
  REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD: "\u724C\u7D44\u53CA\u5361\u7247\u90FD\u4E82\u5E8F",
  REVIEW_DECK_ORDER: "\u5FA9\u7FD2\u6642\u724C\u7D44\u7684\u6392\u5E8F",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL: "\u9806\u5E8F (\u5728\u524D\u4E00\u724C\u7D44\u5167\u5361\u7247\u90FD\u5FA9\u7FD2\u5B8C\u5F8C)",
  REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM: "\u4E82\u5E8F (\u5728\u524D\u4E00\u724C\u7D44\u5167\u5361\u7247\u90FD\u5FA9\u7FD2\u5B8C\u5F8C)",
  REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD: "\u724C\u7D44\u53CA\u5361\u7247\u90FD\u4E82\u5E8F",
  DISABLE_CLOZE_CARDS: "\u505C\u7528\u586B\u7A7A\u514B\u6F0F\u5B57\u5361\u7247\uFF1F",
  CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C07 ==\u9AD8\u4EAE== \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F",
  CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C07 **\u7C97\u9AD4** \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F",
  CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C07 {{\u5927\u62EC\u865F}} \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F",
  INLINE_CARDS_SEPARATOR: "\u55AE\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
  FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9078\u9805\u5F8C\u4F60\u5C07\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u5B57\u5143\u3002",
  INLINE_REVERSED_CARDS_SEPARATOR: "\u55AE\u884C\u53CD\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
  MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
  MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143",
  NOTES: "\u7B46\u8A18",
  REVIEW_PANE_ON_STARTUP: "\u555F\u52D5\u6642\u958B\u555F\u7B46\u8A18\u5FA9\u7FD2\u7A97\u683C",
  TAGS_TO_REVIEW: "\u5FA9\u7FD2\u6A19\u7C64",
  TAGS_TO_REVIEW_DESC: "\u8F38\u5165\u6A19\u7C64\uFF0C\u7528\u7A7A\u683C\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.",
  OPEN_RANDOM_NOTE: "\u5FA9\u7FD2\u96A8\u6A5F\u7B46\u8A18",
  OPEN_RANDOM_NOTE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\uFF0C\u7B46\u8A18\u5C07\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002",
  AUTO_NEXT_NOTE: "\u5FA9\u7FD2\u5F8C\u81EA\u52D5\u6253\u958B\u4E0B\u4E00\u500B\u7B46\u8A18",
  DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u4E2D\u7684\u5FA9\u7FD2\u9078\u9805 \u4F8B\u5982\uFF1A\u5FA9\u7FD2\uFF1A\u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3",
  DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u7684\u5FA9\u7FD2\u9078\u9805\uFF0C\u4F8B\u5982\uFF1A\u5FA9\u7FD2: \u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3\u3002",
  MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u908A\u9762\u677F\u986F\u793A\u7684\u6700\u5927\u5929\u6578",
  MIN_ONE_DAY: "\u5929\u6578\u6700\u5C0F\u503C\u70BA1",
  VALID_NUMBER_WARNING: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u6578\u5B57\u3002",
  UI_PREFERENCES: "\u7528\u6236\u4ECB\u9762\u9996\u9078\u9805",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u724C\u7D44\u6A39\u6700\u521D\u61C9\u986F\u793A\u70BA\u5C55\u958B",
  INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\u53EF\u647A\u758A\u540C\u4E00\u5F35\u5361\u7247\u4E2D\u7684\u5DE2\u72C0\u724C\u7D44\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C6C\u65BC\u540C\u4E00\u6A94\u6848\u4E2D\u7684\u8A31\u591A\u5957\u724C\uFF0C\u5247\u5F88\u6709\u7528\u3002",
  ALGORITHM: "\u6F14\u7B97\u6CD5",
  CHECK_ALGORITHM_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078<a href="${algo_url}">\u7B97\u6CD5\u5BE6\u73FE</a>.',
  BASE_EASE: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6",
  BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u85A6\u503C\u7D04250.",
  BASE_EASE_MIN_WARNING: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u70BA130\u3002",
  LAPSE_INTERVAL_CHANGE: "\u5C07\u5FA9\u7FD2\u6642\u6A19\u8A3B\u70BA\u300C\u8F03\u96E3\u300D\u7684\u5361\u7247\u6216\u7B46\u8A18\u5FA9\u7FD2\u9593\u9694\u7E2E\u77ED",
  LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u5FA9\u7FD2\u9593\u9694 = \u539F\u5FA9\u7FD2\u9593\u9694 * \u9593\u9694\u6539\u8B8A\u4FC2\u6578 / 100.",
  EASY_BONUS: "\u7C21\u55AE\u734E\u52F5",
  EASY_BONUS_DESC: "\u7C21\u55AE\u734E\u52F5\u8A2D\u5B9A\u300C\u8A18\u5F97\u300D\u548C\u300C\u7C21\u55AE\u300D\u5361\u7247\u6216\u7B46\u8A18\u7684\u5FA9\u7FD2\u9593\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002",
  EASY_BONUS_MIN_WARNING: "\u7C21\u55AE\u734E\u52F5\u81F3\u5C11\u70BA100\u3002",
  MAX_INTERVAL: "\u6700\u5927\u9593\u9694\uFF08\u5929\uFF09",
  MAX_INTERVAL_DESC: "\u8A2D\u5B9A\u5FA9\u7FD2\u7684\u6700\u5927\u9593\u9694\u6642\u9593\uFF08\u9810\u8A2D\u503C100\u5E74\uFF09\u3002",
  MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u9593\u9694\u81F3\u5C11\u70BA1\u5929",
  MAX_LINK_CONTRIB: "\u6700\u5927\u93C8\u63A5\u8CA2\u737B",
  MAX_LINK_CONTRIB_DESC: "\u93C8\u63A5\u7B46\u8A18\u7684\u52A0\u6B0A\u638C\u63E1\u7A0B\u5EA6\u5C0D\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8CA2\u737B\u3002",
  LOGGING: "\u8A18\u9304\u4E2D",
  DISPLAY_DEBUG_INFO: "\u5728\u958B\u767C\u8005\u63A7\u5236\u53F0\u4E2D\u986F\u793A\u9664\u932F\u8CC7\u8A0A\uFF1F",
  // sidebar.ts
  NOTES_REVIEW_QUEUE: "\u7B46\u8A18\u5FA9\u7FD2\u5E8F\u5217",
  CLOSE: "\u81E8\u8FD1",
  NEW: "\u65B0",
  YESTERDAY: "\u6628\u5929",
  TODAY: "\u4ECA\u5929",
  TOMORROW: "\u660E\u5929",
  // stats-modal.tsx
  STATS_TITLE: "\u7D71\u8A08",
  MONTH: "\u6708",
  QUARTER: "\u5B63",
  YEAR: "\u5E74",
  LIFETIME: "\u5168\u90E8",
  FORECAST: "\u9810\u6E2C",
  FORECAST_DESC: "\u5C07\u8981\u5230\u671F\u7684\u5361\u7247\u6578\u91CF",
  SCHEDULED: "\u5DF2\u6392\u7A0B",
  DAYS: "\u5929",
  NUMBER_OF_CARDS: "\u5361\u7247\u6578\u91CF",
  REVIEWS_PER_DAY: "\u5E73\u5747: \u5FA9\u7FD2${avg} /\u5929",
  INTERVALS: "\u9593\u9694",
  INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u5FA9\u7FD2\u7684\u6642\u9593\u9593\u9694",
  COUNT: "\u8A08\u6578",
  INTERVALS_SUMMARY: "\u5E73\u5747\u9593\u9694\u6642\u9593: ${avg}, \u6700\u9577\u9593\u9694\u6642\u9593: ${longest}",
  EASES: "\u638C\u63E1\u7A0B\u5EA6",
  EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}",
  CARD_TYPES: "\u5361\u7247\u578B\u5225",
  CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C07\u986F\u793A\u96B1\u85CF\u7684\u5361\u7247",
  CARD_TYPE_NEW: "\u65B0",
  CARD_TYPE_YOUNG: "\u8F03\u65B0",
  CARD_TYPE_MATURE: "\u719F\u6089",
  CARD_TYPES_SUMMARY: "\u7E3D\u5361\u7247\u6578: ${totalCardsCount}"
};

// src/lang/helpers.ts
var localeMap = {
  af: af_default,
  ar: ar_default,
  bn: bn_default,
  cs: cz_default,
  da: da_default,
  de: de_default,
  en: en_default,
  "en-gb": en_gb_default,
  es: es_default,
  fr: fr_default,
  hi: hi_default,
  id: id_default,
  it: it_default,
  ja: ja_default,
  ko: ko_default,
  mr: mr_default,
  nl: nl_default,
  nn: no_default,
  pl: pl_default,
  pt: pt_default,
  "pt-br": pt_br_default,
  ro: ro_default,
  ru: ru_default,
  ta: ta_default,
  te: te_default,
  th: th_default,
  tr: tr_default,
  uk: uk_default,
  ur: ur_default,
  vi: vi_default,
  "zh-cn": zh_cn_default,
  "zh-tw": zh_tw_default
};
var locale = localeMap[import_obsidian.moment.locale()];
function interpolate(str, params) {
  const names2 = Object.keys(params);
  const vals = Object.values(params);
  return new Function(...names2, `return \`${str}\`;`)(...vals);
}
function t(str, params) {
  if (!locale) {
    console.error(`SRS error: Locale ${import_obsidian.moment.locale()} not found.`);
  }
  const result = locale && locale[str] || en_default[str];
  if (params) {
    return interpolate(result, params);
  }
  return result;
}

// src/settings.ts
var DEFAULT_SETTINGS = {
  // flashcards
  flashcardEasyText: t("EASY"),
  flashcardGoodText: t("GOOD"),
  flashcardHardText: t("HARD"),
  flashcardTags: ["#flashcards"],
  convertFoldersToDecks: false,
  cardCommentOnSameLine: false,
  burySiblingCards: false,
  showContextInCards: true,
  flashcardHeightPercentage: import_obsidian2.Platform.isMobile ? 100 : 80,
  flashcardWidthPercentage: import_obsidian2.Platform.isMobile ? 100 : 40,
  randomizeCardOrder: null,
  flashcardCardOrder: "DueFirstRandom",
  flashcardDeckOrder: "PrevDeckComplete_Sequential",
  convertHighlightsToClozes: true,
  convertBoldTextToClozes: false,
  convertCurlyBracketsToClozes: false,
  singleLineCardSeparator: "::",
  singleLineReversedCardSeparator: ":::",
  multilineCardSeparator: "?",
  multilineReversedCardSeparator: "??",
  editLaterTag: "#edit-later",
  // notes
  enableNoteReviewPaneOnStartup: true,
  tagsToReview: ["#review"],
  noteFoldersToIgnore: [],
  openRandomNote: false,
  autoNextNote: false,
  disableFileMenuReviewOptions: false,
  maxNDaysNotesReviewQueue: 365,
  // UI settings
  initiallyExpandAllSubdecksInTree: false,
  // algorithm
  baseEase: 250,
  lapsesIntervalChange: 0.5,
  easyBonus: 1.3,
  maximumInterval: 36525,
  maxLinkFactor: 1,
  // logging
  showDebugMessages: false
};
function upgradeSettings(settings) {
  if (settings.randomizeCardOrder != null && settings.flashcardCardOrder == null && settings.flashcardDeckOrder == null) {
    console.log(`loadPluginData: Upgrading settings: ${settings.randomizeCardOrder}`);
    settings.flashcardCardOrder = settings.randomizeCardOrder ? "DueFirstRandom" : "DueFirstSequential";
    settings.flashcardDeckOrder = "PrevDeckComplete_Sequential";
    settings.randomizeCardOrder = null;
  }
}
var SettingsUtil = class _SettingsUtil {
  static isFlashcardTag(settings, tag) {
    return _SettingsUtil.isTagInList(settings.flashcardTags, tag);
  }
  static isTagInList(tagList, tag) {
    for (const tagFromList of tagList) {
      if (tag === tagFromList || tag.startsWith(tagFromList + "/")) {
        return true;
      }
    }
    return false;
  }
};
var applyDebounceTimer = 0;
function applySettingsUpdate(callback2) {
  clearTimeout(applyDebounceTimer);
  applyDebounceTimer = window.setTimeout(callback2, 512);
}
var SRSettingTab = class extends import_obsidian2.PluginSettingTab {
  constructor(app, plugin) {
    super(app, plugin);
    this.plugin = plugin;
  }
  display() {
    const { containerEl } = this;
    containerEl.empty();
    const header = containerEl.createEl("h1", { text: `${t("SETTINGS_HEADER")}` });
    header.addClass("sr-centered");
    containerEl.createDiv().innerHTML = t("CHECK_WIKI", {
      wiki_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/"
    });
    new import_obsidian2.Setting(containerEl).setName(t("FOLDERS_TO_IGNORE")).setDesc(t("FOLDERS_TO_IGNORE_DESC")).addTextArea(
      (text) => text.setValue(this.plugin.data.settings.noteFoldersToIgnore.join("\n")).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.noteFoldersToIgnore = value.split(/\n+/).map((v) => v.trim()).filter((v) => v);
          await this.plugin.savePluginData();
        });
      })
    );
    containerEl.createEl("h3", { text: `${t("FLASHCARDS")}` });
    new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_TAGS")).setDesc(t("FLASHCARD_TAGS_DESC")).addTextArea(
      (text) => text.setValue(this.plugin.data.settings.flashcardTags.join(" ")).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardTags = value.split(/\s+/);
          await this.plugin.savePluginData();
        });
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("CONVERT_FOLDERS_TO_DECKS")).setDesc(t("CONVERT_FOLDERS_TO_DECKS_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.convertFoldersToDecks).onChange(async (value) => {
        this.plugin.data.settings.convertFoldersToDecks = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("INLINE_SCHEDULING_COMMENTS")).setDesc(t("INLINE_SCHEDULING_COMMENTS_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.cardCommentOnSameLine).onChange(async (value) => {
        this.plugin.data.settings.cardCommentOnSameLine = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("BURY_SIBLINGS_TILL_NEXT_DAY")).setDesc(t("BURY_SIBLINGS_TILL_NEXT_DAY_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.burySiblingCards).onChange(async (value) => {
        this.plugin.data.settings.burySiblingCards = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("SHOW_CARD_CONTEXT")).setDesc(t("SHOW_CARD_CONTEXT_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showContextInCards).onChange(async (value) => {
        this.plugin.data.settings.showContextInCards = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_HEIGHT_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider(
      (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardHeightPercentage).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.flashcardHeightPercentage = value;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardHeightPercentage = DEFAULT_SETTINGS.flashcardHeightPercentage;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_WIDTH_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider(
      (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardWidthPercentage).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.flashcardWidthPercentage = value;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardWidthPercentage = DEFAULT_SETTINGS.flashcardWidthPercentage;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(this.containerEl).setName(t("REVIEW_CARD_ORDER_WITHIN_DECK")).addDropdown(
      (dropdown) => dropdown.addOptions({
        NewFirstSequential: t("REVIEW_CARD_ORDER_NEW_FIRST_SEQUENTIAL"),
        DueFirstSequential: t("REVIEW_CARD_ORDER_DUE_FIRST_SEQUENTIAL"),
        NewFirstRandom: t("REVIEW_CARD_ORDER_NEW_FIRST_RANDOM"),
        DueFirstRandom: t("REVIEW_CARD_ORDER_DUE_FIRST_RANDOM"),
        EveryCardRandomDeckAndCard: t("REVIEW_CARD_ORDER_RANDOM_DECK_AND_CARD")
      }).setValue(this.plugin.data.settings.flashcardCardOrder).onChange(async (value) => {
        this.plugin.data.settings.flashcardCardOrder = value;
        await this.plugin.savePluginData();
        this.display();
      })
    );
    const deckOrderEnabled = this.plugin.data.settings.flashcardCardOrder != "EveryCardRandomDeckAndCard";
    new import_obsidian2.Setting(this.containerEl).setName(t("REVIEW_DECK_ORDER")).addDropdown(
      (dropdown) => dropdown.addOptions(
        deckOrderEnabled ? {
          PrevDeckComplete_Sequential: t(
            "REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_SEQUENTIAL"
          ),
          PrevDeckComplete_Random: t(
            "REVIEW_DECK_ORDER_PREV_DECK_COMPLETE_RANDOM"
          )
        } : {
          EveryCardRandomDeckAndCard: t(
            "REVIEW_DECK_ORDER_RANDOM_DECK_AND_CARD"
          )
        }
      ).setValue(
        deckOrderEnabled ? this.plugin.data.settings.flashcardDeckOrder : "EveryCardRandomDeckAndCard"
      ).setDisabled(!deckOrderEnabled).onChange(async (value) => {
        this.plugin.data.settings.flashcardDeckOrder = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("CONVERT_HIGHLIGHTS_TO_CLOZES")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.convertHighlightsToClozes).onChange(async (value) => {
        this.plugin.data.settings.convertHighlightsToClozes = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("CONVERT_BOLD_TEXT_TO_CLOZES")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.convertBoldTextToClozes).onChange(async (value) => {
        this.plugin.data.settings.convertBoldTextToClozes = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("CONVERT_CURLY_BRACKETS_TO_CLOZES")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.convertCurlyBracketsToClozes).onChange(async (value) => {
        this.plugin.data.settings.convertCurlyBracketsToClozes = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("INLINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
      (text) => text.setValue(this.plugin.data.settings.singleLineCardSeparator).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.singleLineCardSeparator = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.singleLineCardSeparator = DEFAULT_SETTINGS.singleLineCardSeparator;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("INLINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
      (text) => text.setValue(this.plugin.data.settings.singleLineReversedCardSeparator).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.singleLineReversedCardSeparator = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.singleLineReversedCardSeparator = DEFAULT_SETTINGS.singleLineReversedCardSeparator;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
      (text) => text.setValue(this.plugin.data.settings.multilineCardSeparator).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.multilineCardSeparator = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.multilineCardSeparator = DEFAULT_SETTINGS.multilineCardSeparator;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText(
      (text) => text.setValue(this.plugin.data.settings.multilineReversedCardSeparator).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.multilineReversedCardSeparator = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.multilineReversedCardSeparator = DEFAULT_SETTINGS.multilineReversedCardSeparator;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_EASY_LABEL")).setDesc(t("FLASHCARD_EASY_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.flashcardEasyText).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardEasyText = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardEasyText = DEFAULT_SETTINGS.flashcardEasyText;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_GOOD_LABEL")).setDesc(t("FLASHCARD_GOOD_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.flashcardGoodText).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardGoodText = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardGoodText = DEFAULT_SETTINGS.flashcardGoodText;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_HARD_LABEL")).setDesc(t("FLASHCARD_HARD_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.flashcardHardText).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.flashcardHardText = value;
          await this.plugin.savePluginData();
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.flashcardHardText = DEFAULT_SETTINGS.flashcardHardText;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    containerEl.createEl("h3", { text: `${t("NOTES")}` });
    new import_obsidian2.Setting(containerEl).setName(t("REVIEW_PANE_ON_STARTUP")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.enableNoteReviewPaneOnStartup).onChange(async (value) => {
        this.plugin.data.settings.enableNoteReviewPaneOnStartup = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("TAGS_TO_REVIEW")).setDesc(t("TAGS_TO_REVIEW_DESC")).addTextArea(
      (text) => text.setValue(this.plugin.data.settings.tagsToReview.join(" ")).onChange((value) => {
        applySettingsUpdate(async () => {
          this.plugin.data.settings.tagsToReview = value.split(/\s+/);
          await this.plugin.savePluginData();
        });
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("OPEN_RANDOM_NOTE")).setDesc(t("OPEN_RANDOM_NOTE_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.openRandomNote).onChange(async (value) => {
        this.plugin.data.settings.openRandomNote = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("AUTO_NEXT_NOTE")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.autoNextNote).onChange(async (value) => {
        this.plugin.data.settings.autoNextNote = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("DISABLE_FILE_MENU_REVIEW_OPTIONS")).setDesc(t("DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.disableFileMenuReviewOptions).onChange(async (value) => {
        this.plugin.data.settings.disableFileMenuReviewOptions = value;
        await this.plugin.savePluginData();
      })
    );
    new import_obsidian2.Setting(containerEl).setName(t("MAX_N_DAYS_REVIEW_QUEUE")).addText(
      (text) => text.setValue(this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value);
          if (!isNaN(numValue)) {
            if (numValue < 1) {
              new import_obsidian2.Notice(t("MIN_ONE_DAY"));
              text.setValue(
                this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()
              );
              return;
            }
            this.plugin.data.settings.maxNDaysNotesReviewQueue = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.maxNDaysNotesReviewQueue = DEFAULT_SETTINGS.maxNDaysNotesReviewQueue;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    containerEl.createEl("h3", { text: `${t("UI_PREFERENCES")}` });
    new import_obsidian2.Setting(containerEl).setName(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE")).setDesc(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.initiallyExpandAllSubdecksInTree).onChange(async (value) => {
        this.plugin.data.settings.initiallyExpandAllSubdecksInTree = value;
        await this.plugin.savePluginData();
      })
    );
    containerEl.createEl("h3", { text: `${t("ALGORITHM")}` });
    containerEl.createDiv().innerHTML = t("CHECK_ALGORITHM_WIKI", {
      algo_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/algorithms/"
    });
    new import_obsidian2.Setting(containerEl).setName(t("BASE_EASE")).setDesc(t("BASE_EASE_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.baseEase.toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value);
          if (!isNaN(numValue)) {
            if (numValue < 130) {
              new import_obsidian2.Notice(t("BASE_EASE_MIN_WARNING"));
              text.setValue(this.plugin.data.settings.baseEase.toString());
              return;
            }
            this.plugin.data.settings.baseEase = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.baseEase = DEFAULT_SETTINGS.baseEase;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("LAPSE_INTERVAL_CHANGE")).setDesc(t("LAPSE_INTERVAL_CHANGE_DESC")).addSlider(
      (slider) => slider.setLimits(1, 99, 1).setValue(this.plugin.data.settings.lapsesIntervalChange * 100).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.lapsesIntervalChange = value / 100;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.lapsesIntervalChange = DEFAULT_SETTINGS.lapsesIntervalChange;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("EASY_BONUS")).setDesc(t("EASY_BONUS_DESC")).addText(
      (text) => text.setValue((this.plugin.data.settings.easyBonus * 100).toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value) / 100;
          if (!isNaN(numValue)) {
            if (numValue < 1) {
              new import_obsidian2.Notice(t("EASY_BONUS_MIN_WARNING"));
              text.setValue(
                (this.plugin.data.settings.easyBonus * 100).toString()
              );
              return;
            }
            this.plugin.data.settings.easyBonus = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.easyBonus = DEFAULT_SETTINGS.easyBonus;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("MAX_INTERVAL")).setDesc(t("MAX_INTERVAL_DESC")).addText(
      (text) => text.setValue(this.plugin.data.settings.maximumInterval.toString()).onChange((value) => {
        applySettingsUpdate(async () => {
          const numValue = Number.parseInt(value);
          if (!isNaN(numValue)) {
            if (numValue < 1) {
              new import_obsidian2.Notice(t("MAX_INTERVAL_MIN_WARNING"));
              text.setValue(
                this.plugin.data.settings.maximumInterval.toString()
              );
              return;
            }
            this.plugin.data.settings.maximumInterval = numValue;
            await this.plugin.savePluginData();
          } else {
            new import_obsidian2.Notice(t("VALID_NUMBER_WARNING"));
          }
        });
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.maximumInterval = DEFAULT_SETTINGS.maximumInterval;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    new import_obsidian2.Setting(containerEl).setName(t("MAX_LINK_CONTRIB")).setDesc(t("MAX_LINK_CONTRIB_DESC")).addSlider(
      (slider) => slider.setLimits(0, 100, 1).setValue(this.plugin.data.settings.maxLinkFactor * 100).setDynamicTooltip().onChange(async (value) => {
        this.plugin.data.settings.maxLinkFactor = value / 100;
        await this.plugin.savePluginData();
      })
    ).addExtraButton((button) => {
      button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => {
        this.plugin.data.settings.maxLinkFactor = DEFAULT_SETTINGS.maxLinkFactor;
        await this.plugin.savePluginData();
        this.display();
      });
    });
    containerEl.createEl("h3", { text: `${t("LOGGING")}` });
    new import_obsidian2.Setting(containerEl).setName(t("DISPLAY_DEBUG_INFO")).addToggle(
      (toggle) => toggle.setValue(this.plugin.data.settings.showDebugMessages).onChange(async (value) => {
        this.plugin.data.settings.showDebugMessages = value;
        await this.plugin.savePluginData();
      })
    );
  }
};

// src/gui/FlashcardModal.tsx
var import_obsidian6 = require("obsidian");

// src/gui/EditModal.tsx
var import_obsidian3 = require("obsidian");
var FlashcardEditModal = class _FlashcardEditModal extends import_obsidian3.Modal {
  constructor(app, existingText) {
    super(app);
    this.didSaveChanges = false;
    // -> Functions & helpers
    this.saveClickCallback = (_) => this.save();
    this.cancelClickCallback = (_) => this.cancel();
    this.saveOnEnterCallback = (evt) => {
      if ((evt.ctrlKey || evt.metaKey) && evt.key === "Enter") {
        evt.preventDefault();
        this.save();
      }
    };
    this.modalText = existingText;
    this.changedText = existingText;
    this.waitForClose = new Promise((resolve2, reject) => {
      this.resolvePromise = resolve2;
      this.rejectPromise = reject;
    });
    this.modalEl.addClasses(["sr-modal", "sr-edit-modal"]);
    this.init();
    this.open();
  }
  static Prompt(app, placeholder) {
    const newPromptModal = new _FlashcardEditModal(app, placeholder);
    return newPromptModal.waitForClose;
  }
  /**
   * Initializes all components of the EditModal
   */
  init() {
    var _a;
    this.contentEl.empty();
    this.contentEl.addClass("sr-edit-view");
    this.title = this.contentEl.createDiv();
    this.title.setText(t("EDIT_CARD"));
    this.title.addClass("sr-title");
    this.textArea = this.contentEl.createEl("textarea");
    this.textArea.addClass("sr-input");
    this.textArea.setText((_a = this.modalText) != null ? _a : "");
    this.textArea.addEventListener("keydown", this.saveOnEnterCallback);
    this._createResponse(this.contentEl);
  }
  /**
   * Opens the EditModal
   */
  onOpen() {
    super.onOpen();
    this.textArea.focus();
  }
  /**
   * Closes the EditModal
   */
  onClose() {
    super.onClose();
    this.resolveInput();
    this.removeInputListener();
  }
  save() {
    this.didSaveChanges = true;
    this.changedText = this.textArea.value;
    this.close();
  }
  cancel() {
    this.close();
  }
  resolveInput() {
    if (!this.didSaveChanges)
      this.rejectPromise(t("NO_INPUT"));
    else
      this.resolvePromise(this.changedText);
  }
  removeInputListener() {
    this.textArea.removeEventListener("keydown", this.saveOnEnterCallback);
  }
  // -> Response section
  _createResponseButton(container, text, colorClass, callback2) {
    const button = container.createEl("button");
    button.addClasses(["sr-response-button", colorClass]);
    button.setText(text);
    button.addEventListener("click", callback2);
  }
  _createResponse(mainContentContainer) {
    const response = mainContentContainer.createDiv();
    response.addClass("sr-response");
    this._createResponseButton(response, t("CANCEL"), "sr-bg-red", this.cancelClickCallback);
    this._createResponseButton(response, "", "sr-spacer", () => {
    });
    this._createResponseButton(response, t("SAVE"), "sr-bg-green", this.saveClickCallback);
  }
};

// src/gui/DeckListView.tsx
var import_vhtml = __toESM(require_vhtml());

// src/constants.ts
var SCHEDULING_INFO_REGEX = /^---\r?\n((?:.*\r?\n)*)sr-due: (.+)\r?\nsr-interval: (\d+)\r?\nsr-ease: (\d+)\r?\n((?:.*\r?\n)?)---/;
var YAML_FRONT_MATTER_REGEX = /^---\r?\n((?:.*\r?\n)*?)---/;
var NON_LETTER_SYMBOLS_REGEX = /[!-/:-@[-`{-~}\s]/g;
var MULTI_SCHEDULING_EXTRACTOR = /!([\d-]+),(\d+),(\d+)/gm;
var LEGACY_SCHEDULING_EXTRACTOR = /<!--SR:([\d-]+),(\d+),(\d+)-->/gm;
var OBSIDIAN_TAG_AT_STARTOFLINE_REGEX = /^#[^\s#]+/gi;
var OBSIDIAN_BLOCK_ID_ENDOFLINE_REGEX = / (\^[a-zA-Z0-9-]+)$/;
var PREFERRED_DATE_FORMAT = "YYYY-MM-DD";
var ALLOWED_DATE_FORMATS = [PREFERRED_DATE_FORMAT, "DD-MM-YYYY", "ddd MMM DD YYYY"];
var IMAGE_FORMATS = [
  "jpg",
  "jpeg",
  "gif",
  "png",
  "svg",
  "webp",
  "apng",
  "avif",
  "jfif",
  "pjpeg",
  "pjp",
  "bmp"
];
var AUDIO_FORMATS = ["mp3", "webm", "m4a", "wav", "ogg"];
var VIDEO_FORMATS = ["mp4", "mkv", "avi", "mov"];
var COLLAPSE_ICON = '<svg viewBox="0 0 100 100" width="8" height="8" class="right-triangle"><path fill="currentColor" stroke="currentColor" d="M94.9,20.8c-1.4-2.5-4.1-4.1-7.1-4.1H12.2c-3,0-5.7,1.6-7.1,4.1c-1.3,2.4-1.2,5.2,0.2,7.6L43.1,88c1.5,2.3,4,3.7,6.9,3.7 s5.4-1.4,6.9-3.7l37.8-59.6C96.1,26,96.2,23.2,94.9,20.8L94.9,20.8z"></path></svg>';
var TICKS_PER_DAY = 24 * 3600 * 1e3;
var SR_HTML_COMMENT_BEGIN = "<!--SR:";
var SR_HTML_COMMENT_END = "-->";

// src/TopicPath.ts
var TopicPath = class _TopicPath {
  constructor(path) {
    if (path == null)
      throw "null path";
    if (path.some((str) => str.includes("/")))
      throw "path entries must not contain '/'";
    this.path = path;
  }
  get hasPath() {
    return this.path.length > 0;
  }
  get isEmptyPath() {
    return !this.hasPath;
  }
  static get emptyPath() {
    return new _TopicPath([]);
  }
  shift() {
    if (this.isEmptyPath)
      throw "can't shift an empty path";
    return this.path.shift();
  }
  clone() {
    return new _TopicPath([...this.path]);
  }
  formatAsTag() {
    if (this.isEmptyPath)
      throw "Empty path";
    const result = "#" + this.path.join("/");
    return result;
  }
  isSameOrAncestorOf(topicPath) {
    if (this.isEmptyPath)
      return topicPath.isEmptyPath;
    if (this.path.length > topicPath.path.length)
      return false;
    for (let i = 0; i < this.path.length; i++) {
      if (this.path[i] != topicPath.path[i])
        return false;
    }
    return true;
  }
  static getTopicPathFromCardText(cardText) {
    var _a;
    const path = (_a = cardText.trimStart().match(OBSIDIAN_TAG_AT_STARTOFLINE_REGEX)) == null ? void 0 : _a.slice(-1)[0];
    return (path == null ? void 0 : path.length) > 0 ? _TopicPath.getTopicPathFromTag(path) : null;
  }
  static isValidTag(tag) {
    if (tag == null || tag.length == 0)
      return false;
    if (tag[0] != "#")
      return false;
    if (tag.length == 1)
      return false;
    return true;
  }
  static getTopicPathFromTag(tag) {
    if (tag == null || tag.length == 0)
      throw "Null/empty tag";
    if (tag[0] != "#")
      throw "Tag must start with #";
    if (tag.length == 1)
      throw "Invalid tag";
    const path = tag.replace("#", "").split("/").filter((str) => str);
    return new _TopicPath(path);
  }
  static getFolderPathFromFilename(noteFile, settings) {
    let result = _TopicPath.emptyPath;
    if (settings.convertFoldersToDecks) {
      const deckPath = noteFile.path.split("/");
      deckPath.pop();
      if (deckPath.length != 0) {
        result = new _TopicPath(deckPath);
      }
    }
    return result;
  }
};
var TopicPathList = class _TopicPathList {
  constructor(list, lineNum = null) {
    if (list == null)
      throw "TopicPathList null";
    this.list = list;
    this.lineNum = lineNum;
  }
  get length() {
    return this.list.length;
  }
  isAnyElementSameOrAncestorOf(topicPath) {
    return this.list.some((item) => item.isSameOrAncestorOf(topicPath));
  }
  formatPsv() {
    return this.format("|");
  }
  format(sep) {
    return this.list.map((topicPath) => topicPath.formatAsTag()).join(sep);
  }
  static empty() {
    return new _TopicPathList([]);
  }
  static fromPsv(str, lineNum) {
    const result = _TopicPathList.convertTagListToTopicPathList(str.split("|"));
    result.lineNum = lineNum;
    return result;
  }
  //
  // tagList is a list of tags such as:
  //      ["#flashcards/computing", "#boring-stuff", "#news-worthy"]
  // validTopicPathList is a list of valid tags, such as those from settings.flashcardTags,E.g.
  //      ["#flashcards"]
  //
  // This returns a filtered version of tagList, containing only topic paths that are considered valid.
  // Validity is defined as "isAnyElementSameOrAncestorOf", and "#flashcards" is considered the ancestor of
  // "#flashcards/computing".
  //
  // Therefore this would return:
  //      "#flashcards/computing" (but not "#boring-stuff" or "#news-worthy")
  //
  static filterValidTopicPathsFromTagList(list, validTopicPathList, lineNum = null) {
    const result = [];
    for (const tag of list.list) {
      if (validTopicPathList.isAnyElementSameOrAncestorOf(tag))
        result.push(tag);
    }
    return new _TopicPathList(result, lineNum);
  }
  static convertTagListToTopicPathList(tagList) {
    const result = [];
    for (const tag of tagList) {
      if (TopicPath.isValidTag(tag))
        result.push(TopicPath.getTopicPathFromTag(tag));
    }
    return new _TopicPathList(result);
  }
};
var TopicPathWithWs = class {
  constructor(topicPath, preWhitespace, postWhitespace) {
    if (!topicPath || topicPath.isEmptyPath)
      throw "topicPath null";
    this.topicPath = topicPath;
    this.preWhitespace = preWhitespace;
    this.postWhitespace = postWhitespace;
  }
  formatWithWs() {
    return `${this.preWhitespace}${this.topicPath.formatAsTag()}${this.postWhitespace}`;
  }
};

// src/gui/DeckListView.tsx
var DeckListView = class {
  constructor(plugin, settings, reviewSequencer, contentEl, startReviewOfDeck) {
    this.plugin = plugin;
    this.settings = settings;
    this.reviewSequencer = reviewSequencer;
    this.modalContentEl = contentEl;
    this.startReviewOfDeck = startReviewOfDeck;
    this.init();
  }
  /**
   * Initializes all static elements in the DeckListView
   */
  init() {
    this.view = this.modalContentEl.createDiv();
    this.view.addClasses(["sr-deck-list", "sr-is-hidden"]);
    this.header = this.view.createDiv();
    this.header.addClass("sr-header");
    this.title = this.header.createDiv();
    this.title.addClass("sr-title");
    this.title.setText(t("DECKS"));
    this.stats = this.header.createDiv();
    this.stats.addClass("sr-header-stats-container");
    this._createHeaderStats();
    this.content = this.view.createDiv();
    this.content.addClass("sr-content");
  }
  /**
   * Shows the DeckListView & rerenders dynamic elements
   */
  show() {
    this.mode = 0 /* DecksList */;
    this._createHeaderStats();
    this.content.empty();
    for (const deck of this.reviewSequencer.originalDeckTree.subdecks) {
      this._createTree(deck, this.content);
    }
    if (this.view.hasClass("sr-is-hidden")) {
      this.view.removeClass("sr-is-hidden");
    }
  }
  /**
   * Hides the DeckListView
   */
  hide() {
    if (!this.view.hasClass("sr-is-hidden")) {
      this.view.addClass("sr-is-hidden");
    }
  }
  /**
   * Closes the DeckListView
   */
  close() {
    this.hide();
  }
  // -> Header
  _createHeaderStats() {
    const statistics = this.reviewSequencer.getDeckStats(TopicPath.emptyPath);
    this.stats.empty();
    this._createHeaderStatsContainer(t("DUE_CARDS"), statistics.dueCount, "sr-bg-green");
    this._createHeaderStatsContainer(t("NEW_CARDS"), statistics.newCount, "sr-bg-blue");
    this._createHeaderStatsContainer(t("TOTAL_CARDS"), statistics.totalCount, "sr-bg-red");
  }
  _createHeaderStatsContainer(statsLable, statsNumber, statsClass) {
    const statsContainer = this.stats.createDiv();
    statsContainer.ariaLabel = statsLable;
    statsContainer.addClasses([
      "tag-pane-tag-count",
      "tree-item-flair",
      "sr-header-stats-count",
      statsClass
    ]);
    const lable = statsContainer.createDiv();
    lable.setText(statsLable + ":");
    const number = statsContainer.createDiv();
    number.setText(statsNumber.toString());
  }
  // -> Tree content
  _createTree(deck, container) {
    const deckTree = container.createDiv("tree-item sr-tree-item-container");
    const deckTreeSelf = deckTree.createDiv(
      "tree-item-self tag-pane-tag is-clickable sr-tree-item-row"
    );
    const shouldBeInitiallyExpanded = this.settings.initiallyExpandAllSubdecksInTree;
    let collapsed = !shouldBeInitiallyExpanded;
    let collapseIconEl = null;
    if (deck.subdecks.length > 0) {
      collapseIconEl = deckTreeSelf.createDiv("tree-item-icon collapse-icon");
      collapseIconEl.innerHTML = COLLAPSE_ICON;
      collapseIconEl.childNodes[0].style.transform = collapsed ? "rotate(-90deg)" : "";
    }
    const deckTreeInner = deckTreeSelf.createDiv("tree-item-inner");
    const deckTreeInnerText = deckTreeInner.createDiv("tag-pane-tag-text");
    deckTreeInnerText.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", { class: "tag-pane-tag-self" }, deck.deckName);
    const deckTreeOuter = deckTreeSelf.createDiv();
    deckTreeOuter.addClasses(["tree-item-flair-outer", "sr-tree-stats-container"]);
    const deckStats = this.reviewSequencer.getDeckStats(deck.getTopicPath());
    this._createStats(deckStats, deckTreeOuter);
    const deckTreeChildren = deckTree.createDiv("tree-item-children");
    deckTreeChildren.style.display = collapsed ? "none" : "block";
    if (deck.subdecks.length > 0) {
      collapseIconEl.addEventListener("click", (e) => {
        if (collapsed) {
          collapseIconEl.childNodes[0].style.transform = "";
          deckTreeChildren.style.display = "block";
        } else {
          collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
          deckTreeChildren.style.display = "none";
        }
        e.stopPropagation();
        collapsed = !collapsed;
      });
    }
    deckTreeSelf.addEventListener("click", () => {
      this.startReviewOfDeck(deck);
    });
    for (const subdeck of deck.subdecks) {
      this._createTree(subdeck, deckTreeChildren);
    }
  }
  _createStats(statistics, statsWrapper) {
    statsWrapper.empty();
    this._createStatsContainer(
      t("DUE_CARDS"),
      statistics.dueCount,
      "sr-bg-green",
      statsWrapper
    );
    this._createStatsContainer(t("NEW_CARDS"), statistics.newCount, "sr-bg-blue", statsWrapper);
    this._createStatsContainer(
      t("TOTAL_CARDS"),
      statistics.totalCount,
      "sr-bg-red",
      statsWrapper
    );
  }
  _createStatsContainer(statsLable, statsNumber, statsClass, statsWrapper) {
    const statsContainer = statsWrapper.createDiv();
    statsContainer.ariaLabel = statsLable;
    statsContainer.addClasses([
      "tag-pane-tag-count",
      "tree-item-flair",
      "sr-tree-stats-count",
      statsClass
    ]);
    statsContainer.setText(statsNumber.toString());
  }
};

// src/gui/FlashcardReviewView.tsx
var import_obsidian5 = require("obsidian");

// src/scheduling.ts
function schedule(response, interval, ease, delayBeforeReview, settingsObj, dueDates) {
  delayBeforeReview = Math.max(0, Math.floor(delayBeforeReview / (24 * 3600 * 1e3)));
  if (response === 0 /* Easy */) {
    ease += 20;
    interval = (interval + delayBeforeReview) * ease / 100;
    interval *= settingsObj.easyBonus;
  } else if (response === 1 /* Good */) {
    interval = (interval + delayBeforeReview / 2) * ease / 100;
  } else if (response === 2 /* Hard */) {
    ease = Math.max(130, ease - 20);
    interval = Math.max(
      1,
      (interval + delayBeforeReview / 4) * settingsObj.lapsesIntervalChange
    );
  }
  if (dueDates !== void 0) {
    interval = Math.round(interval);
    if (!Object.prototype.hasOwnProperty.call(dueDates, interval)) {
      dueDates[interval] = 0;
    } else {
      if (interval > 4) {
        let fuzz = 0;
        if (interval < 7)
          fuzz = 1;
        else if (interval < 30)
          fuzz = Math.max(2, Math.floor(interval * 0.15));
        else
          fuzz = Math.max(4, Math.floor(interval * 0.05));
        const originalInterval = interval;
        outer:
          for (let i = 1; i <= fuzz; i++) {
            for (const ivl of [originalInterval - i, originalInterval + i]) {
              if (!Object.prototype.hasOwnProperty.call(dueDates, ivl)) {
                dueDates[ivl] = 0;
                interval = ivl;
                break outer;
              }
              if (dueDates[ivl] < dueDates[interval])
                interval = ivl;
            }
          }
      }
    }
    dueDates[interval]++;
  }
  interval = Math.min(interval, settingsObj.maximumInterval);
  return { interval: Math.round(interval * 10) / 10, ease };
}
function textInterval(interval, isMobile) {
  if (interval === void 0) {
    return t("NEW");
  }
  const m = Math.round(interval / 3.04375) / 10, y = Math.round(interval / 36.525) / 10;
  if (isMobile) {
    if (m < 1)
      return t("DAYS_STR_IVL_MOBILE", { interval });
    else if (y < 1)
      return t("MONTHS_STR_IVL_MOBILE", { interval: m });
    else
      return t("YEARS_STR_IVL_MOBILE", { interval: y });
  } else {
    if (m < 1)
      return t("DAYS_STR_IVL", { interval });
    else if (y < 1)
      return t("MONTHS_STR_IVL", { interval: m });
    else
      return t("YEARS_STR_IVL", { interval: y });
  }
}

// src/FlashcardReviewSequencer.ts
var DeckStats = class {
  constructor(dueCount, newCount, totalCount) {
    this.dueCount = dueCount;
    this.newCount = newCount;
    this.totalCount = totalCount;
  }
};
var FlashcardReviewSequencer = class {
  constructor(reviewMode, cardSequencer, settings, cardScheduleCalculator, questionPostponementList) {
    this.reviewMode = reviewMode;
    this.cardSequencer = cardSequencer;
    this.settings = settings;
    this.cardScheduleCalculator = cardScheduleCalculator;
    this.questionPostponementList = questionPostponementList;
  }
  get hasCurrentCard() {
    return this.cardSequencer.currentCard != null;
  }
  get currentCard() {
    return this.cardSequencer.currentCard;
  }
  get currentQuestion() {
    var _a;
    return (_a = this.currentCard) == null ? void 0 : _a.question;
  }
  get currentDeck() {
    return this.cardSequencer.currentDeck;
  }
  get currentNote() {
    return this.currentQuestion.note;
  }
  // originalDeckTree isn't modified by the review process
  // Only remainingDeckTree
  setDeckTree(originalDeckTree, remainingDeckTree) {
    this.cardSequencer.setBaseDeck(remainingDeckTree);
    this._originalDeckTree = originalDeckTree;
    this.remainingDeckTree = remainingDeckTree;
    this.setCurrentDeck(TopicPath.emptyPath);
  }
  setCurrentDeck(topicPath) {
    this.cardSequencer.setIteratorTopicPath(topicPath);
    this.cardSequencer.nextCard();
  }
  get originalDeckTree() {
    return this._originalDeckTree;
  }
  getDeckStats(topicPath) {
    const totalCount = this._originalDeckTree.getDeck(topicPath).getDistinctCardCount(2 /* All */, true);
    const remainingDeck = this.remainingDeckTree.getDeck(topicPath);
    const newCount = remainingDeck.getDistinctCardCount(0 /* NewCard */, true);
    const dueCount = remainingDeck.getDistinctCardCount(1 /* DueCard */, true);
    return new DeckStats(dueCount, newCount, totalCount);
  }
  skipCurrentCard() {
    this.cardSequencer.deleteCurrentQuestionFromAllDecks();
  }
  deleteCurrentCard() {
    this.cardSequencer.deleteCurrentCardFromAllDecks();
  }
  async processReview(response) {
    switch (this.reviewMode) {
      case 1 /* Review */:
        await this.processReview_ReviewMode(response);
        break;
      case 0 /* Cram */:
        await this.processReview_CramMode(response);
        break;
    }
  }
  async processReview_ReviewMode(response) {
    if (response != 3 /* Reset */ || this.currentCard.hasSchedule) {
      this.currentCard.scheduleInfo = this.determineCardSchedule(response, this.currentCard);
      await this.currentQuestion.writeQuestion(this.settings);
    }
    if (response == 3 /* Reset */) {
      this.cardSequencer.moveCurrentCardToEndOfList();
      this.cardSequencer.nextCard();
    } else {
      if (this.settings.burySiblingCards) {
        await this.burySiblingCards();
        this.cardSequencer.deleteCurrentQuestionFromAllDecks();
      } else {
        this.deleteCurrentCard();
      }
    }
  }
  async burySiblingCards() {
    const remaining = this.currentDeck.getQuestionCardCount(this.currentQuestion);
    if (remaining > 1) {
      this.questionPostponementList.add(this.currentQuestion);
      await this.questionPostponementList.write();
    }
  }
  async processReview_CramMode(response) {
    if (response == 0 /* Easy */)
      this.deleteCurrentCard();
    else {
      this.cardSequencer.moveCurrentCardToEndOfList();
      this.cardSequencer.nextCard();
    }
  }
  determineCardSchedule(response, card) {
    let result;
    if (response == 3 /* Reset */) {
      result = this.cardScheduleCalculator.getResetCardSchedule();
    } else {
      if (card.hasSchedule) {
        result = this.cardScheduleCalculator.calcUpdatedSchedule(
          response,
          card.scheduleInfo
        );
      } else {
        const currentNote = card.question.note;
        result = this.cardScheduleCalculator.getNewCardSchedule(
          response,
          currentNote.filePath
        );
      }
    }
    return result;
  }
  async updateCurrentQuestionText(text) {
    const q = this.currentQuestion.questionText;
    q.actualQuestion = text;
    await this.currentQuestion.writeQuestion(this.settings);
  }
};

// src/Deck.ts
var Deck2 = class _Deck {
  constructor(deckName, parent) {
    this.deckName = deckName;
    this.newFlashcards = [];
    this.dueFlashcards = [];
    this.subdecks = [];
    this.parent = parent;
  }
  getCardCount(cardListType, includeSubdeckCounts) {
    let result = 0;
    if (cardListType == 0 /* NewCard */ || cardListType == 2 /* All */)
      result += this.newFlashcards.length;
    if (cardListType == 1 /* DueCard */ || cardListType == 2 /* All */)
      result += this.dueFlashcards.length;
    if (includeSubdeckCounts) {
      for (const deck of this.subdecks) {
        result += deck.getCardCount(cardListType, includeSubdeckCounts);
      }
    }
    return result;
  }
  getDistinctCardCount(cardListType, includeSubdeckCounts) {
    const cardList = this.getFlattenedCardArray(cardListType, includeSubdeckCounts);
    const distinctCardSet = new Set(cardList);
    return distinctCardSet.size;
  }
  getFlattenedCardArray(cardListType, includeSubdeckCounts) {
    let result = [];
    switch (cardListType) {
      case 0 /* NewCard */:
        result = this.newFlashcards;
        break;
      case 1 /* DueCard */:
        result = this.dueFlashcards;
        break;
      case 2 /* All */:
        result = this.newFlashcards.concat(this.dueFlashcards);
    }
    if (includeSubdeckCounts) {
      for (const subdeck of this.subdecks) {
        result = result.concat(
          subdeck.getFlattenedCardArray(cardListType, includeSubdeckCounts)
        );
      }
    }
    return result;
  }
  //
  // Returns a count of the number of this question's cards are present in this deck.
  // (The returned value would be <= question.cards.length)
  //
  getQuestionCardCount(question) {
    let result = 0;
    result += this.getQuestionCardCountForCardListType(question, this.newFlashcards);
    result += this.getQuestionCardCountForCardListType(question, this.dueFlashcards);
    return result;
  }
  getQuestionCardCountForCardListType(question, cards) {
    let result = 0;
    for (let i = 0; i < cards.length; i++) {
      if (Object.is(question, cards[i].question))
        result++;
    }
    return result;
  }
  static get emptyDeck() {
    return new _Deck("Root", null);
  }
  get isRootDeck() {
    return this.parent == null;
  }
  getDeckByTopicTag(tag) {
    return this.getDeck(TopicPath.getTopicPathFromTag(tag));
  }
  getDeck(topicPath) {
    return this._getOrCreateDeck(topicPath, false);
  }
  getOrCreateDeck(topicPath) {
    return this._getOrCreateDeck(topicPath, true);
  }
  _getOrCreateDeck(topicPath, createAllowed) {
    if (!topicPath.hasPath) {
      return this;
    }
    const t2 = topicPath.clone();
    const deckName = t2.shift();
    for (const subdeck of this.subdecks) {
      if (deckName === subdeck.deckName) {
        return subdeck._getOrCreateDeck(t2, createAllowed);
      }
    }
    let result = null;
    if (createAllowed) {
      const subdeck = new _Deck(
        deckName,
        this
        /* parent */
      );
      this.subdecks.push(subdeck);
      result = subdeck._getOrCreateDeck(t2, createAllowed);
    }
    return result;
  }
  getTopicPath() {
    const list = [];
    let deck = this;
    while (!deck.isRootDeck) {
      list.push(deck.deckName);
      deck = deck.parent;
    }
    return new TopicPath(list.reverse());
  }
  getRootDeck() {
    let deck = this;
    while (!deck.isRootDeck) {
      deck = deck.parent;
    }
    return deck;
  }
  getCard(index, cardListType) {
    const cardList = this.getCardListForCardType(cardListType);
    return cardList[index];
  }
  getCardListForCardType(cardListType) {
    return cardListType == 1 /* DueCard */ ? this.dueFlashcards : this.newFlashcards;
  }
  appendCard(topicPathList, cardObj) {
    if (topicPathList.list.length == 0) {
      this.appendCardToRootDeck(cardObj);
    } else {
      for (const topicPath of topicPathList.list) {
        this.appendCard_SingleTopic(topicPath, cardObj);
      }
    }
  }
  appendCardToRootDeck(cardObj) {
    this.appendCard_SingleTopic(TopicPath.emptyPath, cardObj);
  }
  appendCard_SingleTopic(topicPath, cardObj) {
    const deck = this.getOrCreateDeck(topicPath);
    const cardList = deck.getCardListForCardType(cardObj.cardListType);
    cardList.push(cardObj);
  }
  //
  // The question lists all the topics in which this card is included.
  // The topics are relative to the base deck, and this method must be called on that deck
  //
  deleteQuestionFromAllDecks(question, exceptionIfMissing) {
    for (const card of question.cards) {
      this.deleteCardFromAllDecks(card, exceptionIfMissing);
    }
  }
  deleteQuestion(question, exceptionIfMissing) {
    for (const card of question.cards) {
      this.deleteCardFromThisDeck(card, exceptionIfMissing);
    }
  }
  //
  // The card's question lists all the topics in which this card is included.
  // The topics are relative to the base deck, and this method must be called on that deck
  //
  deleteCardFromAllDecks(card, exceptionIfMissing) {
    for (const topicPath of card.question.topicPathList.list) {
      const deck = this.getDeck(topicPath);
      deck.deleteCardFromThisDeck(card, exceptionIfMissing);
    }
  }
  deleteCardFromThisDeck(card, exceptionIfMissing) {
    const newIdx = this.newFlashcards.indexOf(card);
    if (newIdx != -1)
      this.newFlashcards.splice(newIdx, 1);
    const dueIdx = this.dueFlashcards.indexOf(card);
    if (dueIdx != -1)
      this.dueFlashcards.splice(dueIdx, 1);
    if (newIdx == -1 && dueIdx == -1 && exceptionIfMissing) {
      throw `deleteCardFromThisDeck: Card: ${card.front} not found in deck: ${this.deckName}`;
    }
  }
  deleteCardAtIndex(index, cardListType) {
    const cardList = this.getCardListForCardType(cardListType);
    cardList.splice(index, 1);
  }
  toDeckArray() {
    const result = [];
    result.push(this);
    for (const subdeck of this.subdecks) {
      result.push(...subdeck.toDeckArray());
    }
    return result;
  }
  sortSubdecksList() {
    this.subdecks.sort((a, b) => {
      if (a.deckName < b.deckName) {
        return -1;
      } else if (a.deckName > b.deckName) {
        return 1;
      }
      return 0;
    });
    for (const deck of this.subdecks) {
      deck.sortSubdecksList();
    }
  }
  debugLogToConsole(desc = null, indent = 0) {
    let str = desc != null ? `${desc}: ` : "";
    console.log(str += this.toString(indent));
  }
  toString(indent = 0) {
    let result = "";
    let indentStr = " ".repeat(indent * 4);
    result += `${indentStr}${this.deckName}\r
`;
    indentStr += "  ";
    for (let i = 0; i < this.newFlashcards.length; i++) {
      const card = this.newFlashcards[i];
      result += `${indentStr}New: ${i}: ${card.front}::${card.back}\r
`;
    }
    for (let i = 0; i < this.dueFlashcards.length; i++) {
      const card = this.dueFlashcards[i];
      const s = card.isDue ? "Due" : "Not due";
      result += `${indentStr}${s}: ${i}: ${card.front}::${card.back}\r
`;
    }
    for (const subdeck of this.subdecks) {
      result += subdeck.toString(indent + 1);
    }
    return result;
  }
  clone() {
    return this.copyWithCardFilter(() => true);
  }
  copyWithCardFilter(predicate, parent = null) {
    const result = new _Deck(this.deckName, parent);
    result.newFlashcards = [...this.newFlashcards.filter((card) => predicate(card))];
    result.dueFlashcards = [...this.dueFlashcards.filter((card) => predicate(card))];
    for (const s of this.subdecks) {
      const newParent = result;
      const newDeck = s.copyWithCardFilter(predicate, newParent);
      result.subdecks.push(newDeck);
    }
    return result;
  }
  static otherListType(cardListType) {
    let result;
    if (cardListType == 0 /* NewCard */)
      result = 1 /* DueCard */;
    else if (cardListType == 1 /* DueCard */)
      result = 0 /* NewCard */;
    else
      throw "Invalid cardListType";
    return result;
  }
};
var DeckTreeFilter = class {
  static filterForReviewableCards(reviewableDeckTree) {
    return reviewableDeckTree.copyWithCardFilter((card) => !card.question.hasEditLaterTag);
  }
  static filterForRemainingCards(questionPostponementList, deckTree, reviewMode) {
    return deckTree.copyWithCardFilter(
      (card) => (reviewMode == 0 /* Cram */ || card.isNew || card.isDue) && !questionPostponementList.includes(card.question)
    );
  }
};

// src/util/utils.ts
var import_moment = __toESM(require_moment());
function getTypedObjectEntries(obj) {
  return Object.entries(obj);
}
var getKeysPreserveType = Object.keys;
function literalStringReplace(text, searchStr, replacementStr) {
  let result = text;
  const startIdx = text.indexOf(searchStr);
  if (startIdx >= 0) {
    const startStr = text.substring(0, startIdx);
    const endIdx = startIdx + searchStr.length;
    const endStr = text.substring(endIdx);
    result = startStr + replacementStr + endStr;
  }
  return result;
}
function cyrb53(str, seed = 0) {
  let h12 = 3735928559 ^ seed, h22 = 1103547991 ^ seed;
  for (let i = 0, ch; i < str.length; i++) {
    ch = str.charCodeAt(i);
    h12 = Math.imul(h12 ^ ch, 2654435761);
    h22 = Math.imul(h22 ^ ch, 1597334677);
  }
  h12 = Math.imul(h12 ^ h12 >>> 16, 2246822507) ^ Math.imul(h22 ^ h22 >>> 13, 3266489909);
  h22 = Math.imul(h22 ^ h22 >>> 16, 2246822507) ^ Math.imul(h12 ^ h12 >>> 13, 3266489909);
  return (4294967296 * (2097151 & h22) + (h12 >>> 0)).toString(16);
}
function formatDate_YYYY_MM_DD(ticks) {
  return ticks.format(PREFERRED_DATE_FORMAT);
}
function splitTextIntoLineArray(text) {
  return text.replaceAll("\r\n", "\n").split("\n");
}
function stringTrimStart(str) {
  const trimmed = str.trimStart();
  const wsCount = str.length - trimmed.length;
  const ws = str.substring(0, wsCount);
  return [ws, trimmed];
}
function extractFrontmatter(str) {
  let frontmatter = "";
  let content = "";
  let frontmatterEndLineNum = null;
  if (YAML_FRONT_MATTER_REGEX.test) {
    const lines = splitTextIntoLineArray(str);
    for (let i = 2; i < lines.length; i++) {
      if (lines[i] == "---") {
        frontmatterEndLineNum = i;
        break;
      }
    }
    if (frontmatterEndLineNum) {
      const frontmatterStartLineNum = 0;
      const frontmatterLineCount = frontmatterEndLineNum - frontmatterStartLineNum + 1;
      const frontmatterLines = lines.splice(
        frontmatterStartLineNum,
        frontmatterLineCount
      );
      frontmatter = frontmatterLines.join("\n");
      content = lines.join("\n");
    }
  }
  if (frontmatter.length == 0)
    content = str;
  return [frontmatter, content];
}
function findLineIndexOfSearchStringIgnoringWs(lines, searchString) {
  let result = -1;
  for (let i = 0; i < lines.length; i++) {
    if (lines[i].trim() == searchString) {
      result = i;
      break;
    }
  }
  return result;
}
function parseObsidianFrontmatterTag(tagStr) {
  const result = [];
  const tagStrList = tagStr.split(",");
  for (const tag of tagStrList) {
    result.push(tag.startsWith("#") ? tag : "#" + tag);
  }
  return result;
}

// src/util/DateProvider.ts
var import_moment2 = __toESM(require_moment());
var LiveDateProvider = class {
  get today() {
    return (0, import_moment2.default)().startOf("day");
  }
};
var DateUtil = class {
  static dateStrToMoment(str) {
    return (0, import_moment2.default)(str, ALLOWED_DATE_FORMATS);
  }
};
var globalDateProvider = new LiveDateProvider();

// src/CardSchedule.ts
var _CardScheduleInfo = class _CardScheduleInfo {
  constructor(dueDate, interval, ease, delayBeforeReviewTicks) {
    this.dueDate = dueDate;
    this.interval = interval;
    this.ease = ease;
    this.delayBeforeReviewTicks = delayBeforeReviewTicks;
  }
  get delayBeforeReviewDaysInt() {
    return Math.ceil(this.delayBeforeReviewTicks / TICKS_PER_DAY);
  }
  isDue() {
    return this.dueDate.isSameOrBefore(globalDateProvider.today);
  }
  isDummyScheduleForNewCard() {
    return this.formatDueDate() == _CardScheduleInfo.dummyDueDateForNewCard;
  }
  static getDummyScheduleForNewCard(settings) {
    return _CardScheduleInfo.fromDueDateStr(
      _CardScheduleInfo.dummyDueDateForNewCard,
      _CardScheduleInfo.initialInterval,
      settings.baseEase,
      0
    );
  }
  static fromDueDateStr(dueDateStr, interval, ease, delayBeforeReviewTicks) {
    const dueDateTicks = DateUtil.dateStrToMoment(dueDateStr);
    return new _CardScheduleInfo(dueDateTicks, interval, ease, delayBeforeReviewTicks);
  }
  static fromDueDateMoment(dueDateTicks, interval, ease, delayBeforeReviewTicks) {
    return new _CardScheduleInfo(dueDateTicks, interval, ease, delayBeforeReviewTicks);
  }
  static get initialInterval() {
    return 1;
  }
  formatDueDate() {
    return formatDate_YYYY_MM_DD(this.dueDate);
  }
  formatSchedule() {
    return `!${this.formatDueDate()},${this.interval},${this.ease}`;
  }
};
// A question can have multiple cards. The schedule info for all sibling cards are formatted together
// in a single <!--SR: --> comment, such as:
// <!--SR:!2023-09-02,4,270!2023-09-02,5,270!2023-09-02,6,270!2023-09-02,7,270-->
//
// However, not all sibling cards may have been reviewed. Therefore we need a method of indicating that a particular card
// has not been reviewed, and should be considered "new"
// This is done by using this magic value for the date
_CardScheduleInfo.dummyDueDateForNewCard = "2000-01-01";
var CardScheduleInfo = _CardScheduleInfo;
var CardScheduleCalculator = class {
  // Record<# of days in future, due count>
  constructor(settings, noteEaseList) {
    this.dueDatesFlashcards = {};
    this.settings = settings;
    this.noteEaseList = noteEaseList;
  }
  getResetCardSchedule() {
    const interval = CardScheduleInfo.initialInterval;
    const ease = this.settings.baseEase;
    const dueDate = globalDateProvider.today.add(interval, "d");
    const delayBeforeReview = 0;
    return CardScheduleInfo.fromDueDateMoment(dueDate, interval, ease, delayBeforeReview);
  }
  getNewCardSchedule(response, notePath) {
    let initial_ease = this.settings.baseEase;
    if (this.noteEaseList.hasEaseForPath(notePath)) {
      initial_ease = Math.round(this.noteEaseList.getEaseByPath(notePath));
    }
    const delayBeforeReview = 0;
    const schedObj = schedule(
      response,
      CardScheduleInfo.initialInterval,
      initial_ease,
      delayBeforeReview,
      this.settings,
      this.dueDatesFlashcards
    );
    const interval = schedObj.interval;
    const ease = schedObj.ease;
    const dueDate = globalDateProvider.today.add(interval, "d");
    return CardScheduleInfo.fromDueDateMoment(dueDate, interval, ease, delayBeforeReview);
  }
  calcUpdatedSchedule(response, cardSchedule) {
    const schedObj = schedule(
      response,
      cardSchedule.interval,
      cardSchedule.ease,
      cardSchedule.delayBeforeReviewTicks,
      this.settings,
      this.dueDatesFlashcards
    );
    const interval = schedObj.interval;
    const ease = schedObj.ease;
    const dueDate = globalDateProvider.today.add(interval, "d");
    const delayBeforeReview = 0;
    return CardScheduleInfo.fromDueDateMoment(dueDate, interval, ease, delayBeforeReview);
  }
};
var NoteCardScheduleParser = class {
  static createCardScheduleInfoList(questionText) {
    let scheduling = [...questionText.matchAll(MULTI_SCHEDULING_EXTRACTOR)];
    if (scheduling.length === 0)
      scheduling = [...questionText.matchAll(LEGACY_SCHEDULING_EXTRACTOR)];
    const result = [];
    for (let i = 0; i < scheduling.length; i++) {
      const match = scheduling[i];
      const dueDateStr = match[1];
      const interval = parseInt(match[2]);
      const ease = parseInt(match[3]);
      const dueDate = DateUtil.dateStrToMoment(dueDateStr);
      const delayBeforeReviewTicks = dueDate.valueOf() - globalDateProvider.today.valueOf();
      const info = new CardScheduleInfo(
        dueDate,
        interval,
        ease,
        delayBeforeReviewTicks
      );
      result.push(info);
    }
    return result;
  }
  static removeCardScheduleInfo(questionText) {
    return questionText.replace(/<!--SR:.+-->/gm, "");
  }
};

// src/util/MultiLineTextFinder.ts
var MultiLineTextFinder = class _MultiLineTextFinder {
  static findAndReplace(sourceText, searchText, replacementText) {
    let result = null;
    if (sourceText.includes(searchText)) {
      result = literalStringReplace(sourceText, searchText, replacementText);
    } else {
      const sourceTextArray = splitTextIntoLineArray(sourceText);
      const searchTextArray = splitTextIntoLineArray(searchText);
      const lineNo = _MultiLineTextFinder.find(
        sourceTextArray,
        searchTextArray
      );
      if (lineNo !== null) {
        const replacementTextArray = splitTextIntoLineArray(replacementText);
        const linesToRemove = searchTextArray.length;
        sourceTextArray.splice(lineNo, linesToRemove, ...replacementTextArray);
        result = sourceTextArray.join("\n");
      }
    }
    return result;
  }
  static find(sourceText, searchText) {
    let result = null;
    let searchIdx = 0;
    const maxSearchIdx = searchText.length - 1;
    for (let sourceIdx = 0; sourceIdx < sourceText.length; sourceIdx++) {
      const sourceLine = sourceText[sourceIdx].trim();
      const searchLine = searchText[searchIdx].trim();
      if (searchLine == sourceLine) {
        if (searchIdx == maxSearchIdx) {
          result = sourceIdx - searchIdx;
          break;
        }
        searchIdx++;
      } else {
        searchIdx = 0;
      }
    }
    return result;
  }
};

// src/Question.ts
var QuestionText = class _QuestionText {
  constructor(original, topicPathWithWs, actualQuestion, blockId) {
    this.original = original;
    this.topicPathWithWs = topicPathWithWs;
    this.actualQuestion = actualQuestion;
    this.obsidianBlockId = blockId;
    this.textHash = cyrb53(this.formatTopicAndQuestion());
  }
  endsWithCodeBlock() {
    return this.actualQuestion.endsWith("```");
  }
  static create(original, settings) {
    const [topicPathWithWs, actualQuestion, blockId] = this.splitText(original, settings);
    return new _QuestionText(original, topicPathWithWs, actualQuestion, blockId);
  }
  static splitText(original, settings) {
    const originalWithoutSR = NoteCardScheduleParser.removeCardScheduleInfo(original);
    let actualQuestion = originalWithoutSR.trimEnd();
    let topicPathWithWs = null;
    let blockId = null;
    const topicPath = TopicPath.getTopicPathFromCardText(originalWithoutSR);
    if (topicPath == null ? void 0 : topicPath.hasPath) {
      const [preTopicPathWs, cardText2] = stringTrimStart(originalWithoutSR);
      const cardText3 = cardText2.replaceAll(OBSIDIAN_TAG_AT_STARTOFLINE_REGEX, "");
      let postTopicPathWs = null;
      [postTopicPathWs, actualQuestion] = stringTrimStart(cardText3);
      if (!settings.convertFoldersToDecks) {
        topicPathWithWs = new TopicPathWithWs(topicPath, preTopicPathWs, postTopicPathWs);
      }
    }
    [actualQuestion, blockId] = this.extractObsidianBlockId(actualQuestion);
    return [topicPathWithWs, actualQuestion, blockId];
  }
  static extractObsidianBlockId(text) {
    let question = text;
    let blockId = null;
    const match = text.match(OBSIDIAN_BLOCK_ID_ENDOFLINE_REGEX);
    if (match) {
      blockId = match[0].trim();
      const newLength = question.length - blockId.length;
      question = question.substring(0, newLength).trimEnd();
    }
    return [question, blockId];
  }
  formatTopicAndQuestion() {
    let result = "";
    if (this.topicPathWithWs) {
      result += this.topicPathWithWs.formatWithWs();
    }
    result += this.actualQuestion;
    return result;
  }
};
var Question = class _Question {
  get questionType() {
    return this.parsedQuestionInfo.cardType;
  }
  get lineNo() {
    return this.parsedQuestionInfo.firstLineNum;
  }
  constructor(init) {
    Object.assign(this, init);
  }
  getHtmlCommentSeparator(settings) {
    const sep = this.isCardCommentsOnSameLine(settings) ? " " : "\n";
    return sep;
  }
  isCardCommentsOnSameLine(settings) {
    let result = settings.cardCommentOnSameLine;
    if (this.questionText.endsWithCodeBlock()) {
      result = false;
    }
    return result;
  }
  setCardList(cards) {
    this.cards = cards;
    this.cards.forEach((card) => card.question = this);
  }
  formatScheduleAsHtmlComment(settings) {
    let result = SR_HTML_COMMENT_BEGIN;
    for (let i = 0; i < this.cards.length; i++) {
      const card = this.cards[i];
      const schedule2 = card.hasSchedule ? card.scheduleInfo : CardScheduleInfo.getDummyScheduleForNewCard(settings);
      result += schedule2.formatSchedule();
    }
    result += SR_HTML_COMMENT_END;
    return result;
  }
  formatForNote(settings) {
    let result = this.questionText.formatTopicAndQuestion();
    const blockId = this.questionText.obsidianBlockId;
    const hasSchedule = this.cards.some((card) => card.hasSchedule);
    if (hasSchedule) {
      result = result.trimEnd();
      const scheduleHtml = this.formatScheduleAsHtmlComment(settings);
      if (blockId) {
        if (this.isCardCommentsOnSameLine(settings))
          result += ` ${scheduleHtml} ${blockId}`;
        else
          result += ` ${blockId}
${scheduleHtml}`;
      } else {
        result += this.getHtmlCommentSeparator(settings) + scheduleHtml;
      }
    } else {
      if (blockId)
        result += ` ${blockId}`;
    }
    return result;
  }
  updateQuestionText(noteText, settings) {
    const originalText = this.questionText.original;
    const replacementText = this.formatForNote(settings);
    let newText = MultiLineTextFinder.findAndReplace(noteText, originalText, replacementText);
    if (newText) {
      this.questionText = QuestionText.create(replacementText, settings);
    } else {
      console.error(
        `updateQuestionText: Text not found: ${originalText.substring(
          0,
          100
        )} in note: ${noteText.substring(0, 100)}`
      );
      newText = noteText;
    }
    return newText;
  }
  async writeQuestion(settings) {
    const fileText = await this.note.file.read();
    const newText = this.updateQuestionText(fileText, settings);
    await this.note.file.write(newText);
    this.hasChanged = false;
  }
  formatTopicPathList() {
    return this.topicPathList.format("|");
  }
  static Create(settings, parsedQuestionInfo, noteTopicPathList, context) {
    const hasEditLaterTag = parsedQuestionInfo.text.includes(settings.editLaterTag);
    const questionText = QuestionText.create(parsedQuestionInfo.text, settings);
    let topicPathList = noteTopicPathList;
    if (questionText.topicPathWithWs) {
      topicPathList = new TopicPathList([questionText.topicPathWithWs.topicPath]);
    }
    const result = new _Question({
      parsedQuestionInfo,
      topicPathList,
      questionText,
      hasEditLaterTag,
      questionContext: context,
      cards: null,
      hasChanged: false
    });
    return result;
  }
};

// src/util/RenderMarkdownWrapper.ts
var import_obsidian4 = require("obsidian");
var RenderMarkdownWrapper = class {
  constructor(app, plugin, notePath) {
    this.app = app;
    this.notePath = notePath;
    this.plugin = plugin;
  }
  // slightly modified version of the renderMarkdown function in
  // https://github.com/mgmeyers/obsidian-kanban/blob/main/src/KanbanView.tsx
  async renderMarkdownWrapper(markdownString, containerEl, recursiveDepth = 0) {
    if (recursiveDepth > 4)
      return;
    import_obsidian4.MarkdownRenderer.renderMarkdown(markdownString, containerEl, this.notePath, this.plugin);
    containerEl.findAll(".internal-embed").forEach((el) => {
      const link2 = this.parseLink(el.getAttribute("src"));
      if (!link2.target) {
        el.innerText = link2.text;
      } else if (link2.target instanceof import_obsidian4.TFile) {
        if (link2.target.extension !== "md") {
          this.embedMediaFile(el, link2.target);
        } else {
          el.innerText = "";
          this.renderTransclude(el, link2, recursiveDepth);
        }
      }
    });
  }
  parseLink(src) {
    const linkComponentsRegex = /^(?<file>[^#^]+)?(?:#(?!\^)(?<heading>.+)|#\^(?<blockId>.+)|#)?$/;
    const matched = typeof src === "string" && src.match(linkComponentsRegex);
    const file = matched.groups.file || this.notePath;
    const target = this.plugin.app.metadataCache.getFirstLinkpathDest(file, this.notePath);
    return {
      text: matched[0],
      file: matched.groups.file,
      heading: matched.groups.heading,
      blockId: matched.groups.blockId,
      target
    };
  }
  embedMediaFile(el, target) {
    el.innerText = "";
    if (IMAGE_FORMATS.includes(target.extension)) {
      el.createEl(
        "img",
        {
          attr: {
            src: this.plugin.app.vault.getResourcePath(target)
          }
        },
        (img) => {
          if (el.hasAttribute("width"))
            img.setAttribute("width", el.getAttribute("width"));
          else
            img.setAttribute("width", "100%");
          if (el.hasAttribute("alt"))
            img.setAttribute("alt", el.getAttribute("alt"));
          el.addEventListener(
            "click",
            (ev) => ev.target.style.minWidth = ev.target.style.minWidth === "100%" ? null : "100%"
          );
        }
      );
      el.addClasses(["image-embed", "is-loaded"]);
    } else if (AUDIO_FORMATS.includes(target.extension) || VIDEO_FORMATS.includes(target.extension)) {
      el.createEl(
        AUDIO_FORMATS.includes(target.extension) ? "audio" : "video",
        {
          attr: {
            controls: "",
            src: this.plugin.app.vault.getResourcePath(target)
          }
        },
        (audio) => {
          if (el.hasAttribute("alt"))
            audio.setAttribute("alt", el.getAttribute("alt"));
        }
      );
      el.addClasses(["media-embed", "is-loaded"]);
    } else {
      el.innerText = target.path;
    }
  }
  async renderTransclude(el, link2, recursiveDepth) {
    var _a, _b, _c, _d;
    const cache = this.app.metadataCache.getCache(link2.target.path);
    const text = await this.app.vault.cachedRead(link2.target);
    let blockText;
    if (link2.heading) {
      const clean = (s) => s.replace(NON_LETTER_SYMBOLS_REGEX, "");
      const headingIndex = (_a = cache.headings) == null ? void 0 : _a.findIndex(
        (h4) => clean(h4.heading) === clean(link2.heading)
      );
      const heading = cache.headings[headingIndex];
      const startAt = heading.position.start.offset;
      const endAt = ((_d = (_c = (_b = cache.headings.slice(headingIndex + 1).find((h4) => h4.level <= heading.level)) == null ? void 0 : _b.position) == null ? void 0 : _c.start) == null ? void 0 : _d.offset) || text.length;
      blockText = text.substring(startAt, endAt);
    } else if (link2.blockId) {
      const block = cache.blocks[link2.blockId];
      const startAt = block.position.start.offset;
      const endAt = block.position.end.offset;
      blockText = text.substring(startAt, endAt);
    } else {
      blockText = text;
    }
    this.renderMarkdownWrapper(blockText, el, recursiveDepth + 1);
  }
};

// src/gui/FlashcardReviewView.tsx
var FlashcardReviewView = class {
  constructor(app, plugin, settings, reviewSequencer, reviewMode, contentEl, modalEl, backClickHandler, editClickHandler) {
    // -> Functions & helpers
    this._keydownHandler = (e) => {
      if (document.activeElement.nodeName === "TEXTAREA" || this.mode === 3 /* Closed */) {
        return;
      }
      const consumeKeyEvent = () => {
        e.preventDefault();
        e.stopPropagation();
      };
      switch (e.code) {
        case "KeyS":
          this._skipCurrentCard();
          consumeKeyEvent();
          break;
        case "Space":
          if (this.mode === 1 /* Front */) {
            this._showAnswer();
            consumeKeyEvent();
          } else if (this.mode === 2 /* Back */) {
            this._processReview(1 /* Good */);
            consumeKeyEvent();
          }
          break;
        case "Enter":
        case "NumpadEnter":
          if (this.mode !== 1 /* Front */) {
            break;
          }
          this._showAnswer();
          consumeKeyEvent();
          break;
        case "Numpad1":
        case "Digit1":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(2 /* Hard */);
          consumeKeyEvent();
          break;
        case "Numpad2":
        case "Digit2":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(1 /* Good */);
          consumeKeyEvent();
          break;
        case "Numpad3":
        case "Digit3":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(0 /* Easy */);
          consumeKeyEvent();
          break;
        case "Numpad0":
        case "Digit0":
          if (this.mode !== 2 /* Back */) {
            break;
          }
          this._processReview(3 /* Reset */);
          consumeKeyEvent();
          break;
        default:
          break;
      }
    };
    this.app = app;
    this.plugin = plugin;
    this.settings = settings;
    this.reviewSequencer = reviewSequencer;
    this.reviewMode = reviewMode;
    this.backClickHandler = backClickHandler;
    this.editClickHandler = editClickHandler;
    this.modalContentEl = contentEl;
    this.modalEl = modalEl;
    this.init();
  }
  /**
   * Initializes all static elements in the FlashcardView
   */
  init() {
    this.view = this.modalContentEl.createDiv();
    this.view.addClasses(["sr-flashcard", "sr-is-hidden"]);
    this.header = this.view.createDiv();
    this.header.addClass("sr-header");
    this._createBackButton();
    this.title = this.header.createDiv();
    this.title.addClass("sr-title");
    this.controls = this.header.createDiv();
    this.controls.addClass("sr-controls");
    this._createCardControls();
    if (this.settings.showContextInCards) {
      this.context = this.view.createDiv();
      this.context.addClass("sr-context");
    }
    this.content = this.view.createDiv();
    this.content.addClass("sr-content");
    this.response = this.view.createDiv();
    this.response.addClass("sr-response");
    this._createResponseButtons();
  }
  /**
   * Shows the FlashcardView & rerenders all dynamic elements
   */
  async show() {
    this.mode = 1 /* Front */;
    const deck = this.reviewSequencer.currentDeck;
    this._setTitle(deck);
    this.resetButton.disabled = true;
    if (this.settings.showContextInCards) {
      this.context.setText(
        this._formatQuestionContextText(this._currentQuestion.questionContext)
      );
    }
    this.content.empty();
    const wrapper = new RenderMarkdownWrapper(
      this.app,
      this.plugin,
      this._currentNote.filePath
    );
    await wrapper.renderMarkdownWrapper(this._currentCard.front, this.content);
    this._resetResponseButtons();
    if (!this.view.hasClass("sr-is-hidden")) {
      return;
    }
    this.view.removeClass("sr-is-hidden");
    this.backButton.removeClass("sr-is-hidden");
    document.addEventListener("keydown", this._keydownHandler);
  }
  /**
   * Hides the FlashcardView
   */
  hide() {
    if (this.view.hasClass("sr-is-hidden")) {
      return;
    }
    this.view.addClass("sr-is-hidden");
    this.backButton.addClass("sr-is-hidden");
    document.removeEventListener("keydown", this._keydownHandler);
  }
  /**
   * Closes the FlashcardView
   */
  close() {
    document.removeEventListener("keydown", this._keydownHandler);
    this.hide();
  }
  _displayCurrentCardInfoNotice() {
    var _a;
    const schedule2 = this._currentCard.scheduleInfo;
    const currentEaseStr = t("CURRENT_EASE_HELP_TEXT") + ((_a = schedule2 == null ? void 0 : schedule2.ease) != null ? _a : t("NEW"));
    const currentIntervalStr = t("CURRENT_INTERVAL_HELP_TEXT") + textInterval(schedule2 == null ? void 0 : schedule2.interval, false);
    const generatedFromStr = t("CARD_GENERATED_FROM", {
      notePath: this._currentQuestion.note.filePath
    });
    new import_obsidian5.Notice(currentEaseStr + "\n" + currentIntervalStr + "\n" + generatedFromStr);
  }
  get _currentCard() {
    return this.reviewSequencer.currentCard;
  }
  get _currentQuestion() {
    return this.reviewSequencer.currentQuestion;
  }
  get _currentNote() {
    return this.reviewSequencer.currentNote;
  }
  _showAnswer() {
    this.mode = 2 /* Back */;
    this.resetButton.disabled = false;
    if (this._currentQuestion.questionType !== 4 /* Cloze */) {
      const hr = document.createElement("hr");
      hr.addClass("sr-card-divide");
      this.content.appendChild(hr);
    } else {
      this.content.empty();
    }
    const wrapper = new RenderMarkdownWrapper(
      this.app,
      this.plugin,
      this._currentNote.filePath
    );
    wrapper.renderMarkdownWrapper(this._currentCard.back, this.content);
    this.answerButton.addClass("sr-is-hidden");
    this.hardButton.removeClass("sr-is-hidden");
    this.easyButton.removeClass("sr-is-hidden");
    if (this.reviewMode === 0 /* Cram */) {
      this.response.addClass("is-cram");
      this.hardButton.setText(`${this.settings.flashcardHardText}`);
      this.easyButton.setText(`${this.settings.flashcardEasyText}`);
    } else {
      this.goodButton.removeClass("sr-is-hidden");
      this._setupEaseButton(
        this.hardButton,
        this.settings.flashcardHardText,
        2 /* Hard */
      );
      this._setupEaseButton(
        this.goodButton,
        this.settings.flashcardGoodText,
        1 /* Good */
      );
      this._setupEaseButton(
        this.easyButton,
        this.settings.flashcardEasyText,
        0 /* Easy */
      );
    }
  }
  async _processReview(response) {
    await this.reviewSequencer.processReview(response);
    await this._handleSkipCard();
  }
  async _skipCurrentCard() {
    this.reviewSequencer.skipCurrentCard();
    await this._handleSkipCard();
  }
  async _handleSkipCard() {
    if (this._currentCard != null)
      await this.show();
    else
      this.backClickHandler();
  }
  _formatQuestionContextText(questionContext) {
    const separator = " > ";
    let result = this._currentNote.file.basename;
    if (questionContext.length > 0) {
      result += separator + questionContext.join(separator);
    }
    return result + separator + "...";
  }
  // -> Header
  _createBackButton() {
    this.backButton = this.modalEl.createDiv();
    this.backButton.addClasses(["sr-back-button", "sr-is-hidden"]);
    (0, import_obsidian5.setIcon)(this.backButton, "arrow-left");
    this.backButton.setAttribute("aria-label", t("BACK"));
    this.backButton.addEventListener("click", () => {
      this.backClickHandler();
    });
  }
  _setTitle(deck) {
    this.title.setText(`${deck.deckName}: ${deck.getCardCount(2 /* All */, true)}`);
  }
  // -> Controls
  _createCardControls() {
    this._createEditButton();
    this._createResetButton();
    this._createCardInfoButton();
    this._createSkipButton();
  }
  _createEditButton() {
    this.editButton = this.controls.createEl("button");
    this.editButton.addClasses(["sr-button", "sr-edit-button"]);
    (0, import_obsidian5.setIcon)(this.editButton, "edit");
    this.editButton.setAttribute("aria-label", t("EDIT_CARD"));
    this.editButton.addEventListener("click", async () => {
      this.editClickHandler();
    });
  }
  _createResetButton() {
    this.resetButton = this.controls.createEl("button");
    this.resetButton.addClasses(["sr-button", "sr-reset-button"]);
    (0, import_obsidian5.setIcon)(this.resetButton, "refresh-cw");
    this.resetButton.setAttribute("aria-label", t("RESET_CARD_PROGRESS"));
    this.resetButton.addEventListener("click", () => {
      this._processReview(3 /* Reset */);
    });
  }
  _createCardInfoButton() {
    this.infoButton = this.controls.createEl("button");
    this.infoButton.addClasses(["sr-button", "sr-info-button"]);
    (0, import_obsidian5.setIcon)(this.infoButton, "info");
    this.infoButton.setAttribute("aria-label", "View Card Info");
    this.infoButton.addEventListener("click", async () => {
      this._displayCurrentCardInfoNotice();
    });
  }
  _createSkipButton() {
    this.skipButton = this.controls.createEl("button");
    this.skipButton.addClasses(["sr-button", "sr-skip-button"]);
    (0, import_obsidian5.setIcon)(this.skipButton, "chevrons-right");
    this.skipButton.setAttribute("aria-label", t("SKIP"));
    this.skipButton.addEventListener("click", () => {
      this._skipCurrentCard();
    });
  }
  // -> Response
  _createResponseButtons() {
    this._createShowAnswerButton();
    this._createHardButton();
    this._createGoodButton();
    this._createEasyButton();
  }
  _resetResponseButtons() {
    this.answerButton.removeClass("sr-is-hidden");
    this.hardButton.addClass("sr-is-hidden");
    this.goodButton.addClass("sr-is-hidden");
    this.easyButton.addClass("sr-is-hidden");
  }
  _createShowAnswerButton() {
    this.answerButton = this.response.createEl("button");
    this.answerButton.addClasses(["sr-response-button", "sr-show-answer-button", "sr-bg-blue"]);
    this.answerButton.setText(t("SHOW_ANSWER"));
    this.answerButton.addEventListener("click", () => {
      this._showAnswer();
    });
  }
  _createHardButton() {
    this.hardButton = this.response.createEl("button");
    this.hardButton.addClasses([
      "sr-response-button",
      "sr-hard-button",
      "sr-bg-red",
      "sr-is-hidden"
    ]);
    this.hardButton.setText(this.settings.flashcardHardText);
    this.hardButton.addEventListener("click", () => {
      this._processReview(2 /* Hard */);
    });
  }
  _createGoodButton() {
    this.goodButton = this.response.createEl("button");
    this.goodButton.addClasses([
      "sr-response-button",
      "sr-good-button",
      "sr-bg-blue",
      "sr-is-hidden"
    ]);
    this.goodButton.setText(this.settings.flashcardGoodText);
    this.goodButton.addEventListener("click", () => {
      this._processReview(1 /* Good */);
    });
  }
  _createEasyButton() {
    this.easyButton = this.response.createEl("button");
    this.easyButton.addClasses([
      "sr-response-button",
      "sr-hard-button",
      "sr-bg-green",
      "sr-is-hidden"
    ]);
    this.easyButton.setText(this.settings.flashcardEasyText);
    this.easyButton.addEventListener("click", () => {
      this._processReview(0 /* Easy */);
    });
  }
  _setupEaseButton(button, buttonName, reviewResponse) {
    const schedule2 = this.reviewSequencer.determineCardSchedule(
      reviewResponse,
      this._currentCard
    );
    const interval = schedule2.interval;
    if (import_obsidian5.Platform.isMobile) {
      button.setText(textInterval(interval, true));
    } else {
      button.setText(`${buttonName} - ${textInterval(interval, false)}`);
    }
  }
};

// src/gui/FlashcardModal.tsx
var FlashcardModal = class extends import_obsidian6.Modal {
  constructor(app, plugin, settings, reviewSequencer, reviewMode) {
    super(app);
    this.plugin = plugin;
    this.settings = settings;
    this.reviewSequencer = reviewSequencer;
    this.reviewMode = reviewMode;
    this.modalEl.style.height = this.settings.flashcardHeightPercentage + "%";
    this.modalEl.style.width = this.settings.flashcardWidthPercentage + "%";
    this.modalEl.setAttribute("id", "sr-modal");
    this.contentEl.addClass("sr-modal-content");
    this.deckView = new DeckListView(
      this.plugin,
      this.settings,
      this.reviewSequencer,
      this.contentEl,
      this._startReviewOfDeck.bind(this)
    );
    this.flashcardView = new FlashcardReviewView(
      this.app,
      this.plugin,
      this.settings,
      this.reviewSequencer,
      this.reviewMode,
      this.contentEl,
      this.modalEl,
      this._showDecksList.bind(this),
      this._doEditQuestionText.bind(this)
    );
  }
  onOpen() {
    this._showDecksList();
  }
  onClose() {
    this.deckView.close();
    this.flashcardView.close();
    this.mode = 3 /* Closed */;
  }
  _showDecksList() {
    this._hideFlashcard();
    this.deckView.show();
  }
  _hideDecksList() {
    this.deckView.hide();
  }
  _showFlashcard() {
    this._hideDecksList();
    this.flashcardView.show();
  }
  _hideFlashcard() {
    this.flashcardView.hide();
  }
  _startReviewOfDeck(deck) {
    this.reviewSequencer.setCurrentDeck(deck.getTopicPath());
    if (this.reviewSequencer.hasCurrentCard) {
      this._showFlashcard();
    } else {
      this._showDecksList();
    }
  }
  async _doEditQuestionText() {
    const currentQ = this.reviewSequencer.currentQuestion;
    const textPrompt = currentQ.questionText.actualQuestion;
    const editModal = FlashcardEditModal.Prompt(this.app, textPrompt);
    editModal.then(async (modifiedCardText) => {
      this.reviewSequencer.updateCurrentQuestionText(modifiedCardText);
    }).catch((reason) => console.log(reason));
  }
};

// src/gui/StatsModal.tsx
var import_obsidian7 = require("obsidian");
var import_vhtml2 = __toESM(require_vhtml());

// node_modules/.pnpm/@kurkle+color@0.3.2/node_modules/@kurkle/color/dist/color.esm.js
function round(v) {
  return v + 0.5 | 0;
}
var lim = (v, l, h4) => Math.max(Math.min(v, h4), l);
function p2b(v) {
  return lim(round(v * 2.55), 0, 255);
}
function n2b(v) {
  return lim(round(v * 255), 0, 255);
}
function b2n(v) {
  return lim(round(v / 2.55) / 100, 0, 1);
}
function n2p(v) {
  return lim(round(v * 100), 0, 100);
}
var map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 };
var hex = [..."0123456789ABCDEF"];
var h1 = (b) => hex[b & 15];
var h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15];
var eq = (b) => (b & 240) >> 4 === (b & 15);
var isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
function hexParse(str) {
  var len = str.length;
  var ret;
  if (str[0] === "#") {
    if (len === 4 || len === 5) {
      ret = {
        r: 255 & map$1[str[1]] * 17,
        g: 255 & map$1[str[2]] * 17,
        b: 255 & map$1[str[3]] * 17,
        a: len === 5 ? map$1[str[4]] * 17 : 255
      };
    } else if (len === 7 || len === 9) {
      ret = {
        r: map$1[str[1]] << 4 | map$1[str[2]],
        g: map$1[str[3]] << 4 | map$1[str[4]],
        b: map$1[str[5]] << 4 | map$1[str[6]],
        a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255
      };
    }
  }
  return ret;
}
var alpha = (a, f) => a < 255 ? f(a) : "";
function hexString(v) {
  var f = isShort(v) ? h1 : h2;
  return v ? "#" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0;
}
var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
function hsl2rgbn(h4, s, l) {
  const a = s * Math.min(l, 1 - l);
  const f = (n, k = (n + h4 / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
  return [f(0), f(8), f(4)];
}
function hsv2rgbn(h4, s, v) {
  const f = (n, k = (n + h4 / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
  return [f(5), f(3), f(1)];
}
function hwb2rgbn(h4, w, b) {
  const rgb = hsl2rgbn(h4, 1, 0.5);
  let i;
  if (w + b > 1) {
    i = 1 / (w + b);
    w *= i;
    b *= i;
  }
  for (i = 0; i < 3; i++) {
    rgb[i] *= 1 - w - b;
    rgb[i] += w;
  }
  return rgb;
}
function hueValue(r, g, b, d, max) {
  if (r === max) {
    return (g - b) / d + (g < b ? 6 : 0);
  }
  if (g === max) {
    return (b - r) / d + 2;
  }
  return (r - g) / d + 4;
}
function rgb2hsl(v) {
  const range = 255;
  const r = v.r / range;
  const g = v.g / range;
  const b = v.b / range;
  const max = Math.max(r, g, b);
  const min = Math.min(r, g, b);
  const l = (max + min) / 2;
  let h4, s, d;
  if (max !== min) {
    d = max - min;
    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
    h4 = hueValue(r, g, b, d, max);
    h4 = h4 * 60 + 0.5;
  }
  return [h4 | 0, s || 0, l];
}
function calln(f, a, b, c) {
  return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);
}
function hsl2rgb(h4, s, l) {
  return calln(hsl2rgbn, h4, s, l);
}
function hwb2rgb(h4, w, b) {
  return calln(hwb2rgbn, h4, w, b);
}
function hsv2rgb(h4, s, v) {
  return calln(hsv2rgbn, h4, s, v);
}
function hue(h4) {
  return (h4 % 360 + 360) % 360;
}
function hueParse(str) {
  const m = HUE_RE.exec(str);
  let a = 255;
  let v;
  if (!m) {
    return;
  }
  if (m[5] !== v) {
    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
  }
  const h4 = hue(+m[2]);
  const p1 = +m[3] / 100;
  const p2 = +m[4] / 100;
  if (m[1] === "hwb") {
    v = hwb2rgb(h4, p1, p2);
  } else if (m[1] === "hsv") {
    v = hsv2rgb(h4, p1, p2);
  } else {
    v = hsl2rgb(h4, p1, p2);
  }
  return {
    r: v[0],
    g: v[1],
    b: v[2],
    a
  };
}
function rotate(v, deg) {
  var h4 = rgb2hsl(v);
  h4[0] = hue(h4[0] + deg);
  h4 = hsl2rgb(h4);
  v.r = h4[0];
  v.g = h4[1];
  v.b = h4[2];
}
function hslString(v) {
  if (!v) {
    return;
  }
  const a = rgb2hsl(v);
  const h4 = a[0];
  const s = n2p(a[1]);
  const l = n2p(a[2]);
  return v.a < 255 ? `hsla(${h4}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h4}, ${s}%, ${l}%)`;
}
var map = {
  x: "dark",
  Z: "light",
  Y: "re",
  X: "blu",
  W: "gr",
  V: "medium",
  U: "slate",
  A: "ee",
  T: "ol",
  S: "or",
  B: "ra",
  C: "lateg",
  D: "ights",
  R: "in",
  Q: "turquois",
  E: "hi",
  P: "ro",
  O: "al",
  N: "le",
  M: "de",
  L: "yello",
  F: "en",
  K: "ch",
  G: "arks",
  H: "ea",
  I: "ightg",
  J: "wh"
};
var names$1 = {
  OiceXe: "f0f8ff",
  antiquewEte: "faebd7",
  aqua: "ffff",
  aquamarRe: "7fffd4",
  azuY: "f0ffff",
  beige: "f5f5dc",
  bisque: "ffe4c4",
  black: "0",
  blanKedOmond: "ffebcd",
  Xe: "ff",
  XeviTet: "8a2be2",
  bPwn: "a52a2a",
  burlywood: "deb887",
  caMtXe: "5f9ea0",
  KartYuse: "7fff00",
  KocTate: "d2691e",
  cSO: "ff7f50",
  cSnflowerXe: "6495ed",
  cSnsilk: "fff8dc",
  crimson: "dc143c",
  cyan: "ffff",
  xXe: "8b",
  xcyan: "8b8b",
  xgTMnPd: "b8860b",
  xWay: "a9a9a9",
  xgYF: "6400",
  xgYy: "a9a9a9",
  xkhaki: "bdb76b",
  xmagFta: "8b008b",
  xTivegYF: "556b2f",
  xSange: "ff8c00",
  xScEd: "9932cc",
  xYd: "8b0000",
  xsOmon: "e9967a",
  xsHgYF: "8fbc8f",
  xUXe: "483d8b",
  xUWay: "2f4f4f",
  xUgYy: "2f4f4f",
  xQe: "ced1",
  xviTet: "9400d3",
  dAppRk: "ff1493",
  dApskyXe: "bfff",
  dimWay: "696969",
  dimgYy: "696969",
  dodgerXe: "1e90ff",
  fiYbrick: "b22222",
  flSOwEte: "fffaf0",
  foYstWAn: "228b22",
  fuKsia: "ff00ff",
  gaRsbSo: "dcdcdc",
  ghostwEte: "f8f8ff",
  gTd: "ffd700",
  gTMnPd: "daa520",
  Way: "808080",
  gYF: "8000",
  gYFLw: "adff2f",
  gYy: "808080",
  honeyMw: "f0fff0",
  hotpRk: "ff69b4",
  RdianYd: "cd5c5c",
  Rdigo: "4b0082",
  ivSy: "fffff0",
  khaki: "f0e68c",
  lavFMr: "e6e6fa",
  lavFMrXsh: "fff0f5",
  lawngYF: "7cfc00",
  NmoncEffon: "fffacd",
  ZXe: "add8e6",
  ZcSO: "f08080",
  Zcyan: "e0ffff",
  ZgTMnPdLw: "fafad2",
  ZWay: "d3d3d3",
  ZgYF: "90ee90",
  ZgYy: "d3d3d3",
  ZpRk: "ffb6c1",
  ZsOmon: "ffa07a",
  ZsHgYF: "20b2aa",
  ZskyXe: "87cefa",
  ZUWay: "778899",
  ZUgYy: "778899",
  ZstAlXe: "b0c4de",
  ZLw: "ffffe0",
  lime: "ff00",
  limegYF: "32cd32",
  lRF: "faf0e6",
  magFta: "ff00ff",
  maPon: "800000",
  VaquamarRe: "66cdaa",
  VXe: "cd",
  VScEd: "ba55d3",
  VpurpN: "9370db",
  VsHgYF: "3cb371",
  VUXe: "7b68ee",
  VsprRggYF: "fa9a",
  VQe: "48d1cc",
  VviTetYd: "c71585",
  midnightXe: "191970",
  mRtcYam: "f5fffa",
  mistyPse: "ffe4e1",
  moccasR: "ffe4b5",
  navajowEte: "ffdead",
  navy: "80",
  Tdlace: "fdf5e6",
  Tive: "808000",
  TivedBb: "6b8e23",
  Sange: "ffa500",
  SangeYd: "ff4500",
  ScEd: "da70d6",
  pOegTMnPd: "eee8aa",
  pOegYF: "98fb98",
  pOeQe: "afeeee",
  pOeviTetYd: "db7093",
  papayawEp: "ffefd5",
  pHKpuff: "ffdab9",
  peru: "cd853f",
  pRk: "ffc0cb",
  plum: "dda0dd",
  powMrXe: "b0e0e6",
  purpN: "800080",
  YbeccapurpN: "663399",
  Yd: "ff0000",
  Psybrown: "bc8f8f",
  PyOXe: "4169e1",
  saddNbPwn: "8b4513",
  sOmon: "fa8072",
  sandybPwn: "f4a460",
  sHgYF: "2e8b57",
  sHshell: "fff5ee",
  siFna: "a0522d",
  silver: "c0c0c0",
  skyXe: "87ceeb",
  UXe: "6a5acd",
  UWay: "708090",
  UgYy: "708090",
  snow: "fffafa",
  sprRggYF: "ff7f",
  stAlXe: "4682b4",
  tan: "d2b48c",
  teO: "8080",
  tEstN: "d8bfd8",
  tomato: "ff6347",
  Qe: "40e0d0",
  viTet: "ee82ee",
  JHt: "f5deb3",
  wEte: "ffffff",
  wEtesmoke: "f5f5f5",
  Lw: "ffff00",
  LwgYF: "9acd32"
};
function unpack() {
  const unpacked = {};
  const keys = Object.keys(names$1);
  const tkeys = Object.keys(map);
  let i, j, k, ok, nk;
  for (i = 0; i < keys.length; i++) {
    ok = nk = keys[i];
    for (j = 0; j < tkeys.length; j++) {
      k = tkeys[j];
      nk = nk.replace(k, map[k]);
    }
    k = parseInt(names$1[ok], 16);
    unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255];
  }
  return unpacked;
}
var names;
function nameParse(str) {
  if (!names) {
    names = unpack();
    names.transparent = [0, 0, 0, 0];
  }
  const a = names[str.toLowerCase()];
  return a && {
    r: a[0],
    g: a[1],
    b: a[2],
    a: a.length === 4 ? a[3] : 255
  };
}
var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
function rgbParse(str) {
  const m = RGB_RE.exec(str);
  let a = 255;
  let r, g, b;
  if (!m) {
    return;
  }
  if (m[7] !== r) {
    const v = +m[7];
    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
  }
  r = +m[1];
  g = +m[3];
  b = +m[5];
  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
  return {
    r,
    g,
    b,
    a
  };
}
function rgbString(v) {
  return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);
}
var to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055;
var from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
function interpolate2(rgb1, rgb2, t2) {
  const r = from(b2n(rgb1.r));
  const g = from(b2n(rgb1.g));
  const b = from(b2n(rgb1.b));
  return {
    r: n2b(to(r + t2 * (from(b2n(rgb2.r)) - r))),
    g: n2b(to(g + t2 * (from(b2n(rgb2.g)) - g))),
    b: n2b(to(b + t2 * (from(b2n(rgb2.b)) - b))),
    a: rgb1.a + t2 * (rgb2.a - rgb1.a)
  };
}
function modHSL(v, i, ratio) {
  if (v) {
    let tmp = rgb2hsl(v);
    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
    tmp = hsl2rgb(tmp);
    v.r = tmp[0];
    v.g = tmp[1];
    v.b = tmp[2];
  }
}
function clone(v, proto) {
  return v ? Object.assign(proto || {}, v) : v;
}
function fromObject(input) {
  var v = { r: 0, g: 0, b: 0, a: 255 };
  if (Array.isArray(input)) {
    if (input.length >= 3) {
      v = { r: input[0], g: input[1], b: input[2], a: 255 };
      if (input.length > 3) {
        v.a = n2b(input[3]);
      }
    }
  } else {
    v = clone(input, { r: 0, g: 0, b: 0, a: 1 });
    v.a = n2b(v.a);
  }
  return v;
}
function functionParse(str) {
  if (str.charAt(0) === "r") {
    return rgbParse(str);
  }
  return hueParse(str);
}
var Color = class _Color {
  constructor(input) {
    if (input instanceof _Color) {
      return input;
    }
    const type = typeof input;
    let v;
    if (type === "object") {
      v = fromObject(input);
    } else if (type === "string") {
      v = hexParse(input) || nameParse(input) || functionParse(input);
    }
    this._rgb = v;
    this._valid = !!v;
  }
  get valid() {
    return this._valid;
  }
  get rgb() {
    var v = clone(this._rgb);
    if (v) {
      v.a = b2n(v.a);
    }
    return v;
  }
  set rgb(obj) {
    this._rgb = fromObject(obj);
  }
  rgbString() {
    return this._valid ? rgbString(this._rgb) : void 0;
  }
  hexString() {
    return this._valid ? hexString(this._rgb) : void 0;
  }
  hslString() {
    return this._valid ? hslString(this._rgb) : void 0;
  }
  mix(color2, weight) {
    if (color2) {
      const c1 = this.rgb;
      const c2 = color2.rgb;
      let w2;
      const p = weight === w2 ? 0.5 : weight;
      const w = 2 * p - 1;
      const a = c1.a - c2.a;
      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2;
      w2 = 1 - w1;
      c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5;
      c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5;
      c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5;
      c1.a = p * c1.a + (1 - p) * c2.a;
      this.rgb = c1;
    }
    return this;
  }
  interpolate(color2, t2) {
    if (color2) {
      this._rgb = interpolate2(this._rgb, color2._rgb, t2);
    }
    return this;
  }
  clone() {
    return new _Color(this.rgb);
  }
  alpha(a) {
    this._rgb.a = n2b(a);
    return this;
  }
  clearer(ratio) {
    const rgb = this._rgb;
    rgb.a *= 1 - ratio;
    return this;
  }
  greyscale() {
    const rgb = this._rgb;
    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
    rgb.r = rgb.g = rgb.b = val;
    return this;
  }
  opaquer(ratio) {
    const rgb = this._rgb;
    rgb.a *= 1 + ratio;
    return this;
  }
  negate() {
    const v = this._rgb;
    v.r = 255 - v.r;
    v.g = 255 - v.g;
    v.b = 255 - v.b;
    return this;
  }
  lighten(ratio) {
    modHSL(this._rgb, 2, ratio);
    return this;
  }
  darken(ratio) {
    modHSL(this._rgb, 2, -ratio);
    return this;
  }
  saturate(ratio) {
    modHSL(this._rgb, 1, ratio);
    return this;
  }
  desaturate(ratio) {
    modHSL(this._rgb, 1, -ratio);
    return this;
  }
  rotate(deg) {
    rotate(this._rgb, deg);
    return this;
  }
};

// node_modules/.pnpm/chart.js@4.4.2/node_modules/chart.js/dist/chunks/helpers.segment.js
function noop() {
}
var uid = /* @__PURE__ */ (() => {
  let id = 0;
  return () => id++;
})();
function isNullOrUndef(value) {
  return value === null || typeof value === "undefined";
}
function isArray(value) {
  if (Array.isArray && Array.isArray(value)) {
    return true;
  }
  const type = Object.prototype.toString.call(value);
  if (type.slice(0, 7) === "[object" && type.slice(-6) === "Array]") {
    return true;
  }
  return false;
}
function isObject(value) {
  return value !== null && Object.prototype.toString.call(value) === "[object Object]";
}
function isNumberFinite(value) {
  return (typeof value === "number" || value instanceof Number) && isFinite(+value);
}
function finiteOrDefault(value, defaultValue) {
  return isNumberFinite(value) ? value : defaultValue;
}
function valueOrDefault(value, defaultValue) {
  return typeof value === "undefined" ? defaultValue : value;
}
var toPercentage = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 : +value / dimension;
var toDimension = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 * dimension : +value;
function callback(fn, args, thisArg) {
  if (fn && typeof fn.call === "function") {
    return fn.apply(thisArg, args);
  }
}
function each(loopable, fn, thisArg, reverse) {
  let i, len, keys;
  if (isArray(loopable)) {
    len = loopable.length;
    if (reverse) {
      for (i = len - 1; i >= 0; i--) {
        fn.call(thisArg, loopable[i], i);
      }
    } else {
      for (i = 0; i < len; i++) {
        fn.call(thisArg, loopable[i], i);
      }
    }
  } else if (isObject(loopable)) {
    keys = Object.keys(loopable);
    len = keys.length;
    for (i = 0; i < len; i++) {
      fn.call(thisArg, loopable[keys[i]], keys[i]);
    }
  }
}
function _elementsEqual(a0, a1) {
  let i, ilen, v0, v1;
  if (!a0 || !a1 || a0.length !== a1.length) {
    return false;
  }
  for (i = 0, ilen = a0.length; i < ilen; ++i) {
    v0 = a0[i];
    v1 = a1[i];
    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
      return false;
    }
  }
  return true;
}
function clone2(source) {
  if (isArray(source)) {
    return source.map(clone2);
  }
  if (isObject(source)) {
    const target = /* @__PURE__ */ Object.create(null);
    const keys = Object.keys(source);
    const klen = keys.length;
    let k = 0;
    for (; k < klen; ++k) {
      target[keys[k]] = clone2(source[keys[k]]);
    }
    return target;
  }
  return source;
}
function isValidKey(key) {
  return [
    "__proto__",
    "prototype",
    "constructor"
  ].indexOf(key) === -1;
}
function _merger(key, target, source, options) {
  if (!isValidKey(key)) {
    return;
  }
  const tval = target[key];
  const sval = source[key];
  if (isObject(tval) && isObject(sval)) {
    merge(tval, sval, options);
  } else {
    target[key] = clone2(sval);
  }
}
function merge(target, source, options) {
  const sources = isArray(source) ? source : [
    source
  ];
  const ilen = sources.length;
  if (!isObject(target)) {
    return target;
  }
  options = options || {};
  const merger = options.merger || _merger;
  let current;
  for (let i = 0; i < ilen; ++i) {
    current = sources[i];
    if (!isObject(current)) {
      continue;
    }
    const keys = Object.keys(current);
    for (let k = 0, klen = keys.length; k < klen; ++k) {
      merger(keys[k], target, current, options);
    }
  }
  return target;
}
function mergeIf(target, source) {
  return merge(target, source, {
    merger: _mergerIf
  });
}
function _mergerIf(key, target, source) {
  if (!isValidKey(key)) {
    return;
  }
  const tval = target[key];
  const sval = source[key];
  if (isObject(tval) && isObject(sval)) {
    mergeIf(tval, sval);
  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
    target[key] = clone2(sval);
  }
}
var keyResolvers = {
  // Chart.helpers.core resolveObjectKey should resolve empty key to root object
  "": (v) => v,
  // default resolvers
  x: (o) => o.x,
  y: (o) => o.y
};
function _splitKey(key) {
  const parts = key.split(".");
  const keys = [];
  let tmp = "";
  for (const part of parts) {
    tmp += part;
    if (tmp.endsWith("\\")) {
      tmp = tmp.slice(0, -1) + ".";
    } else {
      keys.push(tmp);
      tmp = "";
    }
  }
  return keys;
}
function _getKeyResolver(key) {
  const keys = _splitKey(key);
  return (obj) => {
    for (const k of keys) {
      if (k === "") {
        break;
      }
      obj = obj && obj[k];
    }
    return obj;
  };
}
function resolveObjectKey(obj, key) {
  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
  return resolver(obj);
}
function _capitalize(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}
var defined = (value) => typeof value !== "undefined";
var isFunction = (value) => typeof value === "function";
var setsEqual = (a, b) => {
  if (a.size !== b.size) {
    return false;
  }
  for (const item of a) {
    if (!b.has(item)) {
      return false;
    }
  }
  return true;
};
function _isClickEvent(e) {
  return e.type === "mouseup" || e.type === "click" || e.type === "contextmenu";
}
var PI = Math.PI;
var TAU = 2 * PI;
var PITAU = TAU + PI;
var INFINITY = Number.POSITIVE_INFINITY;
var RAD_PER_DEG = PI / 180;
var HALF_PI = PI / 2;
var QUARTER_PI = PI / 4;
var TWO_THIRDS_PI = PI * 2 / 3;
var log10 = Math.log10;
var sign = Math.sign;
function almostEquals(x, y, epsilon) {
  return Math.abs(x - y) < epsilon;
}
function niceNum(range) {
  const roundedRange = Math.round(range);
  range = almostEquals(range, roundedRange, range / 1e3) ? roundedRange : range;
  const niceRange = Math.pow(10, Math.floor(log10(range)));
  const fraction = range / niceRange;
  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
  return niceFraction * niceRange;
}
function _factorize(value) {
  const result = [];
  const sqrt = Math.sqrt(value);
  let i;
  for (i = 1; i < sqrt; i++) {
    if (value % i === 0) {
      result.push(i);
      result.push(value / i);
    }
  }
  if (sqrt === (sqrt | 0)) {
    result.push(sqrt);
  }
  result.sort((a, b) => a - b).pop();
  return result;
}
function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
function almostWhole(x, epsilon) {
  const rounded = Math.round(x);
  return rounded - epsilon <= x && rounded + epsilon >= x;
}
function _setMinAndMaxByKey(array, target, property) {
  let i, ilen, value;
  for (i = 0, ilen = array.length; i < ilen; i++) {
    value = array[i][property];
    if (!isNaN(value)) {
      target.min = Math.min(target.min, value);
      target.max = Math.max(target.max, value);
    }
  }
}
function toRadians(degrees) {
  return degrees * (PI / 180);
}
function toDegrees(radians) {
  return radians * (180 / PI);
}
function _decimalPlaces(x) {
  if (!isNumberFinite(x)) {
    return;
  }
  let e = 1;
  let p = 0;
  while (Math.round(x * e) / e !== x) {
    e *= 10;
    p++;
  }
  return p;
}
function getAngleFromPoint(centrePoint, anglePoint) {
  const distanceFromXCenter = anglePoint.x - centrePoint.x;
  const distanceFromYCenter = anglePoint.y - centrePoint.y;
  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
  if (angle < -0.5 * PI) {
    angle += TAU;
  }
  return {
    angle,
    distance: radialDistanceFromCenter
  };
}
function distanceBetweenPoints(pt1, pt2) {
  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
}
function _normalizeAngle(a) {
  return (a % TAU + TAU) % TAU;
}
function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
  const a = _normalizeAngle(angle);
  const s = _normalizeAngle(start);
  const e = _normalizeAngle(end);
  const angleToStart = _normalizeAngle(s - a);
  const angleToEnd = _normalizeAngle(e - a);
  const startToAngle = _normalizeAngle(a - s);
  const endToAngle = _normalizeAngle(a - e);
  return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;
}
function _limitValue(value, min, max) {
  return Math.max(min, Math.min(max, value));
}
function _int16Range(value) {
  return _limitValue(value, -32768, 32767);
}
function _isBetween(value, start, end, epsilon = 1e-6) {
  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
}
function _lookup(table, value, cmp) {
  cmp = cmp || ((index) => table[index] < value);
  let hi = table.length - 1;
  let lo = 0;
  let mid;
  while (hi - lo > 1) {
    mid = lo + hi >> 1;
    if (cmp(mid)) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  return {
    lo,
    hi
  };
}
var _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index) => {
  const ti = table[index][key];
  return ti < value || ti === value && table[index + 1][key] === value;
} : (index) => table[index][key] < value);
var _rlookupByKey = (table, key, value) => _lookup(table, value, (index) => table[index][key] >= value);
function _filterBetween(values, min, max) {
  let start = 0;
  let end = values.length;
  while (start < end && values[start] < min) {
    start++;
  }
  while (end > start && values[end - 1] > max) {
    end--;
  }
  return start > 0 || end < values.length ? values.slice(start, end) : values;
}
var arrayEvents = [
  "push",
  "pop",
  "shift",
  "splice",
  "unshift"
];
function listenArrayEvents(array, listener) {
  if (array._chartjs) {
    array._chartjs.listeners.push(listener);
    return;
  }
  Object.defineProperty(array, "_chartjs", {
    configurable: true,
    enumerable: false,
    value: {
      listeners: [
        listener
      ]
    }
  });
  arrayEvents.forEach((key) => {
    const method = "_onData" + _capitalize(key);
    const base = array[key];
    Object.defineProperty(array, key, {
      configurable: true,
      enumerable: false,
      value(...args) {
        const res = base.apply(this, args);
        array._chartjs.listeners.forEach((object) => {
          if (typeof object[method] === "function") {
            object[method](...args);
          }
        });
        return res;
      }
    });
  });
}
function unlistenArrayEvents(array, listener) {
  const stub = array._chartjs;
  if (!stub) {
    return;
  }
  const listeners = stub.listeners;
  const index = listeners.indexOf(listener);
  if (index !== -1) {
    listeners.splice(index, 1);
  }
  if (listeners.length > 0) {
    return;
  }
  arrayEvents.forEach((key) => {
    delete array[key];
  });
  delete array._chartjs;
}
function _arrayUnique(items) {
  const set2 = new Set(items);
  if (set2.size === items.length) {
    return items;
  }
  return Array.from(set2);
}
var requestAnimFrame = function() {
  if (typeof window === "undefined") {
    return function(callback2) {
      return callback2();
    };
  }
  return window.requestAnimationFrame;
}();
function throttled(fn, thisArg) {
  let argsToUse = [];
  let ticking = false;
  return function(...args) {
    argsToUse = args;
    if (!ticking) {
      ticking = true;
      requestAnimFrame.call(window, () => {
        ticking = false;
        fn.apply(thisArg, argsToUse);
      });
    }
  };
}
function debounce(fn, delay) {
  let timeout;
  return function(...args) {
    if (delay) {
      clearTimeout(timeout);
      timeout = setTimeout(fn, delay, args);
    } else {
      fn.apply(this, args);
    }
    return delay;
  };
}
var _toLeftRightCenter = (align) => align === "start" ? "left" : align === "end" ? "right" : "center";
var _alignStartEnd = (align, start, end) => align === "start" ? start : align === "end" ? end : (start + end) / 2;
var _textX = (align, left, right, rtl) => {
  const check = rtl ? "left" : "right";
  return align === check ? right : align === "center" ? (left + right) / 2 : left;
};
var atEdge = (t2) => t2 === 0 || t2 === 1;
var elasticIn = (t2, s, p) => -(Math.pow(2, 10 * (t2 -= 1)) * Math.sin((t2 - s) * TAU / p));
var elasticOut = (t2, s, p) => Math.pow(2, -10 * t2) * Math.sin((t2 - s) * TAU / p) + 1;
var effects = {
  linear: (t2) => t2,
  easeInQuad: (t2) => t2 * t2,
  easeOutQuad: (t2) => -t2 * (t2 - 2),
  easeInOutQuad: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 : -0.5 * (--t2 * (t2 - 2) - 1),
  easeInCubic: (t2) => t2 * t2 * t2,
  easeOutCubic: (t2) => (t2 -= 1) * t2 * t2 + 1,
  easeInOutCubic: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 + 2),
  easeInQuart: (t2) => t2 * t2 * t2 * t2,
  easeOutQuart: (t2) => -((t2 -= 1) * t2 * t2 * t2 - 1),
  easeInOutQuart: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 : -0.5 * ((t2 -= 2) * t2 * t2 * t2 - 2),
  easeInQuint: (t2) => t2 * t2 * t2 * t2 * t2,
  easeOutQuint: (t2) => (t2 -= 1) * t2 * t2 * t2 * t2 + 1,
  easeInOutQuint: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 * t2 * t2 + 2),
  easeInSine: (t2) => -Math.cos(t2 * HALF_PI) + 1,
  easeOutSine: (t2) => Math.sin(t2 * HALF_PI),
  easeInOutSine: (t2) => -0.5 * (Math.cos(PI * t2) - 1),
  easeInExpo: (t2) => t2 === 0 ? 0 : Math.pow(2, 10 * (t2 - 1)),
  easeOutExpo: (t2) => t2 === 1 ? 1 : -Math.pow(2, -10 * t2) + 1,
  easeInOutExpo: (t2) => atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * Math.pow(2, 10 * (t2 * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t2 * 2 - 1)) + 2),
  easeInCirc: (t2) => t2 >= 1 ? t2 : -(Math.sqrt(1 - t2 * t2) - 1),
  easeOutCirc: (t2) => Math.sqrt(1 - (t2 -= 1) * t2),
  easeInOutCirc: (t2) => (t2 /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t2 * t2) - 1) : 0.5 * (Math.sqrt(1 - (t2 -= 2) * t2) + 1),
  easeInElastic: (t2) => atEdge(t2) ? t2 : elasticIn(t2, 0.075, 0.3),
  easeOutElastic: (t2) => atEdge(t2) ? t2 : elasticOut(t2, 0.075, 0.3),
  easeInOutElastic(t2) {
    const s = 0.1125;
    const p = 0.45;
    return atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * elasticIn(t2 * 2, s, p) : 0.5 + 0.5 * elasticOut(t2 * 2 - 1, s, p);
  },
  easeInBack(t2) {
    const s = 1.70158;
    return t2 * t2 * ((s + 1) * t2 - s);
  },
  easeOutBack(t2) {
    const s = 1.70158;
    return (t2 -= 1) * t2 * ((s + 1) * t2 + s) + 1;
  },
  easeInOutBack(t2) {
    let s = 1.70158;
    if ((t2 /= 0.5) < 1) {
      return 0.5 * (t2 * t2 * (((s *= 1.525) + 1) * t2 - s));
    }
    return 0.5 * ((t2 -= 2) * t2 * (((s *= 1.525) + 1) * t2 + s) + 2);
  },
  easeInBounce: (t2) => 1 - effects.easeOutBounce(1 - t2),
  easeOutBounce(t2) {
    const m = 7.5625;
    const d = 2.75;
    if (t2 < 1 / d) {
      return m * t2 * t2;
    }
    if (t2 < 2 / d) {
      return m * (t2 -= 1.5 / d) * t2 + 0.75;
    }
    if (t2 < 2.5 / d) {
      return m * (t2 -= 2.25 / d) * t2 + 0.9375;
    }
    return m * (t2 -= 2.625 / d) * t2 + 0.984375;
  },
  easeInOutBounce: (t2) => t2 < 0.5 ? effects.easeInBounce(t2 * 2) * 0.5 : effects.easeOutBounce(t2 * 2 - 1) * 0.5 + 0.5
};
function isPatternOrGradient(value) {
  if (value && typeof value === "object") {
    const type = value.toString();
    return type === "[object CanvasPattern]" || type === "[object CanvasGradient]";
  }
  return false;
}
function color(value) {
  return isPatternOrGradient(value) ? value : new Color(value);
}
function getHoverColor(value) {
  return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();
}
var numbers = [
  "x",
  "y",
  "borderWidth",
  "radius",
  "tension"
];
var colors = [
  "color",
  "borderColor",
  "backgroundColor"
];
function applyAnimationsDefaults(defaults2) {
  defaults2.set("animation", {
    delay: void 0,
    duration: 1e3,
    easing: "easeOutQuart",
    fn: void 0,
    from: void 0,
    loop: void 0,
    to: void 0,
    type: void 0
  });
  defaults2.describe("animation", {
    _fallback: false,
    _indexable: false,
    _scriptable: (name) => name !== "onProgress" && name !== "onComplete" && name !== "fn"
  });
  defaults2.set("animations", {
    colors: {
      type: "color",
      properties: colors
    },
    numbers: {
      type: "number",
      properties: numbers
    }
  });
  defaults2.describe("animations", {
    _fallback: "animation"
  });
  defaults2.set("transitions", {
    active: {
      animation: {
        duration: 400
      }
    },
    resize: {
      animation: {
        duration: 0
      }
    },
    show: {
      animations: {
        colors: {
          from: "transparent"
        },
        visible: {
          type: "boolean",
          duration: 0
        }
      }
    },
    hide: {
      animations: {
        colors: {
          to: "transparent"
        },
        visible: {
          type: "boolean",
          easing: "linear",
          fn: (v) => v | 0
        }
      }
    }
  });
}
function applyLayoutsDefaults(defaults2) {
  defaults2.set("layout", {
    autoPadding: true,
    padding: {
      top: 0,
      right: 0,
      bottom: 0,
      left: 0
    }
  });
}
var intlCache = /* @__PURE__ */ new Map();
function getNumberFormat(locale2, options) {
  options = options || {};
  const cacheKey = locale2 + JSON.stringify(options);
  let formatter = intlCache.get(cacheKey);
  if (!formatter) {
    formatter = new Intl.NumberFormat(locale2, options);
    intlCache.set(cacheKey, formatter);
  }
  return formatter;
}
function formatNumber(num, locale2, options) {
  return getNumberFormat(locale2, options).format(num);
}
var formatters = {
  values(value) {
    return isArray(value) ? value : "" + value;
  },
  numeric(tickValue, index, ticks) {
    if (tickValue === 0) {
      return "0";
    }
    const locale2 = this.chart.options.locale;
    let notation;
    let delta = tickValue;
    if (ticks.length > 1) {
      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
      if (maxTick < 1e-4 || maxTick > 1e15) {
        notation = "scientific";
      }
      delta = calculateDelta(tickValue, ticks);
    }
    const logDelta = log10(Math.abs(delta));
    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
    const options = {
      notation,
      minimumFractionDigits: numDecimal,
      maximumFractionDigits: numDecimal
    };
    Object.assign(options, this.options.ticks.format);
    return formatNumber(tickValue, locale2, options);
  },
  logarithmic(tickValue, index, ticks) {
    if (tickValue === 0) {
      return "0";
    }
    const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));
    if ([
      1,
      2,
      3,
      5,
      10,
      15
    ].includes(remain) || index > 0.8 * ticks.length) {
      return formatters.numeric.call(this, tickValue, index, ticks);
    }
    return "";
  }
};
function calculateDelta(tickValue, ticks) {
  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
    delta = tickValue - Math.floor(tickValue);
  }
  return delta;
}
var Ticks = {
  formatters
};
function applyScaleDefaults(defaults2) {
  defaults2.set("scale", {
    display: true,
    offset: false,
    reverse: false,
    beginAtZero: false,
    bounds: "ticks",
    clip: true,
    grace: 0,
    grid: {
      display: true,
      lineWidth: 1,
      drawOnChartArea: true,
      drawTicks: true,
      tickLength: 8,
      tickWidth: (_ctx, options) => options.lineWidth,
      tickColor: (_ctx, options) => options.color,
      offset: false
    },
    border: {
      display: true,
      dash: [],
      dashOffset: 0,
      width: 1
    },
    title: {
      display: false,
      text: "",
      padding: {
        top: 4,
        bottom: 4
      }
    },
    ticks: {
      minRotation: 0,
      maxRotation: 50,
      mirror: false,
      textStrokeWidth: 0,
      textStrokeColor: "",
      padding: 3,
      display: true,
      autoSkip: true,
      autoSkipPadding: 3,
      labelOffset: 0,
      callback: Ticks.formatters.values,
      minor: {},
      major: {},
      align: "center",
      crossAlign: "near",
      showLabelBackdrop: false,
      backdropColor: "rgba(255, 255, 255, 0.75)",
      backdropPadding: 2
    }
  });
  defaults2.route("scale.ticks", "color", "", "color");
  defaults2.route("scale.grid", "color", "", "borderColor");
  defaults2.route("scale.border", "color", "", "borderColor");
  defaults2.route("scale.title", "color", "", "color");
  defaults2.describe("scale", {
    _fallback: false,
    _scriptable: (name) => !name.startsWith("before") && !name.startsWith("after") && name !== "callback" && name !== "parser",
    _indexable: (name) => name !== "borderDash" && name !== "tickBorderDash" && name !== "dash"
  });
  defaults2.describe("scales", {
    _fallback: "scale"
  });
  defaults2.describe("scale.ticks", {
    _scriptable: (name) => name !== "backdropPadding" && name !== "callback",
    _indexable: (name) => name !== "backdropPadding"
  });
}
var overrides = /* @__PURE__ */ Object.create(null);
var descriptors = /* @__PURE__ */ Object.create(null);
function getScope$1(node, key) {
  if (!key) {
    return node;
  }
  const keys = key.split(".");
  for (let i = 0, n = keys.length; i < n; ++i) {
    const k = keys[i];
    node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null));
  }
  return node;
}
function set(root, scope, values) {
  if (typeof scope === "string") {
    return merge(getScope$1(root, scope), values);
  }
  return merge(getScope$1(root, ""), scope);
}
var Defaults = class {
  constructor(_descriptors2, _appliers) {
    this.animation = void 0;
    this.backgroundColor = "rgba(0,0,0,0.1)";
    this.borderColor = "rgba(0,0,0,0.1)";
    this.color = "#666";
    this.datasets = {};
    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();
    this.elements = {};
    this.events = [
      "mousemove",
      "mouseout",
      "click",
      "touchstart",
      "touchmove"
    ];
    this.font = {
      family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
      size: 12,
      style: "normal",
      lineHeight: 1.2,
      weight: null
    };
    this.hover = {};
    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);
    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);
    this.hoverColor = (ctx, options) => getHoverColor(options.color);
    this.indexAxis = "x";
    this.interaction = {
      mode: "nearest",
      intersect: true,
      includeInvisible: false
    };
    this.maintainAspectRatio = true;
    this.onHover = null;
    this.onClick = null;
    this.parsing = true;
    this.plugins = {};
    this.responsive = true;
    this.scale = void 0;
    this.scales = {};
    this.showLine = true;
    this.drawActiveElementsOnTop = true;
    this.describe(_descriptors2);
    this.apply(_appliers);
  }
  set(scope, values) {
    return set(this, scope, values);
  }
  get(scope) {
    return getScope$1(this, scope);
  }
  describe(scope, values) {
    return set(descriptors, scope, values);
  }
  override(scope, values) {
    return set(overrides, scope, values);
  }
  route(scope, name, targetScope, targetName) {
    const scopeObject = getScope$1(this, scope);
    const targetScopeObject = getScope$1(this, targetScope);
    const privateName = "_" + name;
    Object.defineProperties(scopeObject, {
      [privateName]: {
        value: scopeObject[name],
        writable: true
      },
      [name]: {
        enumerable: true,
        get() {
          const local = this[privateName];
          const target = targetScopeObject[targetName];
          if (isObject(local)) {
            return Object.assign({}, target, local);
          }
          return valueOrDefault(local, target);
        },
        set(value) {
          this[privateName] = value;
        }
      }
    });
  }
  apply(appliers) {
    appliers.forEach((apply) => apply(this));
  }
};
var defaults = /* @__PURE__ */ new Defaults({
  _scriptable: (name) => !name.startsWith("on"),
  _indexable: (name) => name !== "events",
  hover: {
    _fallback: "interaction"
  },
  interaction: {
    _scriptable: false,
    _indexable: false
  }
}, [
  applyAnimationsDefaults,
  applyLayoutsDefaults,
  applyScaleDefaults
]);
function toFontString(font) {
  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
    return null;
  }
  return (font.style ? font.style + " " : "") + (font.weight ? font.weight + " " : "") + font.size + "px " + font.family;
}
function _measureText(ctx, data, gc, longest, string) {
  let textWidth = data[string];
  if (!textWidth) {
    textWidth = data[string] = ctx.measureText(string).width;
    gc.push(string);
  }
  if (textWidth > longest) {
    longest = textWidth;
  }
  return longest;
}
function _longestText(ctx, font, arrayOfThings, cache) {
  cache = cache || {};
  let data = cache.data = cache.data || {};
  let gc = cache.garbageCollect = cache.garbageCollect || [];
  if (cache.font !== font) {
    data = cache.data = {};
    gc = cache.garbageCollect = [];
    cache.font = font;
  }
  ctx.save();
  ctx.font = font;
  let longest = 0;
  const ilen = arrayOfThings.length;
  let i, j, jlen, thing, nestedThing;
  for (i = 0; i < ilen; i++) {
    thing = arrayOfThings[i];
    if (thing !== void 0 && thing !== null && !isArray(thing)) {
      longest = _measureText(ctx, data, gc, longest, thing);
    } else if (isArray(thing)) {
      for (j = 0, jlen = thing.length; j < jlen; j++) {
        nestedThing = thing[j];
        if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) {
          longest = _measureText(ctx, data, gc, longest, nestedThing);
        }
      }
    }
  }
  ctx.restore();
  const gcLen = gc.length / 2;
  if (gcLen > arrayOfThings.length) {
    for (i = 0; i < gcLen; i++) {
      delete data[gc[i]];
    }
    gc.splice(0, gcLen);
  }
  return longest;
}
function _alignPixel(chart, pixel, width) {
  const devicePixelRatio = chart.currentDevicePixelRatio;
  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
}
function clearCanvas(canvas, ctx) {
  ctx = ctx || canvas.getContext("2d");
  ctx.save();
  ctx.resetTransform();
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.restore();
}
function drawPoint(ctx, options, x, y) {
  drawPointLegend(ctx, options, x, y, null);
}
function drawPointLegend(ctx, options, x, y, w) {
  let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
  const style = options.pointStyle;
  const rotation = options.rotation;
  const radius = options.radius;
  let rad = (rotation || 0) * RAD_PER_DEG;
  if (style && typeof style === "object") {
    type = style.toString();
    if (type === "[object HTMLImageElement]" || type === "[object HTMLCanvasElement]") {
      ctx.save();
      ctx.translate(x, y);
      ctx.rotate(rad);
      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
      ctx.restore();
      return;
    }
  }
  if (isNaN(radius) || radius <= 0) {
    return;
  }
  ctx.beginPath();
  switch (style) {
    default:
      if (w) {
        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
      } else {
        ctx.arc(x, y, radius, 0, TAU);
      }
      ctx.closePath();
      break;
    case "triangle":
      width = w ? w / 2 : radius;
      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
      rad += TWO_THIRDS_PI;
      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
      rad += TWO_THIRDS_PI;
      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
      ctx.closePath();
      break;
    case "rectRounded":
      cornerRadius = radius * 0.516;
      size = radius - cornerRadius;
      xOffset = Math.cos(rad + QUARTER_PI) * size;
      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
      yOffset = Math.sin(rad + QUARTER_PI) * size;
      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);
      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);
      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
      ctx.closePath();
      break;
    case "rect":
      if (!rotation) {
        size = Math.SQRT1_2 * radius;
        width = w ? w / 2 : size;
        ctx.rect(x - width, y - size, 2 * width, 2 * size);
        break;
      }
      rad += QUARTER_PI;
    case "rectRot":
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      ctx.closePath();
      break;
    case "crossRot":
      rad += QUARTER_PI;
    case "cross":
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.moveTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      break;
    case "star":
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.moveTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      rad += QUARTER_PI;
      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
      xOffset = Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
      ctx.moveTo(x - xOffsetW, y - yOffset);
      ctx.lineTo(x + xOffsetW, y + yOffset);
      ctx.moveTo(x + yOffsetW, y - xOffset);
      ctx.lineTo(x - yOffsetW, y + xOffset);
      break;
    case "line":
      xOffset = w ? w / 2 : Math.cos(rad) * radius;
      yOffset = Math.sin(rad) * radius;
      ctx.moveTo(x - xOffset, y - yOffset);
      ctx.lineTo(x + xOffset, y + yOffset);
      break;
    case "dash":
      ctx.moveTo(x, y);
      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);
      break;
    case false:
      ctx.closePath();
      break;
  }
  ctx.fill();
  if (options.borderWidth > 0) {
    ctx.stroke();
  }
}
function _isPointInArea(point, area, margin) {
  margin = margin || 0.5;
  return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
}
function clipArea(ctx, area) {
  ctx.save();
  ctx.beginPath();
  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
  ctx.clip();
}
function unclipArea(ctx) {
  ctx.restore();
}
function setRenderOpts(ctx, opts) {
  if (opts.translation) {
    ctx.translate(opts.translation[0], opts.translation[1]);
  }
  if (!isNullOrUndef(opts.rotation)) {
    ctx.rotate(opts.rotation);
  }
  if (opts.color) {
    ctx.fillStyle = opts.color;
  }
  if (opts.textAlign) {
    ctx.textAlign = opts.textAlign;
  }
  if (opts.textBaseline) {
    ctx.textBaseline = opts.textBaseline;
  }
}
function decorateText(ctx, x, y, line, opts) {
  if (opts.strikethrough || opts.underline) {
    const metrics = ctx.measureText(line);
    const left = x - metrics.actualBoundingBoxLeft;
    const right = x + metrics.actualBoundingBoxRight;
    const top = y - metrics.actualBoundingBoxAscent;
    const bottom = y + metrics.actualBoundingBoxDescent;
    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
    ctx.strokeStyle = ctx.fillStyle;
    ctx.beginPath();
    ctx.lineWidth = opts.decorationWidth || 2;
    ctx.moveTo(left, yDecoration);
    ctx.lineTo(right, yDecoration);
    ctx.stroke();
  }
}
function drawBackdrop(ctx, opts) {
  const oldColor = ctx.fillStyle;
  ctx.fillStyle = opts.color;
  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
  ctx.fillStyle = oldColor;
}
function renderText(ctx, text, x, y, font, opts = {}) {
  const lines = isArray(text) ? text : [
    text
  ];
  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== "";
  let i, line;
  ctx.save();
  ctx.font = font.string;
  setRenderOpts(ctx, opts);
  for (i = 0; i < lines.length; ++i) {
    line = lines[i];
    if (opts.backdrop) {
      drawBackdrop(ctx, opts.backdrop);
    }
    if (stroke) {
      if (opts.strokeColor) {
        ctx.strokeStyle = opts.strokeColor;
      }
      if (!isNullOrUndef(opts.strokeWidth)) {
        ctx.lineWidth = opts.strokeWidth;
      }
      ctx.strokeText(line, x, y, opts.maxWidth);
    }
    ctx.fillText(line, x, y, opts.maxWidth);
    decorateText(ctx, x, y, line, opts);
    y += Number(font.lineHeight);
  }
  ctx.restore();
}
function addRoundedRectPath(ctx, rect) {
  const { x, y, w, h: h4, radius } = rect;
  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);
  ctx.lineTo(x, y + h4 - radius.bottomLeft);
  ctx.arc(x + radius.bottomLeft, y + h4 - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
  ctx.lineTo(x + w - radius.bottomRight, y + h4);
  ctx.arc(x + w - radius.bottomRight, y + h4 - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
  ctx.lineTo(x + w, y + radius.topRight);
  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
  ctx.lineTo(x + radius.topLeft, y);
}
var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
var FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
function toLineHeight(value, size) {
  const matches = ("" + value).match(LINE_HEIGHT);
  if (!matches || matches[1] === "normal") {
    return size * 1.2;
  }
  value = +matches[2];
  switch (matches[3]) {
    case "px":
      return value;
    case "%":
      value /= 100;
      break;
  }
  return size * value;
}
var numberOrZero = (v) => +v || 0;
function _readValueToProps(value, props) {
  const ret = {};
  const objProps = isObject(props);
  const keys = objProps ? Object.keys(props) : props;
  const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value;
  for (const prop of keys) {
    ret[prop] = numberOrZero(read(prop));
  }
  return ret;
}
function toTRBL(value) {
  return _readValueToProps(value, {
    top: "y",
    right: "x",
    bottom: "y",
    left: "x"
  });
}
function toTRBLCorners(value) {
  return _readValueToProps(value, [
    "topLeft",
    "topRight",
    "bottomLeft",
    "bottomRight"
  ]);
}
function toPadding(value) {
  const obj = toTRBL(value);
  obj.width = obj.left + obj.right;
  obj.height = obj.top + obj.bottom;
  return obj;
}
function toFont(options, fallback) {
  options = options || {};
  fallback = fallback || defaults.font;
  let size = valueOrDefault(options.size, fallback.size);
  if (typeof size === "string") {
    size = parseInt(size, 10);
  }
  let style = valueOrDefault(options.style, fallback.style);
  if (style && !("" + style).match(FONT_STYLE)) {
    console.warn('Invalid font style specified: "' + style + '"');
    style = void 0;
  }
  const font = {
    family: valueOrDefault(options.family, fallback.family),
    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
    size,
    style,
    weight: valueOrDefault(options.weight, fallback.weight),
    string: ""
  };
  font.string = toFontString(font);
  return font;
}
function resolve(inputs, context, index, info) {
  let cacheable = true;
  let i, ilen, value;
  for (i = 0, ilen = inputs.length; i < ilen; ++i) {
    value = inputs[i];
    if (value === void 0) {
      continue;
    }
    if (context !== void 0 && typeof value === "function") {
      value = value(context);
      cacheable = false;
    }
    if (index !== void 0 && isArray(value)) {
      value = value[index % value.length];
      cacheable = false;
    }
    if (value !== void 0) {
      if (info && !cacheable) {
        info.cacheable = false;
      }
      return value;
    }
  }
}
function _addGrace(minmax, grace, beginAtZero) {
  const { min, max } = minmax;
  const change = toDimension(grace, (max - min) / 2);
  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;
  return {
    min: keepZero(min, -Math.abs(change)),
    max: keepZero(max, change)
  };
}
function createContext(parentContext, context) {
  return Object.assign(Object.create(parentContext), context);
}
function _createResolver(scopes, prefixes = [
  ""
], rootScopes, fallback, getTarget = () => scopes[0]) {
  const finalRootScopes = rootScopes || scopes;
  if (typeof fallback === "undefined") {
    fallback = _resolve("_fallback", scopes);
  }
  const cache = {
    [Symbol.toStringTag]: "Object",
    _cacheable: true,
    _scopes: scopes,
    _rootScopes: finalRootScopes,
    _fallback: fallback,
    _getTarget: getTarget,
    override: (scope) => _createResolver([
      scope,
      ...scopes
    ], prefixes, finalRootScopes, fallback)
  };
  return new Proxy(cache, {
    /**
    * A trap for the delete operator.
    */
    deleteProperty(target, prop) {
      delete target[prop];
      delete target._keys;
      delete scopes[0][prop];
      return true;
    },
    /**
    * A trap for getting property values.
    */
    get(target, prop) {
      return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target));
    },
    /**
    * A trap for Object.getOwnPropertyDescriptor.
    * Also used by Object.hasOwnProperty.
    */
    getOwnPropertyDescriptor(target, prop) {
      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
    },
    /**
    * A trap for Object.getPrototypeOf.
    */
    getPrototypeOf() {
      return Reflect.getPrototypeOf(scopes[0]);
    },
    /**
    * A trap for the in operator.
    */
    has(target, prop) {
      return getKeysFromAllScopes(target).includes(prop);
    },
    /**
    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
    */
    ownKeys(target) {
      return getKeysFromAllScopes(target);
    },
    /**
    * A trap for setting property values.
    */
    set(target, prop, value) {
      const storage = target._storage || (target._storage = getTarget());
      target[prop] = storage[prop] = value;
      delete target._keys;
      return true;
    }
  });
}
function _attachContext(proxy, context, subProxy, descriptorDefaults) {
  const cache = {
    _cacheable: false,
    _proxy: proxy,
    _context: context,
    _subProxy: subProxy,
    _stack: /* @__PURE__ */ new Set(),
    _descriptors: _descriptors(proxy, descriptorDefaults),
    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),
    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
  };
  return new Proxy(cache, {
    /**
    * A trap for the delete operator.
    */
    deleteProperty(target, prop) {
      delete target[prop];
      delete proxy[prop];
      return true;
    },
    /**
    * A trap for getting property values.
    */
    get(target, prop, receiver) {
      return _cached(target, prop, () => _resolveWithContext(target, prop, receiver));
    },
    /**
    * A trap for Object.getOwnPropertyDescriptor.
    * Also used by Object.hasOwnProperty.
    */
    getOwnPropertyDescriptor(target, prop) {
      return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {
        enumerable: true,
        configurable: true
      } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop);
    },
    /**
    * A trap for Object.getPrototypeOf.
    */
    getPrototypeOf() {
      return Reflect.getPrototypeOf(proxy);
    },
    /**
    * A trap for the in operator.
    */
    has(target, prop) {
      return Reflect.has(proxy, prop);
    },
    /**
    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
    */
    ownKeys() {
      return Reflect.ownKeys(proxy);
    },
    /**
    * A trap for setting property values.
    */
    set(target, prop, value) {
      proxy[prop] = value;
      delete target[prop];
      return true;
    }
  });
}
function _descriptors(proxy, defaults2 = {
  scriptable: true,
  indexable: true
}) {
  const { _scriptable = defaults2.scriptable, _indexable = defaults2.indexable, _allKeys = defaults2.allKeys } = proxy;
  return {
    allKeys: _allKeys,
    scriptable: _scriptable,
    indexable: _indexable,
    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,
    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable
  };
}
var readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;
var needsSubResolver = (prop, value) => isObject(value) && prop !== "adapters" && (Object.getPrototypeOf(value) === null || value.constructor === Object);
function _cached(target, prop, resolve2) {
  if (Object.prototype.hasOwnProperty.call(target, prop)) {
    return target[prop];
  }
  const value = resolve2();
  target[prop] = value;
  return value;
}
function _resolveWithContext(target, prop, receiver) {
  const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;
  let value = _proxy[prop];
  if (isFunction(value) && descriptors2.isScriptable(prop)) {
    value = _resolveScriptable(prop, value, target, receiver);
  }
  if (isArray(value) && value.length) {
    value = _resolveArray(prop, value, target, descriptors2.isIndexable);
  }
  if (needsSubResolver(prop, value)) {
    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2);
  }
  return value;
}
function _resolveScriptable(prop, getValue, target, receiver) {
  const { _proxy, _context, _subProxy, _stack } = target;
  if (_stack.has(prop)) {
    throw new Error("Recursion detected: " + Array.from(_stack).join("->") + "->" + prop);
  }
  _stack.add(prop);
  let value = getValue(_context, _subProxy || receiver);
  _stack.delete(prop);
  if (needsSubResolver(prop, value)) {
    value = createSubResolver(_proxy._scopes, _proxy, prop, value);
  }
  return value;
}
function _resolveArray(prop, value, target, isIndexable) {
  const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;
  if (typeof _context.index !== "undefined" && isIndexable(prop)) {
    return value[_context.index % value.length];
  } else if (isObject(value[0])) {
    const arr = value;
    const scopes = _proxy._scopes.filter((s) => s !== arr);
    value = [];
    for (const item of arr) {
      const resolver = createSubResolver(scopes, _proxy, prop, item);
      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2));
    }
  }
  return value;
}
function resolveFallback(fallback, prop, value) {
  return isFunction(fallback) ? fallback(prop, value) : fallback;
}
var getScope = (key, parent) => key === true ? parent : typeof key === "string" ? resolveObjectKey(parent, key) : void 0;
function addScopes(set2, parentScopes, key, parentFallback, value) {
  for (const parent of parentScopes) {
    const scope = getScope(key, parent);
    if (scope) {
      set2.add(scope);
      const fallback = resolveFallback(scope._fallback, key, value);
      if (typeof fallback !== "undefined" && fallback !== key && fallback !== parentFallback) {
        return fallback;
      }
    } else if (scope === false && typeof parentFallback !== "undefined" && key !== parentFallback) {
      return null;
    }
  }
  return false;
}
function createSubResolver(parentScopes, resolver, prop, value) {
  const rootScopes = resolver._rootScopes;
  const fallback = resolveFallback(resolver._fallback, prop, value);
  const allScopes = [
    ...parentScopes,
    ...rootScopes
  ];
  const set2 = /* @__PURE__ */ new Set();
  set2.add(value);
  let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value);
  if (key === null) {
    return false;
  }
  if (typeof fallback !== "undefined" && fallback !== prop) {
    key = addScopesFromKey(set2, allScopes, fallback, key, value);
    if (key === null) {
      return false;
    }
  }
  return _createResolver(Array.from(set2), [
    ""
  ], rootScopes, fallback, () => subGetTarget(resolver, prop, value));
}
function addScopesFromKey(set2, allScopes, key, fallback, item) {
  while (key) {
    key = addScopes(set2, allScopes, key, fallback, item);
  }
  return key;
}
function subGetTarget(resolver, prop, value) {
  const parent = resolver._getTarget();
  if (!(prop in parent)) {
    parent[prop] = {};
  }
  const target = parent[prop];
  if (isArray(target) && isObject(value)) {
    return value;
  }
  return target || {};
}
function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
  let value;
  for (const prefix of prefixes) {
    value = _resolve(readKey(prefix, prop), scopes);
    if (typeof value !== "undefined") {
      return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
    }
  }
}
function _resolve(key, scopes) {
  for (const scope of scopes) {
    if (!scope) {
      continue;
    }
    const value = scope[key];
    if (typeof value !== "undefined") {
      return value;
    }
  }
}
function getKeysFromAllScopes(target) {
  let keys = target._keys;
  if (!keys) {
    keys = target._keys = resolveKeysFromAllScopes(target._scopes);
  }
  return keys;
}
function resolveKeysFromAllScopes(scopes) {
  const set2 = /* @__PURE__ */ new Set();
  for (const scope of scopes) {
    for (const key of Object.keys(scope).filter((k) => !k.startsWith("_"))) {
      set2.add(key);
    }
  }
  return Array.from(set2);
}
var EPSILON = Number.EPSILON || 1e-14;
function _isDomSupported() {
  return typeof window !== "undefined" && typeof document !== "undefined";
}
function _getParentNode(domNode) {
  let parent = domNode.parentNode;
  if (parent && parent.toString() === "[object ShadowRoot]") {
    parent = parent.host;
  }
  return parent;
}
function parseMaxStyle(styleValue, node, parentProperty) {
  let valueInPixels;
  if (typeof styleValue === "string") {
    valueInPixels = parseInt(styleValue, 10);
    if (styleValue.indexOf("%") !== -1) {
      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
    }
  } else {
    valueInPixels = styleValue;
  }
  return valueInPixels;
}
var getComputedStyle2 = (element) => element.ownerDocument.defaultView.getComputedStyle(element, null);
function getStyle(el, property) {
  return getComputedStyle2(el).getPropertyValue(property);
}
var positions = [
  "top",
  "right",
  "bottom",
  "left"
];
function getPositionedStyle(styles, style, suffix) {
  const result = {};
  suffix = suffix ? "-" + suffix : "";
  for (let i = 0; i < 4; i++) {
    const pos = positions[i];
    result[pos] = parseFloat(styles[style + "-" + pos + suffix]) || 0;
  }
  result.width = result.left + result.right;
  result.height = result.top + result.bottom;
  return result;
}
var useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);
function getCanvasPosition(e, canvas) {
  const touches = e.touches;
  const source = touches && touches.length ? touches[0] : e;
  const { offsetX, offsetY } = source;
  let box = false;
  let x, y;
  if (useOffsetPos(offsetX, offsetY, e.target)) {
    x = offsetX;
    y = offsetY;
  } else {
    const rect = canvas.getBoundingClientRect();
    x = source.clientX - rect.left;
    y = source.clientY - rect.top;
    box = true;
  }
  return {
    x,
    y,
    box
  };
}
function getRelativePosition(event, chart) {
  if ("native" in event) {
    return event;
  }
  const { canvas, currentDevicePixelRatio } = chart;
  const style = getComputedStyle2(canvas);
  const borderBox = style.boxSizing === "border-box";
  const paddings = getPositionedStyle(style, "padding");
  const borders = getPositionedStyle(style, "border", "width");
  const { x, y, box } = getCanvasPosition(event, canvas);
  const xOffset = paddings.left + (box && borders.left);
  const yOffset = paddings.top + (box && borders.top);
  let { width, height } = chart;
  if (borderBox) {
    width -= paddings.width + borders.width;
    height -= paddings.height + borders.height;
  }
  return {
    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
  };
}
function getContainerSize(canvas, width, height) {
  let maxWidth, maxHeight;
  if (width === void 0 || height === void 0) {
    const container = _getParentNode(canvas);
    if (!container) {
      width = canvas.clientWidth;
      height = canvas.clientHeight;
    } else {
      const rect = container.getBoundingClientRect();
      const containerStyle = getComputedStyle2(container);
      const containerBorder = getPositionedStyle(containerStyle, "border", "width");
      const containerPadding = getPositionedStyle(containerStyle, "padding");
      width = rect.width - containerPadding.width - containerBorder.width;
      height = rect.height - containerPadding.height - containerBorder.height;
      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, "clientWidth");
      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, "clientHeight");
    }
  }
  return {
    width,
    height,
    maxWidth: maxWidth || INFINITY,
    maxHeight: maxHeight || INFINITY
  };
}
var round1 = (v) => Math.round(v * 10) / 10;
function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
  const style = getComputedStyle2(canvas);
  const margins = getPositionedStyle(style, "margin");
  const maxWidth = parseMaxStyle(style.maxWidth, canvas, "clientWidth") || INFINITY;
  const maxHeight = parseMaxStyle(style.maxHeight, canvas, "clientHeight") || INFINITY;
  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);
  let { width, height } = containerSize;
  if (style.boxSizing === "content-box") {
    const borders = getPositionedStyle(style, "border", "width");
    const paddings = getPositionedStyle(style, "padding");
    width -= paddings.width + borders.width;
    height -= paddings.height + borders.height;
  }
  width = Math.max(0, width - margins.width);
  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);
  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
  if (width && !height) {
    height = round1(width / 2);
  }
  const maintainHeight = bbWidth !== void 0 || bbHeight !== void 0;
  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {
    height = containerSize.height;
    width = round1(Math.floor(height * aspectRatio));
  }
  return {
    width,
    height
  };
}
function retinaScale(chart, forceRatio, forceStyle) {
  const pixelRatio = forceRatio || 1;
  const deviceHeight = Math.floor(chart.height * pixelRatio);
  const deviceWidth = Math.floor(chart.width * pixelRatio);
  chart.height = Math.floor(chart.height);
  chart.width = Math.floor(chart.width);
  const canvas = chart.canvas;
  if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {
    canvas.style.height = `${chart.height}px`;
    canvas.style.width = `${chart.width}px`;
  }
  if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {
    chart.currentDevicePixelRatio = pixelRatio;
    canvas.height = deviceHeight;
    canvas.width = deviceWidth;
    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    return true;
  }
  return false;
}
var supportsEventListenerOptions = function() {
  let passiveSupported = false;
  try {
    const options = {
      get passive() {
        passiveSupported = true;
        return false;
      }
    };
    if (_isDomSupported()) {
      window.addEventListener("test", null, options);
      window.removeEventListener("test", null, options);
    }
  } catch (e) {
  }
  return passiveSupported;
}();
function readUsedSize(element, property) {
  const value = getStyle(element, property);
  const matches = value && value.match(/^(\d+)(\.\d+)?px$/);
  return matches ? +matches[1] : void 0;
}
var getRightToLeftAdapter = function(rectX, width) {
  return {
    x(x) {
      return rectX + rectX + width - x;
    },
    setWidth(w) {
      width = w;
    },
    textAlign(align) {
      if (align === "center") {
        return align;
      }
      return align === "right" ? "left" : "right";
    },
    xPlus(x, value) {
      return x - value;
    },
    leftForLtr(x, itemWidth) {
      return x - itemWidth;
    }
  };
};
var getLeftToRightAdapter = function() {
  return {
    x(x) {
      return x;
    },
    setWidth(w) {
    },
    textAlign(align) {
      return align;
    },
    xPlus(x, value) {
      return x + value;
    },
    leftForLtr(x, _itemWidth) {
      return x;
    }
  };
};
function getRtlAdapter(rtl, rectX, width) {
  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
}
function overrideTextDirection(ctx, direction) {
  let style, original;
  if (direction === "ltr" || direction === "rtl") {
    style = ctx.canvas.style;
    original = [
      style.getPropertyValue("direction"),
      style.getPropertyPriority("direction")
    ];
    style.setProperty("direction", direction, "important");
    ctx.prevTextDirection = original;
  }
}
function restoreTextDirection(ctx, original) {
  if (original !== void 0) {
    delete ctx.prevTextDirection;
    ctx.canvas.style.setProperty("direction", original[0], original[1]);
  }
}

// node_modules/.pnpm/chart.js@4.4.2/node_modules/chart.js/dist/chart.js
var Animator = class {
  constructor() {
    this._request = null;
    this._charts = /* @__PURE__ */ new Map();
    this._running = false;
    this._lastDate = void 0;
  }
  _notify(chart, anims, date, type) {
    const callbacks = anims.listeners[type];
    const numSteps = anims.duration;
    callbacks.forEach((fn) => fn({
      chart,
      initial: anims.initial,
      numSteps,
      currentStep: Math.min(date - anims.start, numSteps)
    }));
  }
  _refresh() {
    if (this._request) {
      return;
    }
    this._running = true;
    this._request = requestAnimFrame.call(window, () => {
      this._update();
      this._request = null;
      if (this._running) {
        this._refresh();
      }
    });
  }
  _update(date = Date.now()) {
    let remaining = 0;
    this._charts.forEach((anims, chart) => {
      if (!anims.running || !anims.items.length) {
        return;
      }
      const items = anims.items;
      let i = items.length - 1;
      let draw = false;
      let item;
      for (; i >= 0; --i) {
        item = items[i];
        if (item._active) {
          if (item._total > anims.duration) {
            anims.duration = item._total;
          }
          item.tick(date);
          draw = true;
        } else {
          items[i] = items[items.length - 1];
          items.pop();
        }
      }
      if (draw) {
        chart.draw();
        this._notify(chart, anims, date, "progress");
      }
      if (!items.length) {
        anims.running = false;
        this._notify(chart, anims, date, "complete");
        anims.initial = false;
      }
      remaining += items.length;
    });
    this._lastDate = date;
    if (remaining === 0) {
      this._running = false;
    }
  }
  _getAnims(chart) {
    const charts = this._charts;
    let anims = charts.get(chart);
    if (!anims) {
      anims = {
        running: false,
        initial: true,
        items: [],
        listeners: {
          complete: [],
          progress: []
        }
      };
      charts.set(chart, anims);
    }
    return anims;
  }
  listen(chart, event, cb) {
    this._getAnims(chart).listeners[event].push(cb);
  }
  add(chart, items) {
    if (!items || !items.length) {
      return;
    }
    this._getAnims(chart).items.push(...items);
  }
  has(chart) {
    return this._getAnims(chart).items.length > 0;
  }
  start(chart) {
    const anims = this._charts.get(chart);
    if (!anims) {
      return;
    }
    anims.running = true;
    anims.start = Date.now();
    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);
    this._refresh();
  }
  running(chart) {
    if (!this._running) {
      return false;
    }
    const anims = this._charts.get(chart);
    if (!anims || !anims.running || !anims.items.length) {
      return false;
    }
    return true;
  }
  stop(chart) {
    const anims = this._charts.get(chart);
    if (!anims || !anims.items.length) {
      return;
    }
    const items = anims.items;
    let i = items.length - 1;
    for (; i >= 0; --i) {
      items[i].cancel();
    }
    anims.items = [];
    this._notify(chart, anims, Date.now(), "complete");
  }
  remove(chart) {
    return this._charts.delete(chart);
  }
};
var animator = /* @__PURE__ */ new Animator();
var transparent = "transparent";
var interpolators = {
  boolean(from2, to2, factor) {
    return factor > 0.5 ? to2 : from2;
  },
  color(from2, to2, factor) {
    const c0 = color(from2 || transparent);
    const c1 = c0.valid && color(to2 || transparent);
    return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2;
  },
  number(from2, to2, factor) {
    return from2 + (to2 - from2) * factor;
  }
};
var Animation = class {
  constructor(cfg, target, prop, to2) {
    const currentValue = target[prop];
    to2 = resolve([
      cfg.to,
      to2,
      currentValue,
      cfg.from
    ]);
    const from2 = resolve([
      cfg.from,
      currentValue,
      to2
    ]);
    this._active = true;
    this._fn = cfg.fn || interpolators[cfg.type || typeof from2];
    this._easing = effects[cfg.easing] || effects.linear;
    this._start = Math.floor(Date.now() + (cfg.delay || 0));
    this._duration = this._total = Math.floor(cfg.duration);
    this._loop = !!cfg.loop;
    this._target = target;
    this._prop = prop;
    this._from = from2;
    this._to = to2;
    this._promises = void 0;
  }
  active() {
    return this._active;
  }
  update(cfg, to2, date) {
    if (this._active) {
      this._notify(false);
      const currentValue = this._target[this._prop];
      const elapsed = date - this._start;
      const remain = this._duration - elapsed;
      this._start = date;
      this._duration = Math.floor(Math.max(remain, cfg.duration));
      this._total += elapsed;
      this._loop = !!cfg.loop;
      this._to = resolve([
        cfg.to,
        to2,
        currentValue,
        cfg.from
      ]);
      this._from = resolve([
        cfg.from,
        currentValue,
        to2
      ]);
    }
  }
  cancel() {
    if (this._active) {
      this.tick(Date.now());
      this._active = false;
      this._notify(false);
    }
  }
  tick(date) {
    const elapsed = date - this._start;
    const duration = this._duration;
    const prop = this._prop;
    const from2 = this._from;
    const loop = this._loop;
    const to2 = this._to;
    let factor;
    this._active = from2 !== to2 && (loop || elapsed < duration);
    if (!this._active) {
      this._target[prop] = to2;
      this._notify(true);
      return;
    }
    if (elapsed < 0) {
      this._target[prop] = from2;
      return;
    }
    factor = elapsed / duration % 2;
    factor = loop && factor > 1 ? 2 - factor : factor;
    factor = this._easing(Math.min(1, Math.max(0, factor)));
    this._target[prop] = this._fn(from2, to2, factor);
  }
  wait() {
    const promises = this._promises || (this._promises = []);
    return new Promise((res, rej) => {
      promises.push({
        res,
        rej
      });
    });
  }
  _notify(resolved) {
    const method = resolved ? "res" : "rej";
    const promises = this._promises || [];
    for (let i = 0; i < promises.length; i++) {
      promises[i][method]();
    }
  }
};
var Animations = class {
  constructor(chart, config) {
    this._chart = chart;
    this._properties = /* @__PURE__ */ new Map();
    this.configure(config);
  }
  configure(config) {
    if (!isObject(config)) {
      return;
    }
    const animationOptions = Object.keys(defaults.animation);
    const animatedProps = this._properties;
    Object.getOwnPropertyNames(config).forEach((key) => {
      const cfg = config[key];
      if (!isObject(cfg)) {
        return;
      }
      const resolved = {};
      for (const option of animationOptions) {
        resolved[option] = cfg[option];
      }
      (isArray(cfg.properties) && cfg.properties || [
        key
      ]).forEach((prop) => {
        if (prop === key || !animatedProps.has(prop)) {
          animatedProps.set(prop, resolved);
        }
      });
    });
  }
  _animateOptions(target, values) {
    const newOptions = values.options;
    const options = resolveTargetOptions(target, newOptions);
    if (!options) {
      return [];
    }
    const animations = this._createAnimations(options, newOptions);
    if (newOptions.$shared) {
      awaitAll(target.options.$animations, newOptions).then(() => {
        target.options = newOptions;
      }, () => {
      });
    }
    return animations;
  }
  _createAnimations(target, values) {
    const animatedProps = this._properties;
    const animations = [];
    const running = target.$animations || (target.$animations = {});
    const props = Object.keys(values);
    const date = Date.now();
    let i;
    for (i = props.length - 1; i >= 0; --i) {
      const prop = props[i];
      if (prop.charAt(0) === "$") {
        continue;
      }
      if (prop === "options") {
        animations.push(...this._animateOptions(target, values));
        continue;
      }
      const value = values[prop];
      let animation = running[prop];
      const cfg = animatedProps.get(prop);
      if (animation) {
        if (cfg && animation.active()) {
          animation.update(cfg, value, date);
          continue;
        } else {
          animation.cancel();
        }
      }
      if (!cfg || !cfg.duration) {
        target[prop] = value;
        continue;
      }
      running[prop] = animation = new Animation(cfg, target, prop, value);
      animations.push(animation);
    }
    return animations;
  }
  update(target, values) {
    if (this._properties.size === 0) {
      Object.assign(target, values);
      return;
    }
    const animations = this._createAnimations(target, values);
    if (animations.length) {
      animator.add(this._chart, animations);
      return true;
    }
  }
};
function awaitAll(animations, properties) {
  const running = [];
  const keys = Object.keys(properties);
  for (let i = 0; i < keys.length; i++) {
    const anim = animations[keys[i]];
    if (anim && anim.active()) {
      running.push(anim.wait());
    }
  }
  return Promise.all(running);
}
function resolveTargetOptions(target, newOptions) {
  if (!newOptions) {
    return;
  }
  let options = target.options;
  if (!options) {
    target.options = newOptions;
    return;
  }
  if (options.$shared) {
    target.options = options = Object.assign({}, options, {
      $shared: false,
      $animations: {}
    });
  }
  return options;
}
function scaleClip(scale, allowedOverflow) {
  const opts = scale && scale.options || {};
  const reverse = opts.reverse;
  const min = opts.min === void 0 ? allowedOverflow : 0;
  const max = opts.max === void 0 ? allowedOverflow : 0;
  return {
    start: reverse ? max : min,
    end: reverse ? min : max
  };
}
function defaultClip(xScale, yScale, allowedOverflow) {
  if (allowedOverflow === false) {
    return false;
  }
  const x = scaleClip(xScale, allowedOverflow);
  const y = scaleClip(yScale, allowedOverflow);
  return {
    top: y.end,
    right: x.end,
    bottom: y.start,
    left: x.start
  };
}
function toClip(value) {
  let t2, r, b, l;
  if (isObject(value)) {
    t2 = value.top;
    r = value.right;
    b = value.bottom;
    l = value.left;
  } else {
    t2 = r = b = l = value;
  }
  return {
    top: t2,
    right: r,
    bottom: b,
    left: l,
    disabled: value === false
  };
}
function getSortedDatasetIndices(chart, filterVisible) {
  const keys = [];
  const metasets = chart._getSortedDatasetMetas(filterVisible);
  let i, ilen;
  for (i = 0, ilen = metasets.length; i < ilen; ++i) {
    keys.push(metasets[i].index);
  }
  return keys;
}
function applyStack(stack, value, dsIndex, options = {}) {
  const keys = stack.keys;
  const singleMode = options.mode === "single";
  let i, ilen, datasetIndex, otherValue;
  if (value === null) {
    return;
  }
  for (i = 0, ilen = keys.length; i < ilen; ++i) {
    datasetIndex = +keys[i];
    if (datasetIndex === dsIndex) {
      if (options.all) {
        continue;
      }
      break;
    }
    otherValue = stack.values[datasetIndex];
    if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {
      value += otherValue;
    }
  }
  return value;
}
function convertObjectDataToArray(data) {
  const keys = Object.keys(data);
  const adata = new Array(keys.length);
  let i, ilen, key;
  for (i = 0, ilen = keys.length; i < ilen; ++i) {
    key = keys[i];
    adata[i] = {
      x: key,
      y: data[key]
    };
  }
  return adata;
}
function isStacked(scale, meta) {
  const stacked = scale && scale.options.stacked;
  return stacked || stacked === void 0 && meta.stack !== void 0;
}
function getStackKey(indexScale, valueScale, meta) {
  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;
}
function getUserBounds(scale) {
  const { min, max, minDefined, maxDefined } = scale.getUserBounds();
  return {
    min: minDefined ? min : Number.NEGATIVE_INFINITY,
    max: maxDefined ? max : Number.POSITIVE_INFINITY
  };
}
function getOrCreateStack(stacks, stackKey, indexValue) {
  const subStack = stacks[stackKey] || (stacks[stackKey] = {});
  return subStack[indexValue] || (subStack[indexValue] = {});
}
function getLastIndexInStack(stack, vScale, positive, type) {
  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {
    const value = stack[meta.index];
    if (positive && value > 0 || !positive && value < 0) {
      return meta.index;
    }
  }
  return null;
}
function updateStacks(controller, parsed) {
  const { chart, _cachedMeta: meta } = controller;
  const stacks = chart._stacks || (chart._stacks = {});
  const { iScale, vScale, index: datasetIndex } = meta;
  const iAxis = iScale.axis;
  const vAxis = vScale.axis;
  const key = getStackKey(iScale, vScale, meta);
  const ilen = parsed.length;
  let stack;
  for (let i = 0; i < ilen; ++i) {
    const item = parsed[i];
    const { [iAxis]: index, [vAxis]: value } = item;
    const itemStacks = item._stacks || (item._stacks = {});
    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
    stack[datasetIndex] = value;
    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
    const visualValues = stack._visualValues || (stack._visualValues = {});
    visualValues[datasetIndex] = value;
  }
}
function getFirstScaleId(chart, axis) {
  const scales = chart.scales;
  return Object.keys(scales).filter((key) => scales[key].axis === axis).shift();
}
function createDatasetContext(parent, index) {
  return createContext(parent, {
    active: false,
    dataset: void 0,
    datasetIndex: index,
    index,
    mode: "default",
    type: "dataset"
  });
}
function createDataContext(parent, index, element) {
  return createContext(parent, {
    active: false,
    dataIndex: index,
    parsed: void 0,
    raw: void 0,
    element,
    index,
    mode: "default",
    type: "data"
  });
}
function clearStacks(meta, items) {
  const datasetIndex = meta.controller.index;
  const axis = meta.vScale && meta.vScale.axis;
  if (!axis) {
    return;
  }
  items = items || meta._parsed;
  for (const parsed of items) {
    const stacks = parsed._stacks;
    if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) {
      return;
    }
    delete stacks[axis][datasetIndex];
    if (stacks[axis]._visualValues !== void 0 && stacks[axis]._visualValues[datasetIndex] !== void 0) {
      delete stacks[axis]._visualValues[datasetIndex];
    }
  }
}
var isDirectUpdateMode = (mode) => mode === "reset" || mode === "none";
var cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);
var createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && {
  keys: getSortedDatasetIndices(chart, true),
  values: null
};
var DatasetController = class {
  constructor(chart, datasetIndex) {
    this.chart = chart;
    this._ctx = chart.ctx;
    this.index = datasetIndex;
    this._cachedDataOpts = {};
    this._cachedMeta = this.getMeta();
    this._type = this._cachedMeta.type;
    this.options = void 0;
    this._parsing = false;
    this._data = void 0;
    this._objectData = void 0;
    this._sharedOptions = void 0;
    this._drawStart = void 0;
    this._drawCount = void 0;
    this.enableOptionSharing = false;
    this.supportsDecimation = false;
    this.$context = void 0;
    this._syncList = [];
    this.datasetElementType = new.target.datasetElementType;
    this.dataElementType = new.target.dataElementType;
    this.initialize();
  }
  initialize() {
    const meta = this._cachedMeta;
    this.configure();
    this.linkScales();
    meta._stacked = isStacked(meta.vScale, meta);
    this.addElements();
    if (this.options.fill && !this.chart.isPluginEnabled("filler")) {
      console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
    }
  }
  updateIndex(datasetIndex) {
    if (this.index !== datasetIndex) {
      clearStacks(this._cachedMeta);
    }
    this.index = datasetIndex;
  }
  linkScales() {
    const chart = this.chart;
    const meta = this._cachedMeta;
    const dataset = this.getDataset();
    const chooseId = (axis, x, y, r) => axis === "x" ? x : axis === "r" ? r : y;
    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, "x"));
    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, "y"));
    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, "r"));
    const indexAxis = meta.indexAxis;
    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
    meta.xScale = this.getScaleForId(xid);
    meta.yScale = this.getScaleForId(yid);
    meta.rScale = this.getScaleForId(rid);
    meta.iScale = this.getScaleForId(iid);
    meta.vScale = this.getScaleForId(vid);
  }
  getDataset() {
    return this.chart.data.datasets[this.index];
  }
  getMeta() {
    return this.chart.getDatasetMeta(this.index);
  }
  getScaleForId(scaleID) {
    return this.chart.scales[scaleID];
  }
  _getOtherScale(scale) {
    const meta = this._cachedMeta;
    return scale === meta.iScale ? meta.vScale : meta.iScale;
  }
  reset() {
    this._update("reset");
  }
  _destroy() {
    const meta = this._cachedMeta;
    if (this._data) {
      unlistenArrayEvents(this._data, this);
    }
    if (meta._stacked) {
      clearStacks(meta);
    }
  }
  _dataCheck() {
    const dataset = this.getDataset();
    const data = dataset.data || (dataset.data = []);
    const _data = this._data;
    if (isObject(data)) {
      this._data = convertObjectDataToArray(data);
    } else if (_data !== data) {
      if (_data) {
        unlistenArrayEvents(_data, this);
        const meta = this._cachedMeta;
        clearStacks(meta);
        meta._parsed = [];
      }
      if (data && Object.isExtensible(data)) {
        listenArrayEvents(data, this);
      }
      this._syncList = [];
      this._data = data;
    }
  }
  addElements() {
    const meta = this._cachedMeta;
    this._dataCheck();
    if (this.datasetElementType) {
      meta.dataset = new this.datasetElementType();
    }
  }
  buildOrUpdateElements(resetNewElements) {
    const meta = this._cachedMeta;
    const dataset = this.getDataset();
    let stackChanged = false;
    this._dataCheck();
    const oldStacked = meta._stacked;
    meta._stacked = isStacked(meta.vScale, meta);
    if (meta.stack !== dataset.stack) {
      stackChanged = true;
      clearStacks(meta);
      meta.stack = dataset.stack;
    }
    this._resyncElements(resetNewElements);
    if (stackChanged || oldStacked !== meta._stacked) {
      updateStacks(this, meta._parsed);
    }
  }
  configure() {
    const config = this.chart.config;
    const scopeKeys = config.datasetScopeKeys(this._type);
    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
    this.options = config.createResolver(scopes, this.getContext());
    this._parsing = this.options.parsing;
    this._cachedDataOpts = {};
  }
  parse(start, count) {
    const { _cachedMeta: meta, _data: data } = this;
    const { iScale, _stacked } = meta;
    const iAxis = iScale.axis;
    let sorted = start === 0 && count === data.length ? true : meta._sorted;
    let prev = start > 0 && meta._parsed[start - 1];
    let i, cur, parsed;
    if (this._parsing === false) {
      meta._parsed = data;
      meta._sorted = true;
      parsed = data;
    } else {
      if (isArray(data[start])) {
        parsed = this.parseArrayData(meta, data, start, count);
      } else if (isObject(data[start])) {
        parsed = this.parseObjectData(meta, data, start, count);
      } else {
        parsed = this.parsePrimitiveData(meta, data, start, count);
      }
      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];
      for (i = 0; i < count; ++i) {
        meta._parsed[i + start] = cur = parsed[i];
        if (sorted) {
          if (isNotInOrderComparedToPrev()) {
            sorted = false;
          }
          prev = cur;
        }
      }
      meta._sorted = sorted;
    }
    if (_stacked) {
      updateStacks(this, parsed);
    }
  }
  parsePrimitiveData(meta, data, start, count) {
    const { iScale, vScale } = meta;
    const iAxis = iScale.axis;
    const vAxis = vScale.axis;
    const labels = iScale.getLabels();
    const singleScale = iScale === vScale;
    const parsed = new Array(count);
    let i, ilen, index;
    for (i = 0, ilen = count; i < ilen; ++i) {
      index = i + start;
      parsed[i] = {
        [iAxis]: singleScale || iScale.parse(labels[index], index),
        [vAxis]: vScale.parse(data[index], index)
      };
    }
    return parsed;
  }
  parseArrayData(meta, data, start, count) {
    const { xScale, yScale } = meta;
    const parsed = new Array(count);
    let i, ilen, index, item;
    for (i = 0, ilen = count; i < ilen; ++i) {
      index = i + start;
      item = data[index];
      parsed[i] = {
        x: xScale.parse(item[0], index),
        y: yScale.parse(item[1], index)
      };
    }
    return parsed;
  }
  parseObjectData(meta, data, start, count) {
    const { xScale, yScale } = meta;
    const { xAxisKey = "x", yAxisKey = "y" } = this._parsing;
    const parsed = new Array(count);
    let i, ilen, index, item;
    for (i = 0, ilen = count; i < ilen; ++i) {
      index = i + start;
      item = data[index];
      parsed[i] = {
        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),
        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)
      };
    }
    return parsed;
  }
  getParsed(index) {
    return this._cachedMeta._parsed[index];
  }
  getDataElement(index) {
    return this._cachedMeta.data[index];
  }
  applyStack(scale, parsed, mode) {
    const chart = this.chart;
    const meta = this._cachedMeta;
    const value = parsed[scale.axis];
    const stack = {
      keys: getSortedDatasetIndices(chart, true),
      values: parsed._stacks[scale.axis]._visualValues
    };
    return applyStack(stack, value, meta.index, {
      mode
    });
  }
  updateRangeFromParsed(range, scale, parsed, stack) {
    const parsedValue = parsed[scale.axis];
    let value = parsedValue === null ? NaN : parsedValue;
    const values = stack && parsed._stacks[scale.axis];
    if (stack && values) {
      stack.values = values;
      value = applyStack(stack, parsedValue, this._cachedMeta.index);
    }
    range.min = Math.min(range.min, value);
    range.max = Math.max(range.max, value);
  }
  getMinMax(scale, canStack) {
    const meta = this._cachedMeta;
    const _parsed = meta._parsed;
    const sorted = meta._sorted && scale === meta.iScale;
    const ilen = _parsed.length;
    const otherScale = this._getOtherScale(scale);
    const stack = createStack(canStack, meta, this.chart);
    const range = {
      min: Number.POSITIVE_INFINITY,
      max: Number.NEGATIVE_INFINITY
    };
    const { min: otherMin, max: otherMax } = getUserBounds(otherScale);
    let i, parsed;
    function _skip() {
      parsed = _parsed[i];
      const otherValue = parsed[otherScale.axis];
      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
    }
    for (i = 0; i < ilen; ++i) {
      if (_skip()) {
        continue;
      }
      this.updateRangeFromParsed(range, scale, parsed, stack);
      if (sorted) {
        break;
      }
    }
    if (sorted) {
      for (i = ilen - 1; i >= 0; --i) {
        if (_skip()) {
          continue;
        }
        this.updateRangeFromParsed(range, scale, parsed, stack);
        break;
      }
    }
    return range;
  }
  getAllParsedValues(scale) {
    const parsed = this._cachedMeta._parsed;
    const values = [];
    let i, ilen, value;
    for (i = 0, ilen = parsed.length; i < ilen; ++i) {
      value = parsed[i][scale.axis];
      if (isNumberFinite(value)) {
        values.push(value);
      }
    }
    return values;
  }
  getMaxOverflow() {
    return false;
  }
  getLabelAndValue(index) {
    const meta = this._cachedMeta;
    const iScale = meta.iScale;
    const vScale = meta.vScale;
    const parsed = this.getParsed(index);
    return {
      label: iScale ? "" + iScale.getLabelForValue(parsed[iScale.axis]) : "",
      value: vScale ? "" + vScale.getLabelForValue(parsed[vScale.axis]) : ""
    };
  }
  _update(mode) {
    const meta = this._cachedMeta;
    this.update(mode || "default");
    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
  }
  update(mode) {
  }
  draw() {
    const ctx = this._ctx;
    const chart = this.chart;
    const meta = this._cachedMeta;
    const elements = meta.data || [];
    const area = chart.chartArea;
    const active = [];
    const start = this._drawStart || 0;
    const count = this._drawCount || elements.length - start;
    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
    let i;
    if (meta.dataset) {
      meta.dataset.draw(ctx, area, start, count);
    }
    for (i = start; i < start + count; ++i) {
      const element = elements[i];
      if (element.hidden) {
        continue;
      }
      if (element.active && drawActiveElementsOnTop) {
        active.push(element);
      } else {
        element.draw(ctx, area);
      }
    }
    for (i = 0; i < active.length; ++i) {
      active[i].draw(ctx, area);
    }
  }
  getStyle(index, active) {
    const mode = active ? "active" : "default";
    return index === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);
  }
  getContext(index, active, mode) {
    const dataset = this.getDataset();
    let context;
    if (index >= 0 && index < this._cachedMeta.data.length) {
      const element = this._cachedMeta.data[index];
      context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));
      context.parsed = this.getParsed(index);
      context.raw = dataset.data[index];
      context.index = context.dataIndex = index;
    } else {
      context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));
      context.dataset = dataset;
      context.index = context.datasetIndex = this.index;
    }
    context.active = !!active;
    context.mode = mode;
    return context;
  }
  resolveDatasetElementOptions(mode) {
    return this._resolveElementOptions(this.datasetElementType.id, mode);
  }
  resolveDataElementOptions(index, mode) {
    return this._resolveElementOptions(this.dataElementType.id, mode, index);
  }
  _resolveElementOptions(elementType, mode = "default", index) {
    const active = mode === "active";
    const cache = this._cachedDataOpts;
    const cacheKey = elementType + "-" + mode;
    const cached = cache[cacheKey];
    const sharing = this.enableOptionSharing && defined(index);
    if (cached) {
      return cloneIfNotShared(cached, sharing);
    }
    const config = this.chart.config;
    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
    const prefixes = active ? [
      `${elementType}Hover`,
      "hover",
      elementType,
      ""
    ] : [
      elementType,
      ""
    ];
    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
    const names2 = Object.keys(defaults.elements[elementType]);
    const context = () => this.getContext(index, active, mode);
    const values = config.resolveNamedOptions(scopes, names2, context, prefixes);
    if (values.$shared) {
      values.$shared = sharing;
      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
    }
    return values;
  }
  _resolveAnimations(index, transition, active) {
    const chart = this.chart;
    const cache = this._cachedDataOpts;
    const cacheKey = `animation-${transition}`;
    const cached = cache[cacheKey];
    if (cached) {
      return cached;
    }
    let options;
    if (chart.options.animation !== false) {
      const config = this.chart.config;
      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
      options = config.createResolver(scopes, this.getContext(index, active, transition));
    }
    const animations = new Animations(chart, options && options.animations);
    if (options && options._cacheable) {
      cache[cacheKey] = Object.freeze(animations);
    }
    return animations;
  }
  getSharedOptions(options) {
    if (!options.$shared) {
      return;
    }
    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));
  }
  includeOptions(mode, sharedOptions) {
    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
  }
  _getSharedOptions(start, mode) {
    const firstOpts = this.resolveDataElementOptions(start, mode);
    const previouslySharedOptions = this._sharedOptions;
    const sharedOptions = this.getSharedOptions(firstOpts);
    const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;
    this.updateSharedOptions(sharedOptions, mode, firstOpts);
    return {
      sharedOptions,
      includeOptions
    };
  }
  updateElement(element, index, properties, mode) {
    if (isDirectUpdateMode(mode)) {
      Object.assign(element, properties);
    } else {
      this._resolveAnimations(index, mode).update(element, properties);
    }
  }
  updateSharedOptions(sharedOptions, mode, newOptions) {
    if (sharedOptions && !isDirectUpdateMode(mode)) {
      this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions);
    }
  }
  _setStyle(element, index, mode, active) {
    element.active = active;
    const options = this.getStyle(index, active);
    this._resolveAnimations(index, mode, active).update(element, {
      options: !active && this.getSharedOptions(options) || options
    });
  }
  removeHoverStyle(element, datasetIndex, index) {
    this._setStyle(element, index, "active", false);
  }
  setHoverStyle(element, datasetIndex, index) {
    this._setStyle(element, index, "active", true);
  }
  _removeDatasetHoverStyle() {
    const element = this._cachedMeta.dataset;
    if (element) {
      this._setStyle(element, void 0, "active", false);
    }
  }
  _setDatasetHoverStyle() {
    const element = this._cachedMeta.dataset;
    if (element) {
      this._setStyle(element, void 0, "active", true);
    }
  }
  _resyncElements(resetNewElements) {
    const data = this._data;
    const elements = this._cachedMeta.data;
    for (const [method, arg1, arg2] of this._syncList) {
      this[method](arg1, arg2);
    }
    this._syncList = [];
    const numMeta = elements.length;
    const numData = data.length;
    const count = Math.min(numData, numMeta);
    if (count) {
      this.parse(0, count);
    }
    if (numData > numMeta) {
      this._insertElements(numMeta, numData - numMeta, resetNewElements);
    } else if (numData < numMeta) {
      this._removeElements(numData, numMeta - numData);
    }
  }
  _insertElements(start, count, resetNewElements = true) {
    const meta = this._cachedMeta;
    const data = meta.data;
    const end = start + count;
    let i;
    const move = (arr) => {
      arr.length += count;
      for (i = arr.length - 1; i >= end; i--) {
        arr[i] = arr[i - count];
      }
    };
    move(data);
    for (i = start; i < end; ++i) {
      data[i] = new this.dataElementType();
    }
    if (this._parsing) {
      move(meta._parsed);
    }
    this.parse(start, count);
    if (resetNewElements) {
      this.updateElements(data, start, count, "reset");
    }
  }
  updateElements(element, start, count, mode) {
  }
  _removeElements(start, count) {
    const meta = this._cachedMeta;
    if (this._parsing) {
      const removed = meta._parsed.splice(start, count);
      if (meta._stacked) {
        clearStacks(meta, removed);
      }
    }
    meta.data.splice(start, count);
  }
  _sync(args) {
    if (this._parsing) {
      this._syncList.push(args);
    } else {
      const [method, arg1, arg2] = args;
      this[method](arg1, arg2);
    }
    this.chart._dataChanges.push([
      this.index,
      ...args
    ]);
  }
  _onDataPush() {
    const count = arguments.length;
    this._sync([
      "_insertElements",
      this.getDataset().data.length - count,
      count
    ]);
  }
  _onDataPop() {
    this._sync([
      "_removeElements",
      this._cachedMeta.data.length - 1,
      1
    ]);
  }
  _onDataShift() {
    this._sync([
      "_removeElements",
      0,
      1
    ]);
  }
  _onDataSplice(start, count) {
    if (count) {
      this._sync([
        "_removeElements",
        start,
        count
      ]);
    }
    const newCount = arguments.length - 2;
    if (newCount) {
      this._sync([
        "_insertElements",
        start,
        newCount
      ]);
    }
  }
  _onDataUnshift() {
    this._sync([
      "_insertElements",
      0,
      arguments.length
    ]);
  }
};
__publicField(DatasetController, "defaults", {});
__publicField(DatasetController, "datasetElementType", null);
__publicField(DatasetController, "dataElementType", null);
function getAllScaleValues(scale, type) {
  if (!scale._cache.$bar) {
    const visibleMetas = scale.getMatchingVisibleMetas(type);
    let values = [];
    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {
      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
    }
    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));
  }
  return scale._cache.$bar;
}
function computeMinSampleSize(meta) {
  const scale = meta.iScale;
  const values = getAllScaleValues(scale, meta.type);
  let min = scale._length;
  let i, ilen, curr, prev;
  const updateMinAndPrev = () => {
    if (curr === 32767 || curr === -32768) {
      return;
    }
    if (defined(prev)) {
      min = Math.min(min, Math.abs(curr - prev) || min);
    }
    prev = curr;
  };
  for (i = 0, ilen = values.length; i < ilen; ++i) {
    curr = scale.getPixelForValue(values[i]);
    updateMinAndPrev();
  }
  prev = void 0;
  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
    curr = scale.getPixelForTick(i);
    updateMinAndPrev();
  }
  return min;
}
function computeFitCategoryTraits(index, ruler, options, stackCount) {
  const thickness = options.barThickness;
  let size, ratio;
  if (isNullOrUndef(thickness)) {
    size = ruler.min * options.categoryPercentage;
    ratio = options.barPercentage;
  } else {
    size = thickness * stackCount;
    ratio = 1;
  }
  return {
    chunk: size / stackCount,
    ratio,
    start: ruler.pixels[index] - size / 2
  };
}
function computeFlexCategoryTraits(index, ruler, options, stackCount) {
  const pixels = ruler.pixels;
  const curr = pixels[index];
  let prev = index > 0 ? pixels[index - 1] : null;
  let next = index < pixels.length - 1 ? pixels[index + 1] : null;
  const percent = options.categoryPercentage;
  if (prev === null) {
    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
  }
  if (next === null) {
    next = curr + curr - prev;
  }
  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;
  const size = Math.abs(next - prev) / 2 * percent;
  return {
    chunk: size / stackCount,
    ratio: options.barPercentage,
    start
  };
}
function parseFloatBar(entry, item, vScale, i) {
  const startValue = vScale.parse(entry[0], i);
  const endValue = vScale.parse(entry[1], i);
  const min = Math.min(startValue, endValue);
  const max = Math.max(startValue, endValue);
  let barStart = min;
  let barEnd = max;
  if (Math.abs(min) > Math.abs(max)) {
    barStart = max;
    barEnd = min;
  }
  item[vScale.axis] = barEnd;
  item._custom = {
    barStart,
    barEnd,
    start: startValue,
    end: endValue,
    min,
    max
  };
}
function parseValue(entry, item, vScale, i) {
  if (isArray(entry)) {
    parseFloatBar(entry, item, vScale, i);
  } else {
    item[vScale.axis] = vScale.parse(entry, i);
  }
  return item;
}
function parseArrayOrPrimitive(meta, data, start, count) {
  const iScale = meta.iScale;
  const vScale = meta.vScale;
  const labels = iScale.getLabels();
  const singleScale = iScale === vScale;
  const parsed = [];
  let i, ilen, item, entry;
  for (i = start, ilen = start + count; i < ilen; ++i) {
    entry = data[i];
    item = {};
    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
    parsed.push(parseValue(entry, item, vScale, i));
  }
  return parsed;
}
function isFloatBar(custom) {
  return custom && custom.barStart !== void 0 && custom.barEnd !== void 0;
}
function barSign(size, vScale, actualBase) {
  if (size !== 0) {
    return sign(size);
  }
  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
}
function borderProps(properties) {
  let reverse, start, end, top, bottom;
  if (properties.horizontal) {
    reverse = properties.base > properties.x;
    start = "left";
    end = "right";
  } else {
    reverse = properties.base < properties.y;
    start = "bottom";
    end = "top";
  }
  if (reverse) {
    top = "end";
    bottom = "start";
  } else {
    top = "start";
    bottom = "end";
  }
  return {
    start,
    end,
    reverse,
    top,
    bottom
  };
}
function setBorderSkipped(properties, options, stack, index) {
  let edge = options.borderSkipped;
  const res = {};
  if (!edge) {
    properties.borderSkipped = res;
    return;
  }
  if (edge === true) {
    properties.borderSkipped = {
      top: true,
      right: true,
      bottom: true,
      left: true
    };
    return;
  }
  const { start, end, reverse, top, bottom } = borderProps(properties);
  if (edge === "middle" && stack) {
    properties.enableBorderRadius = true;
    if ((stack._top || 0) === index) {
      edge = top;
    } else if ((stack._bottom || 0) === index) {
      edge = bottom;
    } else {
      res[parseEdge(bottom, start, end, reverse)] = true;
      edge = top;
    }
  }
  res[parseEdge(edge, start, end, reverse)] = true;
  properties.borderSkipped = res;
}
function parseEdge(edge, a, b, reverse) {
  if (reverse) {
    edge = swap(edge, a, b);
    edge = startEnd(edge, b, a);
  } else {
    edge = startEnd(edge, a, b);
  }
  return edge;
}
function swap(orig, v1, v2) {
  return orig === v1 ? v2 : orig === v2 ? v1 : orig;
}
function startEnd(v, start, end) {
  return v === "start" ? start : v === "end" ? end : v;
}
function setInflateAmount(properties, { inflateAmount }, ratio) {
  properties.inflateAmount = inflateAmount === "auto" ? ratio === 1 ? 0.33 : 0 : inflateAmount;
}
var BarController = class extends DatasetController {
  parsePrimitiveData(meta, data, start, count) {
    return parseArrayOrPrimitive(meta, data, start, count);
  }
  parseArrayData(meta, data, start, count) {
    return parseArrayOrPrimitive(meta, data, start, count);
  }
  parseObjectData(meta, data, start, count) {
    const { iScale, vScale } = meta;
    const { xAxisKey = "x", yAxisKey = "y" } = this._parsing;
    const iAxisKey = iScale.axis === "x" ? xAxisKey : yAxisKey;
    const vAxisKey = vScale.axis === "x" ? xAxisKey : yAxisKey;
    const parsed = [];
    let i, ilen, item, obj;
    for (i = start, ilen = start + count; i < ilen; ++i) {
      obj = data[i];
      item = {};
      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);
      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));
    }
    return parsed;
  }
  updateRangeFromParsed(range, scale, parsed, stack) {
    super.updateRangeFromParsed(range, scale, parsed, stack);
    const custom = parsed._custom;
    if (custom && scale === this._cachedMeta.vScale) {
      range.min = Math.min(range.min, custom.min);
      range.max = Math.max(range.max, custom.max);
    }
  }
  getMaxOverflow() {
    return 0;
  }
  getLabelAndValue(index) {
    const meta = this._cachedMeta;
    const { iScale, vScale } = meta;
    const parsed = this.getParsed(index);
    const custom = parsed._custom;
    const value = isFloatBar(custom) ? "[" + custom.start + ", " + custom.end + "]" : "" + vScale.getLabelForValue(parsed[vScale.axis]);
    return {
      label: "" + iScale.getLabelForValue(parsed[iScale.axis]),
      value
    };
  }
  initialize() {
    this.enableOptionSharing = true;
    super.initialize();
    const meta = this._cachedMeta;
    meta.stack = this.getDataset().stack;
  }
  update(mode) {
    const meta = this._cachedMeta;
    this.updateElements(meta.data, 0, meta.data.length, mode);
  }
  updateElements(bars, start, count, mode) {
    const reset2 = mode === "reset";
    const { index, _cachedMeta: { vScale } } = this;
    const base = vScale.getBasePixel();
    const horizontal = vScale.isHorizontal();
    const ruler = this._getRuler();
    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);
    for (let i = start; i < start + count; i++) {
      const parsed = this.getParsed(i);
      const vpixels = reset2 || isNullOrUndef(parsed[vScale.axis]) ? {
        base,
        head: base
      } : this._calculateBarValuePixels(i);
      const ipixels = this._calculateBarIndexPixels(i, ruler);
      const stack = (parsed._stacks || {})[vScale.axis];
      const properties = {
        horizontal,
        base: vpixels.base,
        enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,
        x: horizontal ? vpixels.head : ipixels.center,
        y: horizontal ? ipixels.center : vpixels.head,
        height: horizontal ? ipixels.size : Math.abs(vpixels.size),
        width: horizontal ? Math.abs(vpixels.size) : ipixels.size
      };
      if (includeOptions) {
        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? "active" : mode);
      }
      const options = properties.options || bars[i].options;
      setBorderSkipped(properties, options, stack, index);
      setInflateAmount(properties, options, ruler.ratio);
      this.updateElement(bars[i], i, properties, mode);
    }
  }
  _getStacks(last, dataIndex) {
    const { iScale } = this._cachedMeta;
    const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped);
    const stacked = iScale.options.stacked;
    const stacks = [];
    const skipNull = (meta) => {
      const parsed = meta.controller.getParsed(dataIndex);
      const val = parsed && parsed[meta.vScale.axis];
      if (isNullOrUndef(val) || isNaN(val)) {
        return true;
      }
    };
    for (const meta of metasets) {
      if (dataIndex !== void 0 && skipNull(meta)) {
        continue;
      }
      if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) {
        stacks.push(meta.stack);
      }
      if (meta.index === last) {
        break;
      }
    }
    if (!stacks.length) {
      stacks.push(void 0);
    }
    return stacks;
  }
  _getStackCount(index) {
    return this._getStacks(void 0, index).length;
  }
  _getStackIndex(datasetIndex, name, dataIndex) {
    const stacks = this._getStacks(datasetIndex, dataIndex);
    const index = name !== void 0 ? stacks.indexOf(name) : -1;
    return index === -1 ? stacks.length - 1 : index;
  }
  _getRuler() {
    const opts = this.options;
    const meta = this._cachedMeta;
    const iScale = meta.iScale;
    const pixels = [];
    let i, ilen;
    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {
      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
    }
    const barThickness = opts.barThickness;
    const min = barThickness || computeMinSampleSize(meta);
    return {
      min,
      pixels,
      start: iScale._startPixel,
      end: iScale._endPixel,
      stackCount: this._getStackCount(),
      scale: iScale,
      grouped: opts.grouped,
      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
    };
  }
  _calculateBarValuePixels(index) {
    const { _cachedMeta: { vScale, _stacked, index: datasetIndex }, options: { base: baseValue, minBarLength } } = this;
    const actualBase = baseValue || 0;
    const parsed = this.getParsed(index);
    const custom = parsed._custom;
    const floating = isFloatBar(custom);
    let value = parsed[vScale.axis];
    let start = 0;
    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
    let head, size;
    if (length !== value) {
      start = length - value;
      length = value;
    }
    if (floating) {
      value = custom.barStart;
      length = custom.barEnd - custom.barStart;
      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {
        start = 0;
      }
      start += value;
    }
    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;
    let base = vScale.getPixelForValue(startValue);
    if (this.chart.getDataVisibility(index)) {
      head = vScale.getPixelForValue(start + length);
    } else {
      head = base;
    }
    size = head - base;
    if (Math.abs(size) < minBarLength) {
      size = barSign(size, vScale, actualBase) * minBarLength;
      if (value === actualBase) {
        base -= size / 2;
      }
      const startPixel = vScale.getPixelForDecimal(0);
      const endPixel = vScale.getPixelForDecimal(1);
      const min = Math.min(startPixel, endPixel);
      const max = Math.max(startPixel, endPixel);
      base = Math.max(Math.min(base, max), min);
      head = base + size;
      if (_stacked && !floating) {
        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);
      }
    }
    if (base === vScale.getPixelForValue(actualBase)) {
      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;
      base += halfGrid;
      size -= halfGrid;
    }
    return {
      size,
      base,
      head,
      center: head + size / 2
    };
  }
  _calculateBarIndexPixels(index, ruler) {
    const scale = ruler.scale;
    const options = this.options;
    const skipNull = options.skipNull;
    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
    let center, size;
    if (ruler.grouped) {
      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
      const range = options.barThickness === "flex" ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : void 0);
      center = range.start + range.chunk * stackIndex + range.chunk / 2;
      size = Math.min(maxBarThickness, range.chunk * range.ratio);
    } else {
      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
    }
    return {
      base: center - size / 2,
      head: center + size / 2,
      center,
      size
    };
  }
  draw() {
    const meta = this._cachedMeta;
    const vScale = meta.vScale;
    const rects = meta.data;
    const ilen = rects.length;
    let i = 0;
    for (; i < ilen; ++i) {
      if (this.getParsed(i)[vScale.axis] !== null) {
        rects[i].draw(this._ctx);
      }
    }
  }
};
__publicField(BarController, "id", "bar");
__publicField(BarController, "defaults", {
  datasetElementType: false,
  dataElementType: "bar",
  categoryPercentage: 0.8,
  barPercentage: 0.9,
  grouped: true,
  animations: {
    numbers: {
      type: "number",
      properties: [
        "x",
        "y",
        "base",
        "width",
        "height"
      ]
    }
  }
});
__publicField(BarController, "overrides", {
  scales: {
    _index_: {
      type: "category",
      offset: true,
      grid: {
        offset: true
      }
    },
    _value_: {
      type: "linear",
      beginAtZero: true
    }
  }
});
function getRatioAndOffset(rotation, circumference, cutout) {
  let ratioX = 1;
  let ratioY = 1;
  let offsetX = 0;
  let offsetY = 0;
  if (circumference < TAU) {
    const startAngle = rotation;
    const endAngle = startAngle + circumference;
    const startX = Math.cos(startAngle);
    const startY = Math.sin(startAngle);
    const endX = Math.cos(endAngle);
    const endY = Math.sin(endAngle);
    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
    const maxX = calcMax(0, startX, endX);
    const maxY = calcMax(HALF_PI, startY, endY);
    const minX = calcMin(PI, startX, endX);
    const minY = calcMin(PI + HALF_PI, startY, endY);
    ratioX = (maxX - minX) / 2;
    ratioY = (maxY - minY) / 2;
    offsetX = -(maxX + minX) / 2;
    offsetY = -(maxY + minY) / 2;
  }
  return {
    ratioX,
    ratioY,
    offsetX,
    offsetY
  };
}
var DoughnutController = class extends DatasetController {
  constructor(chart, datasetIndex) {
    super(chart, datasetIndex);
    this.enableOptionSharing = true;
    this.innerRadius = void 0;
    this.outerRadius = void 0;
    this.offsetX = void 0;
    this.offsetY = void 0;
  }
  linkScales() {
  }
  parse(start, count) {
    const data = this.getDataset().data;
    const meta = this._cachedMeta;
    if (this._parsing === false) {
      meta._parsed = data;
    } else {
      let getter = (i2) => +data[i2];
      if (isObject(data[start])) {
        const { key = "value" } = this._parsing;
        getter = (i2) => +resolveObjectKey(data[i2], key);
      }
      let i, ilen;
      for (i = start, ilen = start + count; i < ilen; ++i) {
        meta._parsed[i] = getter(i);
      }
    }
  }
  _getRotation() {
    return toRadians(this.options.rotation - 90);
  }
  _getCircumference() {
    return toRadians(this.options.circumference);
  }
  _getRotationExtents() {
    let min = TAU;
    let max = -TAU;
    for (let i = 0; i < this.chart.data.datasets.length; ++i) {
      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {
        const controller = this.chart.getDatasetMeta(i).controller;
        const rotation = controller._getRotation();
        const circumference = controller._getCircumference();
        min = Math.min(min, rotation);
        max = Math.max(max, rotation + circumference);
      }
    }
    return {
      rotation: min,
      circumference: max - min
    };
  }
  update(mode) {
    const chart = this.chart;
    const { chartArea } = chart;
    const meta = this._cachedMeta;
    const arcs = meta.data;
    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);
    const chartWeight = this._getRingWeight(this.index);
    const { circumference, rotation } = this._getRotationExtents();
    const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout);
    const maxWidth = (chartArea.width - spacing) / ratioX;
    const maxHeight = (chartArea.height - spacing) / ratioY;
    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
    const outerRadius = toDimension(this.options.radius, maxRadius);
    const innerRadius = Math.max(outerRadius * cutout, 0);
    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
    this.offsetX = offsetX * outerRadius;
    this.offsetY = offsetY * outerRadius;
    meta.total = this.calculateTotal();
    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
    this.updateElements(arcs, 0, arcs.length, mode);
  }
  _circumference(i, reset2) {
    const opts = this.options;
    const meta = this._cachedMeta;
    const circumference = this._getCircumference();
    if (reset2 && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
      return 0;
    }
    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);
  }
  updateElements(arcs, start, count, mode) {
    const reset2 = mode === "reset";
    const chart = this.chart;
    const chartArea = chart.chartArea;
    const opts = chart.options;
    const animationOpts = opts.animation;
    const centerX = (chartArea.left + chartArea.right) / 2;
    const centerY = (chartArea.top + chartArea.bottom) / 2;
    const animateScale = reset2 && animationOpts.animateScale;
    const innerRadius = animateScale ? 0 : this.innerRadius;
    const outerRadius = animateScale ? 0 : this.outerRadius;
    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);
    let startAngle = this._getRotation();
    let i;
    for (i = 0; i < start; ++i) {
      startAngle += this._circumference(i, reset2);
    }
    for (i = start; i < start + count; ++i) {
      const circumference = this._circumference(i, reset2);
      const arc = arcs[i];
      const properties = {
        x: centerX + this.offsetX,
        y: centerY + this.offsetY,
        startAngle,
        endAngle: startAngle + circumference,
        circumference,
        outerRadius,
        innerRadius
      };
      if (includeOptions) {
        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? "active" : mode);
      }
      startAngle += circumference;
      this.updateElement(arc, i, properties, mode);
    }
  }
  calculateTotal() {
    const meta = this._cachedMeta;
    const metaData = meta.data;
    let total = 0;
    let i;
    for (i = 0; i < metaData.length; i++) {
      const value = meta._parsed[i];
      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
        total += Math.abs(value);
      }
    }
    return total;
  }
  calculateCircumference(value) {
    const total = this._cachedMeta.total;
    if (total > 0 && !isNaN(value)) {
      return TAU * (Math.abs(value) / total);
    }
    return 0;
  }
  getLabelAndValue(index) {
    const meta = this._cachedMeta;
    const chart = this.chart;
    const labels = chart.data.labels || [];
    const value = formatNumber(meta._parsed[index], chart.options.locale);
    return {
      label: labels[index] || "",
      value
    };
  }
  getMaxBorderWidth(arcs) {
    let max = 0;
    const chart = this.chart;
    let i, ilen, meta, controller, options;
    if (!arcs) {
      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
        if (chart.isDatasetVisible(i)) {
          meta = chart.getDatasetMeta(i);
          arcs = meta.data;
          controller = meta.controller;
          break;
        }
      }
    }
    if (!arcs) {
      return 0;
    }
    for (i = 0, ilen = arcs.length; i < ilen; ++i) {
      options = controller.resolveDataElementOptions(i);
      if (options.borderAlign !== "inner") {
        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);
      }
    }
    return max;
  }
  getMaxOffset(arcs) {
    let max = 0;
    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {
      const options = this.resolveDataElementOptions(i);
      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);
    }
    return max;
  }
  _getRingWeightOffset(datasetIndex) {
    let ringWeightOffset = 0;
    for (let i = 0; i < datasetIndex; ++i) {
      if (this.chart.isDatasetVisible(i)) {
        ringWeightOffset += this._getRingWeight(i);
      }
    }
    return ringWeightOffset;
  }
  _getRingWeight(datasetIndex) {
    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);
  }
  _getVisibleDatasetWeightTotal() {
    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
  }
};
__publicField(DoughnutController, "id", "doughnut");
__publicField(DoughnutController, "defaults", {
  datasetElementType: false,
  dataElementType: "arc",
  animation: {
    animateRotate: true,
    animateScale: false
  },
  animations: {
    numbers: {
      type: "number",
      properties: [
        "circumference",
        "endAngle",
        "innerRadius",
        "outerRadius",
        "startAngle",
        "x",
        "y",
        "offset",
        "borderWidth",
        "spacing"
      ]
    }
  },
  cutout: "50%",
  rotation: 0,
  circumference: 360,
  radius: "100%",
  spacing: 0,
  indexAxis: "r"
});
__publicField(DoughnutController, "descriptors", {
  _scriptable: (name) => name !== "spacing",
  _indexable: (name) => name !== "spacing" && !name.startsWith("borderDash") && !name.startsWith("hoverBorderDash")
});
__publicField(DoughnutController, "overrides", {
  aspectRatio: 1,
  plugins: {
    legend: {
      labels: {
        generateLabels(chart) {
          const data = chart.data;
          if (data.labels.length && data.datasets.length) {
            const { labels: { pointStyle, color: color2 } } = chart.legend.options;
            return data.labels.map((label, i) => {
              const meta = chart.getDatasetMeta(0);
              const style = meta.controller.getStyle(i);
              return {
                text: label,
                fillStyle: style.backgroundColor,
                strokeStyle: style.borderColor,
                fontColor: color2,
                lineWidth: style.borderWidth,
                pointStyle,
                hidden: !chart.getDataVisibility(i),
                index: i
              };
            });
          }
          return [];
        }
      },
      onClick(e, legendItem, legend) {
        legend.chart.toggleDataVisibility(legendItem.index);
        legend.chart.update();
      }
    }
  }
});
var PieController = class extends DoughnutController {
};
__publicField(PieController, "id", "pie");
__publicField(PieController, "defaults", {
  cutout: 0,
  rotation: 0,
  circumference: 360,
  radius: "100%"
});
function abstract() {
  throw new Error("This method is not implemented: Check that a complete date adapter is provided.");
}
var DateAdapterBase = class _DateAdapterBase {
  constructor(options) {
    __publicField(this, "options");
    this.options = options || {};
  }
  /**
  * Override default date adapter methods.
  * Accepts type parameter to define options type.
  * @example
  * Chart._adapters._date.override<{myAdapterOption: string}>({
  *   init() {
  *     console.log(this.options.myAdapterOption);
  *   }
  * })
  */
  static override(members) {
    Object.assign(_DateAdapterBase.prototype, members);
  }
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  init() {
  }
  formats() {
    return abstract();
  }
  parse() {
    return abstract();
  }
  format() {
    return abstract();
  }
  add() {
    return abstract();
  }
  diff() {
    return abstract();
  }
  startOf() {
    return abstract();
  }
  endOf() {
    return abstract();
  }
};
var adapters = {
  _date: DateAdapterBase
};
function binarySearch(metaset, axis, value, intersect) {
  const { controller, data, _sorted } = metaset;
  const iScale = controller._cachedMeta.iScale;
  if (iScale && axis === iScale.axis && axis !== "r" && _sorted && data.length) {
    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;
    if (!intersect) {
      return lookupMethod(data, axis, value);
    } else if (controller._sharedOptions) {
      const el = data[0];
      const range = typeof el.getRange === "function" && el.getRange(axis);
      if (range) {
        const start = lookupMethod(data, axis, value - range);
        const end = lookupMethod(data, axis, value + range);
        return {
          lo: start.lo,
          hi: end.hi
        };
      }
    }
  }
  return {
    lo: 0,
    hi: data.length - 1
  };
}
function evaluateInteractionItems(chart, axis, position, handler, intersect) {
  const metasets = chart.getSortedVisibleDatasetMetas();
  const value = position[axis];
  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {
    const { index, data } = metasets[i];
    const { lo, hi } = binarySearch(metasets[i], axis, value, intersect);
    for (let j = lo; j <= hi; ++j) {
      const element = data[j];
      if (!element.skip) {
        handler(element, index, j);
      }
    }
  }
}
function getDistanceMetricForAxis(axis) {
  const useX = axis.indexOf("x") !== -1;
  const useY = axis.indexOf("y") !== -1;
  return function(pt1, pt2) {
    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
  };
}
function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
  const items = [];
  if (!includeInvisible && !chart.isPointInArea(position)) {
    return items;
  }
  const evaluationFunc = function(element, datasetIndex, index) {
    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {
      return;
    }
    if (element.inRange(position.x, position.y, useFinalPosition)) {
      items.push({
        element,
        datasetIndex,
        index
      });
    }
  };
  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
  return items;
}
function getNearestRadialItems(chart, position, axis, useFinalPosition) {
  let items = [];
  function evaluationFunc(element, datasetIndex, index) {
    const { startAngle, endAngle } = element.getProps([
      "startAngle",
      "endAngle"
    ], useFinalPosition);
    const { angle } = getAngleFromPoint(element, {
      x: position.x,
      y: position.y
    });
    if (_angleBetween(angle, startAngle, endAngle)) {
      items.push({
        element,
        datasetIndex,
        index
      });
    }
  }
  evaluateInteractionItems(chart, axis, position, evaluationFunc);
  return items;
}
function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
  let items = [];
  const distanceMetric = getDistanceMetricForAxis(axis);
  let minDistance = Number.POSITIVE_INFINITY;
  function evaluationFunc(element, datasetIndex, index) {
    const inRange2 = element.inRange(position.x, position.y, useFinalPosition);
    if (intersect && !inRange2) {
      return;
    }
    const center = element.getCenterPoint(useFinalPosition);
    const pointInArea = !!includeInvisible || chart.isPointInArea(center);
    if (!pointInArea && !inRange2) {
      return;
    }
    const distance = distanceMetric(position, center);
    if (distance < minDistance) {
      items = [
        {
          element,
          datasetIndex,
          index
        }
      ];
      minDistance = distance;
    } else if (distance === minDistance) {
      items.push({
        element,
        datasetIndex,
        index
      });
    }
  }
  evaluateInteractionItems(chart, axis, position, evaluationFunc);
  return items;
}
function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
  if (!includeInvisible && !chart.isPointInArea(position)) {
    return [];
  }
  return axis === "r" && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
}
function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
  const items = [];
  const rangeMethod = axis === "x" ? "inXRange" : "inYRange";
  let intersectsItem = false;
  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {
    if (element[rangeMethod](position[axis], useFinalPosition)) {
      items.push({
        element,
        datasetIndex,
        index
      });
      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
    }
  });
  if (intersect && !intersectsItem) {
    return [];
  }
  return items;
}
var Interaction = {
  evaluateInteractionItems,
  modes: {
    index(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options.axis || "x";
      const includeInvisible = options.includeInvisible || false;
      const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
      const elements = [];
      if (!items.length) {
        return [];
      }
      chart.getSortedVisibleDatasetMetas().forEach((meta) => {
        const index = items[0].index;
        const element = meta.data[index];
        if (element && !element.skip) {
          elements.push({
            element,
            datasetIndex: meta.index,
            index
          });
        }
      });
      return elements;
    },
    dataset(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options.axis || "xy";
      const includeInvisible = options.includeInvisible || false;
      let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
      if (items.length > 0) {
        const datasetIndex = items[0].datasetIndex;
        const data = chart.getDatasetMeta(datasetIndex).data;
        items = [];
        for (let i = 0; i < data.length; ++i) {
          items.push({
            element: data[i],
            datasetIndex,
            index: i
          });
        }
      }
      return items;
    },
    point(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options.axis || "xy";
      const includeInvisible = options.includeInvisible || false;
      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
    },
    nearest(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      const axis = options.axis || "xy";
      const includeInvisible = options.includeInvisible || false;
      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);
    },
    x(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      return getAxisItems(chart, position, "x", options.intersect, useFinalPosition);
    },
    y(chart, e, options, useFinalPosition) {
      const position = getRelativePosition(e, chart);
      return getAxisItems(chart, position, "y", options.intersect, useFinalPosition);
    }
  }
};
var STATIC_POSITIONS = [
  "left",
  "top",
  "right",
  "bottom"
];
function filterByPosition(array, position) {
  return array.filter((v) => v.pos === position);
}
function filterDynamicPositionByAxis(array, axis) {
  return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);
}
function sortByWeight(array, reverse) {
  return array.sort((a, b) => {
    const v0 = reverse ? b : a;
    const v1 = reverse ? a : b;
    return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;
  });
}
function wrapBoxes(boxes) {
  const layoutBoxes = [];
  let i, ilen, box, pos, stack, stackWeight;
  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
    box = boxes[i];
    ({ position: pos, options: { stack, stackWeight = 1 } } = box);
    layoutBoxes.push({
      index: i,
      box,
      pos,
      horizontal: box.isHorizontal(),
      weight: box.weight,
      stack: stack && pos + stack,
      stackWeight
    });
  }
  return layoutBoxes;
}
function buildStacks(layouts2) {
  const stacks = {};
  for (const wrap of layouts2) {
    const { stack, pos, stackWeight } = wrap;
    if (!stack || !STATIC_POSITIONS.includes(pos)) {
      continue;
    }
    const _stack = stacks[stack] || (stacks[stack] = {
      count: 0,
      placed: 0,
      weight: 0,
      size: 0
    });
    _stack.count++;
    _stack.weight += stackWeight;
  }
  return stacks;
}
function setLayoutDims(layouts2, params) {
  const stacks = buildStacks(layouts2);
  const { vBoxMaxWidth, hBoxMaxHeight } = params;
  let i, ilen, layout;
  for (i = 0, ilen = layouts2.length; i < ilen; ++i) {
    layout = layouts2[i];
    const { fullSize } = layout.box;
    const stack = stacks[layout.stack];
    const factor = stack && layout.stackWeight / stack.weight;
    if (layout.horizontal) {
      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
      layout.height = hBoxMaxHeight;
    } else {
      layout.width = vBoxMaxWidth;
      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
    }
  }
  return stacks;
}
function buildLayoutBoxes(boxes) {
  const layoutBoxes = wrapBoxes(boxes);
  const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true);
  const left = sortByWeight(filterByPosition(layoutBoxes, "left"), true);
  const right = sortByWeight(filterByPosition(layoutBoxes, "right"));
  const top = sortByWeight(filterByPosition(layoutBoxes, "top"), true);
  const bottom = sortByWeight(filterByPosition(layoutBoxes, "bottom"));
  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, "x");
  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, "y");
  return {
    fullSize,
    leftAndTop: left.concat(top),
    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),
    chartArea: filterByPosition(layoutBoxes, "chartArea"),
    vertical: left.concat(right).concat(centerVertical),
    horizontal: top.concat(bottom).concat(centerHorizontal)
  };
}
function getCombinedMax(maxPadding, chartArea, a, b) {
  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
}
function updateMaxPadding(maxPadding, boxPadding) {
  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
}
function updateDims(chartArea, params, layout, stacks) {
  const { pos, box } = layout;
  const maxPadding = chartArea.maxPadding;
  if (!isObject(pos)) {
    if (layout.size) {
      chartArea[pos] -= layout.size;
    }
    const stack = stacks[layout.stack] || {
      size: 0,
      count: 1
    };
    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);
    layout.size = stack.size / stack.count;
    chartArea[pos] += layout.size;
  }
  if (box.getPadding) {
    updateMaxPadding(maxPadding, box.getPadding());
  }
  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, "left", "right"));
  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, "top", "bottom"));
  const widthChanged = newWidth !== chartArea.w;
  const heightChanged = newHeight !== chartArea.h;
  chartArea.w = newWidth;
  chartArea.h = newHeight;
  return layout.horizontal ? {
    same: widthChanged,
    other: heightChanged
  } : {
    same: heightChanged,
    other: widthChanged
  };
}
function handleMaxPadding(chartArea) {
  const maxPadding = chartArea.maxPadding;
  function updatePos(pos) {
    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);
    chartArea[pos] += change;
    return change;
  }
  chartArea.y += updatePos("top");
  chartArea.x += updatePos("left");
  updatePos("right");
  updatePos("bottom");
}
function getMargins(horizontal, chartArea) {
  const maxPadding = chartArea.maxPadding;
  function marginForPositions(positions2) {
    const margin = {
      left: 0,
      top: 0,
      right: 0,
      bottom: 0
    };
    positions2.forEach((pos) => {
      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
    });
    return margin;
  }
  return horizontal ? marginForPositions([
    "left",
    "right"
  ]) : marginForPositions([
    "top",
    "bottom"
  ]);
}
function fitBoxes(boxes, chartArea, params, stacks) {
  const refitBoxes = [];
  let i, ilen, layout, box, refit, changed;
  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {
    layout = boxes[i];
    box = layout.box;
    box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));
    const { same, other } = updateDims(chartArea, params, layout, stacks);
    refit |= same && refitBoxes.length;
    changed = changed || other;
    if (!box.fullSize) {
      refitBoxes.push(layout);
    }
  }
  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
}
function setBoxDims(box, left, top, width, height) {
  box.top = top;
  box.left = left;
  box.right = left + width;
  box.bottom = top + height;
  box.width = width;
  box.height = height;
}
function placeBoxes(boxes, chartArea, params, stacks) {
  const userPadding = params.padding;
  let { x, y } = chartArea;
  for (const layout of boxes) {
    const box = layout.box;
    const stack = stacks[layout.stack] || {
      count: 1,
      placed: 0,
      weight: 1
    };
    const weight = layout.stackWeight / stack.weight || 1;
    if (layout.horizontal) {
      const width = chartArea.w * weight;
      const height = stack.size || box.height;
      if (defined(stack.start)) {
        y = stack.start;
      }
      if (box.fullSize) {
        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
      } else {
        setBoxDims(box, chartArea.left + stack.placed, y, width, height);
      }
      stack.start = y;
      stack.placed += width;
      y = box.bottom;
    } else {
      const height = chartArea.h * weight;
      const width = stack.size || box.width;
      if (defined(stack.start)) {
        x = stack.start;
      }
      if (box.fullSize) {
        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);
      } else {
        setBoxDims(box, x, chartArea.top + stack.placed, width, height);
      }
      stack.start = x;
      stack.placed += height;
      x = box.right;
    }
  }
  chartArea.x = x;
  chartArea.y = y;
}
var layouts = {
  addBox(chart, item) {
    if (!chart.boxes) {
      chart.boxes = [];
    }
    item.fullSize = item.fullSize || false;
    item.position = item.position || "top";
    item.weight = item.weight || 0;
    item._layers = item._layers || function() {
      return [
        {
          z: 0,
          draw(chartArea) {
            item.draw(chartArea);
          }
        }
      ];
    };
    chart.boxes.push(item);
  },
  removeBox(chart, layoutItem) {
    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
    if (index !== -1) {
      chart.boxes.splice(index, 1);
    }
  },
  configure(chart, item, options) {
    item.fullSize = options.fullSize;
    item.position = options.position;
    item.weight = options.weight;
  },
  update(chart, width, height, minPadding) {
    if (!chart) {
      return;
    }
    const padding = toPadding(chart.options.layout.padding);
    const availableWidth = Math.max(width - padding.width, 0);
    const availableHeight = Math.max(height - padding.height, 0);
    const boxes = buildLayoutBoxes(chart.boxes);
    const verticalBoxes = boxes.vertical;
    const horizontalBoxes = boxes.horizontal;
    each(chart.boxes, (box) => {
      if (typeof box.beforeLayout === "function") {
        box.beforeLayout();
      }
    });
    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;
    const params = Object.freeze({
      outerWidth: width,
      outerHeight: height,
      padding,
      availableWidth,
      availableHeight,
      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
      hBoxMaxHeight: availableHeight / 2
    });
    const maxPadding = Object.assign({}, padding);
    updateMaxPadding(maxPadding, toPadding(minPadding));
    const chartArea = Object.assign({
      maxPadding,
      w: availableWidth,
      h: availableHeight,
      x: padding.left,
      y: padding.top
    }, padding);
    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
    fitBoxes(boxes.fullSize, chartArea, params, stacks);
    fitBoxes(verticalBoxes, chartArea, params, stacks);
    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
      fitBoxes(verticalBoxes, chartArea, params, stacks);
    }
    handleMaxPadding(chartArea);
    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
    chartArea.x += chartArea.w;
    chartArea.y += chartArea.h;
    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
    chart.chartArea = {
      left: chartArea.left,
      top: chartArea.top,
      right: chartArea.left + chartArea.w,
      bottom: chartArea.top + chartArea.h,
      height: chartArea.h,
      width: chartArea.w
    };
    each(boxes.chartArea, (layout) => {
      const box = layout.box;
      Object.assign(box, chart.chartArea);
      box.update(chartArea.w, chartArea.h, {
        left: 0,
        top: 0,
        right: 0,
        bottom: 0
      });
    });
  }
};
var BasePlatform = class {
  acquireContext(canvas, aspectRatio) {
  }
  releaseContext(context) {
    return false;
  }
  addEventListener(chart, type, listener) {
  }
  removeEventListener(chart, type, listener) {
  }
  getDevicePixelRatio() {
    return 1;
  }
  getMaximumSize(element, width, height, aspectRatio) {
    width = Math.max(0, width || element.width);
    height = height || element.height;
    return {
      width,
      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)
    };
  }
  isAttached(canvas) {
    return true;
  }
  updateConfig(config) {
  }
};
var BasicPlatform = class extends BasePlatform {
  acquireContext(item) {
    return item && item.getContext && item.getContext("2d") || null;
  }
  updateConfig(config) {
    config.options.animation = false;
  }
};
var EXPANDO_KEY = "$chartjs";
var EVENT_TYPES = {
  touchstart: "mousedown",
  touchmove: "mousemove",
  touchend: "mouseup",
  pointerenter: "mouseenter",
  pointerdown: "mousedown",
  pointermove: "mousemove",
  pointerup: "mouseup",
  pointerleave: "mouseout",
  pointerout: "mouseout"
};
var isNullOrEmpty = (value) => value === null || value === "";
function initCanvas(canvas, aspectRatio) {
  const style = canvas.style;
  const renderHeight = canvas.getAttribute("height");
  const renderWidth = canvas.getAttribute("width");
  canvas[EXPANDO_KEY] = {
    initial: {
      height: renderHeight,
      width: renderWidth,
      style: {
        display: style.display,
        height: style.height,
        width: style.width
      }
    }
  };
  style.display = style.display || "block";
  style.boxSizing = style.boxSizing || "border-box";
  if (isNullOrEmpty(renderWidth)) {
    const displayWidth = readUsedSize(canvas, "width");
    if (displayWidth !== void 0) {
      canvas.width = displayWidth;
    }
  }
  if (isNullOrEmpty(renderHeight)) {
    if (canvas.style.height === "") {
      canvas.height = canvas.width / (aspectRatio || 2);
    } else {
      const displayHeight = readUsedSize(canvas, "height");
      if (displayHeight !== void 0) {
        canvas.height = displayHeight;
      }
    }
  }
  return canvas;
}
var eventListenerOptions = supportsEventListenerOptions ? {
  passive: true
} : false;
function addListener(node, type, listener) {
  if (node) {
    node.addEventListener(type, listener, eventListenerOptions);
  }
}
function removeListener(chart, type, listener) {
  if (chart && chart.canvas) {
    chart.canvas.removeEventListener(type, listener, eventListenerOptions);
  }
}
function fromNativeEvent(event, chart) {
  const type = EVENT_TYPES[event.type] || event.type;
  const { x, y } = getRelativePosition(event, chart);
  return {
    type,
    chart,
    native: event,
    x: x !== void 0 ? x : null,
    y: y !== void 0 ? y : null
  };
}
function nodeListContains(nodeList, canvas) {
  for (const node of nodeList) {
    if (node === canvas || node.contains(canvas)) {
      return true;
    }
  }
}
function createAttachObserver(chart, type, listener) {
  const canvas = chart.canvas;
  const observer = new MutationObserver((entries) => {
    let trigger = false;
    for (const entry of entries) {
      trigger = trigger || nodeListContains(entry.addedNodes, canvas);
      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
    }
    if (trigger) {
      listener();
    }
  });
  observer.observe(document, {
    childList: true,
    subtree: true
  });
  return observer;
}
function createDetachObserver(chart, type, listener) {
  const canvas = chart.canvas;
  const observer = new MutationObserver((entries) => {
    let trigger = false;
    for (const entry of entries) {
      trigger = trigger || nodeListContains(entry.removedNodes, canvas);
      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
    }
    if (trigger) {
      listener();
    }
  });
  observer.observe(document, {
    childList: true,
    subtree: true
  });
  return observer;
}
var drpListeningCharts = /* @__PURE__ */ new Map();
var oldDevicePixelRatio = 0;
function onWindowResize() {
  const dpr = window.devicePixelRatio;
  if (dpr === oldDevicePixelRatio) {
    return;
  }
  oldDevicePixelRatio = dpr;
  drpListeningCharts.forEach((resize, chart) => {
    if (chart.currentDevicePixelRatio !== dpr) {
      resize();
    }
  });
}
function listenDevicePixelRatioChanges(chart, resize) {
  if (!drpListeningCharts.size) {
    window.addEventListener("resize", onWindowResize);
  }
  drpListeningCharts.set(chart, resize);
}
function unlistenDevicePixelRatioChanges(chart) {
  drpListeningCharts.delete(chart);
  if (!drpListeningCharts.size) {
    window.removeEventListener("resize", onWindowResize);
  }
}
function createResizeObserver(chart, type, listener) {
  const canvas = chart.canvas;
  const container = canvas && _getParentNode(canvas);
  if (!container) {
    return;
  }
  const resize = throttled((width, height) => {
    const w = container.clientWidth;
    listener(width, height);
    if (w < container.clientWidth) {
      listener();
    }
  }, window);
  const observer = new ResizeObserver((entries) => {
    const entry = entries[0];
    const width = entry.contentRect.width;
    const height = entry.contentRect.height;
    if (width === 0 && height === 0) {
      return;
    }
    resize(width, height);
  });
  observer.observe(container);
  listenDevicePixelRatioChanges(chart, resize);
  return observer;
}
function releaseObserver(chart, type, observer) {
  if (observer) {
    observer.disconnect();
  }
  if (type === "resize") {
    unlistenDevicePixelRatioChanges(chart);
  }
}
function createProxyAndListen(chart, type, listener) {
  const canvas = chart.canvas;
  const proxy = throttled((event) => {
    if (chart.ctx !== null) {
      listener(fromNativeEvent(event, chart));
    }
  }, chart);
  addListener(canvas, type, proxy);
  return proxy;
}
var DomPlatform = class extends BasePlatform {
  acquireContext(canvas, aspectRatio) {
    const context = canvas && canvas.getContext && canvas.getContext("2d");
    if (context && context.canvas === canvas) {
      initCanvas(canvas, aspectRatio);
      return context;
    }
    return null;
  }
  releaseContext(context) {
    const canvas = context.canvas;
    if (!canvas[EXPANDO_KEY]) {
      return false;
    }
    const initial = canvas[EXPANDO_KEY].initial;
    [
      "height",
      "width"
    ].forEach((prop) => {
      const value = initial[prop];
      if (isNullOrUndef(value)) {
        canvas.removeAttribute(prop);
      } else {
        canvas.setAttribute(prop, value);
      }
    });
    const style = initial.style || {};
    Object.keys(style).forEach((key) => {
      canvas.style[key] = style[key];
    });
    canvas.width = canvas.width;
    delete canvas[EXPANDO_KEY];
    return true;
  }
  addEventListener(chart, type, listener) {
    this.removeEventListener(chart, type);
    const proxies = chart.$proxies || (chart.$proxies = {});
    const handlers = {
      attach: createAttachObserver,
      detach: createDetachObserver,
      resize: createResizeObserver
    };
    const handler = handlers[type] || createProxyAndListen;
    proxies[type] = handler(chart, type, listener);
  }
  removeEventListener(chart, type) {
    const proxies = chart.$proxies || (chart.$proxies = {});
    const proxy = proxies[type];
    if (!proxy) {
      return;
    }
    const handlers = {
      attach: releaseObserver,
      detach: releaseObserver,
      resize: releaseObserver
    };
    const handler = handlers[type] || removeListener;
    handler(chart, type, proxy);
    proxies[type] = void 0;
  }
  getDevicePixelRatio() {
    return window.devicePixelRatio;
  }
  getMaximumSize(canvas, width, height, aspectRatio) {
    return getMaximumSize(canvas, width, height, aspectRatio);
  }
  isAttached(canvas) {
    const container = _getParentNode(canvas);
    return !!(container && container.isConnected);
  }
};
function _detectPlatform(canvas) {
  if (!_isDomSupported() || typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) {
    return BasicPlatform;
  }
  return DomPlatform;
}
var Element = class {
  constructor() {
    __publicField(this, "x");
    __publicField(this, "y");
    __publicField(this, "active", false);
    __publicField(this, "options");
    __publicField(this, "$animations");
  }
  tooltipPosition(useFinalPosition) {
    const { x, y } = this.getProps([
      "x",
      "y"
    ], useFinalPosition);
    return {
      x,
      y
    };
  }
  hasValue() {
    return isNumber(this.x) && isNumber(this.y);
  }
  getProps(props, final) {
    const anims = this.$animations;
    if (!final || !anims) {
      return this;
    }
    const ret = {};
    props.forEach((prop) => {
      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];
    });
    return ret;
  }
};
__publicField(Element, "defaults", {});
__publicField(Element, "defaultRoutes");
function autoSkip(scale, ticks) {
  const tickOpts = scale.options.ticks;
  const determinedMaxTicks = determineMaxTicks(scale);
  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);
  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
  const numMajorIndices = majorIndices.length;
  const first = majorIndices[0];
  const last = majorIndices[numMajorIndices - 1];
  const newTicks = [];
  if (numMajorIndices > ticksLimit) {
    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
    return newTicks;
  }
  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
  if (numMajorIndices > 0) {
    let i, ilen;
    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {
      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
    }
    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
    return newTicks;
  }
  skip(ticks, newTicks, spacing);
  return newTicks;
}
function determineMaxTicks(scale) {
  const offset = scale.options.offset;
  const tickLength = scale._tickSize();
  const maxScale = scale._length / tickLength + (offset ? 0 : 1);
  const maxChart = scale._maxLength / tickLength;
  return Math.floor(Math.min(maxScale, maxChart));
}
function calculateSpacing(majorIndices, ticks, ticksLimit) {
  const evenMajorSpacing = getEvenSpacing(majorIndices);
  const spacing = ticks.length / ticksLimit;
  if (!evenMajorSpacing) {
    return Math.max(spacing, 1);
  }
  const factors = _factorize(evenMajorSpacing);
  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {
    const factor = factors[i];
    if (factor > spacing) {
      return factor;
    }
  }
  return Math.max(spacing, 1);
}
function getMajorIndices(ticks) {
  const result = [];
  let i, ilen;
  for (i = 0, ilen = ticks.length; i < ilen; i++) {
    if (ticks[i].major) {
      result.push(i);
    }
  }
  return result;
}
function skipMajors(ticks, newTicks, majorIndices, spacing) {
  let count = 0;
  let next = majorIndices[0];
  let i;
  spacing = Math.ceil(spacing);
  for (i = 0; i < ticks.length; i++) {
    if (i === next) {
      newTicks.push(ticks[i]);
      count++;
      next = majorIndices[count * spacing];
    }
  }
}
function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
  const start = valueOrDefault(majorStart, 0);
  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);
  let count = 0;
  let length, i, next;
  spacing = Math.ceil(spacing);
  if (majorEnd) {
    length = majorEnd - majorStart;
    spacing = length / Math.floor(length / spacing);
  }
  next = start;
  while (next < 0) {
    count++;
    next = Math.round(start + count * spacing);
  }
  for (i = Math.max(start, 0); i < end; i++) {
    if (i === next) {
      newTicks.push(ticks[i]);
      count++;
      next = Math.round(start + count * spacing);
    }
  }
}
function getEvenSpacing(arr) {
  const len = arr.length;
  let i, diff;
  if (len < 2) {
    return false;
  }
  for (diff = arr[0], i = 1; i < len; ++i) {
    if (arr[i] - arr[i - 1] !== diff) {
      return false;
    }
  }
  return diff;
}
var reverseAlign = (align) => align === "left" ? "right" : align === "right" ? "left" : align;
var offsetFromEdge = (scale, edge, offset) => edge === "top" || edge === "left" ? scale[edge] + offset : scale[edge] - offset;
var getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);
function sample(arr, numItems) {
  const result = [];
  const increment = arr.length / numItems;
  const len = arr.length;
  let i = 0;
  for (; i < len; i += increment) {
    result.push(arr[Math.floor(i)]);
  }
  return result;
}
function getPixelForGridLine(scale, index, offsetGridLines) {
  const length = scale.ticks.length;
  const validIndex2 = Math.min(index, length - 1);
  const start = scale._startPixel;
  const end = scale._endPixel;
  const epsilon = 1e-6;
  let lineValue = scale.getPixelForTick(validIndex2);
  let offset;
  if (offsetGridLines) {
    if (length === 1) {
      offset = Math.max(lineValue - start, end - lineValue);
    } else if (index === 0) {
      offset = (scale.getPixelForTick(1) - lineValue) / 2;
    } else {
      offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2;
    }
    lineValue += validIndex2 < index ? offset : -offset;
    if (lineValue < start - epsilon || lineValue > end + epsilon) {
      return;
    }
  }
  return lineValue;
}
function garbageCollect(caches, length) {
  each(caches, (cache) => {
    const gc = cache.gc;
    const gcLen = gc.length / 2;
    let i;
    if (gcLen > length) {
      for (i = 0; i < gcLen; ++i) {
        delete cache.data[gc[i]];
      }
      gc.splice(0, gcLen);
    }
  });
}
function getTickMarkLength(options) {
  return options.drawTicks ? options.tickLength : 0;
}
function getTitleHeight(options, fallback) {
  if (!options.display) {
    return 0;
  }
  const font = toFont(options.font, fallback);
  const padding = toPadding(options.padding);
  const lines = isArray(options.text) ? options.text.length : 1;
  return lines * font.lineHeight + padding.height;
}
function createScaleContext(parent, scale) {
  return createContext(parent, {
    scale,
    type: "scale"
  });
}
function createTickContext(parent, index, tick) {
  return createContext(parent, {
    tick,
    index,
    type: "tick"
  });
}
function titleAlign(align, position, reverse) {
  let ret = _toLeftRightCenter(align);
  if (reverse && position !== "right" || !reverse && position === "right") {
    ret = reverseAlign(ret);
  }
  return ret;
}
function titleArgs(scale, offset, position, align) {
  const { top, left, bottom, right, chart } = scale;
  const { chartArea, scales } = chart;
  let rotation = 0;
  let maxWidth, titleX, titleY;
  const height = bottom - top;
  const width = right - left;
  if (scale.isHorizontal()) {
    titleX = _alignStartEnd(align, left, right);
    if (isObject(position)) {
      const positionAxisID = Object.keys(position)[0];
      const value = position[positionAxisID];
      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
    } else if (position === "center") {
      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
    } else {
      titleY = offsetFromEdge(scale, position, offset);
    }
    maxWidth = right - left;
  } else {
    if (isObject(position)) {
      const positionAxisID = Object.keys(position)[0];
      const value = position[positionAxisID];
      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
    } else if (position === "center") {
      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
    } else {
      titleX = offsetFromEdge(scale, position, offset);
    }
    titleY = _alignStartEnd(align, bottom, top);
    rotation = position === "left" ? -HALF_PI : HALF_PI;
  }
  return {
    titleX,
    titleY,
    maxWidth,
    rotation
  };
}
var Scale = class _Scale extends Element {
  constructor(cfg) {
    super();
    this.id = cfg.id;
    this.type = cfg.type;
    this.options = void 0;
    this.ctx = cfg.ctx;
    this.chart = cfg.chart;
    this.top = void 0;
    this.bottom = void 0;
    this.left = void 0;
    this.right = void 0;
    this.width = void 0;
    this.height = void 0;
    this._margins = {
      left: 0,
      right: 0,
      top: 0,
      bottom: 0
    };
    this.maxWidth = void 0;
    this.maxHeight = void 0;
    this.paddingTop = void 0;
    this.paddingBottom = void 0;
    this.paddingLeft = void 0;
    this.paddingRight = void 0;
    this.axis = void 0;
    this.labelRotation = void 0;
    this.min = void 0;
    this.max = void 0;
    this._range = void 0;
    this.ticks = [];
    this._gridLineItems = null;
    this._labelItems = null;
    this._labelSizes = null;
    this._length = 0;
    this._maxLength = 0;
    this._longestTextCache = {};
    this._startPixel = void 0;
    this._endPixel = void 0;
    this._reversePixels = false;
    this._userMax = void 0;
    this._userMin = void 0;
    this._suggestedMax = void 0;
    this._suggestedMin = void 0;
    this._ticksLength = 0;
    this._borderValue = 0;
    this._cache = {};
    this._dataLimitsCached = false;
    this.$context = void 0;
  }
  init(options) {
    this.options = options.setContext(this.getContext());
    this.axis = options.axis;
    this._userMin = this.parse(options.min);
    this._userMax = this.parse(options.max);
    this._suggestedMin = this.parse(options.suggestedMin);
    this._suggestedMax = this.parse(options.suggestedMax);
  }
  parse(raw, index) {
    return raw;
  }
  getUserBounds() {
    let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this;
    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);
    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);
    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);
    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);
    return {
      min: finiteOrDefault(_userMin, _suggestedMin),
      max: finiteOrDefault(_userMax, _suggestedMax),
      minDefined: isNumberFinite(_userMin),
      maxDefined: isNumberFinite(_userMax)
    };
  }
  getMinMax(canStack) {
    let { min, max, minDefined, maxDefined } = this.getUserBounds();
    let range;
    if (minDefined && maxDefined) {
      return {
        min,
        max
      };
    }
    const metas = this.getMatchingVisibleMetas();
    for (let i = 0, ilen = metas.length; i < ilen; ++i) {
      range = metas[i].controller.getMinMax(this, canStack);
      if (!minDefined) {
        min = Math.min(min, range.min);
      }
      if (!maxDefined) {
        max = Math.max(max, range.max);
      }
    }
    min = maxDefined && min > max ? max : min;
    max = minDefined && min > max ? min : max;
    return {
      min: finiteOrDefault(min, finiteOrDefault(max, min)),
      max: finiteOrDefault(max, finiteOrDefault(min, max))
    };
  }
  getPadding() {
    return {
      left: this.paddingLeft || 0,
      top: this.paddingTop || 0,
      right: this.paddingRight || 0,
      bottom: this.paddingBottom || 0
    };
  }
  getTicks() {
    return this.ticks;
  }
  getLabels() {
    const data = this.chart.data;
    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
  }
  getLabelItems(chartArea = this.chart.chartArea) {
    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
    return items;
  }
  beforeLayout() {
    this._cache = {};
    this._dataLimitsCached = false;
  }
  beforeUpdate() {
    callback(this.options.beforeUpdate, [
      this
    ]);
  }
  update(maxWidth, maxHeight, margins) {
    const { beginAtZero, grace, ticks: tickOpts } = this.options;
    const sampleSize = tickOpts.sampleSize;
    this.beforeUpdate();
    this.maxWidth = maxWidth;
    this.maxHeight = maxHeight;
    this._margins = margins = Object.assign({
      left: 0,
      right: 0,
      top: 0,
      bottom: 0
    }, margins);
    this.ticks = null;
    this._labelSizes = null;
    this._gridLineItems = null;
    this._labelItems = null;
    this.beforeSetDimensions();
    this.setDimensions();
    this.afterSetDimensions();
    this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;
    if (!this._dataLimitsCached) {
      this.beforeDataLimits();
      this.determineDataLimits();
      this.afterDataLimits();
      this._range = _addGrace(this, grace, beginAtZero);
      this._dataLimitsCached = true;
    }
    this.beforeBuildTicks();
    this.ticks = this.buildTicks() || [];
    this.afterBuildTicks();
    const samplingEnabled = sampleSize < this.ticks.length;
    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
    this.configure();
    this.beforeCalculateLabelRotation();
    this.calculateLabelRotation();
    this.afterCalculateLabelRotation();
    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === "auto")) {
      this.ticks = autoSkip(this, this.ticks);
      this._labelSizes = null;
      this.afterAutoSkip();
    }
    if (samplingEnabled) {
      this._convertTicksToLabels(this.ticks);
    }
    this.beforeFit();
    this.fit();
    this.afterFit();
    this.afterUpdate();
  }
  configure() {
    let reversePixels = this.options.reverse;
    let startPixel, endPixel;
    if (this.isHorizontal()) {
      startPixel = this.left;
      endPixel = this.right;
    } else {
      startPixel = this.top;
      endPixel = this.bottom;
      reversePixels = !reversePixels;
    }
    this._startPixel = startPixel;
    this._endPixel = endPixel;
    this._reversePixels = reversePixels;
    this._length = endPixel - startPixel;
    this._alignToPixels = this.options.alignToPixels;
  }
  afterUpdate() {
    callback(this.options.afterUpdate, [
      this
    ]);
  }
  beforeSetDimensions() {
    callback(this.options.beforeSetDimensions, [
      this
    ]);
  }
  setDimensions() {
    if (this.isHorizontal()) {
      this.width = this.maxWidth;
      this.left = 0;
      this.right = this.width;
    } else {
      this.height = this.maxHeight;
      this.top = 0;
      this.bottom = this.height;
    }
    this.paddingLeft = 0;
    this.paddingTop = 0;
    this.paddingRight = 0;
    this.paddingBottom = 0;
  }
  afterSetDimensions() {
    callback(this.options.afterSetDimensions, [
      this
    ]);
  }
  _callHooks(name) {
    this.chart.notifyPlugins(name, this.getContext());
    callback(this.options[name], [
      this
    ]);
  }
  beforeDataLimits() {
    this._callHooks("beforeDataLimits");
  }
  determineDataLimits() {
  }
  afterDataLimits() {
    this._callHooks("afterDataLimits");
  }
  beforeBuildTicks() {
    this._callHooks("beforeBuildTicks");
  }
  buildTicks() {
    return [];
  }
  afterBuildTicks() {
    this._callHooks("afterBuildTicks");
  }
  beforeTickToLabelConversion() {
    callback(this.options.beforeTickToLabelConversion, [
      this
    ]);
  }
  generateTickLabels(ticks) {
    const tickOpts = this.options.ticks;
    let i, ilen, tick;
    for (i = 0, ilen = ticks.length; i < ilen; i++) {
      tick = ticks[i];
      tick.label = callback(tickOpts.callback, [
        tick.value,
        i,
        ticks
      ], this);
    }
  }
  afterTickToLabelConversion() {
    callback(this.options.afterTickToLabelConversion, [
      this
    ]);
  }
  beforeCalculateLabelRotation() {
    callback(this.options.beforeCalculateLabelRotation, [
      this
    ]);
  }
  calculateLabelRotation() {
    const options = this.options;
    const tickOpts = options.ticks;
    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);
    const minRotation = tickOpts.minRotation || 0;
    const maxRotation = tickOpts.maxRotation;
    let labelRotation = minRotation;
    let tickWidth, maxHeight, maxLabelDiagonal;
    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
      this.labelRotation = minRotation;
      return;
    }
    const labelSizes = this._getLabelSizes();
    const maxLabelWidth = labelSizes.widest.width;
    const maxLabelHeight = labelSizes.highest.height;
    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);
    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
    if (maxLabelWidth + 6 > tickWidth) {
      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
      maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);
      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
      labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));
      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
    }
    this.labelRotation = labelRotation;
  }
  afterCalculateLabelRotation() {
    callback(this.options.afterCalculateLabelRotation, [
      this
    ]);
  }
  afterAutoSkip() {
  }
  beforeFit() {
    callback(this.options.beforeFit, [
      this
    ]);
  }
  fit() {
    const minSize = {
      width: 0,
      height: 0
    };
    const { chart, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this;
    const display = this._isVisible();
    const isHorizontal = this.isHorizontal();
    if (display) {
      const titleHeight = getTitleHeight(titleOpts, chart.options.font);
      if (isHorizontal) {
        minSize.width = this.maxWidth;
        minSize.height = getTickMarkLength(gridOpts) + titleHeight;
      } else {
        minSize.height = this.maxHeight;
        minSize.width = getTickMarkLength(gridOpts) + titleHeight;
      }
      if (tickOpts.display && this.ticks.length) {
        const { first, last, widest, highest } = this._getLabelSizes();
        const tickPadding = tickOpts.padding * 2;
        const angleRadians = toRadians(this.labelRotation);
        const cos = Math.cos(angleRadians);
        const sin = Math.sin(angleRadians);
        if (isHorizontal) {
          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
        } else {
          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
        }
        this._calculatePadding(first, last, sin, cos);
      }
    }
    this._handleMargins();
    if (isHorizontal) {
      this.width = this._length = chart.width - this._margins.left - this._margins.right;
      this.height = minSize.height;
    } else {
      this.width = minSize.width;
      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
    }
  }
  _calculatePadding(first, last, sin, cos) {
    const { ticks: { align, padding }, position } = this.options;
    const isRotated = this.labelRotation !== 0;
    const labelsBelowTicks = position !== "top" && this.axis === "x";
    if (this.isHorizontal()) {
      const offsetLeft = this.getPixelForTick(0) - this.left;
      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
      let paddingLeft = 0;
      let paddingRight = 0;
      if (isRotated) {
        if (labelsBelowTicks) {
          paddingLeft = cos * first.width;
          paddingRight = sin * last.height;
        } else {
          paddingLeft = sin * first.height;
          paddingRight = cos * last.width;
        }
      } else if (align === "start") {
        paddingRight = last.width;
      } else if (align === "end") {
        paddingLeft = first.width;
      } else if (align !== "inner") {
        paddingLeft = first.width / 2;
        paddingRight = last.width / 2;
      }
      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
    } else {
      let paddingTop = last.height / 2;
      let paddingBottom = first.height / 2;
      if (align === "start") {
        paddingTop = 0;
        paddingBottom = first.height;
      } else if (align === "end") {
        paddingTop = last.height;
        paddingBottom = 0;
      }
      this.paddingTop = paddingTop + padding;
      this.paddingBottom = paddingBottom + padding;
    }
  }
  _handleMargins() {
    if (this._margins) {
      this._margins.left = Math.max(this.paddingLeft, this._margins.left);
      this._margins.top = Math.max(this.paddingTop, this._margins.top);
      this._margins.right = Math.max(this.paddingRight, this._margins.right);
      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
    }
  }
  afterFit() {
    callback(this.options.afterFit, [
      this
    ]);
  }
  isHorizontal() {
    const { axis, position } = this.options;
    return position === "top" || position === "bottom" || axis === "x";
  }
  isFullSize() {
    return this.options.fullSize;
  }
  _convertTicksToLabels(ticks) {
    this.beforeTickToLabelConversion();
    this.generateTickLabels(ticks);
    let i, ilen;
    for (i = 0, ilen = ticks.length; i < ilen; i++) {
      if (isNullOrUndef(ticks[i].label)) {
        ticks.splice(i, 1);
        ilen--;
        i--;
      }
    }
    this.afterTickToLabelConversion();
  }
  _getLabelSizes() {
    let labelSizes = this._labelSizes;
    if (!labelSizes) {
      const sampleSize = this.options.ticks.sampleSize;
      let ticks = this.ticks;
      if (sampleSize < ticks.length) {
        ticks = sample(ticks, sampleSize);
      }
      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);
    }
    return labelSizes;
  }
  _computeLabelSizes(ticks, length, maxTicksLimit) {
    const { ctx, _longestTextCache: caches } = this;
    const widths = [];
    const heights = [];
    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));
    let widestLabelSize = 0;
    let highestLabelSize = 0;
    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
    for (i = 0; i < length; i += increment) {
      label = ticks[i].label;
      tickFont = this._resolveTickFontOptions(i);
      ctx.font = fontString = tickFont.string;
      cache = caches[fontString] = caches[fontString] || {
        data: {},
        gc: []
      };
      lineHeight = tickFont.lineHeight;
      width = height = 0;
      if (!isNullOrUndef(label) && !isArray(label)) {
        width = _measureText(ctx, cache.data, cache.gc, width, label);
        height = lineHeight;
      } else if (isArray(label)) {
        for (j = 0, jlen = label.length; j < jlen; ++j) {
          nestedLabel = label[j];
          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {
            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);
            height += lineHeight;
          }
        }
      }
      widths.push(width);
      heights.push(height);
      widestLabelSize = Math.max(width, widestLabelSize);
      highestLabelSize = Math.max(height, highestLabelSize);
    }
    garbageCollect(caches, length);
    const widest = widths.indexOf(widestLabelSize);
    const highest = heights.indexOf(highestLabelSize);
    const valueAt = (idx) => ({
      width: widths[idx] || 0,
      height: heights[idx] || 0
    });
    return {
      first: valueAt(0),
      last: valueAt(length - 1),
      widest: valueAt(widest),
      highest: valueAt(highest),
      widths,
      heights
    };
  }
  getLabelForValue(value) {
    return value;
  }
  getPixelForValue(value, index) {
    return NaN;
  }
  getValueForPixel(pixel) {
  }
  getPixelForTick(index) {
    const ticks = this.ticks;
    if (index < 0 || index > ticks.length - 1) {
      return null;
    }
    return this.getPixelForValue(ticks[index].value);
  }
  getPixelForDecimal(decimal) {
    if (this._reversePixels) {
      decimal = 1 - decimal;
    }
    const pixel = this._startPixel + decimal * this._length;
    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);
  }
  getDecimalForPixel(pixel) {
    const decimal = (pixel - this._startPixel) / this._length;
    return this._reversePixels ? 1 - decimal : decimal;
  }
  getBasePixel() {
    return this.getPixelForValue(this.getBaseValue());
  }
  getBaseValue() {
    const { min, max } = this;
    return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
  }
  getContext(index) {
    const ticks = this.ticks || [];
    if (index >= 0 && index < ticks.length) {
      const tick = ticks[index];
      return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));
    }
    return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));
  }
  _tickSize() {
    const optionTicks = this.options.ticks;
    const rot = toRadians(this.labelRotation);
    const cos = Math.abs(Math.cos(rot));
    const sin = Math.abs(Math.sin(rot));
    const labelSizes = this._getLabelSizes();
    const padding = optionTicks.autoSkipPadding || 0;
    const w = labelSizes ? labelSizes.widest.width + padding : 0;
    const h4 = labelSizes ? labelSizes.highest.height + padding : 0;
    return this.isHorizontal() ? h4 * cos > w * sin ? w / cos : h4 / sin : h4 * sin < w * cos ? h4 / cos : w / sin;
  }
  _isVisible() {
    const display = this.options.display;
    if (display !== "auto") {
      return !!display;
    }
    return this.getMatchingVisibleMetas().length > 0;
  }
  _computeGridLineItems(chartArea) {
    const axis = this.axis;
    const chart = this.chart;
    const options = this.options;
    const { grid, position, border } = options;
    const offset = grid.offset;
    const isHorizontal = this.isHorizontal();
    const ticks = this.ticks;
    const ticksLength = ticks.length + (offset ? 1 : 0);
    const tl = getTickMarkLength(grid);
    const items = [];
    const borderOpts = border.setContext(this.getContext());
    const axisWidth = borderOpts.display ? borderOpts.width : 0;
    const axisHalfWidth = axisWidth / 2;
    const alignBorderValue = function(pixel) {
      return _alignPixel(chart, pixel, axisWidth);
    };
    let borderValue, i, lineValue, alignedLineValue;
    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;
    if (position === "top") {
      borderValue = alignBorderValue(this.bottom);
      ty1 = this.bottom - tl;
      ty2 = borderValue - axisHalfWidth;
      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
      y2 = chartArea.bottom;
    } else if (position === "bottom") {
      borderValue = alignBorderValue(this.top);
      y1 = chartArea.top;
      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
      ty1 = borderValue + axisHalfWidth;
      ty2 = this.top + tl;
    } else if (position === "left") {
      borderValue = alignBorderValue(this.right);
      tx1 = this.right - tl;
      tx2 = borderValue - axisHalfWidth;
      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
      x2 = chartArea.right;
    } else if (position === "right") {
      borderValue = alignBorderValue(this.left);
      x1 = chartArea.left;
      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
      tx1 = borderValue + axisHalfWidth;
      tx2 = this.left + tl;
    } else if (axis === "x") {
      if (position === "center") {
        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
      }
      y1 = chartArea.top;
      y2 = chartArea.bottom;
      ty1 = borderValue + axisHalfWidth;
      ty2 = ty1 + tl;
    } else if (axis === "y") {
      if (position === "center") {
        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
      }
      tx1 = borderValue - axisHalfWidth;
      tx2 = tx1 - tl;
      x1 = chartArea.left;
      x2 = chartArea.right;
    }
    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);
    const step = Math.max(1, Math.ceil(ticksLength / limit));
    for (i = 0; i < ticksLength; i += step) {
      const context = this.getContext(i);
      const optsAtIndex = grid.setContext(context);
      const optsAtIndexBorder = border.setContext(context);
      const lineWidth = optsAtIndex.lineWidth;
      const lineColor = optsAtIndex.color;
      const borderDash = optsAtIndexBorder.dash || [];
      const borderDashOffset = optsAtIndexBorder.dashOffset;
      const tickWidth = optsAtIndex.tickWidth;
      const tickColor = optsAtIndex.tickColor;
      const tickBorderDash = optsAtIndex.tickBorderDash || [];
      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
      lineValue = getPixelForGridLine(this, i, offset);
      if (lineValue === void 0) {
        continue;
      }
      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);
      if (isHorizontal) {
        tx1 = tx2 = x1 = x2 = alignedLineValue;
      } else {
        ty1 = ty2 = y1 = y2 = alignedLineValue;
      }
      items.push({
        tx1,
        ty1,
        tx2,
        ty2,
        x1,
        y1,
        x2,
        y2,
        width: lineWidth,
        color: lineColor,
        borderDash,
        borderDashOffset,
        tickWidth,
        tickColor,
        tickBorderDash,
        tickBorderDashOffset
      });
    }
    this._ticksLength = ticksLength;
    this._borderValue = borderValue;
    return items;
  }
  _computeLabelItems(chartArea) {
    const axis = this.axis;
    const options = this.options;
    const { position, ticks: optionTicks } = options;
    const isHorizontal = this.isHorizontal();
    const ticks = this.ticks;
    const { align, crossAlign, padding, mirror } = optionTicks;
    const tl = getTickMarkLength(options.grid);
    const tickAndPadding = tl + padding;
    const hTickAndPadding = mirror ? -padding : tickAndPadding;
    const rotation = -toRadians(this.labelRotation);
    const items = [];
    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
    let textBaseline = "middle";
    if (position === "top") {
      y = this.bottom - hTickAndPadding;
      textAlign = this._getXAxisLabelAlignment();
    } else if (position === "bottom") {
      y = this.top + hTickAndPadding;
      textAlign = this._getXAxisLabelAlignment();
    } else if (position === "left") {
      const ret = this._getYAxisLabelAlignment(tl);
      textAlign = ret.textAlign;
      x = ret.x;
    } else if (position === "right") {
      const ret = this._getYAxisLabelAlignment(tl);
      textAlign = ret.textAlign;
      x = ret.x;
    } else if (axis === "x") {
      if (position === "center") {
        y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
      }
      textAlign = this._getXAxisLabelAlignment();
    } else if (axis === "y") {
      if (position === "center") {
        x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
      } else if (isObject(position)) {
        const positionAxisID = Object.keys(position)[0];
        const value = position[positionAxisID];
        x = this.chart.scales[positionAxisID].getPixelForValue(value);
      }
      textAlign = this._getYAxisLabelAlignment(tl).textAlign;
    }
    if (axis === "y") {
      if (align === "start") {
        textBaseline = "top";
      } else if (align === "end") {
        textBaseline = "bottom";
      }
    }
    const labelSizes = this._getLabelSizes();
    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
      tick = ticks[i];
      label = tick.label;
      const optsAtIndex = optionTicks.setContext(this.getContext(i));
      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
      font = this._resolveTickFontOptions(i);
      lineHeight = font.lineHeight;
      lineCount = isArray(label) ? label.length : 1;
      const halfCount = lineCount / 2;
      const color2 = optsAtIndex.color;
      const strokeColor = optsAtIndex.textStrokeColor;
      const strokeWidth = optsAtIndex.textStrokeWidth;
      let tickTextAlign = textAlign;
      if (isHorizontal) {
        x = pixel;
        if (textAlign === "inner") {
          if (i === ilen - 1) {
            tickTextAlign = !this.options.reverse ? "right" : "left";
          } else if (i === 0) {
            tickTextAlign = !this.options.reverse ? "left" : "right";
          } else {
            tickTextAlign = "center";
          }
        }
        if (position === "top") {
          if (crossAlign === "near" || rotation !== 0) {
            textOffset = -lineCount * lineHeight + lineHeight / 2;
          } else if (crossAlign === "center") {
            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
          } else {
            textOffset = -labelSizes.highest.height + lineHeight / 2;
          }
        } else {
          if (crossAlign === "near" || rotation !== 0) {
            textOffset = lineHeight / 2;
          } else if (crossAlign === "center") {
            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
          } else {
            textOffset = labelSizes.highest.height - lineCount * lineHeight;
          }
        }
        if (mirror) {
          textOffset *= -1;
        }
        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {
          x += lineHeight / 2 * Math.sin(rotation);
        }
      } else {
        y = pixel;
        textOffset = (1 - lineCount) * lineHeight / 2;
      }
      let backdrop;
      if (optsAtIndex.showLabelBackdrop) {
        const labelPadding = toPadding(optsAtIndex.backdropPadding);
        const height = labelSizes.heights[i];
        const width = labelSizes.widths[i];
        let top = textOffset - labelPadding.top;
        let left = 0 - labelPadding.left;
        switch (textBaseline) {
          case "middle":
            top -= height / 2;
            break;
          case "bottom":
            top -= height;
            break;
        }
        switch (textAlign) {
          case "center":
            left -= width / 2;
            break;
          case "right":
            left -= width;
            break;
          case "inner":
            if (i === ilen - 1) {
              left -= width;
            } else if (i > 0) {
              left -= width / 2;
            }
            break;
        }
        backdrop = {
          left,
          top,
          width: width + labelPadding.width,
          height: height + labelPadding.height,
          color: optsAtIndex.backdropColor
        };
      }
      items.push({
        label,
        font,
        textOffset,
        options: {
          rotation,
          color: color2,
          strokeColor,
          strokeWidth,
          textAlign: tickTextAlign,
          textBaseline,
          translation: [
            x,
            y
          ],
          backdrop
        }
      });
    }
    return items;
  }
  _getXAxisLabelAlignment() {
    const { position, ticks } = this.options;
    const rotation = -toRadians(this.labelRotation);
    if (rotation) {
      return position === "top" ? "left" : "right";
    }
    let align = "center";
    if (ticks.align === "start") {
      align = "left";
    } else if (ticks.align === "end") {
      align = "right";
    } else if (ticks.align === "inner") {
      align = "inner";
    }
    return align;
  }
  _getYAxisLabelAlignment(tl) {
    const { position, ticks: { crossAlign, mirror, padding } } = this.options;
    const labelSizes = this._getLabelSizes();
    const tickAndPadding = tl + padding;
    const widest = labelSizes.widest.width;
    let textAlign;
    let x;
    if (position === "left") {
      if (mirror) {
        x = this.right + padding;
        if (crossAlign === "near") {
          textAlign = "left";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x += widest / 2;
        } else {
          textAlign = "right";
          x += widest;
        }
      } else {
        x = this.right - tickAndPadding;
        if (crossAlign === "near") {
          textAlign = "right";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x -= widest / 2;
        } else {
          textAlign = "left";
          x = this.left;
        }
      }
    } else if (position === "right") {
      if (mirror) {
        x = this.left + padding;
        if (crossAlign === "near") {
          textAlign = "right";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x -= widest / 2;
        } else {
          textAlign = "left";
          x -= widest;
        }
      } else {
        x = this.left + tickAndPadding;
        if (crossAlign === "near") {
          textAlign = "left";
        } else if (crossAlign === "center") {
          textAlign = "center";
          x += widest / 2;
        } else {
          textAlign = "right";
          x = this.right;
        }
      }
    } else {
      textAlign = "right";
    }
    return {
      textAlign,
      x
    };
  }
  _computeLabelArea() {
    if (this.options.ticks.mirror) {
      return;
    }
    const chart = this.chart;
    const position = this.options.position;
    if (position === "left" || position === "right") {
      return {
        top: 0,
        left: this.left,
        bottom: chart.height,
        right: this.right
      };
    }
    if (position === "top" || position === "bottom") {
      return {
        top: this.top,
        left: 0,
        bottom: this.bottom,
        right: chart.width
      };
    }
  }
  drawBackground() {
    const { ctx, options: { backgroundColor }, left, top, width, height } = this;
    if (backgroundColor) {
      ctx.save();
      ctx.fillStyle = backgroundColor;
      ctx.fillRect(left, top, width, height);
      ctx.restore();
    }
  }
  getLineWidthForValue(value) {
    const grid = this.options.grid;
    if (!this._isVisible() || !grid.display) {
      return 0;
    }
    const ticks = this.ticks;
    const index = ticks.findIndex((t2) => t2.value === value);
    if (index >= 0) {
      const opts = grid.setContext(this.getContext(index));
      return opts.lineWidth;
    }
    return 0;
  }
  drawGrid(chartArea) {
    const grid = this.options.grid;
    const ctx = this.ctx;
    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
    let i, ilen;
    const drawLine = (p1, p2, style) => {
      if (!style.width || !style.color) {
        return;
      }
      ctx.save();
      ctx.lineWidth = style.width;
      ctx.strokeStyle = style.color;
      ctx.setLineDash(style.borderDash || []);
      ctx.lineDashOffset = style.borderDashOffset;
      ctx.beginPath();
      ctx.moveTo(p1.x, p1.y);
      ctx.lineTo(p2.x, p2.y);
      ctx.stroke();
      ctx.restore();
    };
    if (grid.display) {
      for (i = 0, ilen = items.length; i < ilen; ++i) {
        const item = items[i];
        if (grid.drawOnChartArea) {
          drawLine({
            x: item.x1,
            y: item.y1
          }, {
            x: item.x2,
            y: item.y2
          }, item);
        }
        if (grid.drawTicks) {
          drawLine({
            x: item.tx1,
            y: item.ty1
          }, {
            x: item.tx2,
            y: item.ty2
          }, {
            color: item.tickColor,
            width: item.tickWidth,
            borderDash: item.tickBorderDash,
            borderDashOffset: item.tickBorderDashOffset
          });
        }
      }
    }
  }
  drawBorder() {
    const { chart, ctx, options: { border, grid } } = this;
    const borderOpts = border.setContext(this.getContext());
    const axisWidth = border.display ? borderOpts.width : 0;
    if (!axisWidth) {
      return;
    }
    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
    const borderValue = this._borderValue;
    let x1, x2, y1, y2;
    if (this.isHorizontal()) {
      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;
      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;
      y1 = y2 = borderValue;
    } else {
      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;
      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
      x1 = x2 = borderValue;
    }
    ctx.save();
    ctx.lineWidth = borderOpts.width;
    ctx.strokeStyle = borderOpts.color;
    ctx.beginPath();
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.stroke();
    ctx.restore();
  }
  drawLabels(chartArea) {
    const optionTicks = this.options.ticks;
    if (!optionTicks.display) {
      return;
    }
    const ctx = this.ctx;
    const area = this._computeLabelArea();
    if (area) {
      clipArea(ctx, area);
    }
    const items = this.getLabelItems(chartArea);
    for (const item of items) {
      const renderTextOptions = item.options;
      const tickFont = item.font;
      const label = item.label;
      const y = item.textOffset;
      renderText(ctx, label, 0, y, tickFont, renderTextOptions);
    }
    if (area) {
      unclipArea(ctx);
    }
  }
  drawTitle() {
    const { ctx, options: { position, title, reverse } } = this;
    if (!title.display) {
      return;
    }
    const font = toFont(title.font);
    const padding = toPadding(title.padding);
    const align = title.align;
    let offset = font.lineHeight / 2;
    if (position === "bottom" || position === "center" || isObject(position)) {
      offset += padding.bottom;
      if (isArray(title.text)) {
        offset += font.lineHeight * (title.text.length - 1);
      }
    } else {
      offset += padding.top;
    }
    const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align);
    renderText(ctx, title.text, 0, 0, font, {
      color: title.color,
      maxWidth,
      rotation,
      textAlign: titleAlign(align, position, reverse),
      textBaseline: "middle",
      translation: [
        titleX,
        titleY
      ]
    });
  }
  draw(chartArea) {
    if (!this._isVisible()) {
      return;
    }
    this.drawBackground();
    this.drawGrid(chartArea);
    this.drawBorder();
    this.drawTitle();
    this.drawLabels(chartArea);
  }
  _layers() {
    const opts = this.options;
    const tz = opts.ticks && opts.ticks.z || 0;
    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);
    const bz = valueOrDefault(opts.border && opts.border.z, 0);
    if (!this._isVisible() || this.draw !== _Scale.prototype.draw) {
      return [
        {
          z: tz,
          draw: (chartArea) => {
            this.draw(chartArea);
          }
        }
      ];
    }
    return [
      {
        z: gz,
        draw: (chartArea) => {
          this.drawBackground();
          this.drawGrid(chartArea);
          this.drawTitle();
        }
      },
      {
        z: bz,
        draw: () => {
          this.drawBorder();
        }
      },
      {
        z: tz,
        draw: (chartArea) => {
          this.drawLabels(chartArea);
        }
      }
    ];
  }
  getMatchingVisibleMetas(type) {
    const metas = this.chart.getSortedVisibleDatasetMetas();
    const axisID = this.axis + "AxisID";
    const result = [];
    let i, ilen;
    for (i = 0, ilen = metas.length; i < ilen; ++i) {
      const meta = metas[i];
      if (meta[axisID] === this.id && (!type || meta.type === type)) {
        result.push(meta);
      }
    }
    return result;
  }
  _resolveTickFontOptions(index) {
    const opts = this.options.ticks.setContext(this.getContext(index));
    return toFont(opts.font);
  }
  _maxDigits() {
    const fontSize = this._resolveTickFontOptions(0).lineHeight;
    return (this.isHorizontal() ? this.width : this.height) / fontSize;
  }
};
var TypedRegistry = class {
  constructor(type, scope, override) {
    this.type = type;
    this.scope = scope;
    this.override = override;
    this.items = /* @__PURE__ */ Object.create(null);
  }
  isForType(type) {
    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
  }
  register(item) {
    const proto = Object.getPrototypeOf(item);
    let parentScope;
    if (isIChartComponent(proto)) {
      parentScope = this.register(proto);
    }
    const items = this.items;
    const id = item.id;
    const scope = this.scope + "." + id;
    if (!id) {
      throw new Error("class does not have id: " + item);
    }
    if (id in items) {
      return scope;
    }
    items[id] = item;
    registerDefaults(item, scope, parentScope);
    if (this.override) {
      defaults.override(item.id, item.overrides);
    }
    return scope;
  }
  get(id) {
    return this.items[id];
  }
  unregister(item) {
    const items = this.items;
    const id = item.id;
    const scope = this.scope;
    if (id in items) {
      delete items[id];
    }
    if (scope && id in defaults[scope]) {
      delete defaults[scope][id];
      if (this.override) {
        delete overrides[id];
      }
    }
  }
};
function registerDefaults(item, scope, parentScope) {
  const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [
    parentScope ? defaults.get(parentScope) : {},
    defaults.get(scope),
    item.defaults
  ]);
  defaults.set(scope, itemDefaults);
  if (item.defaultRoutes) {
    routeDefaults(scope, item.defaultRoutes);
  }
  if (item.descriptors) {
    defaults.describe(scope, item.descriptors);
  }
}
function routeDefaults(scope, routes) {
  Object.keys(routes).forEach((property) => {
    const propertyParts = property.split(".");
    const sourceName = propertyParts.pop();
    const sourceScope = [
      scope
    ].concat(propertyParts).join(".");
    const parts = routes[property].split(".");
    const targetName = parts.pop();
    const targetScope = parts.join(".");
    defaults.route(sourceScope, sourceName, targetScope, targetName);
  });
}
function isIChartComponent(proto) {
  return "id" in proto && "defaults" in proto;
}
var Registry = class {
  constructor() {
    this.controllers = new TypedRegistry(DatasetController, "datasets", true);
    this.elements = new TypedRegistry(Element, "elements");
    this.plugins = new TypedRegistry(Object, "plugins");
    this.scales = new TypedRegistry(Scale, "scales");
    this._typedRegistries = [
      this.controllers,
      this.scales,
      this.elements
    ];
  }
  add(...args) {
    this._each("register", args);
  }
  remove(...args) {
    this._each("unregister", args);
  }
  addControllers(...args) {
    this._each("register", args, this.controllers);
  }
  addElements(...args) {
    this._each("register", args, this.elements);
  }
  addPlugins(...args) {
    this._each("register", args, this.plugins);
  }
  addScales(...args) {
    this._each("register", args, this.scales);
  }
  getController(id) {
    return this._get(id, this.controllers, "controller");
  }
  getElement(id) {
    return this._get(id, this.elements, "element");
  }
  getPlugin(id) {
    return this._get(id, this.plugins, "plugin");
  }
  getScale(id) {
    return this._get(id, this.scales, "scale");
  }
  removeControllers(...args) {
    this._each("unregister", args, this.controllers);
  }
  removeElements(...args) {
    this._each("unregister", args, this.elements);
  }
  removePlugins(...args) {
    this._each("unregister", args, this.plugins);
  }
  removeScales(...args) {
    this._each("unregister", args, this.scales);
  }
  _each(method, args, typedRegistry) {
    [
      ...args
    ].forEach((arg) => {
      const reg = typedRegistry || this._getRegistryForType(arg);
      if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {
        this._exec(method, reg, arg);
      } else {
        each(arg, (item) => {
          const itemReg = typedRegistry || this._getRegistryForType(item);
          this._exec(method, itemReg, item);
        });
      }
    });
  }
  _exec(method, registry2, component) {
    const camelMethod = _capitalize(method);
    callback(component["before" + camelMethod], [], component);
    registry2[method](component);
    callback(component["after" + camelMethod], [], component);
  }
  _getRegistryForType(type) {
    for (let i = 0; i < this._typedRegistries.length; i++) {
      const reg = this._typedRegistries[i];
      if (reg.isForType(type)) {
        return reg;
      }
    }
    return this.plugins;
  }
  _get(id, typedRegistry, type) {
    const item = typedRegistry.get(id);
    if (item === void 0) {
      throw new Error('"' + id + '" is not a registered ' + type + ".");
    }
    return item;
  }
};
var registry = /* @__PURE__ */ new Registry();
var PluginService = class {
  constructor() {
    this._init = [];
  }
  notify(chart, hook, args, filter) {
    if (hook === "beforeInit") {
      this._init = this._createDescriptors(chart, true);
      this._notify(this._init, chart, "install");
    }
    const descriptors2 = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
    const result = this._notify(descriptors2, chart, hook, args);
    if (hook === "afterDestroy") {
      this._notify(descriptors2, chart, "stop");
      this._notify(this._init, chart, "uninstall");
    }
    return result;
  }
  _notify(descriptors2, chart, hook, args) {
    args = args || {};
    for (const descriptor of descriptors2) {
      const plugin = descriptor.plugin;
      const method = plugin[hook];
      const params = [
        chart,
        args,
        descriptor.options
      ];
      if (callback(method, params, plugin) === false && args.cancelable) {
        return false;
      }
    }
    return true;
  }
  invalidate() {
    if (!isNullOrUndef(this._cache)) {
      this._oldCache = this._cache;
      this._cache = void 0;
    }
  }
  _descriptors(chart) {
    if (this._cache) {
      return this._cache;
    }
    const descriptors2 = this._cache = this._createDescriptors(chart);
    this._notifyStateChanges(chart);
    return descriptors2;
  }
  _createDescriptors(chart, all) {
    const config = chart && chart.config;
    const options = valueOrDefault(config.options && config.options.plugins, {});
    const plugins = allPlugins(config);
    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);
  }
  _notifyStateChanges(chart) {
    const previousDescriptors = this._oldCache || [];
    const descriptors2 = this._cache;
    const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id));
    this._notify(diff(previousDescriptors, descriptors2), chart, "stop");
    this._notify(diff(descriptors2, previousDescriptors), chart, "start");
  }
};
function allPlugins(config) {
  const localIds = {};
  const plugins = [];
  const keys = Object.keys(registry.plugins.items);
  for (let i = 0; i < keys.length; i++) {
    plugins.push(registry.getPlugin(keys[i]));
  }
  const local = config.plugins || [];
  for (let i = 0; i < local.length; i++) {
    const plugin = local[i];
    if (plugins.indexOf(plugin) === -1) {
      plugins.push(plugin);
      localIds[plugin.id] = true;
    }
  }
  return {
    plugins,
    localIds
  };
}
function getOpts(options, all) {
  if (!all && options === false) {
    return null;
  }
  if (options === true) {
    return {};
  }
  return options;
}
function createDescriptors(chart, { plugins, localIds }, options, all) {
  const result = [];
  const context = chart.getContext();
  for (const plugin of plugins) {
    const id = plugin.id;
    const opts = getOpts(options[id], all);
    if (opts === null) {
      continue;
    }
    result.push({
      plugin,
      options: pluginOpts(chart.config, {
        plugin,
        local: localIds[id]
      }, opts, context)
    });
  }
  return result;
}
function pluginOpts(config, { plugin, local }, opts, context) {
  const keys = config.pluginScopeKeys(plugin);
  const scopes = config.getOptionScopes(opts, keys);
  if (local && plugin.defaults) {
    scopes.push(plugin.defaults);
  }
  return config.createResolver(scopes, context, [
    ""
  ], {
    scriptable: false,
    indexable: false,
    allKeys: true
  });
}
function getIndexAxis(type, options) {
  const datasetDefaults = defaults.datasets[type] || {};
  const datasetOptions = (options.datasets || {})[type] || {};
  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || "x";
}
function getAxisFromDefaultScaleID(id, indexAxis) {
  let axis = id;
  if (id === "_index_") {
    axis = indexAxis;
  } else if (id === "_value_") {
    axis = indexAxis === "x" ? "y" : "x";
  }
  return axis;
}
function getDefaultScaleIDFromAxis(axis, indexAxis) {
  return axis === indexAxis ? "_index_" : "_value_";
}
function idMatchesAxis(id) {
  if (id === "x" || id === "y" || id === "r") {
    return id;
  }
}
function axisFromPosition(position) {
  if (position === "top" || position === "bottom") {
    return "x";
  }
  if (position === "left" || position === "right") {
    return "y";
  }
}
function determineAxis(id, ...scaleOptions) {
  if (idMatchesAxis(id)) {
    return id;
  }
  for (const opts of scaleOptions) {
    const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());
    if (axis) {
      return axis;
    }
  }
  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);
}
function getAxisFromDataset(id, axis, dataset) {
  if (dataset[axis + "AxisID"] === id) {
    return {
      axis
    };
  }
}
function retrieveAxisFromDatasets(id, config) {
  if (config.data && config.data.datasets) {
    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);
    if (boundDs.length) {
      return getAxisFromDataset(id, "x", boundDs[0]) || getAxisFromDataset(id, "y", boundDs[0]);
    }
  }
  return {};
}
function mergeScaleConfig(config, options) {
  const chartDefaults = overrides[config.type] || {
    scales: {}
  };
  const configScales = options.scales || {};
  const chartIndexAxis = getIndexAxis(config.type, options);
  const scales = /* @__PURE__ */ Object.create(null);
  Object.keys(configScales).forEach((id) => {
    const scaleConf = configScales[id];
    if (!isObject(scaleConf)) {
      return console.error(`Invalid scale configuration for scale: ${id}`);
    }
    if (scaleConf._proxy) {
      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);
    }
    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);
    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
    const defaultScaleOptions = chartDefaults.scales || {};
    scales[id] = mergeIf(/* @__PURE__ */ Object.create(null), [
      {
        axis
      },
      scaleConf,
      defaultScaleOptions[axis],
      defaultScaleOptions[defaultId]
    ]);
  });
  config.data.datasets.forEach((dataset) => {
    const type = dataset.type || config.type;
    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);
    const datasetDefaults = overrides[type] || {};
    const defaultScaleOptions = datasetDefaults.scales || {};
    Object.keys(defaultScaleOptions).forEach((defaultID) => {
      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
      const id = dataset[axis + "AxisID"] || axis;
      scales[id] = scales[id] || /* @__PURE__ */ Object.create(null);
      mergeIf(scales[id], [
        {
          axis
        },
        configScales[id],
        defaultScaleOptions[defaultID]
      ]);
    });
  });
  Object.keys(scales).forEach((key) => {
    const scale = scales[key];
    mergeIf(scale, [
      defaults.scales[scale.type],
      defaults.scale
    ]);
  });
  return scales;
}
function initOptions(config) {
  const options = config.options || (config.options = {});
  options.plugins = valueOrDefault(options.plugins, {});
  options.scales = mergeScaleConfig(config, options);
}
function initData(data) {
  data = data || {};
  data.datasets = data.datasets || [];
  data.labels = data.labels || [];
  return data;
}
function initConfig(config) {
  config = config || {};
  config.data = initData(config.data);
  initOptions(config);
  return config;
}
var keyCache = /* @__PURE__ */ new Map();
var keysCached = /* @__PURE__ */ new Set();
function cachedKeys(cacheKey, generate) {
  let keys = keyCache.get(cacheKey);
  if (!keys) {
    keys = generate();
    keyCache.set(cacheKey, keys);
    keysCached.add(keys);
  }
  return keys;
}
var addIfFound = (set2, obj, key) => {
  const opts = resolveObjectKey(obj, key);
  if (opts !== void 0) {
    set2.add(opts);
  }
};
var Config = class {
  constructor(config) {
    this._config = initConfig(config);
    this._scopeCache = /* @__PURE__ */ new Map();
    this._resolverCache = /* @__PURE__ */ new Map();
  }
  get platform() {
    return this._config.platform;
  }
  get type() {
    return this._config.type;
  }
  set type(type) {
    this._config.type = type;
  }
  get data() {
    return this._config.data;
  }
  set data(data) {
    this._config.data = initData(data);
  }
  get options() {
    return this._config.options;
  }
  set options(options) {
    this._config.options = options;
  }
  get plugins() {
    return this._config.plugins;
  }
  update() {
    const config = this._config;
    this.clearCache();
    initOptions(config);
  }
  clearCache() {
    this._scopeCache.clear();
    this._resolverCache.clear();
  }
  datasetScopeKeys(datasetType) {
    return cachedKeys(datasetType, () => [
      [
        `datasets.${datasetType}`,
        ""
      ]
    ]);
  }
  datasetAnimationScopeKeys(datasetType, transition) {
    return cachedKeys(`${datasetType}.transition.${transition}`, () => [
      [
        `datasets.${datasetType}.transitions.${transition}`,
        `transitions.${transition}`
      ],
      [
        `datasets.${datasetType}`,
        ""
      ]
    ]);
  }
  datasetElementScopeKeys(datasetType, elementType) {
    return cachedKeys(`${datasetType}-${elementType}`, () => [
      [
        `datasets.${datasetType}.elements.${elementType}`,
        `datasets.${datasetType}`,
        `elements.${elementType}`,
        ""
      ]
    ]);
  }
  pluginScopeKeys(plugin) {
    const id = plugin.id;
    const type = this.type;
    return cachedKeys(`${type}-plugin-${id}`, () => [
      [
        `plugins.${id}`,
        ...plugin.additionalOptionScopes || []
      ]
    ]);
  }
  _cachedScopes(mainScope, resetCache) {
    const _scopeCache = this._scopeCache;
    let cache = _scopeCache.get(mainScope);
    if (!cache || resetCache) {
      cache = /* @__PURE__ */ new Map();
      _scopeCache.set(mainScope, cache);
    }
    return cache;
  }
  getOptionScopes(mainScope, keyLists, resetCache) {
    const { options, type } = this;
    const cache = this._cachedScopes(mainScope, resetCache);
    const cached = cache.get(keyLists);
    if (cached) {
      return cached;
    }
    const scopes = /* @__PURE__ */ new Set();
    keyLists.forEach((keys) => {
      if (mainScope) {
        scopes.add(mainScope);
        keys.forEach((key) => addIfFound(scopes, mainScope, key));
      }
      keys.forEach((key) => addIfFound(scopes, options, key));
      keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key));
      keys.forEach((key) => addIfFound(scopes, defaults, key));
      keys.forEach((key) => addIfFound(scopes, descriptors, key));
    });
    const array = Array.from(scopes);
    if (array.length === 0) {
      array.push(/* @__PURE__ */ Object.create(null));
    }
    if (keysCached.has(keyLists)) {
      cache.set(keyLists, array);
    }
    return array;
  }
  chartOptionScopes() {
    const { options, type } = this;
    return [
      options,
      overrides[type] || {},
      defaults.datasets[type] || {},
      {
        type
      },
      defaults,
      descriptors
    ];
  }
  resolveNamedOptions(scopes, names2, context, prefixes = [
    ""
  ]) {
    const result = {
      $shared: true
    };
    const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);
    let options = resolver;
    if (needContext(resolver, names2)) {
      result.$shared = false;
      context = isFunction(context) ? context() : context;
      const subResolver = this.createResolver(scopes, context, subPrefixes);
      options = _attachContext(resolver, context, subResolver);
    }
    for (const prop of names2) {
      result[prop] = options[prop];
    }
    return result;
  }
  createResolver(scopes, context, prefixes = [
    ""
  ], descriptorDefaults) {
    const { resolver } = getResolver(this._resolverCache, scopes, prefixes);
    return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver;
  }
};
function getResolver(resolverCache, scopes, prefixes) {
  let cache = resolverCache.get(scopes);
  if (!cache) {
    cache = /* @__PURE__ */ new Map();
    resolverCache.set(scopes, cache);
  }
  const cacheKey = prefixes.join();
  let cached = cache.get(cacheKey);
  if (!cached) {
    const resolver = _createResolver(scopes, prefixes);
    cached = {
      resolver,
      subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes("hover"))
    };
    cache.set(cacheKey, cached);
  }
  return cached;
}
var hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));
function needContext(proxy, names2) {
  const { isScriptable, isIndexable } = _descriptors(proxy);
  for (const prop of names2) {
    const scriptable = isScriptable(prop);
    const indexable = isIndexable(prop);
    const value = (indexable || scriptable) && proxy[prop];
    if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {
      return true;
    }
  }
  return false;
}
var version = "4.4.2";
var KNOWN_POSITIONS = [
  "top",
  "bottom",
  "left",
  "right",
  "chartArea"
];
function positionIsHorizontal(position, axis) {
  return position === "top" || position === "bottom" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === "x";
}
function compare2Level(l1, l2) {
  return function(a, b) {
    return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];
  };
}
function onAnimationsComplete(context) {
  const chart = context.chart;
  const animationOptions = chart.options.animation;
  chart.notifyPlugins("afterRender");
  callback(animationOptions && animationOptions.onComplete, [
    context
  ], chart);
}
function onAnimationProgress(context) {
  const chart = context.chart;
  const animationOptions = chart.options.animation;
  callback(animationOptions && animationOptions.onProgress, [
    context
  ], chart);
}
function getCanvas(item) {
  if (_isDomSupported() && typeof item === "string") {
    item = document.getElementById(item);
  } else if (item && item.length) {
    item = item[0];
  }
  if (item && item.canvas) {
    item = item.canvas;
  }
  return item;
}
var instances = {};
var getChart = (key) => {
  const canvas = getCanvas(key);
  return Object.values(instances).filter((c) => c.canvas === canvas).pop();
};
function moveNumericKeys(obj, start, move) {
  const keys = Object.keys(obj);
  for (const key of keys) {
    const intKey = +key;
    if (intKey >= start) {
      const value = obj[key];
      delete obj[key];
      if (move > 0 || intKey > start) {
        obj[intKey + move] = value;
      }
    }
  }
}
function determineLastEvent(e, lastEvent, inChartArea, isClick) {
  if (!inChartArea || e.type === "mouseout") {
    return null;
  }
  if (isClick) {
    return lastEvent;
  }
  return e;
}
function getSizeForArea(scale, chartArea, field) {
  return scale.options.clip ? scale[field] : chartArea[field];
}
function getDatasetArea(meta, chartArea) {
  const { xScale, yScale } = meta;
  if (xScale && yScale) {
    return {
      left: getSizeForArea(xScale, chartArea, "left"),
      right: getSizeForArea(xScale, chartArea, "right"),
      top: getSizeForArea(yScale, chartArea, "top"),
      bottom: getSizeForArea(yScale, chartArea, "bottom")
    };
  }
  return chartArea;
}
var Chart = class {
  static register(...items) {
    registry.add(...items);
    invalidatePlugins();
  }
  static unregister(...items) {
    registry.remove(...items);
    invalidatePlugins();
  }
  constructor(item, userConfig) {
    const config = this.config = new Config(userConfig);
    const initialCanvas = getCanvas(item);
    const existingChart = getChart(initialCanvas);
    if (existingChart) {
      throw new Error("Canvas is already in use. Chart with ID '" + existingChart.id + "' must be destroyed before the canvas with ID '" + existingChart.canvas.id + "' can be reused.");
    }
    const options = config.createResolver(config.chartOptionScopes(), this.getContext());
    this.platform = new (config.platform || _detectPlatform(initialCanvas))();
    this.platform.updateConfig(config);
    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);
    const canvas = context && context.canvas;
    const height = canvas && canvas.height;
    const width = canvas && canvas.width;
    this.id = uid();
    this.ctx = context;
    this.canvas = canvas;
    this.width = width;
    this.height = height;
    this._options = options;
    this._aspectRatio = this.aspectRatio;
    this._layers = [];
    this._metasets = [];
    this._stacks = void 0;
    this.boxes = [];
    this.currentDevicePixelRatio = void 0;
    this.chartArea = void 0;
    this._active = [];
    this._lastEvent = void 0;
    this._listeners = {};
    this._responsiveListeners = void 0;
    this._sortedMetasets = [];
    this.scales = {};
    this._plugins = new PluginService();
    this.$proxies = {};
    this._hiddenIndices = {};
    this.attached = false;
    this._animationsDisabled = void 0;
    this.$context = void 0;
    this._doResize = debounce((mode) => this.update(mode), options.resizeDelay || 0);
    this._dataChanges = [];
    instances[this.id] = this;
    if (!context || !canvas) {
      console.error("Failed to create chart: can't acquire context from the given item");
      return;
    }
    animator.listen(this, "complete", onAnimationsComplete);
    animator.listen(this, "progress", onAnimationProgress);
    this._initialize();
    if (this.attached) {
      this.update();
    }
  }
  get aspectRatio() {
    const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this;
    if (!isNullOrUndef(aspectRatio)) {
      return aspectRatio;
    }
    if (maintainAspectRatio && _aspectRatio) {
      return _aspectRatio;
    }
    return height ? width / height : null;
  }
  get data() {
    return this.config.data;
  }
  set data(data) {
    this.config.data = data;
  }
  get options() {
    return this._options;
  }
  set options(options) {
    this.config.options = options;
  }
  get registry() {
    return registry;
  }
  _initialize() {
    this.notifyPlugins("beforeInit");
    if (this.options.responsive) {
      this.resize();
    } else {
      retinaScale(this, this.options.devicePixelRatio);
    }
    this.bindEvents();
    this.notifyPlugins("afterInit");
    return this;
  }
  clear() {
    clearCanvas(this.canvas, this.ctx);
    return this;
  }
  stop() {
    animator.stop(this);
    return this;
  }
  resize(width, height) {
    if (!animator.running(this)) {
      this._resize(width, height);
    } else {
      this._resizeBeforeDraw = {
        width,
        height
      };
    }
  }
  _resize(width, height) {
    const options = this.options;
    const canvas = this.canvas;
    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;
    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();
    const mode = this.width ? "resize" : "attach";
    this.width = newSize.width;
    this.height = newSize.height;
    this._aspectRatio = this.aspectRatio;
    if (!retinaScale(this, newRatio, true)) {
      return;
    }
    this.notifyPlugins("resize", {
      size: newSize
    });
    callback(options.onResize, [
      this,
      newSize
    ], this);
    if (this.attached) {
      if (this._doResize(mode)) {
        this.render();
      }
    }
  }
  ensureScalesHaveIDs() {
    const options = this.options;
    const scalesOptions = options.scales || {};
    each(scalesOptions, (axisOptions, axisID) => {
      axisOptions.id = axisID;
    });
  }
  buildOrUpdateScales() {
    const options = this.options;
    const scaleOpts = options.scales;
    const scales = this.scales;
    const updated = Object.keys(scales).reduce((obj, id) => {
      obj[id] = false;
      return obj;
    }, {});
    let items = [];
    if (scaleOpts) {
      items = items.concat(Object.keys(scaleOpts).map((id) => {
        const scaleOptions = scaleOpts[id];
        const axis = determineAxis(id, scaleOptions);
        const isRadial = axis === "r";
        const isHorizontal = axis === "x";
        return {
          options: scaleOptions,
          dposition: isRadial ? "chartArea" : isHorizontal ? "bottom" : "left",
          dtype: isRadial ? "radialLinear" : isHorizontal ? "category" : "linear"
        };
      }));
    }
    each(items, (item) => {
      const scaleOptions = item.options;
      const id = scaleOptions.id;
      const axis = determineAxis(id, scaleOptions);
      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);
      if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
        scaleOptions.position = item.dposition;
      }
      updated[id] = true;
      let scale = null;
      if (id in scales && scales[id].type === scaleType) {
        scale = scales[id];
      } else {
        const scaleClass = registry.getScale(scaleType);
        scale = new scaleClass({
          id,
          type: scaleType,
          ctx: this.ctx,
          chart: this
        });
        scales[scale.id] = scale;
      }
      scale.init(scaleOptions, options);
    });
    each(updated, (hasUpdated, id) => {
      if (!hasUpdated) {
        delete scales[id];
      }
    });
    each(scales, (scale) => {
      layouts.configure(this, scale, scale.options);
      layouts.addBox(this, scale);
    });
  }
  _updateMetasets() {
    const metasets = this._metasets;
    const numData = this.data.datasets.length;
    const numMeta = metasets.length;
    metasets.sort((a, b) => a.index - b.index);
    if (numMeta > numData) {
      for (let i = numData; i < numMeta; ++i) {
        this._destroyDatasetMeta(i);
      }
      metasets.splice(numData, numMeta - numData);
    }
    this._sortedMetasets = metasets.slice(0).sort(compare2Level("order", "index"));
  }
  _removeUnreferencedMetasets() {
    const { _metasets: metasets, data: { datasets } } = this;
    if (metasets.length > datasets.length) {
      delete this._stacks;
    }
    metasets.forEach((meta, index) => {
      if (datasets.filter((x) => x === meta._dataset).length === 0) {
        this._destroyDatasetMeta(index);
      }
    });
  }
  buildOrUpdateControllers() {
    const newControllers = [];
    const datasets = this.data.datasets;
    let i, ilen;
    this._removeUnreferencedMetasets();
    for (i = 0, ilen = datasets.length; i < ilen; i++) {
      const dataset = datasets[i];
      let meta = this.getDatasetMeta(i);
      const type = dataset.type || this.config.type;
      if (meta.type && meta.type !== type) {
        this._destroyDatasetMeta(i);
        meta = this.getDatasetMeta(i);
      }
      meta.type = type;
      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
      meta.order = dataset.order || 0;
      meta.index = i;
      meta.label = "" + dataset.label;
      meta.visible = this.isDatasetVisible(i);
      if (meta.controller) {
        meta.controller.updateIndex(i);
        meta.controller.linkScales();
      } else {
        const ControllerClass = registry.getController(type);
        const { datasetElementType, dataElementType } = defaults.datasets[type];
        Object.assign(ControllerClass, {
          dataElementType: registry.getElement(dataElementType),
          datasetElementType: datasetElementType && registry.getElement(datasetElementType)
        });
        meta.controller = new ControllerClass(this, i);
        newControllers.push(meta.controller);
      }
    }
    this._updateMetasets();
    return newControllers;
  }
  _resetElements() {
    each(this.data.datasets, (dataset, datasetIndex) => {
      this.getDatasetMeta(datasetIndex).controller.reset();
    }, this);
  }
  reset() {
    this._resetElements();
    this.notifyPlugins("reset");
  }
  update(mode) {
    const config = this.config;
    config.update();
    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
    const animsDisabled = this._animationsDisabled = !options.animation;
    this._updateScales();
    this._checkEventBindings();
    this._updateHiddenIndices();
    this._plugins.invalidate();
    if (this.notifyPlugins("beforeUpdate", {
      mode,
      cancelable: true
    }) === false) {
      return;
    }
    const newControllers = this.buildOrUpdateControllers();
    this.notifyPlugins("beforeElementsUpdate");
    let minPadding = 0;
    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {
      const { controller } = this.getDatasetMeta(i);
      const reset2 = !animsDisabled && newControllers.indexOf(controller) === -1;
      controller.buildOrUpdateElements(reset2);
      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
    }
    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;
    this._updateLayout(minPadding);
    if (!animsDisabled) {
      each(newControllers, (controller) => {
        controller.reset();
      });
    }
    this._updateDatasets(mode);
    this.notifyPlugins("afterUpdate", {
      mode
    });
    this._layers.sort(compare2Level("z", "_idx"));
    const { _active, _lastEvent } = this;
    if (_lastEvent) {
      this._eventHandler(_lastEvent, true);
    } else if (_active.length) {
      this._updateHoverStyles(_active, _active, true);
    }
    this.render();
  }
  _updateScales() {
    each(this.scales, (scale) => {
      layouts.removeBox(this, scale);
    });
    this.ensureScalesHaveIDs();
    this.buildOrUpdateScales();
  }
  _checkEventBindings() {
    const options = this.options;
    const existingEvents = new Set(Object.keys(this._listeners));
    const newEvents = new Set(options.events);
    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {
      this.unbindEvents();
      this.bindEvents();
    }
  }
  _updateHiddenIndices() {
    const { _hiddenIndices } = this;
    const changes = this._getUniformDataChanges() || [];
    for (const { method, start, count } of changes) {
      const move = method === "_removeElements" ? -count : count;
      moveNumericKeys(_hiddenIndices, start, move);
    }
  }
  _getUniformDataChanges() {
    const _dataChanges = this._dataChanges;
    if (!_dataChanges || !_dataChanges.length) {
      return;
    }
    this._dataChanges = [];
    const datasetCount = this.data.datasets.length;
    const makeSet = (idx) => new Set(_dataChanges.filter((c) => c[0] === idx).map((c, i) => i + "," + c.splice(1).join(",")));
    const changeSet = makeSet(0);
    for (let i = 1; i < datasetCount; i++) {
      if (!setsEqual(changeSet, makeSet(i))) {
        return;
      }
    }
    return Array.from(changeSet).map((c) => c.split(",")).map((a) => ({
      method: a[1],
      start: +a[2],
      count: +a[3]
    }));
  }
  _updateLayout(minPadding) {
    if (this.notifyPlugins("beforeLayout", {
      cancelable: true
    }) === false) {
      return;
    }
    layouts.update(this, this.width, this.height, minPadding);
    const area = this.chartArea;
    const noArea = area.width <= 0 || area.height <= 0;
    this._layers = [];
    each(this.boxes, (box) => {
      if (noArea && box.position === "chartArea") {
        return;
      }
      if (box.configure) {
        box.configure();
      }
      this._layers.push(...box._layers());
    }, this);
    this._layers.forEach((item, index) => {
      item._idx = index;
    });
    this.notifyPlugins("afterLayout");
  }
  _updateDatasets(mode) {
    if (this.notifyPlugins("beforeDatasetsUpdate", {
      mode,
      cancelable: true
    }) === false) {
      return;
    }
    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
      this.getDatasetMeta(i).controller.configure();
    }
    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
      this._updateDataset(i, isFunction(mode) ? mode({
        datasetIndex: i
      }) : mode);
    }
    this.notifyPlugins("afterDatasetsUpdate", {
      mode
    });
  }
  _updateDataset(index, mode) {
    const meta = this.getDatasetMeta(index);
    const args = {
      meta,
      index,
      mode,
      cancelable: true
    };
    if (this.notifyPlugins("beforeDatasetUpdate", args) === false) {
      return;
    }
    meta.controller._update(mode);
    args.cancelable = false;
    this.notifyPlugins("afterDatasetUpdate", args);
  }
  render() {
    if (this.notifyPlugins("beforeRender", {
      cancelable: true
    }) === false) {
      return;
    }
    if (animator.has(this)) {
      if (this.attached && !animator.running(this)) {
        animator.start(this);
      }
    } else {
      this.draw();
      onAnimationsComplete({
        chart: this
      });
    }
  }
  draw() {
    let i;
    if (this._resizeBeforeDraw) {
      const { width, height } = this._resizeBeforeDraw;
      this._resize(width, height);
      this._resizeBeforeDraw = null;
    }
    this.clear();
    if (this.width <= 0 || this.height <= 0) {
      return;
    }
    if (this.notifyPlugins("beforeDraw", {
      cancelable: true
    }) === false) {
      return;
    }
    const layers = this._layers;
    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {
      layers[i].draw(this.chartArea);
    }
    this._drawDatasets();
    for (; i < layers.length; ++i) {
      layers[i].draw(this.chartArea);
    }
    this.notifyPlugins("afterDraw");
  }
  _getSortedDatasetMetas(filterVisible) {
    const metasets = this._sortedMetasets;
    const result = [];
    let i, ilen;
    for (i = 0, ilen = metasets.length; i < ilen; ++i) {
      const meta = metasets[i];
      if (!filterVisible || meta.visible) {
        result.push(meta);
      }
    }
    return result;
  }
  getSortedVisibleDatasetMetas() {
    return this._getSortedDatasetMetas(true);
  }
  _drawDatasets() {
    if (this.notifyPlugins("beforeDatasetsDraw", {
      cancelable: true
    }) === false) {
      return;
    }
    const metasets = this.getSortedVisibleDatasetMetas();
    for (let i = metasets.length - 1; i >= 0; --i) {
      this._drawDataset(metasets[i]);
    }
    this.notifyPlugins("afterDatasetsDraw");
  }
  _drawDataset(meta) {
    const ctx = this.ctx;
    const clip = meta._clip;
    const useClip = !clip.disabled;
    const area = getDatasetArea(meta, this.chartArea);
    const args = {
      meta,
      index: meta.index,
      cancelable: true
    };
    if (this.notifyPlugins("beforeDatasetDraw", args) === false) {
      return;
    }
    if (useClip) {
      clipArea(ctx, {
        left: clip.left === false ? 0 : area.left - clip.left,
        right: clip.right === false ? this.width : area.right + clip.right,
        top: clip.top === false ? 0 : area.top - clip.top,
        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom
      });
    }
    meta.controller.draw();
    if (useClip) {
      unclipArea(ctx);
    }
    args.cancelable = false;
    this.notifyPlugins("afterDatasetDraw", args);
  }
  isPointInArea(point) {
    return _isPointInArea(point, this.chartArea, this._minPadding);
  }
  getElementsAtEventForMode(e, mode, options, useFinalPosition) {
    const method = Interaction.modes[mode];
    if (typeof method === "function") {
      return method(this, e, options, useFinalPosition);
    }
    return [];
  }
  getDatasetMeta(datasetIndex) {
    const dataset = this.data.datasets[datasetIndex];
    const metasets = this._metasets;
    let meta = metasets.filter((x) => x && x._dataset === dataset).pop();
    if (!meta) {
      meta = {
        type: null,
        data: [],
        dataset: null,
        controller: null,
        hidden: null,
        xAxisID: null,
        yAxisID: null,
        order: dataset && dataset.order || 0,
        index: datasetIndex,
        _dataset: dataset,
        _parsed: [],
        _sorted: false
      };
      metasets.push(meta);
    }
    return meta;
  }
  getContext() {
    return this.$context || (this.$context = createContext(null, {
      chart: this,
      type: "chart"
    }));
  }
  getVisibleDatasetCount() {
    return this.getSortedVisibleDatasetMetas().length;
  }
  isDatasetVisible(datasetIndex) {
    const dataset = this.data.datasets[datasetIndex];
    if (!dataset) {
      return false;
    }
    const meta = this.getDatasetMeta(datasetIndex);
    return typeof meta.hidden === "boolean" ? !meta.hidden : !dataset.hidden;
  }
  setDatasetVisibility(datasetIndex, visible) {
    const meta = this.getDatasetMeta(datasetIndex);
    meta.hidden = !visible;
  }
  toggleDataVisibility(index) {
    this._hiddenIndices[index] = !this._hiddenIndices[index];
  }
  getDataVisibility(index) {
    return !this._hiddenIndices[index];
  }
  _updateVisibility(datasetIndex, dataIndex, visible) {
    const mode = visible ? "show" : "hide";
    const meta = this.getDatasetMeta(datasetIndex);
    const anims = meta.controller._resolveAnimations(void 0, mode);
    if (defined(dataIndex)) {
      meta.data[dataIndex].hidden = !visible;
      this.update();
    } else {
      this.setDatasetVisibility(datasetIndex, visible);
      anims.update(meta, {
        visible
      });
      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0);
    }
  }
  hide(datasetIndex, dataIndex) {
    this._updateVisibility(datasetIndex, dataIndex, false);
  }
  show(datasetIndex, dataIndex) {
    this._updateVisibility(datasetIndex, dataIndex, true);
  }
  _destroyDatasetMeta(datasetIndex) {
    const meta = this._metasets[datasetIndex];
    if (meta && meta.controller) {
      meta.controller._destroy();
    }
    delete this._metasets[datasetIndex];
  }
  _stop() {
    let i, ilen;
    this.stop();
    animator.remove(this);
    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
      this._destroyDatasetMeta(i);
    }
  }
  destroy() {
    this.notifyPlugins("beforeDestroy");
    const { canvas, ctx } = this;
    this._stop();
    this.config.clearCache();
    if (canvas) {
      this.unbindEvents();
      clearCanvas(canvas, ctx);
      this.platform.releaseContext(ctx);
      this.canvas = null;
      this.ctx = null;
    }
    delete instances[this.id];
    this.notifyPlugins("afterDestroy");
  }
  toBase64Image(...args) {
    return this.canvas.toDataURL(...args);
  }
  bindEvents() {
    this.bindUserEvents();
    if (this.options.responsive) {
      this.bindResponsiveEvents();
    } else {
      this.attached = true;
    }
  }
  bindUserEvents() {
    const listeners = this._listeners;
    const platform = this.platform;
    const _add = (type, listener2) => {
      platform.addEventListener(this, type, listener2);
      listeners[type] = listener2;
    };
    const listener = (e, x, y) => {
      e.offsetX = x;
      e.offsetY = y;
      this._eventHandler(e);
    };
    each(this.options.events, (type) => _add(type, listener));
  }
  bindResponsiveEvents() {
    if (!this._responsiveListeners) {
      this._responsiveListeners = {};
    }
    const listeners = this._responsiveListeners;
    const platform = this.platform;
    const _add = (type, listener2) => {
      platform.addEventListener(this, type, listener2);
      listeners[type] = listener2;
    };
    const _remove = (type, listener2) => {
      if (listeners[type]) {
        platform.removeEventListener(this, type, listener2);
        delete listeners[type];
      }
    };
    const listener = (width, height) => {
      if (this.canvas) {
        this.resize(width, height);
      }
    };
    let detached;
    const attached = () => {
      _remove("attach", attached);
      this.attached = true;
      this.resize();
      _add("resize", listener);
      _add("detach", detached);
    };
    detached = () => {
      this.attached = false;
      _remove("resize", listener);
      this._stop();
      this._resize(0, 0);
      _add("attach", attached);
    };
    if (platform.isAttached(this.canvas)) {
      attached();
    } else {
      detached();
    }
  }
  unbindEvents() {
    each(this._listeners, (listener, type) => {
      this.platform.removeEventListener(this, type, listener);
    });
    this._listeners = {};
    each(this._responsiveListeners, (listener, type) => {
      this.platform.removeEventListener(this, type, listener);
    });
    this._responsiveListeners = void 0;
  }
  updateHoverStyle(items, mode, enabled) {
    const prefix = enabled ? "set" : "remove";
    let meta, item, i, ilen;
    if (mode === "dataset") {
      meta = this.getDatasetMeta(items[0].datasetIndex);
      meta.controller["_" + prefix + "DatasetHoverStyle"]();
    }
    for (i = 0, ilen = items.length; i < ilen; ++i) {
      item = items[i];
      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;
      if (controller) {
        controller[prefix + "HoverStyle"](item.element, item.datasetIndex, item.index);
      }
    }
  }
  getActiveElements() {
    return this._active || [];
  }
  setActiveElements(activeElements) {
    const lastActive = this._active || [];
    const active = activeElements.map(({ datasetIndex, index }) => {
      const meta = this.getDatasetMeta(datasetIndex);
      if (!meta) {
        throw new Error("No dataset found at index " + datasetIndex);
      }
      return {
        datasetIndex,
        element: meta.data[index],
        index
      };
    });
    const changed = !_elementsEqual(active, lastActive);
    if (changed) {
      this._active = active;
      this._lastEvent = null;
      this._updateHoverStyles(active, lastActive);
    }
  }
  notifyPlugins(hook, args, filter) {
    return this._plugins.notify(this, hook, args, filter);
  }
  isPluginEnabled(pluginId) {
    return this._plugins._cache.filter((p) => p.plugin.id === pluginId).length === 1;
  }
  _updateHoverStyles(active, lastActive, replay) {
    const hoverOptions = this.options.hover;
    const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index));
    const deactivated = diff(lastActive, active);
    const activated = replay ? active : diff(active, lastActive);
    if (deactivated.length) {
      this.updateHoverStyle(deactivated, hoverOptions.mode, false);
    }
    if (activated.length && hoverOptions.mode) {
      this.updateHoverStyle(activated, hoverOptions.mode, true);
    }
  }
  _eventHandler(e, replay) {
    const args = {
      event: e,
      replay,
      cancelable: true,
      inChartArea: this.isPointInArea(e)
    };
    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);
    if (this.notifyPlugins("beforeEvent", args, eventFilter) === false) {
      return;
    }
    const changed = this._handleEvent(e, replay, args.inChartArea);
    args.cancelable = false;
    this.notifyPlugins("afterEvent", args, eventFilter);
    if (changed || args.changed) {
      this.render();
    }
    return this;
  }
  _handleEvent(e, replay, inChartArea) {
    const { _active: lastActive = [], options } = this;
    const useFinalPosition = replay;
    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
    const isClick = _isClickEvent(e);
    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
    if (inChartArea) {
      this._lastEvent = null;
      callback(options.onHover, [
        e,
        active,
        this
      ], this);
      if (isClick) {
        callback(options.onClick, [
          e,
          active,
          this
        ], this);
      }
    }
    const changed = !_elementsEqual(active, lastActive);
    if (changed || replay) {
      this._active = active;
      this._updateHoverStyles(active, lastActive, replay);
    }
    this._lastEvent = lastEvent;
    return changed;
  }
  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
    if (e.type === "mouseout") {
      return [];
    }
    if (!inChartArea) {
      return lastActive;
    }
    const hoverOptions = this.options.hover;
    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
  }
};
__publicField(Chart, "defaults", defaults);
__publicField(Chart, "instances", instances);
__publicField(Chart, "overrides", overrides);
__publicField(Chart, "registry", registry);
__publicField(Chart, "version", version);
__publicField(Chart, "getChart", getChart);
function invalidatePlugins() {
  return each(Chart.instances, (chart) => chart._plugins.invalidate());
}
function clipArc(ctx, element, endAngle) {
  const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element;
  let angleMargin = pixelMargin / outerRadius;
  ctx.beginPath();
  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
  if (innerRadius > pixelMargin) {
    angleMargin = pixelMargin / innerRadius;
    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
  } else {
    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);
  }
  ctx.closePath();
  ctx.clip();
}
function toRadiusCorners(value) {
  return _readValueToProps(value, [
    "outerStart",
    "outerEnd",
    "innerStart",
    "innerEnd"
  ]);
}
function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
  const o = toRadiusCorners(arc.options.borderRadius);
  const halfThickness = (outerRadius - innerRadius) / 2;
  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
  const computeOuterLimit = (val) => {
    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
  };
  return {
    outerStart: computeOuterLimit(o.outerStart),
    outerEnd: computeOuterLimit(o.outerEnd),
    innerStart: _limitValue(o.innerStart, 0, innerLimit),
    innerEnd: _limitValue(o.innerEnd, 0, innerLimit)
  };
}
function rThetaToXY(r, theta, x, y) {
  return {
    x: x + r * Math.cos(theta),
    y: y + r * Math.sin(theta)
  };
}
function pathArc(ctx, element, offset, spacing, end, circular) {
  const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element;
  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
  let spacingOffset = 0;
  const alpha2 = end - start;
  if (spacing) {
    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
    const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2;
    spacingOffset = (alpha2 - adjustedAngle) / 2;
  }
  const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius;
  const angleOffset = (alpha2 - beta) / 2;
  const startAngle = start + angleOffset + spacingOffset;
  const endAngle = end - angleOffset - spacingOffset;
  const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);
  const outerStartAdjustedRadius = outerRadius - outerStart;
  const outerEndAdjustedRadius = outerRadius - outerEnd;
  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
  const innerStartAdjustedRadius = innerRadius + innerStart;
  const innerEndAdjustedRadius = innerRadius + innerEnd;
  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
  ctx.beginPath();
  if (circular) {
    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;
    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);
    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);
    if (outerEnd > 0) {
      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);
    }
    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
    ctx.lineTo(p4.x, p4.y);
    if (innerEnd > 0) {
      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
    }
    const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
    ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
    if (innerStart > 0) {
      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
    }
    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
    ctx.lineTo(p8.x, p8.y);
    if (outerStart > 0) {
      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
    }
  } else {
    ctx.moveTo(x, y);
    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
    ctx.lineTo(outerStartX, outerStartY);
    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
    ctx.lineTo(outerEndX, outerEndY);
  }
  ctx.closePath();
}
function drawArc(ctx, element, offset, spacing, circular) {
  const { fullCircles, startAngle, circumference } = element;
  let endAngle = element.endAngle;
  if (fullCircles) {
    pathArc(ctx, element, offset, spacing, endAngle, circular);
    for (let i = 0; i < fullCircles; ++i) {
      ctx.fill();
    }
    if (!isNaN(circumference)) {
      endAngle = startAngle + (circumference % TAU || TAU);
    }
  }
  pathArc(ctx, element, offset, spacing, endAngle, circular);
  ctx.fill();
  return endAngle;
}
function drawBorder(ctx, element, offset, spacing, circular) {
  const { fullCircles, startAngle, circumference, options } = element;
  const { borderWidth, borderJoinStyle, borderDash, borderDashOffset } = options;
  const inner = options.borderAlign === "inner";
  if (!borderWidth) {
    return;
  }
  ctx.setLineDash(borderDash || []);
  ctx.lineDashOffset = borderDashOffset;
  if (inner) {
    ctx.lineWidth = borderWidth * 2;
    ctx.lineJoin = borderJoinStyle || "round";
  } else {
    ctx.lineWidth = borderWidth;
    ctx.lineJoin = borderJoinStyle || "bevel";
  }
  let endAngle = element.endAngle;
  if (fullCircles) {
    pathArc(ctx, element, offset, spacing, endAngle, circular);
    for (let i = 0; i < fullCircles; ++i) {
      ctx.stroke();
    }
    if (!isNaN(circumference)) {
      endAngle = startAngle + (circumference % TAU || TAU);
    }
  }
  if (inner) {
    clipArc(ctx, element, endAngle);
  }
  if (!fullCircles) {
    pathArc(ctx, element, offset, spacing, endAngle, circular);
    ctx.stroke();
  }
}
var ArcElement = class extends Element {
  constructor(cfg) {
    super();
    __publicField(this, "circumference");
    __publicField(this, "endAngle");
    __publicField(this, "fullCircles");
    __publicField(this, "innerRadius");
    __publicField(this, "outerRadius");
    __publicField(this, "pixelMargin");
    __publicField(this, "startAngle");
    this.options = void 0;
    this.circumference = void 0;
    this.startAngle = void 0;
    this.endAngle = void 0;
    this.innerRadius = void 0;
    this.outerRadius = void 0;
    this.pixelMargin = 0;
    this.fullCircles = 0;
    if (cfg) {
      Object.assign(this, cfg);
    }
  }
  inRange(chartX, chartY, useFinalPosition) {
    const point = this.getProps([
      "x",
      "y"
    ], useFinalPosition);
    const { angle, distance } = getAngleFromPoint(point, {
      x: chartX,
      y: chartY
    });
    const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([
      "startAngle",
      "endAngle",
      "innerRadius",
      "outerRadius",
      "circumference"
    ], useFinalPosition);
    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
    const _circumference = valueOrDefault(circumference, endAngle - startAngle);
    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);
    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
    return betweenAngles && withinRadius;
  }
  getCenterPoint(useFinalPosition) {
    const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([
      "x",
      "y",
      "startAngle",
      "endAngle",
      "innerRadius",
      "outerRadius"
    ], useFinalPosition);
    const { offset, spacing } = this.options;
    const halfAngle = (startAngle + endAngle) / 2;
    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
    return {
      x: x + Math.cos(halfAngle) * halfRadius,
      y: y + Math.sin(halfAngle) * halfRadius
    };
  }
  tooltipPosition(useFinalPosition) {
    return this.getCenterPoint(useFinalPosition);
  }
  draw(ctx) {
    const { options, circumference } = this;
    const offset = (options.offset || 0) / 4;
    const spacing = (options.spacing || 0) / 2;
    const circular = options.circular;
    this.pixelMargin = options.borderAlign === "inner" ? 0.33 : 0;
    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;
    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
      return;
    }
    ctx.save();
    const halfAngle = (this.startAngle + this.endAngle) / 2;
    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));
    const radiusOffset = offset * fix;
    ctx.fillStyle = options.backgroundColor;
    ctx.strokeStyle = options.borderColor;
    drawArc(ctx, this, radiusOffset, spacing, circular);
    drawBorder(ctx, this, radiusOffset, spacing, circular);
    ctx.restore();
  }
};
__publicField(ArcElement, "id", "arc");
__publicField(ArcElement, "defaults", {
  borderAlign: "center",
  borderColor: "#fff",
  borderDash: [],
  borderDashOffset: 0,
  borderJoinStyle: void 0,
  borderRadius: 0,
  borderWidth: 2,
  offset: 0,
  spacing: 0,
  angle: void 0,
  circular: true
});
__publicField(ArcElement, "defaultRoutes", {
  backgroundColor: "backgroundColor"
});
__publicField(ArcElement, "descriptors", {
  _scriptable: true,
  _indexable: (name) => name !== "borderDash"
});
function getBarBounds(bar, useFinalPosition) {
  const { x, y, base, width, height } = bar.getProps([
    "x",
    "y",
    "base",
    "width",
    "height"
  ], useFinalPosition);
  let left, right, top, bottom, half;
  if (bar.horizontal) {
    half = height / 2;
    left = Math.min(x, base);
    right = Math.max(x, base);
    top = y - half;
    bottom = y + half;
  } else {
    half = width / 2;
    left = x - half;
    right = x + half;
    top = Math.min(y, base);
    bottom = Math.max(y, base);
  }
  return {
    left,
    top,
    right,
    bottom
  };
}
function skipOrLimit(skip2, value, min, max) {
  return skip2 ? 0 : _limitValue(value, min, max);
}
function parseBorderWidth(bar, maxW, maxH) {
  const value = bar.options.borderWidth;
  const skip2 = bar.borderSkipped;
  const o = toTRBL(value);
  return {
    t: skipOrLimit(skip2.top, o.top, 0, maxH),
    r: skipOrLimit(skip2.right, o.right, 0, maxW),
    b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH),
    l: skipOrLimit(skip2.left, o.left, 0, maxW)
  };
}
function parseBorderRadius(bar, maxW, maxH) {
  const { enableBorderRadius } = bar.getProps([
    "enableBorderRadius"
  ]);
  const value = bar.options.borderRadius;
  const o = toTRBLCorners(value);
  const maxR = Math.min(maxW, maxH);
  const skip2 = bar.borderSkipped;
  const enableBorder = enableBorderRadius || isObject(value);
  return {
    topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR),
    topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR),
    bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR),
    bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR)
  };
}
function boundingRects(bar) {
  const bounds = getBarBounds(bar);
  const width = bounds.right - bounds.left;
  const height = bounds.bottom - bounds.top;
  const border = parseBorderWidth(bar, width / 2, height / 2);
  const radius = parseBorderRadius(bar, width / 2, height / 2);
  return {
    outer: {
      x: bounds.left,
      y: bounds.top,
      w: width,
      h: height,
      radius
    },
    inner: {
      x: bounds.left + border.l,
      y: bounds.top + border.t,
      w: width - border.l - border.r,
      h: height - border.t - border.b,
      radius: {
        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),
        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),
        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),
        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))
      }
    }
  };
}
function inRange(bar, x, y, useFinalPosition) {
  const skipX = x === null;
  const skipY = y === null;
  const skipBoth = skipX && skipY;
  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
  return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));
}
function hasRadius(radius) {
  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
}
function addNormalRectPath(ctx, rect) {
  ctx.rect(rect.x, rect.y, rect.w, rect.h);
}
function inflateRect(rect, amount, refRect = {}) {
  const x = rect.x !== refRect.x ? -amount : 0;
  const y = rect.y !== refRect.y ? -amount : 0;
  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
  const h4 = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
  return {
    x: rect.x + x,
    y: rect.y + y,
    w: rect.w + w,
    h: rect.h + h4,
    radius: rect.radius
  };
}
var BarElement = class extends Element {
  constructor(cfg) {
    super();
    this.options = void 0;
    this.horizontal = void 0;
    this.base = void 0;
    this.width = void 0;
    this.height = void 0;
    this.inflateAmount = void 0;
    if (cfg) {
      Object.assign(this, cfg);
    }
  }
  draw(ctx) {
    const { inflateAmount, options: { borderColor, backgroundColor } } = this;
    const { inner, outer } = boundingRects(this);
    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;
    ctx.save();
    if (outer.w !== inner.w || outer.h !== inner.h) {
      ctx.beginPath();
      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
      ctx.clip();
      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
      ctx.fillStyle = borderColor;
      ctx.fill("evenodd");
    }
    ctx.beginPath();
    addRectPath(ctx, inflateRect(inner, inflateAmount));
    ctx.fillStyle = backgroundColor;
    ctx.fill();
    ctx.restore();
  }
  inRange(mouseX, mouseY, useFinalPosition) {
    return inRange(this, mouseX, mouseY, useFinalPosition);
  }
  inXRange(mouseX, useFinalPosition) {
    return inRange(this, mouseX, null, useFinalPosition);
  }
  inYRange(mouseY, useFinalPosition) {
    return inRange(this, null, mouseY, useFinalPosition);
  }
  getCenterPoint(useFinalPosition) {
    const { x, y, base, horizontal } = this.getProps([
      "x",
      "y",
      "base",
      "horizontal"
    ], useFinalPosition);
    return {
      x: horizontal ? (x + base) / 2 : x,
      y: horizontal ? y : (y + base) / 2
    };
  }
  getRange(axis) {
    return axis === "x" ? this.width / 2 : this.height / 2;
  }
};
__publicField(BarElement, "id", "bar");
__publicField(BarElement, "defaults", {
  borderSkipped: "start",
  borderWidth: 0,
  borderRadius: 0,
  inflateAmount: "auto",
  pointStyle: void 0
});
__publicField(BarElement, "defaultRoutes", {
  backgroundColor: "backgroundColor",
  borderColor: "borderColor"
});
var getBoxSize = (labelOpts, fontSize) => {
  let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts;
  if (labelOpts.usePointStyle) {
    boxHeight = Math.min(boxHeight, fontSize);
    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
  }
  return {
    boxWidth,
    boxHeight,
    itemHeight: Math.max(fontSize, boxHeight)
  };
};
var itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
var Legend = class extends Element {
  constructor(config) {
    super();
    this._added = false;
    this.legendHitBoxes = [];
    this._hoveredItem = null;
    this.doughnutMode = false;
    this.chart = config.chart;
    this.options = config.options;
    this.ctx = config.ctx;
    this.legendItems = void 0;
    this.columnSizes = void 0;
    this.lineWidths = void 0;
    this.maxHeight = void 0;
    this.maxWidth = void 0;
    this.top = void 0;
    this.bottom = void 0;
    this.left = void 0;
    this.right = void 0;
    this.height = void 0;
    this.width = void 0;
    this._margins = void 0;
    this.position = void 0;
    this.weight = void 0;
    this.fullSize = void 0;
  }
  update(maxWidth, maxHeight, margins) {
    this.maxWidth = maxWidth;
    this.maxHeight = maxHeight;
    this._margins = margins;
    this.setDimensions();
    this.buildLabels();
    this.fit();
  }
  setDimensions() {
    if (this.isHorizontal()) {
      this.width = this.maxWidth;
      this.left = this._margins.left;
      this.right = this.width;
    } else {
      this.height = this.maxHeight;
      this.top = this._margins.top;
      this.bottom = this.height;
    }
  }
  buildLabels() {
    const labelOpts = this.options.labels || {};
    let legendItems = callback(labelOpts.generateLabels, [
      this.chart
    ], this) || [];
    if (labelOpts.filter) {
      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));
    }
    if (labelOpts.sort) {
      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));
    }
    if (this.options.reverse) {
      legendItems.reverse();
    }
    this.legendItems = legendItems;
  }
  fit() {
    const { options, ctx } = this;
    if (!options.display) {
      this.width = this.height = 0;
      return;
    }
    const labelOpts = options.labels;
    const labelFont = toFont(labelOpts.font);
    const fontSize = labelFont.size;
    const titleHeight = this._computeTitleHeight();
    const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize);
    let width, height;
    ctx.font = labelFont.string;
    if (this.isHorizontal()) {
      width = this.maxWidth;
      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
    } else {
      height = this.maxHeight;
      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;
    }
    this.width = Math.min(width, options.maxWidth || this.maxWidth);
    this.height = Math.min(height, options.maxHeight || this.maxHeight);
  }
  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
    const { ctx, maxWidth, options: { labels: { padding } } } = this;
    const hitboxes = this.legendHitBoxes = [];
    const lineWidths = this.lineWidths = [
      0
    ];
    const lineHeight = itemHeight + padding;
    let totalHeight = titleHeight;
    ctx.textAlign = "left";
    ctx.textBaseline = "middle";
    let row = -1;
    let top = -lineHeight;
    this.legendItems.forEach((legendItem, i) => {
      const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
        totalHeight += lineHeight;
        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
        top += lineHeight;
        row++;
      }
      hitboxes[i] = {
        left: 0,
        top,
        row,
        width: itemWidth,
        height: itemHeight
      };
      lineWidths[lineWidths.length - 1] += itemWidth + padding;
    });
    return totalHeight;
  }
  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {
    const { ctx, maxHeight, options: { labels: { padding } } } = this;
    const hitboxes = this.legendHitBoxes = [];
    const columnSizes = this.columnSizes = [];
    const heightLimit = maxHeight - titleHeight;
    let totalWidth = padding;
    let currentColWidth = 0;
    let currentColHeight = 0;
    let left = 0;
    let col = 0;
    this.legendItems.forEach((legendItem, i) => {
      const { itemWidth, itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);
      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
        totalWidth += currentColWidth + padding;
        columnSizes.push({
          width: currentColWidth,
          height: currentColHeight
        });
        left += currentColWidth + padding;
        col++;
        currentColWidth = currentColHeight = 0;
      }
      hitboxes[i] = {
        left,
        top: currentColHeight,
        col,
        width: itemWidth,
        height: itemHeight
      };
      currentColWidth = Math.max(currentColWidth, itemWidth);
      currentColHeight += itemHeight + padding;
    });
    totalWidth += currentColWidth;
    columnSizes.push({
      width: currentColWidth,
      height: currentColHeight
    });
    return totalWidth;
  }
  adjustHitBoxes() {
    if (!this.options.display) {
      return;
    }
    const titleHeight = this._computeTitleHeight();
    const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this;
    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);
    if (this.isHorizontal()) {
      let row = 0;
      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
      for (const hitbox of hitboxes) {
        if (row !== hitbox.row) {
          row = hitbox.row;
          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
        }
        hitbox.top += this.top + titleHeight + padding;
        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
        left += hitbox.width + padding;
      }
    } else {
      let col = 0;
      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
      for (const hitbox of hitboxes) {
        if (hitbox.col !== col) {
          col = hitbox.col;
          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
        }
        hitbox.top = top;
        hitbox.left += this.left + padding;
        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);
        top += hitbox.height + padding;
      }
    }
  }
  isHorizontal() {
    return this.options.position === "top" || this.options.position === "bottom";
  }
  draw() {
    if (this.options.display) {
      const ctx = this.ctx;
      clipArea(ctx, this);
      this._draw();
      unclipArea(ctx);
    }
  }
  _draw() {
    const { options: opts, columnSizes, lineWidths, ctx } = this;
    const { align, labels: labelOpts } = opts;
    const defaultColor = defaults.color;
    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
    const labelFont = toFont(labelOpts.font);
    const { padding } = labelOpts;
    const fontSize = labelFont.size;
    const halfFontSize = fontSize / 2;
    let cursor;
    this.drawTitle();
    ctx.textAlign = rtlHelper.textAlign("left");
    ctx.textBaseline = "middle";
    ctx.lineWidth = 0.5;
    ctx.font = labelFont.string;
    const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize);
    const drawLegendBox = function(x, y, legendItem) {
      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
        return;
      }
      ctx.save();
      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);
      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);
      ctx.lineCap = valueOrDefault(legendItem.lineCap, "butt");
      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);
      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, "miter");
      ctx.lineWidth = lineWidth;
      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);
      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));
      if (labelOpts.usePointStyle) {
        const drawOptions = {
          radius: boxHeight * Math.SQRT2 / 2,
          pointStyle: legendItem.pointStyle,
          rotation: legendItem.rotation,
          borderWidth: lineWidth
        };
        const centerX = rtlHelper.xPlus(x, boxWidth / 2);
        const centerY = y + halfFontSize;
        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
      } else {
        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
        const borderRadius = toTRBLCorners(legendItem.borderRadius);
        ctx.beginPath();
        if (Object.values(borderRadius).some((v) => v !== 0)) {
          addRoundedRectPath(ctx, {
            x: xBoxLeft,
            y: yBoxTop,
            w: boxWidth,
            h: boxHeight,
            radius: borderRadius
          });
        } else {
          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
        }
        ctx.fill();
        if (lineWidth !== 0) {
          ctx.stroke();
        }
      }
      ctx.restore();
    };
    const fillText = function(x, y, legendItem) {
      renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {
        strikethrough: legendItem.hidden,
        textAlign: rtlHelper.textAlign(legendItem.textAlign)
      });
    };
    const isHorizontal = this.isHorizontal();
    const titleHeight = this._computeTitleHeight();
    if (isHorizontal) {
      cursor = {
        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),
        y: this.top + padding + titleHeight,
        line: 0
      };
    } else {
      cursor = {
        x: this.left + padding,
        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
        line: 0
      };
    }
    overrideTextDirection(this.ctx, opts.textDirection);
    const lineHeight = itemHeight + padding;
    this.legendItems.forEach((legendItem, i) => {
      ctx.strokeStyle = legendItem.fontColor;
      ctx.fillStyle = legendItem.fontColor;
      const textWidth = ctx.measureText(legendItem.text).width;
      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
      const width = boxWidth + halfFontSize + textWidth;
      let x = cursor.x;
      let y = cursor.y;
      rtlHelper.setWidth(this.width);
      if (isHorizontal) {
        if (i > 0 && x + width + padding > this.right) {
          y = cursor.y += lineHeight;
          cursor.line++;
          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);
        }
      } else if (i > 0 && y + lineHeight > this.bottom) {
        x = cursor.x = x + columnSizes[cursor.line].width + padding;
        cursor.line++;
        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);
      }
      const realX = rtlHelper.x(x);
      drawLegendBox(realX, y, legendItem);
      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);
      fillText(rtlHelper.x(x), y, legendItem);
      if (isHorizontal) {
        cursor.x += width + padding;
      } else if (typeof legendItem.text !== "string") {
        const fontLineHeight = labelFont.lineHeight;
        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;
      } else {
        cursor.y += lineHeight;
      }
    });
    restoreTextDirection(this.ctx, opts.textDirection);
  }
  drawTitle() {
    const opts = this.options;
    const titleOpts = opts.title;
    const titleFont = toFont(titleOpts.font);
    const titlePadding = toPadding(titleOpts.padding);
    if (!titleOpts.display) {
      return;
    }
    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
    const ctx = this.ctx;
    const position = titleOpts.position;
    const halfFontSize = titleFont.size / 2;
    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
    let y;
    let left = this.left;
    let maxWidth = this.width;
    if (this.isHorizontal()) {
      maxWidth = Math.max(...this.lineWidths);
      y = this.top + topPaddingPlusHalfFontSize;
      left = _alignStartEnd(opts.align, left, this.right - maxWidth);
    } else {
      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);
      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
    }
    const x = _alignStartEnd(position, left, left + maxWidth);
    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));
    ctx.textBaseline = "middle";
    ctx.strokeStyle = titleOpts.color;
    ctx.fillStyle = titleOpts.color;
    ctx.font = titleFont.string;
    renderText(ctx, titleOpts.text, x, y, titleFont);
  }
  _computeTitleHeight() {
    const titleOpts = this.options.title;
    const titleFont = toFont(titleOpts.font);
    const titlePadding = toPadding(titleOpts.padding);
    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
  }
  _getLegendItemAt(x, y) {
    let i, hitBox, lh;
    if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {
      lh = this.legendHitBoxes;
      for (i = 0; i < lh.length; ++i) {
        hitBox = lh[i];
        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {
          return this.legendItems[i];
        }
      }
    }
    return null;
  }
  handleEvent(e) {
    const opts = this.options;
    if (!isListened(e.type, opts)) {
      return;
    }
    const hoveredItem = this._getLegendItemAt(e.x, e.y);
    if (e.type === "mousemove" || e.type === "mouseout") {
      const previous = this._hoveredItem;
      const sameItem = itemsEqual(previous, hoveredItem);
      if (previous && !sameItem) {
        callback(opts.onLeave, [
          e,
          previous,
          this
        ], this);
      }
      this._hoveredItem = hoveredItem;
      if (hoveredItem && !sameItem) {
        callback(opts.onHover, [
          e,
          hoveredItem,
          this
        ], this);
      }
    } else if (hoveredItem) {
      callback(opts.onClick, [
        e,
        hoveredItem,
        this
      ], this);
    }
  }
};
function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {
  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);
  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);
  return {
    itemWidth,
    itemHeight
  };
}
function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {
  let legendItemText = legendItem.text;
  if (legendItemText && typeof legendItemText !== "string") {
    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);
  }
  return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;
}
function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {
  let itemHeight = _itemHeight;
  if (typeof legendItem.text !== "string") {
    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);
  }
  return itemHeight;
}
function calculateLegendItemHeight(legendItem, fontLineHeight) {
  const labelHeight = legendItem.text ? legendItem.text.length : 0;
  return fontLineHeight * labelHeight;
}
function isListened(type, opts) {
  if ((type === "mousemove" || type === "mouseout") && (opts.onHover || opts.onLeave)) {
    return true;
  }
  if (opts.onClick && (type === "click" || type === "mouseup")) {
    return true;
  }
  return false;
}
var plugin_legend = {
  id: "legend",
  _element: Legend,
  start(chart, _args, options) {
    const legend = chart.legend = new Legend({
      ctx: chart.ctx,
      options,
      chart
    });
    layouts.configure(chart, legend, options);
    layouts.addBox(chart, legend);
  },
  stop(chart) {
    layouts.removeBox(chart, chart.legend);
    delete chart.legend;
  },
  beforeUpdate(chart, _args, options) {
    const legend = chart.legend;
    layouts.configure(chart, legend, options);
    legend.options = options;
  },
  afterUpdate(chart) {
    const legend = chart.legend;
    legend.buildLabels();
    legend.adjustHitBoxes();
  },
  afterEvent(chart, args) {
    if (!args.replay) {
      chart.legend.handleEvent(args.event);
    }
  },
  defaults: {
    display: true,
    position: "top",
    align: "center",
    fullSize: true,
    reverse: false,
    weight: 1e3,
    onClick(e, legendItem, legend) {
      const index = legendItem.datasetIndex;
      const ci = legend.chart;
      if (ci.isDatasetVisible(index)) {
        ci.hide(index);
        legendItem.hidden = true;
      } else {
        ci.show(index);
        legendItem.hidden = false;
      }
    },
    onHover: null,
    onLeave: null,
    labels: {
      color: (ctx) => ctx.chart.options.color,
      boxWidth: 40,
      padding: 10,
      generateLabels(chart) {
        const datasets = chart.data.datasets;
        const { labels: { usePointStyle, pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart.legend.options;
        return chart._getSortedDatasetMetas().map((meta) => {
          const style = meta.controller.getStyle(usePointStyle ? 0 : void 0);
          const borderWidth = toPadding(style.borderWidth);
          return {
            text: datasets[meta.index].label,
            fillStyle: style.backgroundColor,
            fontColor: color2,
            hidden: !meta.visible,
            lineCap: style.borderCapStyle,
            lineDash: style.borderDash,
            lineDashOffset: style.borderDashOffset,
            lineJoin: style.borderJoinStyle,
            lineWidth: (borderWidth.width + borderWidth.height) / 4,
            strokeStyle: style.borderColor,
            pointStyle: pointStyle || style.pointStyle,
            rotation: style.rotation,
            textAlign: textAlign || style.textAlign,
            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
            datasetIndex: meta.index
          };
        }, this);
      }
    },
    title: {
      color: (ctx) => ctx.chart.options.color,
      display: false,
      position: "center",
      text: ""
    }
  },
  descriptors: {
    _scriptable: (name) => !name.startsWith("on"),
    labels: {
      _scriptable: (name) => ![
        "generateLabels",
        "filter",
        "sort"
      ].includes(name)
    }
  }
};
var Title = class extends Element {
  constructor(config) {
    super();
    this.chart = config.chart;
    this.options = config.options;
    this.ctx = config.ctx;
    this._padding = void 0;
    this.top = void 0;
    this.bottom = void 0;
    this.left = void 0;
    this.right = void 0;
    this.width = void 0;
    this.height = void 0;
    this.position = void 0;
    this.weight = void 0;
    this.fullSize = void 0;
  }
  update(maxWidth, maxHeight) {
    const opts = this.options;
    this.left = 0;
    this.top = 0;
    if (!opts.display) {
      this.width = this.height = this.right = this.bottom = 0;
      return;
    }
    this.width = this.right = maxWidth;
    this.height = this.bottom = maxHeight;
    const lineCount = isArray(opts.text) ? opts.text.length : 1;
    this._padding = toPadding(opts.padding);
    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;
    if (this.isHorizontal()) {
      this.height = textSize;
    } else {
      this.width = textSize;
    }
  }
  isHorizontal() {
    const pos = this.options.position;
    return pos === "top" || pos === "bottom";
  }
  _drawArgs(offset) {
    const { top, left, bottom, right, options } = this;
    const align = options.align;
    let rotation = 0;
    let maxWidth, titleX, titleY;
    if (this.isHorizontal()) {
      titleX = _alignStartEnd(align, left, right);
      titleY = top + offset;
      maxWidth = right - left;
    } else {
      if (options.position === "left") {
        titleX = left + offset;
        titleY = _alignStartEnd(align, bottom, top);
        rotation = PI * -0.5;
      } else {
        titleX = right - offset;
        titleY = _alignStartEnd(align, top, bottom);
        rotation = PI * 0.5;
      }
      maxWidth = bottom - top;
    }
    return {
      titleX,
      titleY,
      maxWidth,
      rotation
    };
  }
  draw() {
    const ctx = this.ctx;
    const opts = this.options;
    if (!opts.display) {
      return;
    }
    const fontOpts = toFont(opts.font);
    const lineHeight = fontOpts.lineHeight;
    const offset = lineHeight / 2 + this._padding.top;
    const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset);
    renderText(ctx, opts.text, 0, 0, fontOpts, {
      color: opts.color,
      maxWidth,
      rotation,
      textAlign: _toLeftRightCenter(opts.align),
      textBaseline: "middle",
      translation: [
        titleX,
        titleY
      ]
    });
  }
};
function createTitle(chart, titleOpts) {
  const title = new Title({
    ctx: chart.ctx,
    options: titleOpts,
    chart
  });
  layouts.configure(chart, title, titleOpts);
  layouts.addBox(chart, title);
  chart.titleBlock = title;
}
var plugin_title = {
  id: "title",
  _element: Title,
  start(chart, _args, options) {
    createTitle(chart, options);
  },
  stop(chart) {
    const titleBlock = chart.titleBlock;
    layouts.removeBox(chart, titleBlock);
    delete chart.titleBlock;
  },
  beforeUpdate(chart, _args, options) {
    const title = chart.titleBlock;
    layouts.configure(chart, title, options);
    title.options = options;
  },
  defaults: {
    align: "center",
    display: false,
    font: {
      weight: "bold"
    },
    fullSize: true,
    padding: 10,
    position: "top",
    text: "",
    weight: 2e3
  },
  defaultRoutes: {
    color: "color"
  },
  descriptors: {
    _scriptable: true,
    _indexable: false
  }
};
var map2 = /* @__PURE__ */ new WeakMap();
var plugin_subtitle = {
  id: "subtitle",
  start(chart, _args, options) {
    const title = new Title({
      ctx: chart.ctx,
      options,
      chart
    });
    layouts.configure(chart, title, options);
    layouts.addBox(chart, title);
    map2.set(chart, title);
  },
  stop(chart) {
    layouts.removeBox(chart, map2.get(chart));
    map2.delete(chart);
  },
  beforeUpdate(chart, _args, options) {
    const title = map2.get(chart);
    layouts.configure(chart, title, options);
    title.options = options;
  },
  defaults: {
    align: "center",
    display: false,
    font: {
      weight: "normal"
    },
    fullSize: true,
    padding: 0,
    position: "top",
    text: "",
    weight: 1500
  },
  defaultRoutes: {
    color: "color"
  },
  descriptors: {
    _scriptable: true,
    _indexable: false
  }
};
var positioners = {
  average(items) {
    if (!items.length) {
      return false;
    }
    let i, len;
    let xSet = /* @__PURE__ */ new Set();
    let y = 0;
    let count = 0;
    for (i = 0, len = items.length; i < len; ++i) {
      const el = items[i].element;
      if (el && el.hasValue()) {
        const pos = el.tooltipPosition();
        xSet.add(pos.x);
        y += pos.y;
        ++count;
      }
    }
    const xAverage = [
      ...xSet
    ].reduce((a, b) => a + b) / xSet.size;
    return {
      x: xAverage,
      y: y / count
    };
  },
  nearest(items, eventPosition) {
    if (!items.length) {
      return false;
    }
    let x = eventPosition.x;
    let y = eventPosition.y;
    let minDistance = Number.POSITIVE_INFINITY;
    let i, len, nearestElement;
    for (i = 0, len = items.length; i < len; ++i) {
      const el = items[i].element;
      if (el && el.hasValue()) {
        const center = el.getCenterPoint();
        const d = distanceBetweenPoints(eventPosition, center);
        if (d < minDistance) {
          minDistance = d;
          nearestElement = el;
        }
      }
    }
    if (nearestElement) {
      const tp = nearestElement.tooltipPosition();
      x = tp.x;
      y = tp.y;
    }
    return {
      x,
      y
    };
  }
};
function pushOrConcat(base, toPush) {
  if (toPush) {
    if (isArray(toPush)) {
      Array.prototype.push.apply(base, toPush);
    } else {
      base.push(toPush);
    }
  }
  return base;
}
function splitNewlines(str) {
  if ((typeof str === "string" || str instanceof String) && str.indexOf("\n") > -1) {
    return str.split("\n");
  }
  return str;
}
function createTooltipItem(chart, item) {
  const { element, datasetIndex, index } = item;
  const controller = chart.getDatasetMeta(datasetIndex).controller;
  const { label, value } = controller.getLabelAndValue(index);
  return {
    chart,
    label,
    parsed: controller.getParsed(index),
    raw: chart.data.datasets[datasetIndex].data[index],
    formattedValue: value,
    dataset: controller.getDataset(),
    dataIndex: index,
    datasetIndex,
    element
  };
}
function getTooltipSize(tooltip, options) {
  const ctx = tooltip.chart.ctx;
  const { body, footer, title } = tooltip;
  const { boxWidth, boxHeight } = options;
  const bodyFont = toFont(options.bodyFont);
  const titleFont = toFont(options.titleFont);
  const footerFont = toFont(options.footerFont);
  const titleLineCount = title.length;
  const footerLineCount = footer.length;
  const bodyLineItemCount = body.length;
  const padding = toPadding(options.padding);
  let height = padding.height;
  let width = 0;
  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);
  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
  if (titleLineCount) {
    height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;
  }
  if (combinedBodyLength) {
    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
    height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;
  }
  if (footerLineCount) {
    height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;
  }
  let widthPadding = 0;
  const maxLineWidth = function(line) {
    width = Math.max(width, ctx.measureText(line).width + widthPadding);
  };
  ctx.save();
  ctx.font = titleFont.string;
  each(tooltip.title, maxLineWidth);
  ctx.font = bodyFont.string;
  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
  widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;
  each(body, (bodyItem) => {
    each(bodyItem.before, maxLineWidth);
    each(bodyItem.lines, maxLineWidth);
    each(bodyItem.after, maxLineWidth);
  });
  widthPadding = 0;
  ctx.font = footerFont.string;
  each(tooltip.footer, maxLineWidth);
  ctx.restore();
  width += padding.width;
  return {
    width,
    height
  };
}
function determineYAlign(chart, size) {
  const { y, height } = size;
  if (y < height / 2) {
    return "top";
  } else if (y > chart.height - height / 2) {
    return "bottom";
  }
  return "center";
}
function doesNotFitWithAlign(xAlign, chart, options, size) {
  const { x, width } = size;
  const caret = options.caretSize + options.caretPadding;
  if (xAlign === "left" && x + width + caret > chart.width) {
    return true;
  }
  if (xAlign === "right" && x - width - caret < 0) {
    return true;
  }
}
function determineXAlign(chart, options, size, yAlign) {
  const { x, width } = size;
  const { width: chartWidth, chartArea: { left, right } } = chart;
  let xAlign = "center";
  if (yAlign === "center") {
    xAlign = x <= (left + right) / 2 ? "left" : "right";
  } else if (x <= width / 2) {
    xAlign = "left";
  } else if (x >= chartWidth - width / 2) {
    xAlign = "right";
  }
  if (doesNotFitWithAlign(xAlign, chart, options, size)) {
    xAlign = "center";
  }
  return xAlign;
}
function determineAlignment(chart, options, size) {
  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);
  return {
    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),
    yAlign
  };
}
function alignX(size, xAlign) {
  let { x, width } = size;
  if (xAlign === "right") {
    x -= width;
  } else if (xAlign === "center") {
    x -= width / 2;
  }
  return x;
}
function alignY(size, yAlign, paddingAndSize) {
  let { y, height } = size;
  if (yAlign === "top") {
    y += paddingAndSize;
  } else if (yAlign === "bottom") {
    y -= height + paddingAndSize;
  } else {
    y -= height / 2;
  }
  return y;
}
function getBackgroundPoint(options, size, alignment, chart) {
  const { caretSize, caretPadding, cornerRadius } = options;
  const { xAlign, yAlign } = alignment;
  const paddingAndSize = caretSize + caretPadding;
  const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);
  let x = alignX(size, xAlign);
  const y = alignY(size, yAlign, paddingAndSize);
  if (yAlign === "center") {
    if (xAlign === "left") {
      x += paddingAndSize;
    } else if (xAlign === "right") {
      x -= paddingAndSize;
    }
  } else if (xAlign === "left") {
    x -= Math.max(topLeft, bottomLeft) + caretSize;
  } else if (xAlign === "right") {
    x += Math.max(topRight, bottomRight) + caretSize;
  }
  return {
    x: _limitValue(x, 0, chart.width - size.width),
    y: _limitValue(y, 0, chart.height - size.height)
  };
}
function getAlignedX(tooltip, align, options) {
  const padding = toPadding(options.padding);
  return align === "center" ? tooltip.x + tooltip.width / 2 : align === "right" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;
}
function getBeforeAfterBodyLines(callback2) {
  return pushOrConcat([], splitNewlines(callback2));
}
function createTooltipContext(parent, tooltip, tooltipItems) {
  return createContext(parent, {
    tooltip,
    tooltipItems,
    type: "tooltip"
  });
}
function overrideCallbacks(callbacks, context) {
  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
  return override ? callbacks.override(override) : callbacks;
}
var defaultCallbacks = {
  beforeTitle: noop,
  title(tooltipItems) {
    if (tooltipItems.length > 0) {
      const item = tooltipItems[0];
      const labels = item.chart.data.labels;
      const labelCount = labels ? labels.length : 0;
      if (this && this.options && this.options.mode === "dataset") {
        return item.dataset.label || "";
      } else if (item.label) {
        return item.label;
      } else if (labelCount > 0 && item.dataIndex < labelCount) {
        return labels[item.dataIndex];
      }
    }
    return "";
  },
  afterTitle: noop,
  beforeBody: noop,
  beforeLabel: noop,
  label(tooltipItem) {
    if (this && this.options && this.options.mode === "dataset") {
      return tooltipItem.label + ": " + tooltipItem.formattedValue || tooltipItem.formattedValue;
    }
    let label = tooltipItem.dataset.label || "";
    if (label) {
      label += ": ";
    }
    const value = tooltipItem.formattedValue;
    if (!isNullOrUndef(value)) {
      label += value;
    }
    return label;
  },
  labelColor(tooltipItem) {
    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
    const options = meta.controller.getStyle(tooltipItem.dataIndex);
    return {
      borderColor: options.borderColor,
      backgroundColor: options.backgroundColor,
      borderWidth: options.borderWidth,
      borderDash: options.borderDash,
      borderDashOffset: options.borderDashOffset,
      borderRadius: 0
    };
  },
  labelTextColor() {
    return this.options.bodyColor;
  },
  labelPointStyle(tooltipItem) {
    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
    const options = meta.controller.getStyle(tooltipItem.dataIndex);
    return {
      pointStyle: options.pointStyle,
      rotation: options.rotation
    };
  },
  afterLabel: noop,
  afterBody: noop,
  beforeFooter: noop,
  footer: noop,
  afterFooter: noop
};
function invokeCallbackWithFallback(callbacks, name, ctx, arg) {
  const result = callbacks[name].call(ctx, arg);
  if (typeof result === "undefined") {
    return defaultCallbacks[name].call(ctx, arg);
  }
  return result;
}
var Tooltip = class extends Element {
  constructor(config) {
    super();
    this.opacity = 0;
    this._active = [];
    this._eventPosition = void 0;
    this._size = void 0;
    this._cachedAnimations = void 0;
    this._tooltipItems = [];
    this.$animations = void 0;
    this.$context = void 0;
    this.chart = config.chart;
    this.options = config.options;
    this.dataPoints = void 0;
    this.title = void 0;
    this.beforeBody = void 0;
    this.body = void 0;
    this.afterBody = void 0;
    this.footer = void 0;
    this.xAlign = void 0;
    this.yAlign = void 0;
    this.x = void 0;
    this.y = void 0;
    this.height = void 0;
    this.width = void 0;
    this.caretX = void 0;
    this.caretY = void 0;
    this.labelColors = void 0;
    this.labelPointStyles = void 0;
    this.labelTextColors = void 0;
  }
  initialize(options) {
    this.options = options;
    this._cachedAnimations = void 0;
    this.$context = void 0;
  }
  _resolveAnimations() {
    const cached = this._cachedAnimations;
    if (cached) {
      return cached;
    }
    const chart = this.chart;
    const options = this.options.setContext(this.getContext());
    const opts = options.enabled && chart.options.animation && options.animations;
    const animations = new Animations(this.chart, opts);
    if (opts._cacheable) {
      this._cachedAnimations = Object.freeze(animations);
    }
    return animations;
  }
  getContext() {
    return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
  }
  getTitle(context, options) {
    const { callbacks } = options;
    const beforeTitle = invokeCallbackWithFallback(callbacks, "beforeTitle", this, context);
    const title = invokeCallbackWithFallback(callbacks, "title", this, context);
    const afterTitle = invokeCallbackWithFallback(callbacks, "afterTitle", this, context);
    let lines = [];
    lines = pushOrConcat(lines, splitNewlines(beforeTitle));
    lines = pushOrConcat(lines, splitNewlines(title));
    lines = pushOrConcat(lines, splitNewlines(afterTitle));
    return lines;
  }
  getBeforeBody(tooltipItems, options) {
    return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "beforeBody", this, tooltipItems));
  }
  getBody(tooltipItems, options) {
    const { callbacks } = options;
    const bodyItems = [];
    each(tooltipItems, (context) => {
      const bodyItem = {
        before: [],
        lines: [],
        after: []
      };
      const scoped = overrideCallbacks(callbacks, context);
      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, "beforeLabel", this, context)));
      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, "label", this, context));
      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, "afterLabel", this, context)));
      bodyItems.push(bodyItem);
    });
    return bodyItems;
  }
  getAfterBody(tooltipItems, options) {
    return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "afterBody", this, tooltipItems));
  }
  getFooter(tooltipItems, options) {
    const { callbacks } = options;
    const beforeFooter = invokeCallbackWithFallback(callbacks, "beforeFooter", this, tooltipItems);
    const footer = invokeCallbackWithFallback(callbacks, "footer", this, tooltipItems);
    const afterFooter = invokeCallbackWithFallback(callbacks, "afterFooter", this, tooltipItems);
    let lines = [];
    lines = pushOrConcat(lines, splitNewlines(beforeFooter));
    lines = pushOrConcat(lines, splitNewlines(footer));
    lines = pushOrConcat(lines, splitNewlines(afterFooter));
    return lines;
  }
  _createItems(options) {
    const active = this._active;
    const data = this.chart.data;
    const labelColors = [];
    const labelPointStyles = [];
    const labelTextColors = [];
    let tooltipItems = [];
    let i, len;
    for (i = 0, len = active.length; i < len; ++i) {
      tooltipItems.push(createTooltipItem(this.chart, active[i]));
    }
    if (options.filter) {
      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));
    }
    if (options.itemSort) {
      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));
    }
    each(tooltipItems, (context) => {
      const scoped = overrideCallbacks(options.callbacks, context);
      labelColors.push(invokeCallbackWithFallback(scoped, "labelColor", this, context));
      labelPointStyles.push(invokeCallbackWithFallback(scoped, "labelPointStyle", this, context));
      labelTextColors.push(invokeCallbackWithFallback(scoped, "labelTextColor", this, context));
    });
    this.labelColors = labelColors;
    this.labelPointStyles = labelPointStyles;
    this.labelTextColors = labelTextColors;
    this.dataPoints = tooltipItems;
    return tooltipItems;
  }
  update(changed, replay) {
    const options = this.options.setContext(this.getContext());
    const active = this._active;
    let properties;
    let tooltipItems = [];
    if (!active.length) {
      if (this.opacity !== 0) {
        properties = {
          opacity: 0
        };
      }
    } else {
      const position = positioners[options.position].call(this, active, this._eventPosition);
      tooltipItems = this._createItems(options);
      this.title = this.getTitle(tooltipItems, options);
      this.beforeBody = this.getBeforeBody(tooltipItems, options);
      this.body = this.getBody(tooltipItems, options);
      this.afterBody = this.getAfterBody(tooltipItems, options);
      this.footer = this.getFooter(tooltipItems, options);
      const size = this._size = getTooltipSize(this, options);
      const positionAndSize = Object.assign({}, position, size);
      const alignment = determineAlignment(this.chart, options, positionAndSize);
      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);
      this.xAlign = alignment.xAlign;
      this.yAlign = alignment.yAlign;
      properties = {
        opacity: 1,
        x: backgroundPoint.x,
        y: backgroundPoint.y,
        width: size.width,
        height: size.height,
        caretX: position.x,
        caretY: position.y
      };
    }
    this._tooltipItems = tooltipItems;
    this.$context = void 0;
    if (properties) {
      this._resolveAnimations().update(this, properties);
    }
    if (changed && options.external) {
      options.external.call(this, {
        chart: this.chart,
        tooltip: this,
        replay
      });
    }
  }
  drawCaret(tooltipPoint, ctx, size, options) {
    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);
    ctx.lineTo(caretPosition.x1, caretPosition.y1);
    ctx.lineTo(caretPosition.x2, caretPosition.y2);
    ctx.lineTo(caretPosition.x3, caretPosition.y3);
  }
  getCaretPosition(tooltipPoint, size, options) {
    const { xAlign, yAlign } = this;
    const { caretSize, cornerRadius } = options;
    const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);
    const { x: ptX, y: ptY } = tooltipPoint;
    const { width, height } = size;
    let x1, x2, x3, y1, y2, y3;
    if (yAlign === "center") {
      y2 = ptY + height / 2;
      if (xAlign === "left") {
        x1 = ptX;
        x2 = x1 - caretSize;
        y1 = y2 + caretSize;
        y3 = y2 - caretSize;
      } else {
        x1 = ptX + width;
        x2 = x1 + caretSize;
        y1 = y2 - caretSize;
        y3 = y2 + caretSize;
      }
      x3 = x1;
    } else {
      if (xAlign === "left") {
        x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;
      } else if (xAlign === "right") {
        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
      } else {
        x2 = this.caretX;
      }
      if (yAlign === "top") {
        y1 = ptY;
        y2 = y1 - caretSize;
        x1 = x2 - caretSize;
        x3 = x2 + caretSize;
      } else {
        y1 = ptY + height;
        y2 = y1 + caretSize;
        x1 = x2 + caretSize;
        x3 = x2 - caretSize;
      }
      y3 = y1;
    }
    return {
      x1,
      x2,
      x3,
      y1,
      y2,
      y3
    };
  }
  drawTitle(pt, ctx, options) {
    const title = this.title;
    const length = title.length;
    let titleFont, titleSpacing, i;
    if (length) {
      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
      pt.x = getAlignedX(this, options.titleAlign, options);
      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);
      ctx.textBaseline = "middle";
      titleFont = toFont(options.titleFont);
      titleSpacing = options.titleSpacing;
      ctx.fillStyle = options.titleColor;
      ctx.font = titleFont.string;
      for (i = 0; i < length; ++i) {
        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
        pt.y += titleFont.lineHeight + titleSpacing;
        if (i + 1 === length) {
          pt.y += options.titleMarginBottom - titleSpacing;
        }
      }
    }
  }
  _drawColorBox(ctx, pt, i, rtlHelper, options) {
    const labelColor = this.labelColors[i];
    const labelPointStyle = this.labelPointStyles[i];
    const { boxHeight, boxWidth } = options;
    const bodyFont = toFont(options.bodyFont);
    const colorX = getAlignedX(this, "left", options);
    const rtlColorX = rtlHelper.x(colorX);
    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
    const colorY = pt.y + yOffSet;
    if (options.usePointStyle) {
      const drawOptions = {
        radius: Math.min(boxWidth, boxHeight) / 2,
        pointStyle: labelPointStyle.pointStyle,
        rotation: labelPointStyle.rotation,
        borderWidth: 1
      };
      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;
      const centerY = colorY + boxHeight / 2;
      ctx.strokeStyle = options.multiKeyBackground;
      ctx.fillStyle = options.multiKeyBackground;
      drawPoint(ctx, drawOptions, centerX, centerY);
      ctx.strokeStyle = labelColor.borderColor;
      ctx.fillStyle = labelColor.backgroundColor;
      drawPoint(ctx, drawOptions, centerX, centerY);
    } else {
      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;
      ctx.strokeStyle = labelColor.borderColor;
      ctx.setLineDash(labelColor.borderDash || []);
      ctx.lineDashOffset = labelColor.borderDashOffset || 0;
      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
      const borderRadius = toTRBLCorners(labelColor.borderRadius);
      if (Object.values(borderRadius).some((v) => v !== 0)) {
        ctx.beginPath();
        ctx.fillStyle = options.multiKeyBackground;
        addRoundedRectPath(ctx, {
          x: outerX,
          y: colorY,
          w: boxWidth,
          h: boxHeight,
          radius: borderRadius
        });
        ctx.fill();
        ctx.stroke();
        ctx.fillStyle = labelColor.backgroundColor;
        ctx.beginPath();
        addRoundedRectPath(ctx, {
          x: innerX,
          y: colorY + 1,
          w: boxWidth - 2,
          h: boxHeight - 2,
          radius: borderRadius
        });
        ctx.fill();
      } else {
        ctx.fillStyle = options.multiKeyBackground;
        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
        ctx.fillStyle = labelColor.backgroundColor;
        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
      }
    }
    ctx.fillStyle = this.labelTextColors[i];
  }
  drawBody(pt, ctx, options) {
    const { body } = this;
    const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options;
    const bodyFont = toFont(options.bodyFont);
    let bodyLineHeight = bodyFont.lineHeight;
    let xLinePadding = 0;
    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
    const fillLineOfText = function(line) {
      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
      pt.y += bodyLineHeight + bodySpacing;
    };
    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
    let bodyItem, textColor, lines, i, j, ilen, jlen;
    ctx.textAlign = bodyAlign;
    ctx.textBaseline = "middle";
    ctx.font = bodyFont.string;
    pt.x = getAlignedX(this, bodyAlignForCalculation, options);
    ctx.fillStyle = options.bodyColor;
    each(this.beforeBody, fillLineOfText);
    xLinePadding = displayColors && bodyAlignForCalculation !== "right" ? bodyAlign === "center" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;
    for (i = 0, ilen = body.length; i < ilen; ++i) {
      bodyItem = body[i];
      textColor = this.labelTextColors[i];
      ctx.fillStyle = textColor;
      each(bodyItem.before, fillLineOfText);
      lines = bodyItem.lines;
      if (displayColors && lines.length) {
        this._drawColorBox(ctx, pt, i, rtlHelper, options);
        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
      }
      for (j = 0, jlen = lines.length; j < jlen; ++j) {
        fillLineOfText(lines[j]);
        bodyLineHeight = bodyFont.lineHeight;
      }
      each(bodyItem.after, fillLineOfText);
    }
    xLinePadding = 0;
    bodyLineHeight = bodyFont.lineHeight;
    each(this.afterBody, fillLineOfText);
    pt.y -= bodySpacing;
  }
  drawFooter(pt, ctx, options) {
    const footer = this.footer;
    const length = footer.length;
    let footerFont, i;
    if (length) {
      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
      pt.x = getAlignedX(this, options.footerAlign, options);
      pt.y += options.footerMarginTop;
      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);
      ctx.textBaseline = "middle";
      footerFont = toFont(options.footerFont);
      ctx.fillStyle = options.footerColor;
      ctx.font = footerFont.string;
      for (i = 0; i < length; ++i) {
        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
        pt.y += footerFont.lineHeight + options.footerSpacing;
      }
    }
  }
  drawBackground(pt, ctx, tooltipSize, options) {
    const { xAlign, yAlign } = this;
    const { x, y } = pt;
    const { width, height } = tooltipSize;
    const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options.cornerRadius);
    ctx.fillStyle = options.backgroundColor;
    ctx.strokeStyle = options.borderColor;
    ctx.lineWidth = options.borderWidth;
    ctx.beginPath();
    ctx.moveTo(x + topLeft, y);
    if (yAlign === "top") {
      this.drawCaret(pt, ctx, tooltipSize, options);
    }
    ctx.lineTo(x + width - topRight, y);
    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
    if (yAlign === "center" && xAlign === "right") {
      this.drawCaret(pt, ctx, tooltipSize, options);
    }
    ctx.lineTo(x + width, y + height - bottomRight);
    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
    if (yAlign === "bottom") {
      this.drawCaret(pt, ctx, tooltipSize, options);
    }
    ctx.lineTo(x + bottomLeft, y + height);
    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
    if (yAlign === "center" && xAlign === "left") {
      this.drawCaret(pt, ctx, tooltipSize, options);
    }
    ctx.lineTo(x, y + topLeft);
    ctx.quadraticCurveTo(x, y, x + topLeft, y);
    ctx.closePath();
    ctx.fill();
    if (options.borderWidth > 0) {
      ctx.stroke();
    }
  }
  _updateAnimationTarget(options) {
    const chart = this.chart;
    const anims = this.$animations;
    const animX = anims && anims.x;
    const animY = anims && anims.y;
    if (animX || animY) {
      const position = positioners[options.position].call(this, this._active, this._eventPosition);
      if (!position) {
        return;
      }
      const size = this._size = getTooltipSize(this, options);
      const positionAndSize = Object.assign({}, position, this._size);
      const alignment = determineAlignment(chart, options, positionAndSize);
      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);
      if (animX._to !== point.x || animY._to !== point.y) {
        this.xAlign = alignment.xAlign;
        this.yAlign = alignment.yAlign;
        this.width = size.width;
        this.height = size.height;
        this.caretX = position.x;
        this.caretY = position.y;
        this._resolveAnimations().update(this, point);
      }
    }
  }
  _willRender() {
    return !!this.opacity;
  }
  draw(ctx) {
    const options = this.options.setContext(this.getContext());
    let opacity = this.opacity;
    if (!opacity) {
      return;
    }
    this._updateAnimationTarget(options);
    const tooltipSize = {
      width: this.width,
      height: this.height
    };
    const pt = {
      x: this.x,
      y: this.y
    };
    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
    const padding = toPadding(options.padding);
    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
    if (options.enabled && hasTooltipContent) {
      ctx.save();
      ctx.globalAlpha = opacity;
      this.drawBackground(pt, ctx, tooltipSize, options);
      overrideTextDirection(ctx, options.textDirection);
      pt.y += padding.top;
      this.drawTitle(pt, ctx, options);
      this.drawBody(pt, ctx, options);
      this.drawFooter(pt, ctx, options);
      restoreTextDirection(ctx, options.textDirection);
      ctx.restore();
    }
  }
  getActiveElements() {
    return this._active || [];
  }
  setActiveElements(activeElements, eventPosition) {
    const lastActive = this._active;
    const active = activeElements.map(({ datasetIndex, index }) => {
      const meta = this.chart.getDatasetMeta(datasetIndex);
      if (!meta) {
        throw new Error("Cannot find a dataset at index " + datasetIndex);
      }
      return {
        datasetIndex,
        element: meta.data[index],
        index
      };
    });
    const changed = !_elementsEqual(lastActive, active);
    const positionChanged = this._positionChanged(active, eventPosition);
    if (changed || positionChanged) {
      this._active = active;
      this._eventPosition = eventPosition;
      this._ignoreReplayEvents = true;
      this.update(true);
    }
  }
  handleEvent(e, replay, inChartArea = true) {
    if (replay && this._ignoreReplayEvents) {
      return false;
    }
    this._ignoreReplayEvents = false;
    const options = this.options;
    const lastActive = this._active || [];
    const active = this._getActiveElements(e, lastActive, replay, inChartArea);
    const positionChanged = this._positionChanged(active, e);
    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;
    if (changed) {
      this._active = active;
      if (options.enabled || options.external) {
        this._eventPosition = {
          x: e.x,
          y: e.y
        };
        this.update(true, replay);
      }
    }
    return changed;
  }
  _getActiveElements(e, lastActive, replay, inChartArea) {
    const options = this.options;
    if (e.type === "mouseout") {
      return [];
    }
    if (!inChartArea) {
      return lastActive.filter((i) => this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== void 0);
    }
    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);
    if (options.reverse) {
      active.reverse();
    }
    return active;
  }
  _positionChanged(active, e) {
    const { caretX, caretY, options } = this;
    const position = positioners[options.position].call(this, active, e);
    return position !== false && (caretX !== position.x || caretY !== position.y);
  }
};
__publicField(Tooltip, "positioners", positioners);
var plugin_tooltip = {
  id: "tooltip",
  _element: Tooltip,
  positioners,
  afterInit(chart, _args, options) {
    if (options) {
      chart.tooltip = new Tooltip({
        chart,
        options
      });
    }
  },
  beforeUpdate(chart, _args, options) {
    if (chart.tooltip) {
      chart.tooltip.initialize(options);
    }
  },
  reset(chart, _args, options) {
    if (chart.tooltip) {
      chart.tooltip.initialize(options);
    }
  },
  afterDraw(chart) {
    const tooltip = chart.tooltip;
    if (tooltip && tooltip._willRender()) {
      const args = {
        tooltip
      };
      if (chart.notifyPlugins("beforeTooltipDraw", {
        ...args,
        cancelable: true
      }) === false) {
        return;
      }
      tooltip.draw(chart.ctx);
      chart.notifyPlugins("afterTooltipDraw", args);
    }
  },
  afterEvent(chart, args) {
    if (chart.tooltip) {
      const useFinalPosition = args.replay;
      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
        args.changed = true;
      }
    }
  },
  defaults: {
    enabled: true,
    external: null,
    position: "average",
    backgroundColor: "rgba(0,0,0,0.8)",
    titleColor: "#fff",
    titleFont: {
      weight: "bold"
    },
    titleSpacing: 2,
    titleMarginBottom: 6,
    titleAlign: "left",
    bodyColor: "#fff",
    bodySpacing: 2,
    bodyFont: {},
    bodyAlign: "left",
    footerColor: "#fff",
    footerSpacing: 2,
    footerMarginTop: 6,
    footerFont: {
      weight: "bold"
    },
    footerAlign: "left",
    padding: 6,
    caretPadding: 2,
    caretSize: 5,
    cornerRadius: 6,
    boxHeight: (ctx, opts) => opts.bodyFont.size,
    boxWidth: (ctx, opts) => opts.bodyFont.size,
    multiKeyBackground: "#fff",
    displayColors: true,
    boxPadding: 0,
    borderColor: "rgba(0,0,0,0)",
    borderWidth: 0,
    animation: {
      duration: 400,
      easing: "easeOutQuart"
    },
    animations: {
      numbers: {
        type: "number",
        properties: [
          "x",
          "y",
          "width",
          "height",
          "caretX",
          "caretY"
        ]
      },
      opacity: {
        easing: "linear",
        duration: 200
      }
    },
    callbacks: defaultCallbacks
  },
  defaultRoutes: {
    bodyFont: "font",
    footerFont: "font",
    titleFont: "font"
  },
  descriptors: {
    _scriptable: (name) => name !== "filter" && name !== "itemSort" && name !== "external",
    _indexable: false,
    callbacks: {
      _scriptable: false,
      _indexable: false
    },
    animation: {
      _fallback: false
    },
    animations: {
      _fallback: "animation"
    }
  },
  additionalOptionScopes: [
    "interaction"
  ]
};
var addIfString = (labels, raw, index, addedLabels) => {
  if (typeof raw === "string") {
    index = labels.push(raw) - 1;
    addedLabels.unshift({
      index,
      label: raw
    });
  } else if (isNaN(raw)) {
    index = null;
  }
  return index;
};
function findOrAddLabel(labels, raw, index, addedLabels) {
  const first = labels.indexOf(raw);
  if (first === -1) {
    return addIfString(labels, raw, index, addedLabels);
  }
  const last = labels.lastIndexOf(raw);
  return first !== last ? index : first;
}
var validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);
function _getLabelForValue(value) {
  const labels = this.getLabels();
  if (value >= 0 && value < labels.length) {
    return labels[value];
  }
  return value;
}
var CategoryScale = class extends Scale {
  constructor(cfg) {
    super(cfg);
    this._startValue = void 0;
    this._valueRange = 0;
    this._addedLabels = [];
  }
  init(scaleOptions) {
    const added = this._addedLabels;
    if (added.length) {
      const labels = this.getLabels();
      for (const { index, label } of added) {
        if (labels[index] === label) {
          labels.splice(index, 1);
        }
      }
      this._addedLabels = [];
    }
    super.init(scaleOptions);
  }
  parse(raw, index) {
    if (isNullOrUndef(raw)) {
      return null;
    }
    const labels = this.getLabels();
    index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);
    return validIndex(index, labels.length - 1);
  }
  determineDataLimits() {
    const { minDefined, maxDefined } = this.getUserBounds();
    let { min, max } = this.getMinMax(true);
    if (this.options.bounds === "ticks") {
      if (!minDefined) {
        min = 0;
      }
      if (!maxDefined) {
        max = this.getLabels().length - 1;
      }
    }
    this.min = min;
    this.max = max;
  }
  buildTicks() {
    const min = this.min;
    const max = this.max;
    const offset = this.options.offset;
    const ticks = [];
    let labels = this.getLabels();
    labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);
    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
    this._startValue = this.min - (offset ? 0.5 : 0);
    for (let value = min; value <= max; value++) {
      ticks.push({
        value
      });
    }
    return ticks;
  }
  getLabelForValue(value) {
    return _getLabelForValue.call(this, value);
  }
  configure() {
    super.configure();
    if (!this.isHorizontal()) {
      this._reversePixels = !this._reversePixels;
    }
  }
  getPixelForValue(value) {
    if (typeof value !== "number") {
      value = this.parse(value);
    }
    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
  }
  getPixelForTick(index) {
    const ticks = this.ticks;
    if (index < 0 || index > ticks.length - 1) {
      return null;
    }
    return this.getPixelForValue(ticks[index].value);
  }
  getValueForPixel(pixel) {
    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
  }
  getBasePixel() {
    return this.bottom;
  }
};
__publicField(CategoryScale, "id", "category");
__publicField(CategoryScale, "defaults", {
  ticks: {
    callback: _getLabelForValue
  }
});
function generateTicks$1(generationOptions, dataRange) {
  const ticks = [];
  const MIN_SPACING = 1e-14;
  const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions;
  const unit = step || 1;
  const maxSpaces = maxTicks - 1;
  const { min: rmin, max: rmax } = dataRange;
  const minDefined = !isNullOrUndef(min);
  const maxDefined = !isNullOrUndef(max);
  const countDefined = !isNullOrUndef(count);
  const minSpacing = (rmax - rmin) / (maxDigits + 1);
  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
  let factor, niceMin, niceMax, numSpaces;
  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
    return [
      {
        value: rmin
      },
      {
        value: rmax
      }
    ];
  }
  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
  if (numSpaces > maxSpaces) {
    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;
  }
  if (!isNullOrUndef(precision)) {
    factor = Math.pow(10, precision);
    spacing = Math.ceil(spacing * factor) / factor;
  }
  if (bounds === "ticks") {
    niceMin = Math.floor(rmin / spacing) * spacing;
    niceMax = Math.ceil(rmax / spacing) * spacing;
  } else {
    niceMin = rmin;
    niceMax = rmax;
  }
  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) {
    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
    spacing = (max - min) / numSpaces;
    niceMin = min;
    niceMax = max;
  } else if (countDefined) {
    niceMin = minDefined ? min : niceMin;
    niceMax = maxDefined ? max : niceMax;
    numSpaces = count - 1;
    spacing = (niceMax - niceMin) / numSpaces;
  } else {
    numSpaces = (niceMax - niceMin) / spacing;
    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) {
      numSpaces = Math.round(numSpaces);
    } else {
      numSpaces = Math.ceil(numSpaces);
    }
  }
  const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));
  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);
  niceMin = Math.round(niceMin * factor) / factor;
  niceMax = Math.round(niceMax * factor) / factor;
  let j = 0;
  if (minDefined) {
    if (includeBounds && niceMin !== min) {
      ticks.push({
        value: min
      });
      if (niceMin < min) {
        j++;
      }
      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
        j++;
      }
    } else if (niceMin < min) {
      j++;
    }
  }
  for (; j < numSpaces; ++j) {
    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;
    if (maxDefined && tickValue > max) {
      break;
    }
    ticks.push({
      value: tickValue
    });
  }
  if (maxDefined && includeBounds && niceMax !== max) {
    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
      ticks[ticks.length - 1].value = max;
    } else {
      ticks.push({
        value: max
      });
    }
  } else if (!maxDefined || niceMax === max) {
    ticks.push({
      value: niceMax
    });
  }
  return ticks;
}
function relativeLabelSize(value, minSpacing, { horizontal, minRotation }) {
  const rad = toRadians(minRotation);
  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3;
  const length = 0.75 * minSpacing * ("" + value).length;
  return Math.min(minSpacing / ratio, length);
}
var LinearScaleBase = class extends Scale {
  constructor(cfg) {
    super(cfg);
    this.start = void 0;
    this.end = void 0;
    this._startValue = void 0;
    this._endValue = void 0;
    this._valueRange = 0;
  }
  parse(raw, index) {
    if (isNullOrUndef(raw)) {
      return null;
    }
    if ((typeof raw === "number" || raw instanceof Number) && !isFinite(+raw)) {
      return null;
    }
    return +raw;
  }
  handleTickRangeOptions() {
    const { beginAtZero } = this.options;
    const { minDefined, maxDefined } = this.getUserBounds();
    let { min, max } = this;
    const setMin = (v) => min = minDefined ? min : v;
    const setMax = (v) => max = maxDefined ? max : v;
    if (beginAtZero) {
      const minSign = sign(min);
      const maxSign = sign(max);
      if (minSign < 0 && maxSign < 0) {
        setMax(0);
      } else if (minSign > 0 && maxSign > 0) {
        setMin(0);
      }
    }
    if (min === max) {
      let offset = max === 0 ? 1 : Math.abs(max * 0.05);
      setMax(max + offset);
      if (!beginAtZero) {
        setMin(min - offset);
      }
    }
    this.min = min;
    this.max = max;
  }
  getTickLimit() {
    const tickOpts = this.options.ticks;
    let { maxTicksLimit, stepSize } = tickOpts;
    let maxTicks;
    if (stepSize) {
      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
      if (maxTicks > 1e3) {
        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);
        maxTicks = 1e3;
      }
    } else {
      maxTicks = this.computeTickLimit();
      maxTicksLimit = maxTicksLimit || 11;
    }
    if (maxTicksLimit) {
      maxTicks = Math.min(maxTicksLimit, maxTicks);
    }
    return maxTicks;
  }
  computeTickLimit() {
    return Number.POSITIVE_INFINITY;
  }
  buildTicks() {
    const opts = this.options;
    const tickOpts = opts.ticks;
    let maxTicks = this.getTickLimit();
    maxTicks = Math.max(2, maxTicks);
    const numericGeneratorOptions = {
      maxTicks,
      bounds: opts.bounds,
      min: opts.min,
      max: opts.max,
      precision: tickOpts.precision,
      step: tickOpts.stepSize,
      count: tickOpts.count,
      maxDigits: this._maxDigits(),
      horizontal: this.isHorizontal(),
      minRotation: tickOpts.minRotation || 0,
      includeBounds: tickOpts.includeBounds !== false
    };
    const dataRange = this._range || this;
    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);
    if (opts.bounds === "ticks") {
      _setMinAndMaxByKey(ticks, this, "value");
    }
    if (opts.reverse) {
      ticks.reverse();
      this.start = this.max;
      this.end = this.min;
    } else {
      this.start = this.min;
      this.end = this.max;
    }
    return ticks;
  }
  configure() {
    const ticks = this.ticks;
    let start = this.min;
    let end = this.max;
    super.configure();
    if (this.options.offset && ticks.length) {
      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
      start -= offset;
      end += offset;
    }
    this._startValue = start;
    this._endValue = end;
    this._valueRange = end - start;
  }
  getLabelForValue(value) {
    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);
  }
};
var LinearScale = class extends LinearScaleBase {
  determineDataLimits() {
    const { min, max } = this.getMinMax(true);
    this.min = isNumberFinite(min) ? min : 0;
    this.max = isNumberFinite(max) ? max : 1;
    this.handleTickRangeOptions();
  }
  computeTickLimit() {
    const horizontal = this.isHorizontal();
    const length = horizontal ? this.width : this.height;
    const minRotation = toRadians(this.options.ticks.minRotation);
    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3;
    const tickFont = this._resolveTickFontOptions(0);
    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
  }
  getPixelForValue(value) {
    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
  }
  getValueForPixel(pixel) {
    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
  }
};
__publicField(LinearScale, "id", "linear");
__publicField(LinearScale, "defaults", {
  ticks: {
    callback: Ticks.formatters.numeric
  }
});
var log10Floor = (v) => Math.floor(log10(v));
var changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);
function isMajor(tickVal) {
  const remain = tickVal / Math.pow(10, log10Floor(tickVal));
  return remain === 1;
}
function steps(min, max, rangeExp) {
  const rangeStep = Math.pow(10, rangeExp);
  const start = Math.floor(min / rangeStep);
  const end = Math.ceil(max / rangeStep);
  return end - start;
}
function startExp(min, max) {
  const range = max - min;
  let rangeExp = log10Floor(range);
  while (steps(min, max, rangeExp) > 10) {
    rangeExp++;
  }
  while (steps(min, max, rangeExp) < 10) {
    rangeExp--;
  }
  return Math.min(rangeExp, log10Floor(min));
}
function generateTicks(generationOptions, { min, max }) {
  min = finiteOrDefault(generationOptions.min, min);
  const ticks = [];
  const minExp = log10Floor(min);
  let exp = startExp(min, max);
  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
  const stepSize = Math.pow(10, exp);
  const base = minExp > exp ? Math.pow(10, minExp) : 0;
  const start = Math.round((min - base) * precision) / precision;
  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;
  let significand = Math.floor((start - offset) / Math.pow(10, exp));
  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);
  while (value < max) {
    ticks.push({
      value,
      major: isMajor(value),
      significand
    });
    if (significand >= 10) {
      significand = significand < 15 ? 15 : 20;
    } else {
      significand++;
    }
    if (significand >= 20) {
      exp++;
      significand = 2;
      precision = exp >= 0 ? 1 : precision;
    }
    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;
  }
  const lastTick = finiteOrDefault(generationOptions.max, value);
  ticks.push({
    value: lastTick,
    major: isMajor(lastTick),
    significand
  });
  return ticks;
}
var LogarithmicScale = class extends Scale {
  constructor(cfg) {
    super(cfg);
    this.start = void 0;
    this.end = void 0;
    this._startValue = void 0;
    this._valueRange = 0;
  }
  parse(raw, index) {
    const value = LinearScaleBase.prototype.parse.apply(this, [
      raw,
      index
    ]);
    if (value === 0) {
      this._zero = true;
      return void 0;
    }
    return isNumberFinite(value) && value > 0 ? value : null;
  }
  determineDataLimits() {
    const { min, max } = this.getMinMax(true);
    this.min = isNumberFinite(min) ? Math.max(0, min) : null;
    this.max = isNumberFinite(max) ? Math.max(0, max) : null;
    if (this.options.beginAtZero) {
      this._zero = true;
    }
    if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {
      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);
    }
    this.handleTickRangeOptions();
  }
  handleTickRangeOptions() {
    const { minDefined, maxDefined } = this.getUserBounds();
    let min = this.min;
    let max = this.max;
    const setMin = (v) => min = minDefined ? min : v;
    const setMax = (v) => max = maxDefined ? max : v;
    if (min === max) {
      if (min <= 0) {
        setMin(1);
        setMax(10);
      } else {
        setMin(changeExponent(min, -1));
        setMax(changeExponent(max, 1));
      }
    }
    if (min <= 0) {
      setMin(changeExponent(max, -1));
    }
    if (max <= 0) {
      setMax(changeExponent(min, 1));
    }
    this.min = min;
    this.max = max;
  }
  buildTicks() {
    const opts = this.options;
    const generationOptions = {
      min: this._userMin,
      max: this._userMax
    };
    const ticks = generateTicks(generationOptions, this);
    if (opts.bounds === "ticks") {
      _setMinAndMaxByKey(ticks, this, "value");
    }
    if (opts.reverse) {
      ticks.reverse();
      this.start = this.max;
      this.end = this.min;
    } else {
      this.start = this.min;
      this.end = this.max;
    }
    return ticks;
  }
  getLabelForValue(value) {
    return value === void 0 ? "0" : formatNumber(value, this.chart.options.locale, this.options.ticks.format);
  }
  configure() {
    const start = this.min;
    super.configure();
    this._startValue = log10(start);
    this._valueRange = log10(this.max) - log10(start);
  }
  getPixelForValue(value) {
    if (value === void 0 || value === 0) {
      value = this.min;
    }
    if (value === null || isNaN(value)) {
      return NaN;
    }
    return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);
  }
  getValueForPixel(pixel) {
    const decimal = this.getDecimalForPixel(pixel);
    return Math.pow(10, this._startValue + decimal * this._valueRange);
  }
};
__publicField(LogarithmicScale, "id", "logarithmic");
__publicField(LogarithmicScale, "defaults", {
  ticks: {
    callback: Ticks.formatters.logarithmic,
    major: {
      enabled: true
    }
  }
});
function getTickBackdropHeight(opts) {
  const tickOpts = opts.ticks;
  if (tickOpts.display && opts.display) {
    const padding = toPadding(tickOpts.backdropPadding);
    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;
  }
  return 0;
}
function measureLabelSize(ctx, font, label) {
  label = isArray(label) ? label : [
    label
  ];
  return {
    w: _longestText(ctx, font.string, label),
    h: label.length * font.lineHeight
  };
}
function determineLimits(angle, pos, size, min, max) {
  if (angle === min || angle === max) {
    return {
      start: pos - size / 2,
      end: pos + size / 2
    };
  } else if (angle < min || angle > max) {
    return {
      start: pos - size,
      end: pos
    };
  }
  return {
    start: pos,
    end: pos + size
  };
}
function fitWithPointLabels(scale) {
  const orig = {
    l: scale.left + scale._padding.left,
    r: scale.right - scale._padding.right,
    t: scale.top + scale._padding.top,
    b: scale.bottom - scale._padding.bottom
  };
  const limits = Object.assign({}, orig);
  const labelSizes = [];
  const padding = [];
  const valueCount = scale._pointLabels.length;
  const pointLabelOpts = scale.options.pointLabels;
  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;
  for (let i = 0; i < valueCount; i++) {
    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
    padding[i] = opts.padding;
    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
    const plFont = toFont(opts.font);
    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
    labelSizes[i] = textSize;
    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);
    const angle = Math.round(toDegrees(angleRadians));
    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
    updateLimits(limits, orig, angleRadians, hLimits, vLimits);
  }
  scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);
  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
}
function updateLimits(limits, orig, angle, hLimits, vLimits) {
  const sin = Math.abs(Math.sin(angle));
  const cos = Math.abs(Math.cos(angle));
  let x = 0;
  let y = 0;
  if (hLimits.start < orig.l) {
    x = (orig.l - hLimits.start) / sin;
    limits.l = Math.min(limits.l, orig.l - x);
  } else if (hLimits.end > orig.r) {
    x = (hLimits.end - orig.r) / sin;
    limits.r = Math.max(limits.r, orig.r + x);
  }
  if (vLimits.start < orig.t) {
    y = (orig.t - vLimits.start) / cos;
    limits.t = Math.min(limits.t, orig.t - y);
  } else if (vLimits.end > orig.b) {
    y = (vLimits.end - orig.b) / cos;
    limits.b = Math.max(limits.b, orig.b + y);
  }
}
function createPointLabelItem(scale, index, itemOpts) {
  const outerDistance = scale.drawingArea;
  const { extra, additionalAngle, padding, size } = itemOpts;
  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);
  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));
  const y = yForAngle(pointLabelPosition.y, size.h, angle);
  const textAlign = getTextAlignForAngle(angle);
  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
  return {
    visible: true,
    x: pointLabelPosition.x,
    y,
    textAlign,
    left,
    top: y,
    right: left + size.w,
    bottom: y + size.h
  };
}
function isNotOverlapped(item, area) {
  if (!area) {
    return true;
  }
  const { left, top, right, bottom } = item;
  const apexesInArea = _isPointInArea({
    x: left,
    y: top
  }, area) || _isPointInArea({
    x: left,
    y: bottom
  }, area) || _isPointInArea({
    x: right,
    y: top
  }, area) || _isPointInArea({
    x: right,
    y: bottom
  }, area);
  return !apexesInArea;
}
function buildPointLabelItems(scale, labelSizes, padding) {
  const items = [];
  const valueCount = scale._pointLabels.length;
  const opts = scale.options;
  const { centerPointLabels, display } = opts.pointLabels;
  const itemOpts = {
    extra: getTickBackdropHeight(opts) / 2,
    additionalAngle: centerPointLabels ? PI / valueCount : 0
  };
  let area;
  for (let i = 0; i < valueCount; i++) {
    itemOpts.padding = padding[i];
    itemOpts.size = labelSizes[i];
    const item = createPointLabelItem(scale, i, itemOpts);
    items.push(item);
    if (display === "auto") {
      item.visible = isNotOverlapped(item, area);
      if (item.visible) {
        area = item;
      }
    }
  }
  return items;
}
function getTextAlignForAngle(angle) {
  if (angle === 0 || angle === 180) {
    return "center";
  } else if (angle < 180) {
    return "left";
  }
  return "right";
}
function leftForTextAlign(x, w, align) {
  if (align === "right") {
    x -= w;
  } else if (align === "center") {
    x -= w / 2;
  }
  return x;
}
function yForAngle(y, h4, angle) {
  if (angle === 90 || angle === 270) {
    y -= h4 / 2;
  } else if (angle > 270 || angle < 90) {
    y -= h4;
  }
  return y;
}
function drawPointLabelBox(ctx, opts, item) {
  const { left, top, right, bottom } = item;
  const { backdropColor } = opts;
  if (!isNullOrUndef(backdropColor)) {
    const borderRadius = toTRBLCorners(opts.borderRadius);
    const padding = toPadding(opts.backdropPadding);
    ctx.fillStyle = backdropColor;
    const backdropLeft = left - padding.left;
    const backdropTop = top - padding.top;
    const backdropWidth = right - left + padding.width;
    const backdropHeight = bottom - top + padding.height;
    if (Object.values(borderRadius).some((v) => v !== 0)) {
      ctx.beginPath();
      addRoundedRectPath(ctx, {
        x: backdropLeft,
        y: backdropTop,
        w: backdropWidth,
        h: backdropHeight,
        radius: borderRadius
      });
      ctx.fill();
    } else {
      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
    }
  }
}
function drawPointLabels(scale, labelCount) {
  const { ctx, options: { pointLabels } } = scale;
  for (let i = labelCount - 1; i >= 0; i--) {
    const item = scale._pointLabelItems[i];
    if (!item.visible) {
      continue;
    }
    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
    drawPointLabelBox(ctx, optsAtIndex, item);
    const plFont = toFont(optsAtIndex.font);
    const { x, y, textAlign } = item;
    renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
      color: optsAtIndex.color,
      textAlign,
      textBaseline: "middle"
    });
  }
}
function pathRadiusLine(scale, radius, circular, labelCount) {
  const { ctx } = scale;
  if (circular) {
    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);
  } else {
    let pointPosition = scale.getPointPosition(0, radius);
    ctx.moveTo(pointPosition.x, pointPosition.y);
    for (let i = 1; i < labelCount; i++) {
      pointPosition = scale.getPointPosition(i, radius);
      ctx.lineTo(pointPosition.x, pointPosition.y);
    }
  }
}
function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
  const ctx = scale.ctx;
  const circular = gridLineOpts.circular;
  const { color: color2, lineWidth } = gridLineOpts;
  if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) {
    return;
  }
  ctx.save();
  ctx.strokeStyle = color2;
  ctx.lineWidth = lineWidth;
  ctx.setLineDash(borderOpts.dash);
  ctx.lineDashOffset = borderOpts.dashOffset;
  ctx.beginPath();
  pathRadiusLine(scale, radius, circular, labelCount);
  ctx.closePath();
  ctx.stroke();
  ctx.restore();
}
function createPointLabelContext(parent, index, label) {
  return createContext(parent, {
    label,
    index,
    type: "pointLabel"
  });
}
var RadialLinearScale = class extends LinearScaleBase {
  constructor(cfg) {
    super(cfg);
    this.xCenter = void 0;
    this.yCenter = void 0;
    this.drawingArea = void 0;
    this._pointLabels = [];
    this._pointLabelItems = [];
  }
  setDimensions() {
    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);
    const w = this.width = this.maxWidth - padding.width;
    const h4 = this.height = this.maxHeight - padding.height;
    this.xCenter = Math.floor(this.left + w / 2 + padding.left);
    this.yCenter = Math.floor(this.top + h4 / 2 + padding.top);
    this.drawingArea = Math.floor(Math.min(w, h4) / 2);
  }
  determineDataLimits() {
    const { min, max } = this.getMinMax(false);
    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;
    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;
    this.handleTickRangeOptions();
  }
  computeTickLimit() {
    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
  }
  generateTickLabels(ticks) {
    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
    this._pointLabels = this.getLabels().map((value, index) => {
      const label = callback(this.options.pointLabels.callback, [
        value,
        index
      ], this);
      return label || label === 0 ? label : "";
    }).filter((v, i) => this.chart.getDataVisibility(i));
  }
  fit() {
    const opts = this.options;
    if (opts.display && opts.pointLabels.display) {
      fitWithPointLabels(this);
    } else {
      this.setCenterPoint(0, 0, 0, 0);
    }
  }
  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
  }
  getIndexAngle(index) {
    const angleMultiplier = TAU / (this._pointLabels.length || 1);
    const startAngle = this.options.startAngle || 0;
    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));
  }
  getDistanceFromCenterForValue(value) {
    if (isNullOrUndef(value)) {
      return NaN;
    }
    const scalingFactor = this.drawingArea / (this.max - this.min);
    if (this.options.reverse) {
      return (this.max - value) * scalingFactor;
    }
    return (value - this.min) * scalingFactor;
  }
  getValueForDistanceFromCenter(distance) {
    if (isNullOrUndef(distance)) {
      return NaN;
    }
    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));
    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
  }
  getPointLabelContext(index) {
    const pointLabels = this._pointLabels || [];
    if (index >= 0 && index < pointLabels.length) {
      const pointLabel = pointLabels[index];
      return createPointLabelContext(this.getContext(), index, pointLabel);
    }
  }
  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {
    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;
    return {
      x: Math.cos(angle) * distanceFromCenter + this.xCenter,
      y: Math.sin(angle) * distanceFromCenter + this.yCenter,
      angle
    };
  }
  getPointPositionForValue(index, value) {
    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
  }
  getBasePosition(index) {
    return this.getPointPositionForValue(index || 0, this.getBaseValue());
  }
  getPointLabelPosition(index) {
    const { left, top, right, bottom } = this._pointLabelItems[index];
    return {
      left,
      top,
      right,
      bottom
    };
  }
  drawBackground() {
    const { backgroundColor, grid: { circular } } = this.options;
    if (backgroundColor) {
      const ctx = this.ctx;
      ctx.save();
      ctx.beginPath();
      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
      ctx.closePath();
      ctx.fillStyle = backgroundColor;
      ctx.fill();
      ctx.restore();
    }
  }
  drawGrid() {
    const ctx = this.ctx;
    const opts = this.options;
    const { angleLines, grid, border } = opts;
    const labelCount = this._pointLabels.length;
    let i, offset, position;
    if (opts.pointLabels.display) {
      drawPointLabels(this, labelCount);
    }
    if (grid.display) {
      this.ticks.forEach((tick, index) => {
        if (index !== 0 || index === 0 && this.min < 0) {
          offset = this.getDistanceFromCenterForValue(tick.value);
          const context = this.getContext(index);
          const optsAtIndex = grid.setContext(context);
          const optsAtIndexBorder = border.setContext(context);
          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);
        }
      });
    }
    if (angleLines.display) {
      ctx.save();
      for (i = labelCount - 1; i >= 0; i--) {
        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
        const { color: color2, lineWidth } = optsAtIndex;
        if (!lineWidth || !color2) {
          continue;
        }
        ctx.lineWidth = lineWidth;
        ctx.strokeStyle = color2;
        ctx.setLineDash(optsAtIndex.borderDash);
        ctx.lineDashOffset = optsAtIndex.borderDashOffset;
        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);
        position = this.getPointPosition(i, offset);
        ctx.beginPath();
        ctx.moveTo(this.xCenter, this.yCenter);
        ctx.lineTo(position.x, position.y);
        ctx.stroke();
      }
      ctx.restore();
    }
  }
  drawBorder() {
  }
  drawLabels() {
    const ctx = this.ctx;
    const opts = this.options;
    const tickOpts = opts.ticks;
    if (!tickOpts.display) {
      return;
    }
    const startAngle = this.getIndexAngle(0);
    let offset, width;
    ctx.save();
    ctx.translate(this.xCenter, this.yCenter);
    ctx.rotate(startAngle);
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    this.ticks.forEach((tick, index) => {
      if (index === 0 && this.min >= 0 && !opts.reverse) {
        return;
      }
      const optsAtIndex = tickOpts.setContext(this.getContext(index));
      const tickFont = toFont(optsAtIndex.font);
      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);
      if (optsAtIndex.showLabelBackdrop) {
        ctx.font = tickFont.string;
        width = ctx.measureText(tick.label).width;
        ctx.fillStyle = optsAtIndex.backdropColor;
        const padding = toPadding(optsAtIndex.backdropPadding);
        ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);
      }
      renderText(ctx, tick.label, 0, -offset, tickFont, {
        color: optsAtIndex.color,
        strokeColor: optsAtIndex.textStrokeColor,
        strokeWidth: optsAtIndex.textStrokeWidth
      });
    });
    ctx.restore();
  }
  drawTitle() {
  }
};
__publicField(RadialLinearScale, "id", "radialLinear");
__publicField(RadialLinearScale, "defaults", {
  display: true,
  animate: true,
  position: "chartArea",
  angleLines: {
    display: true,
    lineWidth: 1,
    borderDash: [],
    borderDashOffset: 0
  },
  grid: {
    circular: false
  },
  startAngle: 0,
  ticks: {
    showLabelBackdrop: true,
    callback: Ticks.formatters.numeric
  },
  pointLabels: {
    backdropColor: void 0,
    backdropPadding: 2,
    display: true,
    font: {
      size: 10
    },
    callback(label) {
      return label;
    },
    padding: 5,
    centerPointLabels: false
  }
});
__publicField(RadialLinearScale, "defaultRoutes", {
  "angleLines.color": "borderColor",
  "pointLabels.color": "color",
  "ticks.color": "color"
});
__publicField(RadialLinearScale, "descriptors", {
  angleLines: {
    _fallback: "grid"
  }
});
var INTERVALS = {
  millisecond: {
    common: true,
    size: 1,
    steps: 1e3
  },
  second: {
    common: true,
    size: 1e3,
    steps: 60
  },
  minute: {
    common: true,
    size: 6e4,
    steps: 60
  },
  hour: {
    common: true,
    size: 36e5,
    steps: 24
  },
  day: {
    common: true,
    size: 864e5,
    steps: 30
  },
  week: {
    common: false,
    size: 6048e5,
    steps: 4
  },
  month: {
    common: true,
    size: 2628e6,
    steps: 12
  },
  quarter: {
    common: false,
    size: 7884e6,
    steps: 4
  },
  year: {
    common: true,
    size: 3154e7
  }
};
var UNITS = /* @__PURE__ */ Object.keys(INTERVALS);
function sorter(a, b) {
  return a - b;
}
function parse(scale, input) {
  if (isNullOrUndef(input)) {
    return null;
  }
  const adapter = scale._adapter;
  const { parser, round: round2, isoWeekday } = scale._parseOpts;
  let value = input;
  if (typeof parser === "function") {
    value = parser(value);
  }
  if (!isNumberFinite(value)) {
    value = typeof parser === "string" ? adapter.parse(value, parser) : adapter.parse(value);
  }
  if (value === null) {
    return null;
  }
  if (round2) {
    value = round2 === "week" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, "isoWeek", isoWeekday) : adapter.startOf(value, round2);
  }
  return +value;
}
function determineUnitForAutoTicks(minUnit, min, max, capacity) {
  const ilen = UNITS.length;
  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
    const interval = INTERVALS[UNITS[i]];
    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
      return UNITS[i];
    }
  }
  return UNITS[ilen - 1];
}
function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {
    const unit = UNITS[i];
    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
      return unit;
    }
  }
  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
}
function determineMajorUnit(unit) {
  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
    if (INTERVALS[UNITS[i]].common) {
      return UNITS[i];
    }
  }
}
function addTick(ticks, time, timestamps) {
  if (!timestamps) {
    ticks[time] = true;
  } else if (timestamps.length) {
    const { lo, hi } = _lookup(timestamps, time);
    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
    ticks[timestamp] = true;
  }
}
function setMajorTicks(scale, ticks, map3, majorUnit) {
  const adapter = scale._adapter;
  const first = +adapter.startOf(ticks[0].value, majorUnit);
  const last = ticks[ticks.length - 1].value;
  let major, index;
  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {
    index = map3[major];
    if (index >= 0) {
      ticks[index].major = true;
    }
  }
  return ticks;
}
function ticksFromTimestamps(scale, values, majorUnit) {
  const ticks = [];
  const map3 = {};
  const ilen = values.length;
  let i, value;
  for (i = 0; i < ilen; ++i) {
    value = values[i];
    map3[value] = i;
    ticks.push({
      value,
      major: false
    });
  }
  return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit);
}
var TimeScale = class extends Scale {
  constructor(props) {
    super(props);
    this._cache = {
      data: [],
      labels: [],
      all: []
    };
    this._unit = "day";
    this._majorUnit = void 0;
    this._offsets = {};
    this._normalized = false;
    this._parseOpts = void 0;
  }
  init(scaleOpts, opts = {}) {
    const time = scaleOpts.time || (scaleOpts.time = {});
    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
    adapter.init(opts);
    mergeIf(time.displayFormats, adapter.formats());
    this._parseOpts = {
      parser: time.parser,
      round: time.round,
      isoWeekday: time.isoWeekday
    };
    super.init(scaleOpts);
    this._normalized = opts.normalized;
  }
  parse(raw, index) {
    if (raw === void 0) {
      return null;
    }
    return parse(this, raw);
  }
  beforeLayout() {
    super.beforeLayout();
    this._cache = {
      data: [],
      labels: [],
      all: []
    };
  }
  determineDataLimits() {
    const options = this.options;
    const adapter = this._adapter;
    const unit = options.time.unit || "day";
    let { min, max, minDefined, maxDefined } = this.getUserBounds();
    function _applyBounds(bounds) {
      if (!minDefined && !isNaN(bounds.min)) {
        min = Math.min(min, bounds.min);
      }
      if (!maxDefined && !isNaN(bounds.max)) {
        max = Math.max(max, bounds.max);
      }
    }
    if (!minDefined || !maxDefined) {
      _applyBounds(this._getLabelBounds());
      if (options.bounds !== "ticks" || options.ticks.source !== "labels") {
        _applyBounds(this.getMinMax(false));
      }
    }
    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
    this.min = Math.min(min, max - 1);
    this.max = Math.max(min + 1, max);
  }
  _getLabelBounds() {
    const arr = this.getLabelTimestamps();
    let min = Number.POSITIVE_INFINITY;
    let max = Number.NEGATIVE_INFINITY;
    if (arr.length) {
      min = arr[0];
      max = arr[arr.length - 1];
    }
    return {
      min,
      max
    };
  }
  buildTicks() {
    const options = this.options;
    const timeOpts = options.time;
    const tickOpts = options.ticks;
    const timestamps = tickOpts.source === "labels" ? this.getLabelTimestamps() : this._generate();
    if (options.bounds === "ticks" && timestamps.length) {
      this.min = this._userMin || timestamps[0];
      this.max = this._userMax || timestamps[timestamps.length - 1];
    }
    const min = this.min;
    const max = this.max;
    const ticks = _filterBetween(timestamps, min, max);
    this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
    this._majorUnit = !tickOpts.major.enabled || this._unit === "year" ? void 0 : determineMajorUnit(this._unit);
    this.initOffsets(timestamps);
    if (options.reverse) {
      ticks.reverse();
    }
    return ticksFromTimestamps(this, ticks, this._majorUnit);
  }
  afterAutoSkip() {
    if (this.options.offsetAfterAutoskip) {
      this.initOffsets(this.ticks.map((tick) => +tick.value));
    }
  }
  initOffsets(timestamps = []) {
    let start = 0;
    let end = 0;
    let first, last;
    if (this.options.offset && timestamps.length) {
      first = this.getDecimalForValue(timestamps[0]);
      if (timestamps.length === 1) {
        start = 1 - first;
      } else {
        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
      }
      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
      if (timestamps.length === 1) {
        end = last;
      } else {
        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
      }
    }
    const limit = timestamps.length < 3 ? 0.5 : 0.25;
    start = _limitValue(start, 0, limit);
    end = _limitValue(end, 0, limit);
    this._offsets = {
      start,
      end,
      factor: 1 / (start + 1 + end)
    };
  }
  _generate() {
    const adapter = this._adapter;
    const min = this.min;
    const max = this.max;
    const options = this.options;
    const timeOpts = options.time;
    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
    const stepSize = valueOrDefault(options.ticks.stepSize, 1);
    const weekday = minor === "week" ? timeOpts.isoWeekday : false;
    const hasWeekday = isNumber(weekday) || weekday === true;
    const ticks = {};
    let first = min;
    let time, count;
    if (hasWeekday) {
      first = +adapter.startOf(first, "isoWeek", weekday);
    }
    first = +adapter.startOf(first, hasWeekday ? "day" : minor);
    if (adapter.diff(max, min, minor) > 1e5 * stepSize) {
      throw new Error(min + " and " + max + " are too far apart with stepSize of " + stepSize + " " + minor);
    }
    const timestamps = options.ticks.source === "data" && this.getDataTimestamps();
    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {
      addTick(ticks, time, timestamps);
    }
    if (time === max || options.bounds === "ticks" || count === 1) {
      addTick(ticks, time, timestamps);
    }
    return Object.keys(ticks).sort(sorter).map((x) => +x);
  }
  getLabelForValue(value) {
    const adapter = this._adapter;
    const timeOpts = this.options.time;
    if (timeOpts.tooltipFormat) {
      return adapter.format(value, timeOpts.tooltipFormat);
    }
    return adapter.format(value, timeOpts.displayFormats.datetime);
  }
  format(value, format) {
    const options = this.options;
    const formats = options.time.displayFormats;
    const unit = this._unit;
    const fmt = format || formats[unit];
    return this._adapter.format(value, fmt);
  }
  _tickFormatFunction(time, index, ticks, format) {
    const options = this.options;
    const formatter = options.ticks.callback;
    if (formatter) {
      return callback(formatter, [
        time,
        index,
        ticks
      ], this);
    }
    const formats = options.time.displayFormats;
    const unit = this._unit;
    const majorUnit = this._majorUnit;
    const minorFormat = unit && formats[unit];
    const majorFormat = majorUnit && formats[majorUnit];
    const tick = ticks[index];
    const major = majorUnit && majorFormat && tick && tick.major;
    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));
  }
  generateTickLabels(ticks) {
    let i, ilen, tick;
    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
      tick = ticks[i];
      tick.label = this._tickFormatFunction(tick.value, i, ticks);
    }
  }
  getDecimalForValue(value) {
    return value === null ? NaN : (value - this.min) / (this.max - this.min);
  }
  getPixelForValue(value) {
    const offsets = this._offsets;
    const pos = this.getDecimalForValue(value);
    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
  }
  getValueForPixel(pixel) {
    const offsets = this._offsets;
    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
    return this.min + pos * (this.max - this.min);
  }
  _getLabelSize(label) {
    const ticksOpts = this.options.ticks;
    const tickLabelWidth = this.ctx.measureText(label).width;
    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
    const cosRotation = Math.cos(angle);
    const sinRotation = Math.sin(angle);
    const tickFontSize = this._resolveTickFontOptions(0).size;
    return {
      w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,
      h: tickLabelWidth * sinRotation + tickFontSize * cosRotation
    };
  }
  _getLabelCapacity(exampleTime) {
    const timeOpts = this.options.time;
    const displayFormats = timeOpts.displayFormats;
    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [
      exampleTime
    ], this._majorUnit), format);
    const size = this._getLabelSize(exampleLabel);
    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
    return capacity > 0 ? capacity : 1;
  }
  getDataTimestamps() {
    let timestamps = this._cache.data || [];
    let i, ilen;
    if (timestamps.length) {
      return timestamps;
    }
    const metas = this.getMatchingVisibleMetas();
    if (this._normalized && metas.length) {
      return this._cache.data = metas[0].controller.getAllParsedValues(this);
    }
    for (i = 0, ilen = metas.length; i < ilen; ++i) {
      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
    }
    return this._cache.data = this.normalize(timestamps);
  }
  getLabelTimestamps() {
    const timestamps = this._cache.labels || [];
    let i, ilen;
    if (timestamps.length) {
      return timestamps;
    }
    const labels = this.getLabels();
    for (i = 0, ilen = labels.length; i < ilen; ++i) {
      timestamps.push(parse(this, labels[i]));
    }
    return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);
  }
  normalize(values) {
    return _arrayUnique(values.sort(sorter));
  }
};
__publicField(TimeScale, "id", "time");
__publicField(TimeScale, "defaults", {
  bounds: "data",
  adapters: {},
  time: {
    parser: false,
    unit: false,
    round: false,
    isoWeekday: false,
    minUnit: "millisecond",
    displayFormats: {}
  },
  ticks: {
    source: "auto",
    callback: false,
    major: {
      enabled: false
    }
  }
});
function interpolate3(table, val, reverse) {
  let lo = 0;
  let hi = table.length - 1;
  let prevSource, nextSource, prevTarget, nextTarget;
  if (reverse) {
    if (val >= table[lo].pos && val <= table[hi].pos) {
      ({ lo, hi } = _lookupByKey(table, "pos", val));
    }
    ({ pos: prevSource, time: prevTarget } = table[lo]);
    ({ pos: nextSource, time: nextTarget } = table[hi]);
  } else {
    if (val >= table[lo].time && val <= table[hi].time) {
      ({ lo, hi } = _lookupByKey(table, "time", val));
    }
    ({ time: prevSource, pos: prevTarget } = table[lo]);
    ({ time: nextSource, pos: nextTarget } = table[hi]);
  }
  const span = nextSource - prevSource;
  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
}
var TimeSeriesScale = class extends TimeScale {
  constructor(props) {
    super(props);
    this._table = [];
    this._minPos = void 0;
    this._tableRange = void 0;
  }
  initOffsets() {
    const timestamps = this._getTimestampsForTable();
    const table = this._table = this.buildLookupTable(timestamps);
    this._minPos = interpolate3(table, this.min);
    this._tableRange = interpolate3(table, this.max) - this._minPos;
    super.initOffsets(timestamps);
  }
  buildLookupTable(timestamps) {
    const { min, max } = this;
    const items = [];
    const table = [];
    let i, ilen, prev, curr, next;
    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
      curr = timestamps[i];
      if (curr >= min && curr <= max) {
        items.push(curr);
      }
    }
    if (items.length < 2) {
      return [
        {
          time: min,
          pos: 0
        },
        {
          time: max,
          pos: 1
        }
      ];
    }
    for (i = 0, ilen = items.length; i < ilen; ++i) {
      next = items[i + 1];
      prev = items[i - 1];
      curr = items[i];
      if (Math.round((next + prev) / 2) !== curr) {
        table.push({
          time: curr,
          pos: i / (ilen - 1)
        });
      }
    }
    return table;
  }
  _generate() {
    const min = this.min;
    const max = this.max;
    let timestamps = super.getDataTimestamps();
    if (!timestamps.includes(min) || !timestamps.length) {
      timestamps.splice(0, 0, min);
    }
    if (!timestamps.includes(max) || timestamps.length === 1) {
      timestamps.push(max);
    }
    return timestamps.sort((a, b) => a - b);
  }
  _getTimestampsForTable() {
    let timestamps = this._cache.all || [];
    if (timestamps.length) {
      return timestamps;
    }
    const data = this.getDataTimestamps();
    const label = this.getLabelTimestamps();
    if (data.length && label.length) {
      timestamps = this.normalize(data.concat(label));
    } else {
      timestamps = data.length ? data : label;
    }
    timestamps = this._cache.all = timestamps;
    return timestamps;
  }
  getDecimalForValue(value) {
    return (interpolate3(this._table, value) - this._minPos) / this._tableRange;
  }
  getValueForPixel(pixel) {
    const offsets = this._offsets;
    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
    return interpolate3(this._table, decimal * this._tableRange + this._minPos, true);
  }
};
__publicField(TimeSeriesScale, "id", "timeseries");
__publicField(TimeSeriesScale, "defaults", TimeScale.defaults);

// src/gui/StatsModal.tsx
Chart.register(
  BarElement,
  BarController,
  plugin_legend,
  plugin_title,
  plugin_tooltip,
  plugin_subtitle,
  CategoryScale,
  LinearScale,
  PieController,
  ArcElement
);
var StatsModal = class extends import_obsidian7.Modal {
  constructor(app, plugin) {
    super(app);
    this.plugin = plugin;
    this.titleEl.setText(`${t("STATS_TITLE")} `);
    this.titleEl.addClass("sr-centered");
    this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("select", { id: "sr-chart-period" }, /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "month", selected: true }, t("MONTH")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "quarter" }, t("QUARTER")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "year" }, t("YEAR")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "lifetime" }, t("LIFETIME")));
    this.modalEl.style.height = "100%";
    this.modalEl.style.width = "100%";
    if (import_obsidian7.Platform.isMobile) {
      this.contentEl.style.display = "block";
    }
  }
  onOpen() {
    const { contentEl } = this;
    contentEl.style.textAlign = "center";
    const cardStats = this.plugin.cardStats;
    let maxN = cardStats.delayedDays.getMaxValue();
    for (let dueOffset = 0; dueOffset <= maxN; dueOffset++) {
      cardStats.delayedDays.clearCountIfMissing(dueOffset);
    }
    const dueDatesFlashcardsCopy = { 0: 0 };
    for (const [dueOffset, dueCount] of getTypedObjectEntries(cardStats.delayedDays.dict)) {
      if (dueOffset <= 0) {
        dueDatesFlashcardsCopy[0] += dueCount;
      } else {
        dueDatesFlashcardsCopy[dueOffset] = dueCount;
      }
    }
    const scheduledCount = cardStats.youngCount + cardStats.matureCount;
    maxN = Math.max(maxN, 1);
    contentEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("div", null, /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "forecastChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "forecastChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "intervalsChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "intervalsChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "easesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "easesChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "cardTypesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "cardTypesChartSummary" }));
    createStatsChart(
      "bar",
      "forecastChart",
      t("FORECAST"),
      t("FORECAST_DESC"),
      Object.keys(dueDatesFlashcardsCopy),
      Object.values(dueDatesFlashcardsCopy),
      t("REVIEWS_PER_DAY", { avg: (scheduledCount / maxN).toFixed(1) }),
      t("SCHEDULED"),
      t("DAYS"),
      t("NUMBER_OF_CARDS")
    );
    maxN = cardStats.intervals.getMaxValue();
    for (let interval = 0; interval <= maxN; interval++) {
      cardStats.intervals.clearCountIfMissing(interval);
    }
    const average_interval = textInterval(
      Math.round(
        cardStats.intervals.getTotalOfValueMultiplyCount() / scheduledCount * 10
      ) / 10 || 0,
      false
    ), longest_interval = textInterval(cardStats.intervals.getMaxValue(), false);
    createStatsChart(
      "bar",
      "intervalsChart",
      t("INTERVALS"),
      t("INTERVALS_DESC"),
      Object.keys(cardStats.intervals.dict),
      Object.values(cardStats.intervals.dict),
      t("INTERVALS_SUMMARY", { avg: average_interval, longest: longest_interval }),
      t("COUNT"),
      t("DAYS"),
      t("NUMBER_OF_CARDS")
    );
    const eases = getKeysPreserveType(cardStats.eases.dict);
    for (let ease = Math.min(...eases); ease <= Math.max(...eases); ease++) {
      cardStats.eases.clearCountIfMissing(ease);
    }
    const average_ease = Math.round(cardStats.eases.getTotalOfValueMultiplyCount() / scheduledCount) || 0;
    createStatsChart(
      "bar",
      "easesChart",
      t("EASES"),
      "",
      Object.keys(cardStats.eases.dict),
      Object.values(cardStats.eases.dict),
      t("EASES_SUMMARY", { avgEase: average_ease }),
      t("COUNT"),
      t("EASES"),
      t("NUMBER_OF_CARDS")
    );
    const totalCardsCount = this.plugin.deckTree.getDistinctCardCount(
      2 /* All */,
      true
    );
    createStatsChart(
      "pie",
      "cardTypesChart",
      t("CARD_TYPES"),
      t("CARD_TYPES_DESC"),
      [
        `${t("CARD_TYPE_NEW")} - ${Math.round(
          cardStats.newCount / totalCardsCount * 100
        )}%`,
        `${t("CARD_TYPE_YOUNG")} - ${Math.round(
          cardStats.youngCount / totalCardsCount * 100
        )}%`,
        `${t("CARD_TYPE_MATURE")} - ${Math.round(
          cardStats.matureCount / totalCardsCount * 100
        )}%`
      ],
      [cardStats.newCount, cardStats.youngCount, cardStats.matureCount],
      t("CARD_TYPES_SUMMARY", { totalCardsCount })
    );
  }
  onClose() {
    const { contentEl } = this;
    contentEl.empty();
  }
};
function createStatsChart(type, canvasId, title, subtitle, labels, data, summary, seriesTitle = "", xAxisTitle = "", yAxisTitle = "") {
  const style = getComputedStyle(document.body);
  const textColor = style.getPropertyValue("--text-normal");
  let scales = {}, backgroundColor = ["#2196f3"];
  if (type !== "pie") {
    scales = {
      x: {
        title: {
          display: true,
          text: xAxisTitle,
          color: textColor
        }
      },
      y: {
        title: {
          display: true,
          text: yAxisTitle,
          color: textColor
        }
      }
    };
  } else {
    backgroundColor = ["#2196f3", "#4caf50", "green"];
  }
  const shouldFilter = canvasId === "forecastChart" || canvasId === "intervalsChart";
  const statsChart = new Chart(document.getElementById(canvasId), {
    type,
    data: {
      labels: shouldFilter ? labels.slice(0, 31) : labels,
      datasets: [
        {
          label: seriesTitle,
          backgroundColor,
          data: shouldFilter ? data.slice(0, 31) : data
        }
      ]
    },
    options: {
      scales,
      plugins: {
        title: {
          display: true,
          text: title,
          font: {
            size: 22
          },
          color: textColor
        },
        subtitle: {
          display: true,
          text: subtitle,
          font: {
            size: 16,
            style: "italic"
          },
          color: textColor
        },
        legend: {
          display: false
        }
      },
      aspectRatio: 2
    }
  });
  if (shouldFilter) {
    const chartPeriodEl = document.getElementById("sr-chart-period");
    chartPeriodEl.addEventListener("click", () => {
      let filteredLabels, filteredData;
      const chartPeriod = chartPeriodEl.value;
      if (chartPeriod === "month") {
        filteredLabels = labels.slice(0, 31);
        filteredData = data.slice(0, 31);
      } else if (chartPeriod === "quarter") {
        filteredLabels = labels.slice(0, 91);
        filteredData = data.slice(0, 91);
      } else if (chartPeriod === "year") {
        filteredLabels = labels.slice(0, 366);
        filteredData = data.slice(0, 366);
      } else {
        filteredLabels = labels;
        filteredData = data;
      }
      statsChart.data.labels = filteredLabels;
      statsChart.data.datasets[0] = {
        label: seriesTitle,
        backgroundColor,
        data: filteredData
      };
      statsChart.update();
    });
  }
  document.getElementById(`${canvasId}Summary`).innerText = summary;
}

// src/gui/Sidebar.tsx
var import_obsidian8 = require("obsidian");
var REVIEW_QUEUE_VIEW_TYPE = "review-queue-list-view";
var ReviewQueueListView = class extends import_obsidian8.ItemView {
  constructor(leaf, plugin) {
    super(leaf);
    this.plugin = plugin;
    this.registerEvent(this.app.workspace.on("file-open", () => this.redraw()));
    this.registerEvent(this.app.vault.on("rename", () => this.redraw()));
  }
  getViewType() {
    return REVIEW_QUEUE_VIEW_TYPE;
  }
  getDisplayText() {
    return t("NOTES_REVIEW_QUEUE");
  }
  getIcon() {
    return "SpacedRepIcon";
  }
  onHeaderMenu(menu) {
    menu.addItem((item) => {
      item.setTitle(t("CLOSE")).setIcon("cross").onClick(() => {
        this.app.workspace.detachLeavesOfType(REVIEW_QUEUE_VIEW_TYPE);
      });
    });
  }
  redraw() {
    const activeFile = this.app.workspace.getActiveFile();
    const rootEl = createDiv("nav-folder mod-root");
    const childrenEl = rootEl.createDiv("nav-folder-children");
    for (const deckKey in this.plugin.reviewDecks) {
      const deck = this.plugin.reviewDecks[deckKey];
      const deckCollapsed = !deck.activeFolders.has(deck.deckName);
      const deckFolderEl = this.createRightPaneFolder(
        childrenEl,
        deckKey,
        deckCollapsed,
        false,
        deck
      ).getElementsByClassName("nav-folder-children")[0];
      if (deck.newNotes.length > 0) {
        const newNotesFolderEl = this.createRightPaneFolder(
          deckFolderEl,
          t("NEW"),
          !deck.activeFolders.has(t("NEW")),
          deckCollapsed,
          deck
        );
        for (const newFile of deck.newNotes) {
          const fileIsOpen = activeFile && newFile.path === activeFile.path;
          if (fileIsOpen) {
            deck.activeFolders.add(deck.deckName);
            deck.activeFolders.add(t("NEW"));
            this.changeFolderIconToExpanded(newNotesFolderEl);
            this.changeFolderIconToExpanded(deckFolderEl);
          }
          this.createRightPaneFile(
            newNotesFolderEl,
            newFile,
            fileIsOpen,
            !deck.activeFolders.has(t("NEW")),
            deck,
            this.plugin
          );
        }
      }
      if (deck.scheduledNotes.length > 0) {
        const now = Date.now();
        let currUnix = -1;
        let schedFolderEl = null, folderTitle = "";
        const maxDaysToRender = this.plugin.data.settings.maxNDaysNotesReviewQueue;
        for (const sNote of deck.scheduledNotes) {
          if (sNote.dueUnix != currUnix) {
            const nDays = Math.ceil((sNote.dueUnix - now) / (24 * 3600 * 1e3));
            if (nDays > maxDaysToRender) {
              break;
            }
            if (nDays === -1) {
              folderTitle = t("YESTERDAY");
            } else if (nDays === 0) {
              folderTitle = t("TODAY");
            } else if (nDays === 1) {
              folderTitle = t("TOMORROW");
            } else {
              folderTitle = new Date(sNote.dueUnix).toDateString();
            }
            schedFolderEl = this.createRightPaneFolder(
              deckFolderEl,
              folderTitle,
              !deck.activeFolders.has(folderTitle),
              deckCollapsed,
              deck
            );
            currUnix = sNote.dueUnix;
          }
          const fileIsOpen = activeFile && sNote.note.path === activeFile.path;
          if (fileIsOpen) {
            deck.activeFolders.add(deck.deckName);
            deck.activeFolders.add(folderTitle);
            this.changeFolderIconToExpanded(schedFolderEl);
            this.changeFolderIconToExpanded(deckFolderEl);
          }
          this.createRightPaneFile(
            schedFolderEl,
            sNote.note,
            fileIsOpen,
            !deck.activeFolders.has(folderTitle),
            deck,
            this.plugin
          );
        }
      }
    }
    const contentEl = this.containerEl.children[1];
    contentEl.empty();
    contentEl.appendChild(rootEl);
  }
  createRightPaneFolder(parentEl, folderTitle, collapsed, hidden, deck) {
    const folderEl = parentEl.createDiv("nav-folder");
    const folderTitleEl = folderEl.createDiv("nav-folder-title");
    const childrenEl = folderEl.createDiv("nav-folder-children");
    const collapseIconEl = folderTitleEl.createDiv(
      "nav-folder-collapse-indicator collapse-icon"
    );
    collapseIconEl.innerHTML = COLLAPSE_ICON;
    if (collapsed) {
      collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
    }
    folderTitleEl.createDiv("nav-folder-title-content").setText(folderTitle);
    if (hidden) {
      folderEl.style.display = "none";
    }
    folderTitleEl.onClickEvent(() => {
      for (const child of childrenEl.childNodes) {
        if (child.style.display === "block" || child.style.display === "") {
          child.style.display = "none";
          collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
          deck.activeFolders.delete(folderTitle);
        } else {
          child.style.display = "block";
          collapseIconEl.childNodes[0].style.transform = "";
          deck.activeFolders.add(folderTitle);
        }
      }
    });
    return folderEl;
  }
  createRightPaneFile(folderEl, file, fileElActive, hidden, deck, plugin) {
    const navFileEl = folderEl.getElementsByClassName("nav-folder-children")[0].createDiv("nav-file");
    if (hidden) {
      navFileEl.style.display = "none";
    }
    const navFileTitle = navFileEl.createDiv("nav-file-title");
    if (fileElActive) {
      navFileTitle.addClass("is-active");
    }
    navFileTitle.createDiv("nav-file-title-content").setText(file.basename);
    navFileTitle.addEventListener(
      "click",
      async (event) => {
        event.preventDefault();
        plugin.lastSelectedReviewDeck = deck.deckName;
        await this.app.workspace.getLeaf().openFile(file);
        return false;
      },
      false
    );
    navFileTitle.addEventListener(
      "contextmenu",
      (event) => {
        event.preventDefault();
        const fileMenu = new import_obsidian8.Menu();
        this.app.workspace.trigger("file-menu", fileMenu, file, "my-context-menu", null);
        fileMenu.showAtPosition({
          x: event.pageX,
          y: event.pageY
        });
        return false;
      },
      false
    );
  }
  changeFolderIconToExpanded(folderEl) {
    const collapseIconEl = folderEl.find("div.nav-folder-collapse-indicator");
    collapseIconEl.childNodes[0].style.transform = "";
  }
};

// src/ReviewDeck.ts
var import_obsidian9 = require("obsidian");
var ReviewDeck = class {
  constructor(name) {
    this.newNotes = [];
    this.scheduledNotes = [];
    this.dueNotesCount = 0;
    this.deckName = name;
    this.activeFolders = /* @__PURE__ */ new Set([this.deckName, t("TODAY")]);
  }
  sortNotes(pageranks) {
    this.newNotes = this.newNotes.sort(
      (a, b) => (pageranks[b.path] || 0) - (pageranks[a.path] || 0)
    );
    this.scheduledNotes = this.scheduledNotes.sort((a, b) => {
      const result = a.dueUnix - b.dueUnix;
      if (result != 0) {
        return result;
      }
      return (pageranks[b.note.path] || 0) - (pageranks[a.note.path] || 0);
    });
  }
};
var ReviewDeckSelectionModal = class extends import_obsidian9.FuzzySuggestModal {
  constructor(app, deckKeys) {
    super(app);
    this.deckKeys = [];
    this.deckKeys = deckKeys;
  }
  getItems() {
    return this.deckKeys;
  }
  getItemText(item) {
    return item;
  }
  onChooseItem(deckKey, _) {
    this.close();
    this.submitCallback(deckKey);
  }
};

// src/icons/appicon.ts
var import_obsidian10 = require("obsidian");
function appIcon() {
  (0, import_obsidian10.addIcon)(
    "SpacedRepIcon",
    `<path fill="currentColor" stroke="currentColor" d="M 88.960938 17.257812 L 47.457031 17.257812 C 45.679688 17.257812 44.230469 18.703125 44.230469 20.484375 L 44.230469 86.558594 C 44.230469 88.335938 45.679688 89.785156 47.457031 89.785156 L 88.960938 89.785156 C 90.738281 89.785156 92.1875 88.335938 92.1875 86.558594 L 92.1875 20.484375 C 92.1875 18.703125 90.738281 17.257812 88.960938 17.257812 Z M 88.28125 85.878906 L 48.136719 85.878906 L 48.136719 21.164062 L 88.28125 21.164062 Z M 88.28125 85.878906 "/>
        <path fill="currentColor" stroke="currentColor"  d="M 88.960938 9.445312 L 61.667969 9.445312 C 59.925781 3.816406 54.011719 0.515625 48.269531 2.054688 L 8.183594 12.796875 C 2.304688 14.371094 -1.199219 20.4375 0.378906 26.316406 L 17.476562 90.140625 C 18.796875 95.066406 23.269531 98.324219 28.144531 98.324219 C 29.085938 98.324219 30.046875 98.199219 31 97.945312 L 40.765625 95.328125 C 42.625 96.75 44.941406 97.597656 47.457031 97.597656 L 88.960938 97.597656 C 95.046875 97.597656 100 92.644531 100 86.558594 L 100 20.484375 C 100 14.398438 95.046875 9.445312 88.960938 9.445312 Z M 29.988281 94.171875 C 26.1875 95.191406 22.269531 92.925781 21.25 89.128906 L 4.152344 25.304688 C 3.132812 21.507812 5.394531 17.585938 9.195312 16.570312 L 49.28125 5.828125 C 52.578125 4.945312 55.960938 6.53125 57.464844 9.445312 L 47.457031 9.445312 C 41.371094 9.445312 36.417969 14.398438 36.417969 20.484375 L 36.417969 86.558594 C 36.417969 88.558594 36.957031 90.433594 37.890625 92.054688 Z M 96.09375 86.558594 C 96.09375 90.492188 92.894531 93.691406 88.960938 93.691406 L 47.457031 93.691406 C 43.523438 93.691406 40.324219 90.492188 40.324219 86.558594 L 40.324219 20.484375 C 40.324219 16.550781 43.523438 13.351562 47.457031 13.351562 L 88.960938 13.351562 C 92.894531 13.351562 96.09375 16.550781 96.09375 20.484375 Z M 96.09375 86.558594 "/>
        <path fill="currentColor" stroke="currentColor"  d="M 54.101562 53.09375 L 60.070312 57.410156 L 57.789062 64.378906 C 56.90625 67.074219 59.996094 69.320312 62.285156 67.648438 L 68.210938 63.324219 L 74.132812 67.648438 C 76.421875 69.320312 79.511719 67.074219 78.628906 64.378906 L 76.347656 57.410156 L 82.320312 53.09375 C 84.613281 51.433594 83.441406 47.804688 80.605469 47.804688 L 73.242188 47.804688 L 70.988281 40.839844 C 70.117188 38.144531 66.300781 38.144531 65.429688 40.839844 L 63.179688 47.804688 L 55.8125 47.804688 C 52.980469 47.804688 51.804688 51.433594 54.101562 53.09375 Z M 54.101562 53.09375 "/>
        `
  );
}

// src/util/RandomNumberProvider.ts
var RandomNumberProvider = class {
  getInteger(lowerBound, upperBound) {
    const range = upperBound - lowerBound + 1;
    return Math.floor(Math.random() * range) + lowerBound;
  }
};
var StaticRandomNumberProvider = class {
  getInteger(lowerBound, upperBound) {
    if (lowerBound != this.expectedLowerBound || upperBound != this.expectedUpperBound)
      throw `lowerBound: A${lowerBound}/E${this.expectedLowerBound}, upperBound: A${upperBound}/E${this.expectedUpperBound}`;
    return this.next;
  }
};
var WeightedRandomNumber = class _WeightedRandomNumber {
  constructor(provider) {
    this.provider = provider;
  }
  static create() {
    return new _WeightedRandomNumber(globalRandomNumberProvider);
  }
  //
  // weights is a dictionary:
  //      first number - a key that can be returned
  //      second number - the "bucket size" - this is a weight that influences the probability of the
  //          first number being returned
  //
  // returns:
  //      first number - one of the keys from the weights parameter
  //      second number - an "index" value; 0 <= index < bucketSize
  getRandomValues(weights) {
    const total = _WeightedRandomNumber.calcTotalOfCount(weights);
    if (Object.values(weights).some((i) => !Number.isInteger(i) || i < 0))
      throw "All weights must be positive integers";
    const v = this.provider.getInteger(0, total - 1);
    let x = 0;
    for (const kvp in weights) {
      const [value, count] = [Number(kvp), weights[kvp]];
      if (v < x + count) {
        const index = v - x;
        return [value, index];
      }
      x += count;
    }
    throw "";
  }
  static calcTotalOfCount(weights) {
    const total = getTypedObjectEntries(weights).map(([_, count]) => count).reduce((a, b) => a + b, 0) || 0;
    return total;
  }
};
var globalRandomNumberProvider = new RandomNumberProvider();
var staticRandomNumberProvider = new StaticRandomNumberProvider();

// src/DeckTreeIterator.ts
var CardOrder = /* @__PURE__ */ ((CardOrder2) => {
  CardOrder2[CardOrder2["NewFirstSequential"] = 0] = "NewFirstSequential";
  CardOrder2[CardOrder2["NewFirstRandom"] = 1] = "NewFirstRandom";
  CardOrder2[CardOrder2["DueFirstSequential"] = 2] = "DueFirstSequential";
  CardOrder2[CardOrder2["DueFirstRandom"] = 3] = "DueFirstRandom";
  CardOrder2[CardOrder2["EveryCardRandomDeckAndCard"] = 4] = "EveryCardRandomDeckAndCard";
  return CardOrder2;
})(CardOrder || {});
var DeckOrder = /* @__PURE__ */ ((DeckOrder2) => {
  DeckOrder2[DeckOrder2["PrevDeckComplete_Sequential"] = 0] = "PrevDeckComplete_Sequential";
  DeckOrder2[DeckOrder2["PrevDeckComplete_Random"] = 1] = "PrevDeckComplete_Random";
  return DeckOrder2;
})(DeckOrder || {});
var SingleDeckIterator = class _SingleDeckIterator {
  get hasCurrentCard() {
    return this.cardIdx != null;
  }
  get currentCard() {
    let result = null;
    if (this.cardIdx != null)
      result = this.deck.getCard(this.cardIdx, this.cardListType);
    return result;
  }
  constructor(iteratorOrder) {
    this.iteratorOrder = iteratorOrder;
    this.preferredCardListType = _SingleDeckIterator.getCardListTypeForIterator(
      this.iteratorOrder
    );
    this.weightedRandomNumber = WeightedRandomNumber.create();
  }
  setDeck(deck) {
    this.deck = deck;
    this.setCardListType(null);
  }
  //
  // 0 <= cardIndex < newFlashcards.length + dueFlashcards.length
  //
  setNewOrDueCardIdx(cardIndex) {
    let cardListType = 0 /* NewCard */;
    let index = cardIndex;
    if (cardIndex >= this.deck.newFlashcards.length) {
      cardListType = 1 /* DueCard */;
      index = cardIndex - this.deck.newFlashcards.length;
    }
    this.setCardListType(cardListType, index);
  }
  setCardListType(cardListType, cardIdx = null) {
    this.cardListType = cardListType;
    this.cardIdx = cardIdx;
  }
  nextCard() {
    if (this.iteratorOrder.cardOrder == 4 /* EveryCardRandomDeckAndCard */) {
      this.nextRandomCard();
    } else {
      if (this.cardListType == null) {
        this.setCardListType(this.preferredCardListType);
      }
      if (!this.nextCardWithinCurrentList()) {
        if (this.cardListType == this.preferredCardListType) {
          this.setCardListType(Deck2.otherListType(this.cardListType));
          if (!this.nextCardWithinCurrentList()) {
            this.setCardListType(null);
          }
        } else {
          this.cardIdx = null;
        }
      }
    }
    return this.cardIdx != null;
  }
  nextRandomCard() {
    const newCount = this.deck.newFlashcards.length;
    const dueCount = this.deck.dueFlashcards.length;
    if (newCount + dueCount > 0) {
      const weights = {};
      if (newCount > 0)
        weights[0 /* NewCard */] = newCount;
      if (dueCount > 0)
        weights[1 /* DueCard */] = dueCount;
      const [cardListType, index] = this.weightedRandomNumber.getRandomValues(weights);
      this.setCardListType(cardListType, index);
    } else {
      this.setCardListType(null);
    }
  }
  nextCardWithinCurrentList() {
    const cardList = this.deck.getCardListForCardType(this.cardListType);
    const result = cardList.length > 0;
    if (result) {
      switch (this.iteratorOrder.cardOrder) {
        case 2 /* DueFirstSequential */:
        case 0 /* NewFirstSequential */:
          this.cardIdx = 0;
          break;
        case 3 /* DueFirstRandom */:
        case 1 /* NewFirstRandom */:
          this.cardIdx = globalRandomNumberProvider.getInteger(0, cardList.length - 1);
          break;
      }
    }
    return result;
  }
  moveCurrentCardToEndOfList() {
    this.ensureCurrentCard();
    const cardList = this.deck.getCardListForCardType(this.cardListType);
    if (cardList.length <= 1)
      return;
    const card = this.currentCard;
    this.deck.deleteCardAtIndex(this.cardIdx, this.cardListType);
    this.deck.appendCardToRootDeck(card);
    this.setNoCurrentCard();
  }
  setNoCurrentCard() {
    this.cardIdx = null;
  }
  ensureCurrentCard() {
    if (this.cardIdx == null || this.cardListType == null)
      throw "no current card";
  }
  static getCardListTypeForIterator(iteratorOrder) {
    let result = null;
    switch (iteratorOrder.cardOrder) {
      case 3 /* DueFirstRandom */:
      case 2 /* DueFirstSequential */:
        result = 1 /* DueCard */;
        break;
      case 1 /* NewFirstRandom */:
      case 0 /* NewFirstSequential */:
        result = 0 /* NewCard */;
        break;
    }
    return result;
  }
};
var DeckTreeIterator = class _DeckTreeIterator {
  get hasCurrentCard() {
    return this.deckIdx != null && this.singleDeckIterator.hasCurrentCard;
  }
  get currentTopicPath() {
    var _a;
    return (_a = this.currentDeck) == null ? void 0 : _a.getTopicPath();
  }
  get currentDeck() {
    if (this.deckIdx == null)
      return null;
    return this.deckArray[this.deckIdx];
  }
  get currentCard() {
    let result = null;
    if (this.deckIdx != null && this.singleDeckIterator.hasCurrentCard)
      result = this.singleDeckIterator.currentCard;
    return result;
  }
  get currentQuestion() {
    var _a;
    return (_a = this.currentCard) == null ? void 0 : _a.question;
  }
  constructor(iteratorOrder, baseDeckTree) {
    this.singleDeckIterator = new SingleDeckIterator(iteratorOrder);
    this.iteratorOrder = iteratorOrder;
    this.weightedRandomNumber = WeightedRandomNumber.create();
    this.setBaseDeck(baseDeckTree);
  }
  setBaseDeck(baseDeck) {
    this.baseDeckTree = baseDeck;
    this.singleDeckIterator.setNoCurrentCard();
  }
  setIteratorTopicPath(topicPath) {
    const iteratorDeck = this.baseDeckTree.getDeck(topicPath);
    this.deckArray = _DeckTreeIterator.filterForDecksWithCards(iteratorDeck.toDeckArray());
    this.setDeckIdx(null);
  }
  static filterForDecksWithCards(sourceArray) {
    const result = [];
    for (let idx = 0; idx < sourceArray.length; idx++) {
      const deck = sourceArray[idx];
      const hasAnyCards = deck.getCardCount(2 /* All */, false) > 0;
      if (hasAnyCards) {
        result.push(deck);
      }
    }
    return result;
  }
  setDeckIdx(deckIdx) {
    this.deckIdx = deckIdx;
    if (deckIdx != null)
      this.singleDeckIterator.setDeck(this.deckArray[deckIdx]);
  }
  nextCard() {
    let result = false;
    if (this.hasCurrentCard) {
      this.baseDeckTree.deleteCardFromAllDecks(this.currentCard, true);
    }
    if (this.iteratorOrder.cardOrder == 4 /* EveryCardRandomDeckAndCard */) {
      result = this.nextCard_EveryCardRandomDeck();
    } else {
      if (this.deckIdx == null) {
        this.chooseNextDeck(true);
      }
      while (this.deckIdx < this.deckArray.length) {
        if (this.singleDeckIterator.nextCard()) {
          result = true;
          break;
        }
        this.chooseNextDeck(false);
      }
    }
    if (!result)
      this.deckIdx = null;
    return result;
  }
  chooseNextDeck(firstTime) {
    switch (this.iteratorOrder.deckOrder) {
      case 0 /* PrevDeckComplete_Sequential */:
        this.deckIdx = firstTime ? 0 : this.deckIdx + 1;
        break;
      case 1 /* PrevDeckComplete_Random */: {
        const weights = {};
        let hasDeck = false;
        for (let i = 0; i < this.deckArray.length; i++) {
          if (this.deckArray[i].getCardCount(2 /* All */, false)) {
            weights[i] = 1;
            hasDeck = true;
          }
        }
        if (hasDeck) {
          const [deckIdx, _] = this.weightedRandomNumber.getRandomValues(weights);
          this.deckIdx = deckIdx;
        } else {
          this.deckIdx = this.deckArray.length;
        }
        break;
      }
    }
    if (this.deckIdx < this.deckArray.length) {
      this.singleDeckIterator.setDeck(this.deckArray[this.deckIdx]);
    }
  }
  nextCard_EveryCardRandomDeck() {
    const weights = {};
    for (let i = 0; i < this.deckArray.length; i++) {
      const cardCount = this.deckArray[i].getCardCount(2 /* All */, false);
      if (cardCount) {
        weights[i] = cardCount;
      }
    }
    if (Object.keys(weights).length == 0)
      return false;
    const [deckIdx, cardIdx] = this.weightedRandomNumber.getRandomValues(weights);
    this.setDeckIdx(deckIdx);
    this.singleDeckIterator.setNewOrDueCardIdx(cardIdx);
    return true;
  }
  deleteCurrentQuestionFromAllDecks() {
    this.singleDeckIterator.ensureCurrentCard();
    this.baseDeckTree.deleteQuestionFromAllDecks(this.currentQuestion, false);
    this.singleDeckIterator.setNoCurrentCard();
    return this.nextCard();
  }
  deleteCurrentCardFromAllDecks() {
    this.singleDeckIterator.ensureCurrentCard();
    this.baseDeckTree.deleteCardFromAllDecks(this.currentCard, true);
    this.singleDeckIterator.setNoCurrentCard();
    return this.nextCard();
  }
  moveCurrentCardToEndOfList() {
    this.singleDeckIterator.moveCurrentCardToEndOfList();
  }
  removeCurrentDeckIfEmpty() {
    if (this.currentDeck.getCardCount(2 /* All */, false) == 0) {
      this.deckArray.splice(this.deckIdx, 1);
      if (this.deckIdx < this.deckArray.length)
        this.setDeckIdx(this.deckIdx);
    }
  }
};

// src/Note.ts
var Note = class {
  get hasChanged() {
    return this.questionList.some((question) => question.hasChanged);
  }
  get filePath() {
    return this.file.path;
  }
  constructor(file, questionList) {
    this.file = file;
    this.questionList = questionList;
    questionList.forEach((question) => question.note = this);
  }
  appendCardsToDeck(deck) {
    for (const question of this.questionList) {
      for (const card of question.cards) {
        deck.appendCard(question.topicPathList, card);
      }
    }
  }
  debugLogToConsole(desc = "") {
    var _a;
    let str = `Note: ${desc}: ${this.questionList.length} questions\r
`;
    for (let i = 0; i < this.questionList.length; i++) {
      const q = this.questionList[i];
      str += `[${i}]: ${q.questionType}: ${q.lineNo}: ${(_a = q.topicPathList) == null ? void 0 : _a.format("|")}: ${q.questionText.original}\r
`;
    }
    console.debug(str);
  }
  async writeNoteFile(settings) {
    let fileText = await this.file.read();
    for (const question of this.questionList) {
      if (question.hasChanged) {
        fileText = question.updateQuestionText(fileText, settings);
      }
    }
    await this.file.write(fileText);
    this.questionList.forEach((question) => question.hasChanged = false);
  }
};

// src/Card.ts
var Card = class {
  // scheduling
  get hasSchedule() {
    return this.scheduleInfo != null;
  }
  constructor(init) {
    Object.assign(this, init);
  }
  get cardListType() {
    return this.isNew ? 0 /* NewCard */ : 1 /* DueCard */;
  }
  get isNew() {
    return !this.hasSchedule || this.scheduleInfo.isDummyScheduleForNewCard();
  }
  get isDue() {
    return this.hasSchedule && this.scheduleInfo.isDue();
  }
  formatSchedule() {
    let result = "";
    if (this.hasSchedule)
      result = this.scheduleInfo.formatSchedule();
    else
      result = "New";
    return result;
  }
};

// src/parser.ts
var ParsedQuestionInfo = class {
  constructor(cardType, text, firstLineNum, lastLineNum) {
    this.cardType = cardType;
    this.text = text;
    this.firstLineNum = firstLineNum;
    this.lastLineNum = lastLineNum;
  }
  isQuestionLineNum(lineNum) {
    return lineNum >= this.firstLineNum && lineNum <= this.lastLineNum;
  }
};
function parseEx(text, singlelineCardSeparator, singlelineReversedCardSeparator, multilineCardSeparator, multilineReversedCardSeparator, convertHighlightsToClozes, convertBoldTextToClozes, convertCurlyBracketsToClozes) {
  let cardText = "";
  const cards = [];
  let cardType = null;
  let firstLineNo = 0;
  let lastLineNo = 0;
  const lines = text.replaceAll("\r\n", "\n").split("\n");
  for (let i = 0; i < lines.length; i++) {
    const currentLine = lines[i];
    if (currentLine.length === 0) {
      if (cardType) {
        lastLineNo = i - 1;
        cards.push(new ParsedQuestionInfo(cardType, cardText, firstLineNo, lastLineNo));
        cardType = null;
      }
      cardText = "";
      continue;
    } else if (currentLine.startsWith("<!--") && !currentLine.startsWith("<!--SR:")) {
      while (i + 1 < lines.length && !currentLine.includes("-->"))
        i++;
      i++;
      continue;
    }
    if (cardText.length > 0) {
      cardText += "\n";
    } else if (cardText.length === 0) {
      firstLineNo = i;
    }
    cardText += currentLine.trimEnd();
    if (currentLine.includes(singlelineReversedCardSeparator) || currentLine.includes(singlelineCardSeparator)) {
      cardType = lines[i].includes(singlelineReversedCardSeparator) ? 1 /* SingleLineReversed */ : 0 /* SingleLineBasic */;
      cardText = lines[i];
      firstLineNo = i;
      if (i + 1 < lines.length && lines[i + 1].startsWith("<!--SR:")) {
        cardText += "\n" + lines[i + 1];
        i++;
      }
      lastLineNo = i;
      cards.push(new ParsedQuestionInfo(cardType, cardText, firstLineNo, lastLineNo));
      cardType = null;
      cardText = "";
    } else if (cardType === null && (convertHighlightsToClozes && /==.*?==/gm.test(currentLine) || convertBoldTextToClozes && /\*\*.*?\*\*/gm.test(currentLine) || convertCurlyBracketsToClozes && /{{.*?}}/gm.test(currentLine))) {
      cardType = 4 /* Cloze */;
    } else if (currentLine.trim() === multilineCardSeparator) {
      cardType = 2 /* MultiLineBasic */;
    } else if (currentLine.trim() === multilineReversedCardSeparator) {
      cardType = 3 /* MultiLineReversed */;
    } else if (currentLine.startsWith("```") || currentLine.startsWith("~~~")) {
      const codeBlockClose = currentLine.match(/`+|~+/)[0];
      while (i + 1 < lines.length && !lines[i + 1].startsWith(codeBlockClose)) {
        i++;
        cardText += "\n" + lines[i];
      }
      cardText += "\n" + codeBlockClose;
      i++;
    }
  }
  if (cardType && cardText) {
    lastLineNo = lines.length - 1;
    cards.push(new ParsedQuestionInfo(cardType, cardText, firstLineNo, lastLineNo));
  }
  return cards;
}

// src/QuestionType.ts
var CardFrontBack = class {
  // The caller is responsible for any required trimming of leading/trailing spaces
  constructor(front, back) {
    this.front = front;
    this.back = back;
  }
};
var CardFrontBackUtil = class {
  static expand(questionType, questionText, settings) {
    const handler = QuestionTypeFactory.create(questionType);
    return handler.expand(questionText, settings);
  }
};
var QuestionType_SingleLineBasic = class {
  expand(questionText, settings) {
    const idx = questionText.indexOf(settings.singleLineCardSeparator);
    const item = new CardFrontBack(
      questionText.substring(0, idx),
      questionText.substring(idx + settings.singleLineCardSeparator.length)
    );
    const result = [item];
    return result;
  }
};
var QuestionType_SingleLineReversed = class {
  expand(questionText, settings) {
    const idx = questionText.indexOf(settings.singleLineReversedCardSeparator);
    const side1 = questionText.substring(0, idx), side2 = questionText.substring(
      idx + settings.singleLineReversedCardSeparator.length
    );
    const result = [
      new CardFrontBack(side1, side2),
      new CardFrontBack(side2, side1)
    ];
    return result;
  }
};
var QuestionType_MultiLineBasic = class {
  expand(questionText, settings) {
    const questionLines = questionText.split("\n");
    const lineIdx = findLineIndexOfSearchStringIgnoringWs(
      questionLines,
      settings.multilineCardSeparator
    );
    const side1 = questionLines.slice(0, lineIdx).join("\n");
    const side2 = questionLines.slice(lineIdx + 1).join("\n");
    const result = [new CardFrontBack(side1, side2)];
    return result;
  }
};
var QuestionType_MultiLineReversed = class {
  expand(questionText, settings) {
    const questionLines = questionText.split("\n");
    const lineIdx = findLineIndexOfSearchStringIgnoringWs(
      questionLines,
      settings.multilineReversedCardSeparator
    );
    const side1 = questionLines.slice(0, lineIdx).join("\n");
    const side2 = questionLines.slice(lineIdx + 1).join("\n");
    const result = [
      new CardFrontBack(side1, side2),
      new CardFrontBack(side2, side1)
    ];
    return result;
  }
};
var QuestionType_Cloze = class {
  expand(questionText, settings) {
    const siblings = [];
    if (settings.convertHighlightsToClozes) {
      siblings.push(...questionText.matchAll(/==(.*?)==/gm));
    }
    if (settings.convertBoldTextToClozes) {
      siblings.push(...questionText.matchAll(/\*\*(.*?)\*\*/gm));
    }
    if (settings.convertCurlyBracketsToClozes) {
      siblings.push(...questionText.matchAll(/{{(.*?)}}/gm));
    }
    siblings.sort((a, b) => {
      if (a.index < b.index) {
        return -1;
      }
      if (a.index > b.index) {
        return 1;
      }
      return 0;
    });
    let front, back;
    const result = [];
    for (const m of siblings) {
      const deletionStart = m.index, deletionEnd = deletionStart + m[0].length;
      front = questionText.substring(0, deletionStart) + QuestionType_ClozeUtil.renderClozeFront() + questionText.substring(deletionEnd);
      front = QuestionType_ClozeUtil.removeClozeTokens(front, settings);
      back = questionText.substring(0, deletionStart) + QuestionType_ClozeUtil.renderClozeBack(
        questionText.substring(deletionStart, deletionEnd)
      ) + questionText.substring(deletionEnd);
      back = QuestionType_ClozeUtil.removeClozeTokens(back, settings);
      result.push(new CardFrontBack(front, back));
    }
    return result;
  }
};
var QuestionType_ClozeUtil = class {
  static renderClozeFront() {
    return "<span style='color:#2196f3'>[...]</span>";
  }
  static renderClozeBack(str) {
    return "<span style='color:#2196f3'>" + str + "</span>";
  }
  static removeClozeTokens(text, settings) {
    let result = text;
    if (settings.convertHighlightsToClozes)
      result = result.replace(/==/gm, "");
    if (settings.convertBoldTextToClozes)
      result = result.replace(/\*\*/gm, "");
    if (settings.convertCurlyBracketsToClozes) {
      result = result.replace(/{{/gm, "").replace(/}}/gm, "");
    }
    return result;
  }
};
var QuestionTypeFactory = class {
  static create(questionType) {
    let handler;
    switch (questionType) {
      case 0 /* SingleLineBasic */:
        handler = new QuestionType_SingleLineBasic();
        break;
      case 1 /* SingleLineReversed */:
        handler = new QuestionType_SingleLineReversed();
        break;
      case 2 /* MultiLineBasic */:
        handler = new QuestionType_MultiLineBasic();
        break;
      case 3 /* MultiLineReversed */:
        handler = new QuestionType_MultiLineReversed();
        break;
      case 4 /* Cloze */:
        handler = new QuestionType_Cloze();
        break;
    }
    return handler;
  }
};

// src/NoteQuestionParser.ts
var NoteQuestionParser = class {
  constructor(settings) {
    this.settings = settings;
  }
  async createQuestionList(noteFile, folderTopicPath, onlyKeepQuestionsWithTopicPath) {
    this.noteFile = noteFile;
    const noteText = await noteFile.read();
    const tagCacheList = noteFile.getAllTagsFromText();
    const hasTopicPaths = tagCacheList.some((item) => SettingsUtil.isFlashcardTag(this.settings, item.tag)) || folderTopicPath.hasPath;
    if (hasTopicPaths) {
      this.questionList = this.doCreateQuestionList(
        noteText,
        folderTopicPath,
        this.tagCacheList
      );
      [this.frontmatterTopicPathList, this.contentTopicPathInfo] = this.analyseTagCacheList(tagCacheList);
      for (const question of this.questionList) {
        question.topicPathList = this.determineQuestionTopicPathList(question);
      }
      if (onlyKeepQuestionsWithTopicPath) {
        this.questionList = this.questionList.filter((q) => q.topicPathList);
      }
    } else {
      this.questionList = [];
    }
    return this.questionList;
  }
  doCreateQuestionList(noteText, folderTopicPath, tagCacheList) {
    this.noteText = noteText;
    this.noteLines = splitTextIntoLineArray(noteText);
    this.folderTopicPath = folderTopicPath;
    this.tagCacheList = tagCacheList;
    const result = [];
    const parsedQuestionInfoList = this.parseQuestions();
    for (const parsedQuestionInfo of parsedQuestionInfoList) {
      const question = this.createQuestionObject(parsedQuestionInfo);
      const cardFrontBackList = CardFrontBackUtil.expand(
        question.questionType,
        question.questionText.actualQuestion,
        this.settings
      );
      let cardScheduleInfoList = NoteCardScheduleParser.createCardScheduleInfoList(question.questionText.original);
      const correctLength = cardFrontBackList.length;
      if (cardScheduleInfoList.length > correctLength) {
        question.hasChanged = true;
        cardScheduleInfoList = cardScheduleInfoList.slice(0, correctLength);
      }
      const cardList = this.createCardList(cardFrontBackList, cardScheduleInfoList);
      question.setCardList(cardList);
      result.push(question);
    }
    return result;
  }
  parseQuestions() {
    const settings = this.settings;
    const result = parseEx(
      this.noteText,
      settings.singleLineCardSeparator,
      settings.singleLineReversedCardSeparator,
      settings.multilineCardSeparator,
      settings.multilineReversedCardSeparator,
      settings.convertHighlightsToClozes,
      settings.convertBoldTextToClozes,
      settings.convertCurlyBracketsToClozes
    );
    return result;
  }
  createQuestionObject(parsedQuestionInfo) {
    const questionContext = this.noteFile.getQuestionContext(
      parsedQuestionInfo.firstLineNum
    );
    const result = Question.Create(
      this.settings,
      parsedQuestionInfo,
      null,
      // We haven't worked out the TopicPathList yet
      questionContext
    );
    return result;
  }
  createCardList(cardFrontBackList, cardScheduleInfoList) {
    const siblings = [];
    for (let i = 0; i < cardFrontBackList.length; i++) {
      const { front, back } = cardFrontBackList[i];
      const hasScheduleInfo = i < cardScheduleInfoList.length;
      const schedule2 = cardScheduleInfoList[i];
      const cardObj = new Card({
        front,
        back,
        cardIdx: i
      });
      cardObj.scheduleInfo = hasScheduleInfo && !schedule2.isDummyScheduleForNewCard() ? schedule2 : null;
      siblings.push(cardObj);
    }
    return siblings;
  }
  //
  // Given the complete list of tags within a note:
  // 1.   Only keep tags that are specified in the user settings as flashcardTags
  // 2.   Filter out tags that are question specific
  //      (these will be parsed separately by class QuestionText)
  // 3.   Combine all tags present logically grouped together into a single entry
  //      - All tags present on the same line grouped together
  //      - All tags within frontmatter grouped together (note that multiple tags
  //      within frontmatter appear on separate lines)
  //
  analyseTagCacheList(tagCacheList) {
    let frontmatterTopicPathList = null;
    const contentTopicPathList = [];
    const filteredTagCacheList = tagCacheList.filter(
      (item) => SettingsUtil.isFlashcardTag(this.settings, item.tag) && this.questionList.every(
        (q) => !q.parsedQuestionInfo.isQuestionLineNum(item.position.start.line)
      )
    );
    let frontmatterLineCount = null;
    if (filteredTagCacheList.length > 0) {
      filteredTagCacheList.sort((a, b) => a.position.start.line - b.position.start.line);
      const [frontmatter, _] = extractFrontmatter(this.noteText);
      if (frontmatter) {
        frontmatterLineCount = splitTextIntoLineArray(frontmatter).length;
        const frontmatterTagCacheList = filteredTagCacheList.filter(
          (item) => item.position.start.line < frontmatterLineCount
        );
        if (frontmatterTagCacheList.length > 0)
          frontmatterTopicPathList = this.createTopicPathList(frontmatterTagCacheList, 0);
      }
    }
    const contentStartLineNum = frontmatterLineCount > 0 ? frontmatterLineCount + 1 : 0;
    const contentTagCacheList = filteredTagCacheList.filter(
      (item) => item.position.start.line >= contentStartLineNum
    );
    let list = [];
    for (const t2 of contentTagCacheList) {
      if (list.length != 0) {
        const startLineNum = list[0].position.start.line;
        if (startLineNum != t2.position.start.line) {
          contentTopicPathList.push(this.createTopicPathList(list, startLineNum));
          list = [];
        }
      }
      list.push(t2);
    }
    if (list.length > 0) {
      const startLineNum = list[0].position.start.line;
      contentTopicPathList.push(this.createTopicPathList(list, startLineNum));
    }
    return [frontmatterTopicPathList, contentTopicPathList];
  }
  createTopicPathList(tagCacheList, lineNum) {
    const list = [];
    for (const tagCache of tagCacheList) {
      list.push(TopicPath.getTopicPathFromTag(tagCache.tag));
    }
    return new TopicPathList(list, lineNum);
  }
  //
  // A question can be associated with multiple topics (hence returning TopicPathList and not just TopicPath).
  //
  // If the question has an associated question specific TopicPath, then that is returned.
  //
  // Else the first TopicPathList prior to the question (in the order present in the file) is returned.
  // That could be either the tags within the note's frontmatter, or tags on lines within the note's content.
  //
  determineQuestionTopicPathList(question) {
    let result;
    if (this.settings.convertFoldersToDecks) {
      result = new TopicPathList([this.folderTopicPath]);
    } else {
      const questionText = question.questionText;
      if (questionText.topicPathWithWs)
        result = new TopicPathList(
          [questionText.topicPathWithWs.topicPath],
          question.parsedQuestionInfo.firstLineNum
        );
      else {
        result = this.frontmatterTopicPathList;
        for (let i = this.contentTopicPathInfo.length - 1; i >= 0; i--) {
          const info = this.contentTopicPathInfo[i];
          if (info.lineNum < question.parsedQuestionInfo.firstLineNum) {
            result = info;
            break;
          }
        }
        if (!result && this.contentTopicPathInfo.length > 0) {
          result = this.contentTopicPathInfo[0];
        }
      }
    }
    return result;
  }
};

// src/NoteFileLoader.ts
var NoteFileLoader = class {
  constructor(settings) {
    this.settings = settings;
  }
  async load(noteFile, folderTopicPath) {
    this.noteFile = noteFile;
    const questionParser = new NoteQuestionParser(this.settings);
    const onlyKeepQuestionsWithTopicPath = true;
    const questionList = await questionParser.createQuestionList(
      noteFile,
      folderTopicPath,
      onlyKeepQuestionsWithTopicPath
    );
    const result = new Note(noteFile, questionList);
    return result;
  }
};

// src/SRFile.ts
var SrTFile = class {
  constructor(vault, metadataCache, file) {
    this.vault = vault;
    this.metadataCache = metadataCache;
    this.file = file;
  }
  get path() {
    return this.file.path;
  }
  get basename() {
    return this.file.basename;
  }
  getAllTagsFromText() {
    var _a;
    const result = [];
    const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
    if (((_a = fileCachedData.tags) == null ? void 0 : _a.length) > 0) {
      result.push(...fileCachedData.tags);
    }
    result.push(...this.getFrontmatterTags(fileCachedData.frontmatter));
    return result;
  }
  getFrontmatterTags(frontmatter) {
    const result = [];
    const frontmatterTags = frontmatter != null ? frontmatter["tags"] + "" : null;
    if (frontmatterTags) {
      const line = 1;
      const tagStrList = parseObsidianFrontmatterTag(frontmatterTags);
      for (const str of tagStrList) {
        const tag = {
          tag: str,
          position: {
            start: { line, col: null, offset: null },
            end: { line, col: null, offset: null }
          }
        };
        result.push(tag);
      }
    }
    return result;
  }
  getQuestionContext(cardLine) {
    const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
    const headings = fileCachedData.headings || [];
    const stack = [];
    for (const heading of headings) {
      if (heading.position.start.line > cardLine) {
        break;
      }
      while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) {
        stack.pop();
      }
      stack.push(heading);
    }
    const result = [];
    for (const headingObj of stack) {
      headingObj.heading = headingObj.heading.replace(/\[\^\d+\]/gm, "").trim();
      result.push(headingObj.heading);
    }
    return result;
  }
  async read() {
    return await this.vault.read(this.file);
  }
  async write(content) {
    await this.vault.modify(this.file, content);
  }
};

// src/NoteEaseCalculator.ts
var NoteEaseCalculator = class {
  static Calculate(note, settings) {
    let totalEase = 0;
    let scheduledCount = 0;
    note.questionList.forEach((question) => {
      question.cards.filter((card) => card.hasSchedule).forEach((card) => {
        totalEase += card.scheduleInfo.ease;
        scheduledCount++;
      });
    });
    let result = 0;
    if (scheduledCount > 0) {
      const flashcardsInNoteAvgEase = totalEase / scheduledCount;
      const flashcardContribution = Math.min(
        1,
        Math.log(scheduledCount + 0.5) / Math.log(64)
      );
      result = flashcardsInNoteAvgEase * flashcardContribution + settings.baseEase * (1 - flashcardContribution);
    }
    return result;
  }
};

// src/util/NumberCountDict.ts
var ValueCountDict = class {
  constructor() {
    this.dict = {};
  }
  // Record<value, count>
  clearCountIfMissing(value) {
    if (!this.hasValue(value))
      this.dict[value] = 0;
  }
  hasValue(value) {
    return Object.prototype.hasOwnProperty.call(this.dict, value);
  }
  incrementCount(value) {
    this.clearCountIfMissing(value);
    this.dict[value]++;
  }
  getMaxValue() {
    return Math.max(...getKeysPreserveType(this.dict)) || 0;
  }
  getTotalOfValueMultiplyCount() {
    const v = getTypedObjectEntries(this.dict).map(([value, count]) => value * count).reduce((a, b) => a + b, 0) || 0;
    return v;
  }
};

// src/stats.ts
var Stats = class {
  constructor() {
    this.eases = new ValueCountDict();
    this.intervals = new ValueCountDict();
    this.delayedDays = new ValueCountDict();
    this.newCount = 0;
    this.youngCount = 0;
    this.matureCount = 0;
  }
  get totalCount() {
    return this.youngCount + this.matureCount;
  }
  incrementNew() {
    this.newCount++;
  }
  update(delayedDays, interval, ease) {
    this.intervals.incrementCount(interval);
    this.eases.incrementCount(ease);
    this.delayedDays.incrementCount(delayedDays);
    if (interval >= 32) {
      this.matureCount++;
    } else {
      this.youngCount++;
    }
  }
  getMaxInterval() {
    return this.intervals.getMaxValue();
  }
  getAverageInterval() {
    return this.intervals.getTotalOfValueMultiplyCount() / this.totalCount;
  }
  getAverageEases() {
    return this.eases.getTotalOfValueMultiplyCount() / this.totalCount;
  }
};

// src/DeckTreeStatsCalculator.ts
var DeckTreeStatsCalculator = class {
  calculate(deckTree) {
    const iteratorOrder = {
      deckOrder: 0 /* PrevDeckComplete_Sequential */,
      cardOrder: 2 /* DueFirstSequential */
    };
    const iterator = new DeckTreeIterator(iteratorOrder, deckTree.clone());
    const result = new Stats();
    iterator.setIteratorTopicPath(TopicPath.emptyPath);
    while (iterator.nextCard()) {
      const card = iterator.currentCard;
      if (card.hasSchedule) {
        const schedule2 = card.scheduleInfo;
        result.update(schedule2.delayBeforeReviewDaysInt, schedule2.interval, schedule2.ease);
      } else {
        result.incrementNew();
      }
    }
    return result;
  }
};

// src/NoteEaseList.ts
var NoteEaseList = class {
  constructor(settings) {
    this.dict = {};
    this.settings = settings;
  }
  get baseEase() {
    return this.settings.baseEase;
  }
  hasEaseForPath(path) {
    return Object.prototype.hasOwnProperty.call(this.dict, path);
  }
  getEaseByPath(path) {
    let ease = null;
    if (this.hasEaseForPath(path)) {
      ease = Math.round(this.dict[path]);
    }
    return ease;
  }
  setEaseForPath(path, ease) {
    this.dict[path] = ease;
  }
};

// src/QuestionPostponementList.ts
var QuestionPostponementList = class {
  constructor(plugin, settings, list) {
    this.plugin = plugin;
    this.settings = settings;
    this.list = list;
  }
  clear() {
    this.list.splice(0);
  }
  add(question) {
    if (!this.includes(question))
      this.list.push(question.questionText.textHash);
  }
  includes(question) {
    return this.list.includes(question.questionText.textHash);
  }
  async write() {
    if (this.plugin == null)
      return;
    await this.plugin.savePluginData();
  }
};

// src/main.ts
var DEFAULT_DATA = {
  settings: DEFAULT_SETTINGS,
  buryDate: "",
  buryList: [],
  historyDeck: null
};
var SRPlugin = class _SRPlugin extends import_obsidian11.Plugin {
  constructor() {
    super(...arguments);
    this.syncLock = false;
    this.reviewDecks = {};
    this.incomingLinks = {};
    this.pageranks = {};
    this.dueNotesCount = 0;
    this.dueDatesNotes = {};
    // Record<# of days in future, due count>
    this.deckTree = new Deck2("root", null);
  }
  async onload() {
    await this.loadPluginData();
    this.easeByPath = new NoteEaseList(this.data.settings);
    this.questionPostponementList = new QuestionPostponementList(
      this,
      this.data.settings,
      this.data.buryList
    );
    appIcon();
    this.statusBar = this.addStatusBarItem();
    this.statusBar.classList.add("mod-clickable");
    this.statusBar.setAttribute("aria-label", t("OPEN_NOTE_FOR_REVIEW"));
    this.statusBar.setAttribute("aria-label-position", "top");
    this.statusBar.addEventListener("click", async () => {
      if (!this.syncLock) {
        await this.sync();
        this.reviewNextNoteModal();
      }
    });
    this.addRibbonIcon("SpacedRepIcon", t("REVIEW_CARDS"), async () => {
      if (!this.syncLock) {
        await this.sync();
        this.openFlashcardModal(
          this.deckTree,
          this.remainingDeckTree,
          1 /* Review */
        );
      }
    });
    if (!this.data.settings.disableFileMenuReviewOptions) {
      this.registerEvent(
        this.app.workspace.on("file-menu", (menu, fileish) => {
          if (fileish instanceof import_obsidian11.TFile && fileish.extension === "md") {
            menu.addItem((item) => {
              item.setTitle(
                t("REVIEW_DIFFICULTY_FILE_MENU", {
                  difficulty: this.data.settings.flashcardEasyText
                })
              ).setIcon("SpacedRepIcon").onClick(() => {
                this.saveReviewResponse(fileish, 0 /* Easy */);
              });
            });
            menu.addItem((item) => {
              item.setTitle(
                t("REVIEW_DIFFICULTY_FILE_MENU", {
                  difficulty: this.data.settings.flashcardGoodText
                })
              ).setIcon("SpacedRepIcon").onClick(() => {
                this.saveReviewResponse(fileish, 1 /* Good */);
              });
            });
            menu.addItem((item) => {
              item.setTitle(
                t("REVIEW_DIFFICULTY_FILE_MENU", {
                  difficulty: this.data.settings.flashcardHardText
                })
              ).setIcon("SpacedRepIcon").onClick(() => {
                this.saveReviewResponse(fileish, 2 /* Hard */);
              });
            });
          }
        })
      );
    }
    this.addCommand({
      id: "srs-note-review-open-note",
      name: t("OPEN_NOTE_FOR_REVIEW"),
      callback: async () => {
        if (!this.syncLock) {
          await this.sync();
          this.reviewNextNoteModal();
        }
      }
    });
    this.addCommand({
      id: "srs-note-review-easy",
      name: t("REVIEW_NOTE_DIFFICULTY_CMD", {
        difficulty: this.data.settings.flashcardEasyText
      }),
      callback: () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.saveReviewResponse(openFile, 0 /* Easy */);
        }
      }
    });
    this.addCommand({
      id: "srs-note-review-good",
      name: t("REVIEW_NOTE_DIFFICULTY_CMD", {
        difficulty: this.data.settings.flashcardGoodText
      }),
      callback: () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.saveReviewResponse(openFile, 1 /* Good */);
        }
      }
    });
    this.addCommand({
      id: "srs-note-review-hard",
      name: t("REVIEW_NOTE_DIFFICULTY_CMD", {
        difficulty: this.data.settings.flashcardHardText
      }),
      callback: () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.saveReviewResponse(openFile, 2 /* Hard */);
        }
      }
    });
    this.addCommand({
      id: "srs-review-flashcards",
      name: t("REVIEW_ALL_CARDS"),
      callback: async () => {
        if (!this.syncLock) {
          await this.sync();
          this.openFlashcardModal(
            this.deckTree,
            this.remainingDeckTree,
            1 /* Review */
          );
        }
      }
    });
    this.addCommand({
      id: "srs-cram-flashcards",
      name: t("CRAM_ALL_CARDS"),
      callback: async () => {
        await this.sync();
        this.openFlashcardModal(this.deckTree, this.deckTree, 0 /* Cram */);
      }
    });
    this.addCommand({
      id: "srs-review-flashcards-in-note",
      name: t("REVIEW_CARDS_IN_NOTE"),
      callback: async () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.openFlashcardModalForSingleNote(openFile, 1 /* Review */);
        }
      }
    });
    this.addCommand({
      id: "srs-cram-flashcards-in-note",
      name: t("CRAM_CARDS_IN_NOTE"),
      callback: async () => {
        const openFile = this.app.workspace.getActiveFile();
        if (openFile && openFile.extension === "md") {
          this.openFlashcardModalForSingleNote(openFile, 0 /* Cram */);
        }
      }
    });
    this.addCommand({
      id: "srs-view-stats",
      name: t("VIEW_STATS"),
      callback: async () => {
        if (!this.syncLock) {
          await this.sync();
          new StatsModal(this.app, this).open();
        }
      }
    });
    this.addCommand({
      id: "srs-open-review-queue-view",
      name: t("OPEN_REVIEW_QUEUE_VIEW"),
      callback: async () => {
        await this.openReviewQueueView();
      }
    });
    this.addSettingTab(new SRSettingTab(this.app, this));
    this.app.workspace.onLayoutReady(async () => {
      await this.initReviewQueueView();
      setTimeout(async () => {
        if (!this.syncLock) {
          await this.sync();
        }
      }, 2e3);
    });
  }
  onunload() {
    this.app.workspace.getLeavesOfType(REVIEW_QUEUE_VIEW_TYPE).forEach((leaf) => leaf.detach());
  }
  async openFlashcardModalForSingleNote(noteFile, reviewMode) {
    const note = await this.loadNote(noteFile);
    const deckTree = new Deck2("root", null);
    note.appendCardsToDeck(deckTree);
    const remainingDeckTree = DeckTreeFilter.filterForRemainingCards(
      this.questionPostponementList,
      deckTree,
      reviewMode
    );
    this.openFlashcardModal(deckTree, remainingDeckTree, reviewMode);
  }
  openFlashcardModal(fullDeckTree, remainingDeckTree, reviewMode) {
    const deckIterator = _SRPlugin.createDeckTreeIterator(this.data.settings, remainingDeckTree);
    const cardScheduleCalculator = new CardScheduleCalculator(
      this.data.settings,
      this.easeByPath
    );
    const reviewSequencer = new FlashcardReviewSequencer(
      reviewMode,
      deckIterator,
      this.data.settings,
      cardScheduleCalculator,
      this.questionPostponementList
    );
    reviewSequencer.setDeckTree(fullDeckTree, remainingDeckTree);
    new FlashcardModal(this.app, this, this.data.settings, reviewSequencer, reviewMode).open();
  }
  static createDeckTreeIterator(settings, baseDeck) {
    let cardOrder = CardOrder[settings.flashcardCardOrder];
    if (cardOrder === void 0)
      cardOrder = 2 /* DueFirstSequential */;
    let deckOrder = DeckOrder[settings.flashcardDeckOrder];
    if (deckOrder === void 0)
      deckOrder = 0 /* PrevDeckComplete_Sequential */;
    const iteratorOrder = {
      deckOrder,
      cardOrder
    };
    return new DeckTreeIterator(iteratorOrder, baseDeck);
  }
  async sync() {
    if (this.syncLock) {
      return;
    }
    this.syncLock = true;
    graph.reset();
    this.easeByPath = new NoteEaseList(this.data.settings);
    this.incomingLinks = {};
    this.pageranks = {};
    this.reviewDecks = {};
    const fullDeckTree = new Deck2("root", null);
    const now = window.moment(Date.now());
    const todayDate = now.format("YYYY-MM-DD");
    if (todayDate !== this.data.buryDate) {
      this.data.buryDate = todayDate;
      this.questionPostponementList.clear();
      await this.savePluginData();
    }
    const notes = this.app.vault.getMarkdownFiles();
    for (const noteFile of notes) {
      if (this.data.settings.noteFoldersToIgnore.some(
        (folder) => noteFile.path.startsWith(folder)
      )) {
        continue;
      }
      if (this.incomingLinks[noteFile.path] === void 0) {
        this.incomingLinks[noteFile.path] = [];
      }
      const links = this.app.metadataCache.resolvedLinks[noteFile.path] || {};
      for (const targetPath in links) {
        if (this.incomingLinks[targetPath] === void 0)
          this.incomingLinks[targetPath] = [];
        if (targetPath.split(".").pop().toLowerCase() === "md") {
          this.incomingLinks[targetPath].push({
            sourcePath: noteFile.path,
            linkCount: links[targetPath]
          });
          graph.link(noteFile.path, targetPath, links[targetPath]);
        }
      }
      const note = await this.loadNote(noteFile);
      if (note.questionList.length > 0) {
        const flashcardsInNoteAvgEase = NoteEaseCalculator.Calculate(
          note,
          this.data.settings
        );
        note.appendCardsToDeck(fullDeckTree);
        if (flashcardsInNoteAvgEase > 0) {
          this.easeByPath.setEaseForPath(note.filePath, flashcardsInNoteAvgEase);
        }
      }
      const fileCachedData = this.app.metadataCache.getFileCache(noteFile) || {};
      const frontmatter = fileCachedData.frontmatter || {};
      const tags = (0, import_obsidian11.getAllTags)(fileCachedData) || [];
      let shouldIgnore = true;
      const matchedNoteTags = [];
      for (const tagToReview of this.data.settings.tagsToReview) {
        if (tags.some((tag) => tag === tagToReview || tag.startsWith(tagToReview + "/"))) {
          if (!Object.prototype.hasOwnProperty.call(this.reviewDecks, tagToReview)) {
            this.reviewDecks[tagToReview] = new ReviewDeck(tagToReview);
          }
          matchedNoteTags.push(tagToReview);
          shouldIgnore = false;
          break;
        }
      }
      if (shouldIgnore) {
        continue;
      }
      if (!(Object.prototype.hasOwnProperty.call(frontmatter, "sr-due") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-interval") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-ease"))) {
        for (const matchedNoteTag of matchedNoteTags) {
          this.reviewDecks[matchedNoteTag].newNotes.push(noteFile);
        }
        continue;
      }
      const dueUnix = window.moment(frontmatter["sr-due"], ["YYYY-MM-DD", "DD-MM-YYYY", "ddd MMM DD YYYY"]).valueOf();
      let ease;
      if (this.easeByPath.hasEaseForPath(noteFile.path)) {
        ease = (this.easeByPath.getEaseByPath(noteFile.path) + frontmatter["sr-ease"]) / 2;
      } else {
        ease = frontmatter["sr-ease"];
      }
      this.easeByPath.setEaseForPath(noteFile.path, ease);
      for (const matchedNoteTag of matchedNoteTags) {
        this.reviewDecks[matchedNoteTag].scheduledNotes.push({ note: noteFile, dueUnix });
      }
    }
    graph.rank(0.85, 1e-6, (node, rank2) => {
      this.pageranks[node] = rank2 * 1e4;
    });
    this.deckTree = DeckTreeFilter.filterForReviewableCards(fullDeckTree);
    this.deckTree.sortSubdecksList();
    this.remainingDeckTree = DeckTreeFilter.filterForRemainingCards(
      this.questionPostponementList,
      this.deckTree,
      1 /* Review */
    );
    const calc = new DeckTreeStatsCalculator();
    this.cardStats = calc.calculate(this.deckTree);
    if (this.data.settings.showDebugMessages) {
      console.log(`SR: ${t("EASES")}`, this.easeByPath.dict);
      console.log(`SR: ${t("DECKS")}`, this.deckTree);
    }
    if (this.data.settings.showDebugMessages) {
      console.log(
        "SR: " + t("SYNC_TIME_TAKEN", {
          t: Date.now() - now.valueOf()
        })
      );
    }
    this.updateAndSortDueNotes();
    this.syncLock = false;
  }
  updateAndSortDueNotes() {
    this.dueNotesCount = 0;
    this.dueDatesNotes = {};
    const now = window.moment(Date.now());
    Object.values(this.reviewDecks).forEach((reviewDeck) => {
      reviewDeck.dueNotesCount = 0;
      reviewDeck.scheduledNotes.forEach((scheduledNote) => {
        if (scheduledNote.dueUnix <= now.valueOf()) {
          reviewDeck.dueNotesCount++;
          this.dueNotesCount++;
        }
        const nDays = Math.ceil(
          (scheduledNote.dueUnix - now.valueOf()) / (24 * 3600 * 1e3)
        );
        if (!Object.prototype.hasOwnProperty.call(this.dueDatesNotes, nDays)) {
          this.dueDatesNotes[nDays] = 0;
        }
        this.dueDatesNotes[nDays]++;
      });
      reviewDeck.sortNotes(this.pageranks);
    });
    this.statusBar.setText(
      t("STATUS_BAR", {
        dueNotesCount: this.dueNotesCount,
        dueFlashcardsCount: this.remainingDeckTree.getDistinctCardCount(
          2 /* All */,
          true
        )
      })
    );
    if (this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE))
      this.reviewQueueView.redraw();
  }
  async loadNote(noteFile) {
    const loader = new NoteFileLoader(this.data.settings);
    const srFile = this.createSrTFile(noteFile);
    const folderTopicPath = TopicPath.getFolderPathFromFilename(
      srFile,
      this.data.settings
    );
    const note = await loader.load(this.createSrTFile(noteFile), folderTopicPath);
    if (note.hasChanged) {
      note.writeNoteFile(this.data.settings);
    }
    return note;
  }
  async saveReviewResponse(note, response) {
    const fileCachedData = this.app.metadataCache.getFileCache(note) || {};
    const frontmatter = fileCachedData.frontmatter || {};
    const tags = (0, import_obsidian11.getAllTags)(fileCachedData) || [];
    if (this.data.settings.noteFoldersToIgnore.some((folder) => note.path.startsWith(folder))) {
      new import_obsidian11.Notice(t("NOTE_IN_IGNORED_FOLDER"));
      return;
    }
    let shouldIgnore = true;
    for (const tag of tags) {
      if (this.data.settings.tagsToReview.some(
        (tagToReview) => tag === tagToReview || tag.startsWith(tagToReview + "/")
      )) {
        shouldIgnore = false;
        break;
      }
    }
    if (shouldIgnore) {
      new import_obsidian11.Notice(t("PLEASE_TAG_NOTE"));
      return;
    }
    let fileText = await this.app.vault.read(note);
    let ease, interval, delayBeforeReview;
    const now = Date.now();
    if (!(Object.prototype.hasOwnProperty.call(frontmatter, "sr-due") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-interval") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-ease"))) {
      let linkTotal = 0, linkPGTotal = 0, totalLinkCount = 0;
      for (const statObj of this.incomingLinks[note.path] || []) {
        const ease2 = this.easeByPath.getEaseByPath(statObj.sourcePath);
        if (ease2) {
          linkTotal += statObj.linkCount * this.pageranks[statObj.sourcePath] * ease2;
          linkPGTotal += this.pageranks[statObj.sourcePath] * statObj.linkCount;
          totalLinkCount += statObj.linkCount;
        }
      }
      const outgoingLinks = this.app.metadataCache.resolvedLinks[note.path] || {};
      for (const linkedFilePath in outgoingLinks) {
        const ease2 = this.easeByPath.getEaseByPath(linkedFilePath);
        if (ease2) {
          linkTotal += outgoingLinks[linkedFilePath] * this.pageranks[linkedFilePath] * ease2;
          linkPGTotal += this.pageranks[linkedFilePath] * outgoingLinks[linkedFilePath];
          totalLinkCount += outgoingLinks[linkedFilePath];
        }
      }
      const linkContribution = this.data.settings.maxLinkFactor * Math.min(1, Math.log(totalLinkCount + 0.5) / Math.log(64));
      ease = (1 - linkContribution) * this.data.settings.baseEase + (totalLinkCount > 0 ? linkContribution * linkTotal / linkPGTotal : linkContribution * this.data.settings.baseEase);
      if (this.easeByPath.hasEaseForPath(note.path)) {
        ease = (ease + this.easeByPath.getEaseByPath(note.path)) / 2;
      }
      ease = Math.round(ease);
      interval = 1;
      delayBeforeReview = 0;
    } else {
      interval = frontmatter["sr-interval"];
      ease = frontmatter["sr-ease"];
      delayBeforeReview = now - window.moment(frontmatter["sr-due"], ["YYYY-MM-DD", "DD-MM-YYYY", "ddd MMM DD YYYY"]).valueOf();
    }
    const schedObj = schedule(
      response,
      interval,
      ease,
      delayBeforeReview,
      this.data.settings,
      this.dueDatesNotes
    );
    interval = schedObj.interval;
    ease = schedObj.ease;
    const due = window.moment(now + interval * 24 * 3600 * 1e3);
    const dueString = due.format("YYYY-MM-DD");
    if (SCHEDULING_INFO_REGEX.test(fileText)) {
      const schedulingInfo = SCHEDULING_INFO_REGEX.exec(fileText);
      fileText = fileText.replace(
        SCHEDULING_INFO_REGEX,
        `---
${schedulingInfo[1]}sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
${schedulingInfo[5]}---`
      );
    } else if (YAML_FRONT_MATTER_REGEX.test(fileText)) {
      const existingYaml = YAML_FRONT_MATTER_REGEX.exec(fileText);
      fileText = fileText.replace(
        YAML_FRONT_MATTER_REGEX,
        `---
${existingYaml[1]}sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
---`
      );
    } else {
      fileText = `---
sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
---

${fileText}`;
    }
    if (this.data.settings.burySiblingCards) {
      const noteX = await this.loadNote(note);
      for (const question of noteX.questionList) {
        this.data.buryList.push(question.questionText.textHash);
      }
      await this.savePluginData();
    }
    await this.app.vault.modify(note, fileText);
    this.easeByPath.setEaseForPath(note.path, ease);
    Object.values(this.reviewDecks).forEach((reviewDeck) => {
      let wasDueInDeck = false;
      for (const scheduledNote of reviewDeck.scheduledNotes) {
        if (scheduledNote.note.path === note.path) {
          scheduledNote.dueUnix = due.valueOf();
          wasDueInDeck = true;
          break;
        }
      }
      if (!wasDueInDeck) {
        reviewDeck.newNotes.splice(
          reviewDeck.newNotes.findIndex((newNote) => newNote.path === note.path),
          1
        );
        reviewDeck.scheduledNotes.push({ note, dueUnix: due.valueOf() });
      }
    });
    this.updateAndSortDueNotes();
    new import_obsidian11.Notice(t("RESPONSE_RECEIVED"));
    if (this.data.settings.autoNextNote) {
      if (!this.lastSelectedReviewDeck) {
        const reviewDeckKeys = Object.keys(this.reviewDecks);
        if (reviewDeckKeys.length > 0)
          this.lastSelectedReviewDeck = reviewDeckKeys[0];
        else {
          new import_obsidian11.Notice(t("ALL_CAUGHT_UP"));
          return;
        }
      }
      this.reviewNextNote(this.lastSelectedReviewDeck);
    }
  }
  async reviewNextNoteModal() {
    const reviewDeckNames = Object.keys(this.reviewDecks);
    if (reviewDeckNames.length === 1) {
      this.reviewNextNote(reviewDeckNames[0]);
    } else {
      const deckSelectionModal = new ReviewDeckSelectionModal(this.app, reviewDeckNames);
      deckSelectionModal.submitCallback = (deckKey) => this.reviewNextNote(deckKey);
      deckSelectionModal.open();
    }
  }
  async reviewNextNote(deckKey) {
    if (!Object.prototype.hasOwnProperty.call(this.reviewDecks, deckKey)) {
      new import_obsidian11.Notice(t("NO_DECK_EXISTS", { deckName: deckKey }));
      return;
    }
    this.lastSelectedReviewDeck = deckKey;
    const deck = this.reviewDecks[deckKey];
    if (deck.dueNotesCount > 0) {
      const index = this.data.settings.openRandomNote ? Math.floor(Math.random() * deck.dueNotesCount) : 0;
      await this.app.workspace.getLeaf().openFile(deck.scheduledNotes[index].note);
      return;
    }
    if (deck.newNotes.length > 0) {
      const index = this.data.settings.openRandomNote ? Math.floor(Math.random() * deck.newNotes.length) : 0;
      this.app.workspace.getLeaf().openFile(deck.newNotes[index]);
      return;
    }
    new import_obsidian11.Notice(t("ALL_CAUGHT_UP"));
  }
  createSrTFile(note) {
    return new SrTFile(this.app.vault, this.app.metadataCache, note);
  }
  async loadPluginData() {
    const loadedData = await this.loadData();
    if (loadedData == null ? void 0 : loadedData.settings)
      upgradeSettings(loadedData.settings);
    this.data = Object.assign({}, DEFAULT_DATA, loadedData);
    this.data.settings = Object.assign({}, DEFAULT_SETTINGS, this.data.settings);
  }
  async savePluginData() {
    await this.saveData(this.data);
  }
  getActiveLeaf(type) {
    const leaves = this.app.workspace.getLeavesOfType(type);
    if (leaves.length == 0) {
      return null;
    }
    return leaves[0];
  }
  async initReviewQueueView() {
    this.registerView(
      REVIEW_QUEUE_VIEW_TYPE,
      (leaf) => this.reviewQueueView = new ReviewQueueListView(leaf, this)
    );
    if (this.data.settings.enableNoteReviewPaneOnStartup && this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE) == null) {
      await this.activateReviewQueueViewPanel();
    }
  }
  async activateReviewQueueViewPanel() {
    await this.app.workspace.getRightLeaf(false).setViewState({
      type: REVIEW_QUEUE_VIEW_TYPE,
      active: true
    });
  }
  async openReviewQueueView() {
    let reviewQueueLeaf = this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE);
    if (reviewQueueLeaf == null) {
      await this.activateReviewQueueViewPanel();
      reviewQueueLeaf = this.getActiveLeaf(REVIEW_QUEUE_VIEW_TYPE);
    }
    if (reviewQueueLeaf !== null) {
      this.app.workspace.revealLeaf(reviewQueueLeaf);
      this.updateAndSortDueNotes();
    }
  }
};
/*! Bundled license information:

moment/moment.js:
  (*! moment.js *)
  (*! version : 2.30.1 *)
  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)
  (*! license : MIT *)
  (*! momentjs.com *)

@kurkle/color/dist/color.esm.js:
  (*!
   * @kurkle/color v0.3.2
   * https://github.com/kurkle/color#readme
   * (c) 2023 Jukka Kurkela
   * Released under the MIT License
   *)

chart.js/dist/chunks/helpers.segment.js:
  (*!
   * Chart.js v4.4.2
   * https://www.chartjs.org
   * (c) 2024 Chart.js Contributors
   * Released under the MIT License
   *)

chart.js/dist/chart.js:
  (*!
   * Chart.js v4.4.2
   * https://www.chartjs.org
   * (c) 2024 Chart.js Contributors
   * Released under the MIT License
   *)
*/
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhZ2VyYW5rLmpzQDEuMC4yL25vZGVfbW9kdWxlcy9wYWdlcmFuay5qcy9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ZodG1sQDIuMi4wL25vZGVfbW9kdWxlcy92aHRtbC9zcmMvZW1wdHktdGFncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmh0bWxAMi4yLjAvbm9kZV9tb2R1bGVzL3ZodG1sL3NyYy92aHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbW9tZW50QDIuMzAuMS9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsICIuLi9zcmMvbWFpbi50cyIsICIuLi9zcmMvc2V0dGluZ3MudHMiLCAiLi4vc3JjL2xhbmcvaGVscGVycy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYWYudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2FyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9jei50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYm4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2RhLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9kZS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZW4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2VuLWdiLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9lcy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZnIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2hpLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9pZC50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvaXQudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2phLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9rby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvbXIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL25sLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9uby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcGwudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3B0LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9wdC1ici50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcm8udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3J1LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90YS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdGUudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3RoLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90ci50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdWsudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3VyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS92aS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvemgtY24udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3poLXR3LnRzIiwgIi4uL3NyYy9ndWkvRmxhc2hjYXJkTW9kYWwudHN4IiwgIi4uL3NyYy9ndWkvRWRpdE1vZGFsLnRzeCIsICIuLi9zcmMvZ3VpL0RlY2tMaXN0Vmlldy50c3giLCAiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvVG9waWNQYXRoLnRzIiwgIi4uL3NyYy9ndWkvRmxhc2hjYXJkUmV2aWV3Vmlldy50c3giLCAiLi4vc3JjL3NjaGVkdWxpbmcudHMiLCAiLi4vc3JjL0ZsYXNoY2FyZFJldmlld1NlcXVlbmNlci50cyIsICIuLi9zcmMvRGVjay50cyIsICIuLi9zcmMvdXRpbC91dGlscy50cyIsICIuLi9zcmMvdXRpbC9EYXRlUHJvdmlkZXIudHMiLCAiLi4vc3JjL0NhcmRTY2hlZHVsZS50cyIsICIuLi9zcmMvdXRpbC9NdWx0aUxpbmVUZXh0RmluZGVyLnRzIiwgIi4uL3NyYy9RdWVzdGlvbi50cyIsICIuLi9zcmMvdXRpbC9SZW5kZXJNYXJrZG93bldyYXBwZXIudHMiLCAiLi4vc3JjL2d1aS9TdGF0c01vZGFsLnRzeCIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGt1cmtsZStjb2xvckAwLjMuMi9ub2RlX21vZHVsZXMvQGt1cmtsZS9jb2xvci9kaXN0L2NvbG9yLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMubWF0aC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY29sbGVjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZXh0cmFzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5lYXNpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5hbmltYXRpb25zLmRlZmF1bHRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5sYXlvdXRzLmRlZmF1bHRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5pbnRsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS50aWNrcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuc2NhbGUuZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmRlZmF1bHRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jYW52YXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLm9wdGlvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbmZpZy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY3VydmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmRvbS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuaW50ZXJwb2xhdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMucnRsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5zZWdtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5hbmltYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5hbmltYXRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5kYXRhc2V0Q29udHJvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmJhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmJ1YmJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmRvdWdobnV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIubGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnBvbGFyQXJlYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnBpZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnJhZGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIuc2NhdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYWRhcHRlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmludGVyYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5sYXlvdXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsYXRmb3JtL3BsYXRmb3JtLmJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGxhdGZvcm0vcGxhdGZvcm0uYmFzaWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGxhdGZvcm0vcGxhdGZvcm0uZG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5lbGVtZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5zY2FsZS5hdXRvc2tpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnR5cGVkUmVnaXN0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnJlZ2lzdHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5wbHVnaW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5jb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmNvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5hcmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQucG9pbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uY29sb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmRlY2ltYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci5zZWdtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuaGVscGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIub3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLnRhcmdldC5zdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvc2ltcGxlQXJjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIudGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuZHJhd2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC40LjIvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4ubGVnZW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLnRpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLnN1YnRpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLmNhdGVnb3J5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5saW5lYXJiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5saW5lYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLmxvZ2FyaXRobWljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjQuMi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5yYWRpYWxMaW5lYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLnRpbWVzZXJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuNC4yL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL2d1aS9TaWRlYmFyLnRzeCIsICIuLi9zcmMvUmV2aWV3RGVjay50cyIsICIuLi9zcmMvaWNvbnMvYXBwaWNvbi50cyIsICIuLi9zcmMvdXRpbC9SYW5kb21OdW1iZXJQcm92aWRlci50cyIsICIuLi9zcmMvRGVja1RyZWVJdGVyYXRvci50cyIsICIuLi9zcmMvTm90ZS50cyIsICIuLi9zcmMvQ2FyZC50cyIsICIuLi9zcmMvcGFyc2VyLnRzIiwgIi4uL3NyYy9RdWVzdGlvblR5cGUudHMiLCAiLi4vc3JjL05vdGVRdWVzdGlvblBhcnNlci50cyIsICIuLi9zcmMvTm90ZUZpbGVMb2FkZXIudHMiLCAiLi4vc3JjL1NSRmlsZS50cyIsICIuLi9zcmMvTm90ZUVhc2VDYWxjdWxhdG9yLnRzIiwgIi4uL3NyYy91dGlsL051bWJlckNvdW50RGljdC50cyIsICIuLi9zcmMvc3RhdHMudHMiLCAiLi4vc3JjL0RlY2tUcmVlU3RhdHNDYWxjdWxhdG9yLnRzIiwgIi4uL3NyYy9Ob3RlRWFzZUxpc3QudHMiLCAiLi4vc3JjL1F1ZXN0aW9uUG9zdHBvbmVtZW50TGlzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLHdGQUFBQSxTQUFBO0FBQUE7QUFFQSxhQUFTLE9BQU8sUUFBUUMsV0FBVTtBQUM5QixVQUFLLE9BQU8sV0FBVyxZQUFjLE9BQU9BLGNBQWEsWUFBYTtBQUNsRSxpQkFBUyxPQUFPLFFBQVE7QUFDcEIsY0FBSSxPQUFPLGVBQWUsR0FBRyxNQUFNLE1BQU07QUFDckMsZ0JBQUlBLFVBQVMsS0FBSyxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU87QUFDdEM7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLElBQUFELFFBQU8sVUFBVyxXQUFZO0FBQzFCLFVBQUksT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsT0FBTyxDQUFDO0FBQUEsUUFDUixPQUFPLENBQUM7QUFBQSxNQUNaO0FBRUEsV0FBSyxPQUFPLFNBQVUsUUFBUSxRQUFRLFFBQVE7QUFDMUMsWUFBSyxTQUFTLE1BQU0sTUFBTSxRQUFVLFdBQVcsTUFBTztBQUNsRCxtQkFBUztBQUFBLFFBQ2I7QUFFQSxpQkFBUyxXQUFXLE1BQU07QUFFMUIsWUFBSSxLQUFLLE1BQU0sZUFBZSxNQUFNLE1BQU0sTUFBTTtBQUM1QyxlQUFLO0FBQ0wsZUFBSyxNQUFNLE1BQU0sSUFBSTtBQUFBLFlBQ2pCLFFBQVE7QUFBQSxZQUNSLFVBQVU7QUFBQSxVQUNkO0FBQUEsUUFDSjtBQUVBLGFBQUssTUFBTSxNQUFNLEVBQUUsWUFBWTtBQUUvQixZQUFJLEtBQUssTUFBTSxlQUFlLE1BQU0sTUFBTSxNQUFNO0FBQzVDLGVBQUs7QUFDTCxlQUFLLE1BQU0sTUFBTSxJQUFJO0FBQUEsWUFDakIsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFVBQ2Q7QUFBQSxRQUNKO0FBRUEsWUFBSSxLQUFLLE1BQU0sZUFBZSxNQUFNLE1BQU0sTUFBTTtBQUM1QyxlQUFLLE1BQU0sTUFBTSxJQUFJLENBQUM7QUFBQSxRQUMxQjtBQUVBLFlBQUksS0FBSyxNQUFNLE1BQU0sRUFBRSxlQUFlLE1BQU0sTUFBTSxNQUFNO0FBQ3BELGVBQUssTUFBTSxNQUFNLEVBQUUsTUFBTSxJQUFJO0FBQUEsUUFDakM7QUFFQSxhQUFLLE1BQU0sTUFBTSxFQUFFLE1BQU0sS0FBSztBQUFBLE1BQ2xDO0FBRUEsV0FBSyxPQUFPLFNBQVVFLFFBQU8sU0FBU0QsV0FBVTtBQUM1QyxZQUFJLFFBQVEsR0FDUixVQUFVLElBQUksS0FBSztBQUV2QixlQUFPLEtBQUssT0FBTyxTQUFVLFFBQVE7QUFDakMsY0FBSSxLQUFLLE1BQU0sTUFBTSxFQUFFLFdBQVcsR0FBRztBQUNqQyxtQkFBTyxLQUFLLE1BQU0sTUFBTSxHQUFHLFNBQVUsUUFBUTtBQUN6QyxtQkFBSyxNQUFNLE1BQU0sRUFBRSxNQUFNLEtBQUssS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLFlBQ3JELENBQUM7QUFBQSxVQUNMO0FBQUEsUUFDSixDQUFDO0FBRUQsZUFBTyxLQUFLLE9BQU8sU0FBVSxLQUFLO0FBQzlCLGVBQUssTUFBTSxHQUFHLEVBQUUsU0FBUztBQUFBLFFBQzdCLENBQUM7QUFFRCxlQUFPLFFBQVEsU0FBUztBQUNwQixjQUFJLE9BQU8sR0FDUCxRQUFRLENBQUM7QUFFYixpQkFBTyxLQUFLLE9BQU8sU0FBVSxLQUFLLE9BQU87QUFDckMsa0JBQU0sR0FBRyxJQUFJLE1BQU07QUFFbkIsZ0JBQUksTUFBTSxhQUFhLEdBQUc7QUFDdEIsc0JBQVEsTUFBTTtBQUFBLFlBQ2xCO0FBRUEsaUJBQUssTUFBTSxHQUFHLEVBQUUsU0FBUztBQUFBLFVBQzdCLENBQUM7QUFFRCxrQkFBUUM7QUFFUixpQkFBTyxLQUFLLE9BQU8sU0FBVSxRQUFRO0FBQ2pDLG1CQUFPLEtBQUssTUFBTSxNQUFNLEdBQUcsU0FBVSxRQUFRLFFBQVE7QUFDakQsbUJBQUssTUFBTSxNQUFNLEVBQUUsVUFBVUEsU0FBUSxNQUFNLE1BQU0sSUFBSTtBQUFBLFlBQ3pELENBQUM7QUFFRCxpQkFBSyxNQUFNLE1BQU0sRUFBRSxXQUFXLElBQUlBLFVBQVMsVUFBVSxPQUFPO0FBQUEsVUFDaEUsQ0FBQztBQUVELGtCQUFRO0FBRVIsaUJBQU8sS0FBSyxPQUFPLFNBQVUsS0FBSyxPQUFPO0FBQ3JDLHFCQUFTLEtBQUssSUFBSSxNQUFNLFNBQVMsTUFBTSxHQUFHLENBQUM7QUFBQSxVQUMvQyxDQUFDO0FBQUEsUUFDTDtBQUVBLGVBQU8sS0FBSyxPQUFPLFNBQVUsS0FBSztBQUM5QixpQkFBT0QsVUFBUyxLQUFLLEtBQUssTUFBTSxHQUFHLEVBQUUsTUFBTTtBQUFBLFFBQy9DLENBQUM7QUFBQSxNQUNMO0FBRUEsV0FBSyxRQUFRLFdBQVk7QUFDckIsYUFBSyxRQUFRO0FBQ2IsYUFBSyxRQUFRLENBQUM7QUFDZCxhQUFLLFFBQVEsQ0FBQztBQUFBLE1BQ2xCO0FBRUEsYUFBTztBQUFBLElBQ1gsRUFBRztBQUFBO0FBQUE7Ozs7Ozs7OztBQ3BISCxVQUFBLFlBQWUsQ0FDZCxRQUNBLFFBQ0EsTUFDQSxPQUNBLFdBQ0EsU0FDQSxNQUNBLE9BQ0EsU0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUNBLFVBQ0EsU0FDQSxLQWhCYztBQ0dmLFVBQUlFLE1BQU0sU0FBTkEsS0FBTSxLQUFBO2VBQU9DLE9BQU9DLEdBQVAsRUFBWUMsUUFBUSxZQUFZLFNBQUEsR0FBQTt1QkFBT0MsS0FBSUMsQ0FBSixJQUFQO1NBQWhDOztBQUNqQixVQUFJRCxPQUFNLEVBQUMsS0FBSSxPQUFNLEtBQUksTUFBSyxLQUFJLE1BQUssS0FBSSxRQUFPLEtBQUksT0FBNUM7QUFDVixVQUFJRSxtQkFBbUI7QUFDdkIsVUFBSUMsb0JBQW9CO21CQUNaO2lCQUNGOztBQUdWLFVBQUlDLFlBQVksQ0FBQTtBQUdoQixlQUF3QkMsR0FBRUMsTUFBTUMsT0FBTztZQUNsQ0MsUUFBTSxDQUFBLEdBQUlQLElBQUk7Z0JBQ1ZNLFNBQVMsQ0FBQTtpQkFDUkUsSUFBRUMsVUFBVUMsUUFBUUYsTUFBTSxLQUFLO2dCQUNqQ0csS0FBS0YsVUFBVUQsQ0FBVixDQUFYOztZQUlHLE9BQU9ILFNBQU8sWUFBWTtnQkFDdkJPLFdBQVdMLE1BQU1NLFFBQU47aUJBQ1ZSLEtBQUtDLEtBQUw7O1lBSUpELE1BQU07ZUFDSixNQUFNQTtjQUNQQztBQUFPLHFCQUFTRSxNQUFLRixPQUFPO2tCQUMzQkEsTUFBTUUsRUFBTixNQUFXLFNBQVNGLE1BQU1FLEVBQU4sS0FBVSxRQUFRQSxPQUFNUCxrQkFBa0I7NEJBQ3hEQyxrQkFBa0JNLEVBQWxCLElBQXVCTixrQkFBa0JNLEVBQWxCLElBQXVCYixJQUFJYSxFQUFKLEtBQXZELE9BQWtFYixJQUFJVyxNQUFNRSxFQUFOLENBQUosSUFBbEU7OztlQUdHOztZQUdGTSxVQUFVQyxRQUFRVixJQUFsQixNQUE0QixJQUFJO2NBQy9CQyxNQUFNTCxnQkFBTixHQUF5QjtpQkFDdkJLLE1BQU1MLGdCQUFOLEVBQXdCZTs7QUFFekIsbUJBQU9ULE1BQU1HLFFBQVE7a0JBQ3JCTyxRQUFRVixNQUFNVyxJQUFOO2tCQUNSRCxPQUFPO29CQUNOQSxNQUFNQyxLQUFLOzJCQUNMVixNQUFFUyxNQUFNUCxRQUFRRixTQUF6QjswQkFBc0NHLEtBQUtNLE1BQU1ULEdBQU4sQ0FBWDs7dUJBRTVCO3VCQUNDTCxVQUFVYyxLQUFWLE1BQW1CLE9BQU9BLFFBQVF0QixJQUFJc0IsS0FBSjs7OztlQUtyQ1osT0FBQUEsT0FBWUEsT0FBWixNQUFzQjs7a0JBR2xCTCxDQUFWLElBQWU7ZUFDUkE7Ozs7Ozs7O0FDMURSO0FBQUEsNEVBQUFtQixTQUFBO0FBTUMsS0FBQyxTQUFVLFFBQVEsU0FBUztBQUN6QixhQUFPLFlBQVksWUFBWSxPQUFPQSxZQUFXLGNBQWNBLFFBQU8sVUFBVSxRQUFRLElBQ3hGLE9BQU8sV0FBVyxjQUFjLE9BQU8sTUFBTSxPQUFPLE9BQU8sSUFDM0QsT0FBTyxTQUFTLFFBQVE7QUFBQSxJQUM1QixHQUFFLFNBQU8sV0FBWTtBQUFFO0FBRW5CLFVBQUk7QUFFSixlQUFTLFFBQVE7QUFDYixlQUFPLGFBQWEsTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUM3QztBQUlBLGVBQVMsZ0JBQWdCQyxXQUFVO0FBQy9CLHVCQUFlQTtBQUFBLE1BQ25CO0FBRUEsZUFBU0MsU0FBUSxPQUFPO0FBQ3BCLGVBQ0ksaUJBQWlCLFNBQ2pCLE9BQU8sVUFBVSxTQUFTLEtBQUssS0FBSyxNQUFNO0FBQUEsTUFFbEQ7QUFFQSxlQUFTQyxVQUFTLE9BQU87QUFHckIsZUFDSSxTQUFTLFFBQ1QsT0FBTyxVQUFVLFNBQVMsS0FBSyxLQUFLLE1BQU07QUFBQSxNQUVsRDtBQUVBLGVBQVMsV0FBVyxHQUFHLEdBQUc7QUFDdEIsZUFBTyxPQUFPLFVBQVUsZUFBZSxLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQ3BEO0FBRUEsZUFBUyxjQUFjLEtBQUs7QUFDeEIsWUFBSSxPQUFPLHFCQUFxQjtBQUM1QixpQkFBTyxPQUFPLG9CQUFvQixHQUFHLEVBQUUsV0FBVztBQUFBLFFBQ3RELE9BQU87QUFDSCxjQUFJO0FBQ0osZUFBSyxLQUFLLEtBQUs7QUFDWCxnQkFBSSxXQUFXLEtBQUssQ0FBQyxHQUFHO0FBQ3BCLHFCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBRUEsZUFBUyxZQUFZLE9BQU87QUFDeEIsZUFBTyxVQUFVO0FBQUEsTUFDckI7QUFFQSxlQUFTQyxVQUFTLE9BQU87QUFDckIsZUFDSSxPQUFPLFVBQVUsWUFDakIsT0FBTyxVQUFVLFNBQVMsS0FBSyxLQUFLLE1BQU07QUFBQSxNQUVsRDtBQUVBLGVBQVMsT0FBTyxPQUFPO0FBQ25CLGVBQ0ksaUJBQWlCLFFBQ2pCLE9BQU8sVUFBVSxTQUFTLEtBQUssS0FBSyxNQUFNO0FBQUEsTUFFbEQ7QUFFQSxlQUFTQyxLQUFJLEtBQUssSUFBSTtBQUNsQixZQUFJLE1BQU0sQ0FBQyxHQUNQLEdBQ0EsU0FBUyxJQUFJO0FBQ2pCLGFBQUssSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLEdBQUc7QUFDekIsY0FBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQUEsUUFDMUI7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsT0FBTyxHQUFHLEdBQUc7QUFDbEIsaUJBQVMsS0FBSyxHQUFHO0FBQ2IsY0FBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHO0FBQ2xCLGNBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUFBLFVBQ2Q7QUFBQSxRQUNKO0FBRUEsWUFBSSxXQUFXLEdBQUcsVUFBVSxHQUFHO0FBQzNCLFlBQUUsV0FBVyxFQUFFO0FBQUEsUUFDbkI7QUFFQSxZQUFJLFdBQVcsR0FBRyxTQUFTLEdBQUc7QUFDMUIsWUFBRSxVQUFVLEVBQUU7QUFBQSxRQUNsQjtBQUVBLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxVQUFVLE9BQU9DLFNBQVFDLFNBQVEsUUFBUTtBQUM5QyxlQUFPLGlCQUFpQixPQUFPRCxTQUFRQyxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFBQSxNQUNyRTtBQUVBLGVBQVMsc0JBQXNCO0FBRTNCLGVBQU87QUFBQSxVQUNILE9BQU87QUFBQSxVQUNQLGNBQWMsQ0FBQztBQUFBLFVBQ2YsYUFBYSxDQUFDO0FBQUEsVUFDZCxVQUFVO0FBQUEsVUFDVixlQUFlO0FBQUEsVUFDZixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixjQUFjO0FBQUEsVUFDZCxlQUFlO0FBQUEsVUFDZixpQkFBaUI7QUFBQSxVQUNqQixLQUFLO0FBQUEsVUFDTCxpQkFBaUIsQ0FBQztBQUFBLFVBQ2xCLEtBQUs7QUFBQSxVQUNMLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULGlCQUFpQjtBQUFBLFFBQ3JCO0FBQUEsTUFDSjtBQUVBLGVBQVMsZ0JBQWdCLEdBQUc7QUFDeEIsWUFBSSxFQUFFLE9BQU8sTUFBTTtBQUNmLFlBQUUsTUFBTSxvQkFBb0I7QUFBQSxRQUNoQztBQUNBLGVBQU8sRUFBRTtBQUFBLE1BQ2I7QUFFQSxVQUFJO0FBQ0osVUFBSSxNQUFNLFVBQVUsTUFBTTtBQUN0QixlQUFPLE1BQU0sVUFBVTtBQUFBLE1BQzNCLE9BQU87QUFDSCxlQUFPLFNBQVUsS0FBSztBQUNsQixjQUFJQyxLQUFJLE9BQU8sSUFBSSxHQUNmLE1BQU1BLEdBQUUsV0FBVyxHQUNuQjtBQUVKLGVBQUssSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLO0FBQ3RCLGdCQUFJLEtBQUtBLE1BQUssSUFBSSxLQUFLLE1BQU1BLEdBQUUsQ0FBQyxHQUFHLEdBQUdBLEVBQUMsR0FBRztBQUN0QyxxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKO0FBRUEsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLGVBQVMsUUFBUSxHQUFHO0FBQ2hCLFlBQUksUUFBUSxNQUNSLGNBQWMsT0FDZCxhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUM5QyxZQUFJLFlBQVk7QUFDWixrQkFBUSxnQkFBZ0IsQ0FBQztBQUN6Qix3QkFBYyxLQUFLLEtBQUssTUFBTSxpQkFBaUIsU0FBVSxHQUFHO0FBQ3hELG1CQUFPLEtBQUs7QUFBQSxVQUNoQixDQUFDO0FBQ0QsdUJBQ0ksTUFBTSxXQUFXLEtBQ2pCLENBQUMsTUFBTSxTQUNQLENBQUMsTUFBTSxjQUNQLENBQUMsTUFBTSxnQkFDUCxDQUFDLE1BQU0sa0JBQ1AsQ0FBQyxNQUFNLG1CQUNQLENBQUMsTUFBTSxhQUNQLENBQUMsTUFBTSxpQkFDUCxDQUFDLE1BQU0sb0JBQ04sQ0FBQyxNQUFNLFlBQWEsTUFBTSxZQUFZO0FBQzNDLGNBQUksRUFBRSxTQUFTO0FBQ1gseUJBQ0ksY0FDQSxNQUFNLGtCQUFrQixLQUN4QixNQUFNLGFBQWEsV0FBVyxLQUM5QixNQUFNLFlBQVk7QUFBQSxVQUMxQjtBQUFBLFFBQ0o7QUFDQSxZQUFJLE9BQU8sWUFBWSxRQUFRLENBQUMsT0FBTyxTQUFTLENBQUMsR0FBRztBQUNoRCxZQUFFLFdBQVc7QUFBQSxRQUNqQixPQUFPO0FBQ0gsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZUFBTyxFQUFFO0FBQUEsTUFDYjtBQUVBLGVBQVMsY0FBYyxPQUFPO0FBQzFCLFlBQUksSUFBSSxVQUFVLEdBQUc7QUFDckIsWUFBSSxTQUFTLE1BQU07QUFDZixpQkFBTyxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNwQyxPQUFPO0FBQ0gsMEJBQWdCLENBQUMsRUFBRSxrQkFBa0I7QUFBQSxRQUN6QztBQUVBLGVBQU87QUFBQSxNQUNYO0FBSUEsVUFBSSxtQkFBb0IsTUFBTSxtQkFBbUIsQ0FBQyxHQUM5QyxtQkFBbUI7QUFFdkIsZUFBUyxXQUFXQyxLQUFJQyxPQUFNO0FBQzFCLFlBQUksR0FDQSxNQUNBLEtBQ0Esc0JBQXNCLGlCQUFpQjtBQUUzQyxZQUFJLENBQUMsWUFBWUEsTUFBSyxnQkFBZ0IsR0FBRztBQUNyQyxVQUFBRCxJQUFHLG1CQUFtQkMsTUFBSztBQUFBLFFBQy9CO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssRUFBRSxHQUFHO0FBQ3ZCLFVBQUFELElBQUcsS0FBS0MsTUFBSztBQUFBLFFBQ2pCO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssRUFBRSxHQUFHO0FBQ3ZCLFVBQUFELElBQUcsS0FBS0MsTUFBSztBQUFBLFFBQ2pCO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssRUFBRSxHQUFHO0FBQ3ZCLFVBQUFELElBQUcsS0FBS0MsTUFBSztBQUFBLFFBQ2pCO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssT0FBTyxHQUFHO0FBQzVCLFVBQUFELElBQUcsVUFBVUMsTUFBSztBQUFBLFFBQ3RCO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssSUFBSSxHQUFHO0FBQ3pCLFVBQUFELElBQUcsT0FBT0MsTUFBSztBQUFBLFFBQ25CO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssTUFBTSxHQUFHO0FBQzNCLFVBQUFELElBQUcsU0FBU0MsTUFBSztBQUFBLFFBQ3JCO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssT0FBTyxHQUFHO0FBQzVCLFVBQUFELElBQUcsVUFBVUMsTUFBSztBQUFBLFFBQ3RCO0FBQ0EsWUFBSSxDQUFDLFlBQVlBLE1BQUssR0FBRyxHQUFHO0FBQ3hCLFVBQUFELElBQUcsTUFBTSxnQkFBZ0JDLEtBQUk7QUFBQSxRQUNqQztBQUNBLFlBQUksQ0FBQyxZQUFZQSxNQUFLLE9BQU8sR0FBRztBQUM1QixVQUFBRCxJQUFHLFVBQVVDLE1BQUs7QUFBQSxRQUN0QjtBQUVBLFlBQUksc0JBQXNCLEdBQUc7QUFDekIsZUFBSyxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsS0FBSztBQUN0QyxtQkFBTyxpQkFBaUIsQ0FBQztBQUN6QixrQkFBTUEsTUFBSyxJQUFJO0FBQ2YsZ0JBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRztBQUNuQixjQUFBRCxJQUFHLElBQUksSUFBSTtBQUFBLFlBQ2Y7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUVBLGVBQU9BO0FBQUEsTUFDWDtBQUdBLGVBQVMsT0FBTyxRQUFRO0FBQ3BCLG1CQUFXLE1BQU0sTUFBTTtBQUN2QixhQUFLLEtBQUssSUFBSSxLQUFLLE9BQU8sTUFBTSxPQUFPLE9BQU8sR0FBRyxRQUFRLElBQUksR0FBRztBQUNoRSxZQUFJLENBQUMsS0FBSyxRQUFRLEdBQUc7QUFDakIsZUFBSyxLQUFLLG9CQUFJLEtBQUssR0FBRztBQUFBLFFBQzFCO0FBR0EsWUFBSSxxQkFBcUIsT0FBTztBQUM1Qiw2QkFBbUI7QUFDbkIsZ0JBQU0sYUFBYSxJQUFJO0FBQ3ZCLDZCQUFtQjtBQUFBLFFBQ3ZCO0FBQUEsTUFDSjtBQUVBLGVBQVMsU0FBUyxLQUFLO0FBQ25CLGVBQ0ksZUFBZSxVQUFXLE9BQU8sUUFBUSxJQUFJLG9CQUFvQjtBQUFBLE1BRXpFO0FBRUEsZUFBUyxLQUFLLEtBQUs7QUFDZixZQUNJLE1BQU0sZ0NBQWdDLFNBQ3RDLE9BQU8sWUFBWSxlQUNuQixRQUFRLE1BQ1Y7QUFDRSxrQkFBUSxLQUFLLDBCQUEwQixHQUFHO0FBQUEsUUFDOUM7QUFBQSxNQUNKO0FBRUEsZUFBUyxVQUFVLEtBQUssSUFBSTtBQUN4QixZQUFJLFlBQVk7QUFFaEIsZUFBTyxPQUFPLFdBQVk7QUFDdEIsY0FBSSxNQUFNLHNCQUFzQixNQUFNO0FBQ2xDLGtCQUFNLG1CQUFtQixNQUFNLEdBQUc7QUFBQSxVQUN0QztBQUNBLGNBQUksV0FBVztBQUNYLGdCQUFJLE9BQU8sQ0FBQyxHQUNSLEtBQ0EsR0FDQSxLQUNBLFNBQVMsVUFBVTtBQUN2QixpQkFBSyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFDekIsb0JBQU07QUFDTixrQkFBSSxPQUFPLFVBQVUsQ0FBQyxNQUFNLFVBQVU7QUFDbEMsdUJBQU8sUUFBUSxJQUFJO0FBQ25CLHFCQUFLLE9BQU8sVUFBVSxDQUFDLEdBQUc7QUFDdEIsc0JBQUksV0FBVyxVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFDL0IsMkJBQU8sTUFBTSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSTtBQUFBLGtCQUM1QztBQUFBLGdCQUNKO0FBQ0Esc0JBQU0sSUFBSSxNQUFNLEdBQUcsRUFBRTtBQUFBLGNBQ3pCLE9BQU87QUFDSCxzQkFBTSxVQUFVLENBQUM7QUFBQSxjQUNyQjtBQUNBLG1CQUFLLEtBQUssR0FBRztBQUFBLFlBQ2pCO0FBQ0E7QUFBQSxjQUNJLE1BQ0ksa0JBQ0EsTUFBTSxVQUFVLE1BQU0sS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQ3hDLE9BQ0EsSUFBSSxNQUFNLEVBQUU7QUFBQSxZQUNwQjtBQUNBLHdCQUFZO0FBQUEsVUFDaEI7QUFDQSxpQkFBTyxHQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsUUFDbkMsR0FBRyxFQUFFO0FBQUEsTUFDVDtBQUVBLFVBQUksZUFBZSxDQUFDO0FBRXBCLGVBQVMsZ0JBQWdCLE1BQU0sS0FBSztBQUNoQyxZQUFJLE1BQU0sc0JBQXNCLE1BQU07QUFDbEMsZ0JBQU0sbUJBQW1CLE1BQU0sR0FBRztBQUFBLFFBQ3RDO0FBQ0EsWUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHO0FBQ3JCLGVBQUssR0FBRztBQUNSLHVCQUFhLElBQUksSUFBSTtBQUFBLFFBQ3pCO0FBQUEsTUFDSjtBQUVBLFlBQU0sOEJBQThCO0FBQ3BDLFlBQU0scUJBQXFCO0FBRTNCLGVBQVNFLFlBQVcsT0FBTztBQUN2QixlQUNLLE9BQU8sYUFBYSxlQUFlLGlCQUFpQixZQUNyRCxPQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUssTUFBTTtBQUFBLE1BRWxEO0FBRUEsZUFBU0MsS0FBSSxRQUFRO0FBQ2pCLFlBQUksTUFBTTtBQUNWLGFBQUssS0FBSyxRQUFRO0FBQ2QsY0FBSSxXQUFXLFFBQVEsQ0FBQyxHQUFHO0FBQ3ZCLG1CQUFPLE9BQU8sQ0FBQztBQUNmLGdCQUFJRCxZQUFXLElBQUksR0FBRztBQUNsQixtQkFBSyxDQUFDLElBQUk7QUFBQSxZQUNkLE9BQU87QUFDSCxtQkFBSyxNQUFNLENBQUMsSUFBSTtBQUFBLFlBQ3BCO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFDQSxhQUFLLFVBQVU7QUFJZixhQUFLLGlDQUFpQyxJQUFJO0FBQUEsV0FDckMsS0FBSyx3QkFBd0IsVUFBVSxLQUFLLGNBQWMsVUFDdkQsTUFDQSxVQUFVO0FBQUEsUUFDbEI7QUFBQSxNQUNKO0FBRUEsZUFBUyxhQUFhLGNBQWMsYUFBYTtBQUM3QyxZQUFJLE1BQU0sT0FBTyxDQUFDLEdBQUcsWUFBWSxHQUM3QjtBQUNKLGFBQUssUUFBUSxhQUFhO0FBQ3RCLGNBQUksV0FBVyxhQUFhLElBQUksR0FBRztBQUMvQixnQkFBSVIsVUFBUyxhQUFhLElBQUksQ0FBQyxLQUFLQSxVQUFTLFlBQVksSUFBSSxDQUFDLEdBQUc7QUFDN0Qsa0JBQUksSUFBSSxJQUFJLENBQUM7QUFDYixxQkFBTyxJQUFJLElBQUksR0FBRyxhQUFhLElBQUksQ0FBQztBQUNwQyxxQkFBTyxJQUFJLElBQUksR0FBRyxZQUFZLElBQUksQ0FBQztBQUFBLFlBQ3ZDLFdBQVcsWUFBWSxJQUFJLEtBQUssTUFBTTtBQUNsQyxrQkFBSSxJQUFJLElBQUksWUFBWSxJQUFJO0FBQUEsWUFDaEMsT0FBTztBQUNILHFCQUFPLElBQUksSUFBSTtBQUFBLFlBQ25CO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFDQSxhQUFLLFFBQVEsY0FBYztBQUN2QixjQUNJLFdBQVcsY0FBYyxJQUFJLEtBQzdCLENBQUMsV0FBVyxhQUFhLElBQUksS0FDN0JBLFVBQVMsYUFBYSxJQUFJLENBQUMsR0FDN0I7QUFFRSxnQkFBSSxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUM7QUFBQSxVQUNwQztBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsT0FBTyxRQUFRO0FBQ3BCLFlBQUksVUFBVSxNQUFNO0FBQ2hCLGVBQUssSUFBSSxNQUFNO0FBQUEsUUFDbkI7QUFBQSxNQUNKO0FBRUEsVUFBSTtBQUVKLFVBQUksT0FBTyxNQUFNO0FBQ2IsZUFBTyxPQUFPO0FBQUEsTUFDbEIsT0FBTztBQUNILGVBQU8sU0FBVSxLQUFLO0FBQ2xCLGNBQUksR0FDQSxNQUFNLENBQUM7QUFDWCxlQUFLLEtBQUssS0FBSztBQUNYLGdCQUFJLFdBQVcsS0FBSyxDQUFDLEdBQUc7QUFDcEIsa0JBQUksS0FBSyxDQUFDO0FBQUEsWUFDZDtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBRUEsVUFBSSxrQkFBa0I7QUFBQSxRQUNsQixTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFDVixTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsTUFDZDtBQUVBLGVBQVMsU0FBUyxLQUFLLEtBQUtVLE1BQUs7QUFDN0IsWUFBSSxTQUFTLEtBQUssVUFBVSxHQUFHLEtBQUssS0FBSyxVQUFVLFVBQVU7QUFDN0QsZUFBT0YsWUFBVyxNQUFNLElBQUksT0FBTyxLQUFLLEtBQUtFLElBQUcsSUFBSTtBQUFBLE1BQ3hEO0FBRUEsZUFBUyxTQUFTLFFBQVEsY0FBYyxXQUFXO0FBQy9DLFlBQUksWUFBWSxLQUFLLEtBQUssSUFBSSxNQUFNLEdBQ2hDLGNBQWMsZUFBZSxVQUFVLFFBQ3ZDQyxRQUFPLFVBQVU7QUFDckIsZ0JBQ0tBLFFBQVEsWUFBWSxNQUFNLEtBQU0sT0FDakMsS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUMxRDtBQUFBLE1BRVI7QUFFQSxVQUFJLG1CQUNJLDBNQUNKLHdCQUF3Qiw4Q0FDeEIsa0JBQWtCLENBQUMsR0FDbkIsdUJBQXVCLENBQUM7QUFNNUIsZUFBUyxlQUFlQyxRQUFPLFFBQVFDLFVBQVNmLFdBQVU7QUFDdEQsWUFBSSxPQUFPQTtBQUNYLFlBQUksT0FBT0EsY0FBYSxVQUFVO0FBQzlCLGlCQUFPLFdBQVk7QUFDZixtQkFBTyxLQUFLQSxTQUFRLEVBQUU7QUFBQSxVQUMxQjtBQUFBLFFBQ0o7QUFDQSxZQUFJYyxRQUFPO0FBQ1AsK0JBQXFCQSxNQUFLLElBQUk7QUFBQSxRQUNsQztBQUNBLFlBQUksUUFBUTtBQUNSLCtCQUFxQixPQUFPLENBQUMsQ0FBQyxJQUFJLFdBQVk7QUFDMUMsbUJBQU8sU0FBUyxLQUFLLE1BQU0sTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFBQSxVQUNyRTtBQUFBLFFBQ0o7QUFDQSxZQUFJQyxVQUFTO0FBQ1QsK0JBQXFCQSxRQUFPLElBQUksV0FBWTtBQUN4QyxtQkFBTyxLQUFLLFdBQVcsRUFBRTtBQUFBLGNBQ3JCLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFBQSxjQUMxQkQ7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsZUFBUyx1QkFBdUIsT0FBTztBQUNuQyxZQUFJLE1BQU0sTUFBTSxVQUFVLEdBQUc7QUFDekIsaUJBQU8sTUFBTSxRQUFRLFlBQVksRUFBRTtBQUFBLFFBQ3ZDO0FBQ0EsZUFBTyxNQUFNLFFBQVEsT0FBTyxFQUFFO0FBQUEsTUFDbEM7QUFFQSxlQUFTLG1CQUFtQlQsU0FBUTtBQUNoQyxZQUFJLFFBQVFBLFFBQU8sTUFBTSxnQkFBZ0IsR0FDckMsR0FDQTtBQUVKLGFBQUssSUFBSSxHQUFHLFNBQVMsTUFBTSxRQUFRLElBQUksUUFBUSxLQUFLO0FBQ2hELGNBQUkscUJBQXFCLE1BQU0sQ0FBQyxDQUFDLEdBQUc7QUFDaEMsa0JBQU0sQ0FBQyxJQUFJLHFCQUFxQixNQUFNLENBQUMsQ0FBQztBQUFBLFVBQzVDLE9BQU87QUFDSCxrQkFBTSxDQUFDLElBQUksdUJBQXVCLE1BQU0sQ0FBQyxDQUFDO0FBQUEsVUFDOUM7QUFBQSxRQUNKO0FBRUEsZUFBTyxTQUFVLEtBQUs7QUFDbEIsY0FBSSxTQUFTLElBQ1RXO0FBQ0osZUFBS0EsS0FBSSxHQUFHQSxLQUFJLFFBQVFBLE1BQUs7QUFDekIsc0JBQVVOLFlBQVcsTUFBTU0sRUFBQyxDQUFDLElBQ3ZCLE1BQU1BLEVBQUMsRUFBRSxLQUFLLEtBQUtYLE9BQU0sSUFDekIsTUFBTVcsRUFBQztBQUFBLFVBQ2pCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUdBLGVBQVMsYUFBYSxHQUFHWCxTQUFRO0FBQzdCLFlBQUksQ0FBQyxFQUFFLFFBQVEsR0FBRztBQUNkLGlCQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVk7QUFBQSxRQUN0QztBQUVBLFFBQUFBLFVBQVMsYUFBYUEsU0FBUSxFQUFFLFdBQVcsQ0FBQztBQUM1Qyx3QkFBZ0JBLE9BQU0sSUFDbEIsZ0JBQWdCQSxPQUFNLEtBQUssbUJBQW1CQSxPQUFNO0FBRXhELGVBQU8sZ0JBQWdCQSxPQUFNLEVBQUUsQ0FBQztBQUFBLE1BQ3BDO0FBRUEsZUFBUyxhQUFhQSxTQUFRQyxTQUFRO0FBQ2xDLFlBQUksSUFBSTtBQUVSLGlCQUFTLDRCQUE0QixPQUFPO0FBQ3hDLGlCQUFPQSxRQUFPLGVBQWUsS0FBSyxLQUFLO0FBQUEsUUFDM0M7QUFFQSw4QkFBc0IsWUFBWTtBQUNsQyxlQUFPLEtBQUssS0FBSyxzQkFBc0IsS0FBS0QsT0FBTSxHQUFHO0FBQ2pELFVBQUFBLFVBQVNBLFFBQU87QUFBQSxZQUNaO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFDQSxnQ0FBc0IsWUFBWTtBQUNsQyxlQUFLO0FBQUEsUUFDVDtBQUVBLGVBQU9BO0FBQUEsTUFDWDtBQUVBLFVBQUksd0JBQXdCO0FBQUEsUUFDeEIsS0FBSztBQUFBLFFBQ0wsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osS0FBSztBQUFBLFFBQ0wsTUFBTTtBQUFBLE1BQ1Y7QUFFQSxlQUFTLGVBQWUsS0FBSztBQUN6QixZQUFJQSxVQUFTLEtBQUssZ0JBQWdCLEdBQUcsR0FDakMsY0FBYyxLQUFLLGdCQUFnQixJQUFJLFlBQVksQ0FBQztBQUV4RCxZQUFJQSxXQUFVLENBQUMsYUFBYTtBQUN4QixpQkFBT0E7QUFBQSxRQUNYO0FBRUEsYUFBSyxnQkFBZ0IsR0FBRyxJQUFJLFlBQ3ZCLE1BQU0sZ0JBQWdCLEVBQ3RCLElBQUksU0FBVSxLQUFLO0FBQ2hCLGNBQ0ksUUFBUSxVQUNSLFFBQVEsUUFDUixRQUFRLFFBQ1IsUUFBUSxRQUNWO0FBQ0UsbUJBQU8sSUFBSSxNQUFNLENBQUM7QUFBQSxVQUN0QjtBQUNBLGlCQUFPO0FBQUEsUUFDWCxDQUFDLEVBQ0EsS0FBSyxFQUFFO0FBRVosZUFBTyxLQUFLLGdCQUFnQixHQUFHO0FBQUEsTUFDbkM7QUFFQSxVQUFJLHFCQUFxQjtBQUV6QixlQUFTLGNBQWM7QUFDbkIsZUFBTyxLQUFLO0FBQUEsTUFDaEI7QUFFQSxVQUFJLGlCQUFpQixNQUNqQixnQ0FBZ0M7QUFFcEMsZUFBUyxRQUFRLFFBQVE7QUFDckIsZUFBTyxLQUFLLFNBQVMsUUFBUSxNQUFNLE1BQU07QUFBQSxNQUM3QztBQUVBLFVBQUksc0JBQXNCO0FBQUEsUUFDdEIsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLFFBQ04sR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLFFBQ0osR0FBRztBQUFBLFFBQ0gsSUFBSTtBQUFBLE1BQ1I7QUFFQSxlQUFTLGFBQWEsUUFBUSxlQUFlLFFBQVEsVUFBVTtBQUMzRCxZQUFJLFNBQVMsS0FBSyxjQUFjLE1BQU07QUFDdEMsZUFBT0ssWUFBVyxNQUFNLElBQ2xCLE9BQU8sUUFBUSxlQUFlLFFBQVEsUUFBUSxJQUM5QyxPQUFPLFFBQVEsT0FBTyxNQUFNO0FBQUEsTUFDdEM7QUFFQSxlQUFTLFdBQVdPLE9BQU0sUUFBUTtBQUM5QixZQUFJWixVQUFTLEtBQUssY0FBY1ksUUFBTyxJQUFJLFdBQVcsTUFBTTtBQUM1RCxlQUFPUCxZQUFXTCxPQUFNLElBQUlBLFFBQU8sTUFBTSxJQUFJQSxRQUFPLFFBQVEsT0FBTyxNQUFNO0FBQUEsTUFDN0U7QUFFQSxVQUFJLFVBQVU7QUFBQSxRQUNWLEdBQUc7QUFBQSxRQUNILE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLEdBQUc7QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOLEtBQUs7QUFBQSxRQUNMLEdBQUc7QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxRQUNULEdBQUc7QUFBQSxRQUNILGFBQWE7QUFBQSxRQUNiLFlBQVk7QUFBQSxRQUNaLEtBQUs7QUFBQSxRQUNMLFlBQVk7QUFBQSxRQUNaLFdBQVc7QUFBQSxRQUNYLEdBQUc7QUFBQSxRQUNILE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLElBQUk7QUFBQSxRQUNKLGNBQWM7QUFBQSxRQUNkLGFBQWE7QUFBQSxRQUNiLEdBQUc7QUFBQSxRQUNILFNBQVM7QUFBQSxRQUNULFFBQVE7QUFBQSxRQUNSLEdBQUc7QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSLE9BQU87QUFBQSxRQUNQLEdBQUc7QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxRQUNULEdBQUc7QUFBQSxRQUNILFNBQVM7QUFBQSxRQUNULFFBQVE7QUFBQSxRQUNSLElBQUk7QUFBQSxRQUNKLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUNWLElBQUk7QUFBQSxRQUNKLGNBQWM7QUFBQSxRQUNkLGFBQWE7QUFBQSxRQUNiLEdBQUc7QUFBQSxRQUNILE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxRQUNOLEdBQUc7QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxRQUNULEdBQUc7QUFBQSxRQUNILE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxNQUNWO0FBRUEsZUFBUyxlQUFlLE9BQU87QUFDM0IsZUFBTyxPQUFPLFVBQVUsV0FDbEIsUUFBUSxLQUFLLEtBQUssUUFBUSxNQUFNLFlBQVksQ0FBQyxJQUM3QztBQUFBLE1BQ1Y7QUFFQSxlQUFTLHFCQUFxQixhQUFhO0FBQ3ZDLFlBQUksa0JBQWtCLENBQUMsR0FDbkIsZ0JBQ0E7QUFFSixhQUFLLFFBQVEsYUFBYTtBQUN0QixjQUFJLFdBQVcsYUFBYSxJQUFJLEdBQUc7QUFDL0IsNkJBQWlCLGVBQWUsSUFBSTtBQUNwQyxnQkFBSSxnQkFBZ0I7QUFDaEIsOEJBQWdCLGNBQWMsSUFBSSxZQUFZLElBQUk7QUFBQSxZQUN0RDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBRUEsZUFBTztBQUFBLE1BQ1g7QUFFQSxVQUFJLGFBQWE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLEtBQUs7QUFBQSxRQUNMLFNBQVM7QUFBQSxRQUNULFlBQVk7QUFBQSxRQUNaLFdBQVc7QUFBQSxRQUNYLE1BQU07QUFBQSxRQUNOLGFBQWE7QUFBQSxRQUNiLFFBQVE7QUFBQSxRQUNSLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxRQUNULFFBQVE7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWLGFBQWE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE1BQU07QUFBQSxNQUNWO0FBRUEsZUFBUyxvQkFBb0IsVUFBVTtBQUNuQyxZQUFJLFFBQVEsQ0FBQyxHQUNUO0FBQ0osYUFBSyxLQUFLLFVBQVU7QUFDaEIsY0FBSSxXQUFXLFVBQVUsQ0FBQyxHQUFHO0FBQ3pCLGtCQUFNLEtBQUssRUFBRSxNQUFNLEdBQUcsVUFBVSxXQUFXLENBQUMsRUFBRSxDQUFDO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBQ0EsY0FBTSxLQUFLLFNBQVUsR0FBRyxHQUFHO0FBQ3ZCLGlCQUFPLEVBQUUsV0FBVyxFQUFFO0FBQUEsUUFDMUIsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNYO0FBRUEsVUFBSSxTQUFTLE1BQ1QsU0FBUyxRQUNULFNBQVMsU0FDVCxTQUFTLFNBQ1QsU0FBUyxjQUNULFlBQVksU0FDWixZQUFZLGFBQ1osWUFBWSxpQkFDWixZQUFZLFdBQ1osWUFBWSxXQUNaLFlBQVksZ0JBQ1osZ0JBQWdCLE9BQ2hCLGNBQWMsWUFDZCxjQUFjLHNCQUNkLG1CQUFtQiwyQkFDbkIsaUJBQWlCLHdCQUdqQixZQUNJLHlKQUNKLHlCQUF5QixhQUN6QixtQkFBbUIsaUJBQ25CO0FBRUosZ0JBQVUsQ0FBQztBQUVYLGVBQVMsY0FBY1MsUUFBTyxPQUFPLGFBQWE7QUFDOUMsZ0JBQVFBLE1BQUssSUFBSUosWUFBVyxLQUFLLElBQzNCLFFBQ0EsU0FBVSxVQUFVUSxhQUFZO0FBQzVCLGlCQUFPLFlBQVksY0FBYyxjQUFjO0FBQUEsUUFDbkQ7QUFBQSxNQUNWO0FBRUEsZUFBUyxzQkFBc0JKLFFBQU8sUUFBUTtBQUMxQyxZQUFJLENBQUMsV0FBVyxTQUFTQSxNQUFLLEdBQUc7QUFDN0IsaUJBQU8sSUFBSSxPQUFPLGVBQWVBLE1BQUssQ0FBQztBQUFBLFFBQzNDO0FBRUEsZUFBTyxRQUFRQSxNQUFLLEVBQUUsT0FBTyxTQUFTLE9BQU8sT0FBTztBQUFBLE1BQ3hEO0FBR0EsZUFBUyxlQUFlLEdBQUc7QUFDdkIsZUFBTztBQUFBLFVBQ0gsRUFDSyxRQUFRLE1BQU0sRUFBRSxFQUNoQjtBQUFBLFlBQ0c7QUFBQSxZQUNBLFNBQVUsU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJO0FBQy9CLHFCQUFPLE1BQU0sTUFBTSxNQUFNO0FBQUEsWUFDN0I7QUFBQSxVQUNKO0FBQUEsUUFDUjtBQUFBLE1BQ0o7QUFFQSxlQUFTLFlBQVksR0FBRztBQUNwQixlQUFPLEVBQUUsUUFBUSwwQkFBMEIsTUFBTTtBQUFBLE1BQ3JEO0FBRUEsZUFBUyxTQUFTLFFBQVE7QUFDdEIsWUFBSSxTQUFTLEdBQUc7QUFFWixpQkFBTyxLQUFLLEtBQUssTUFBTSxLQUFLO0FBQUEsUUFDaEMsT0FBTztBQUNILGlCQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBRUEsZUFBUyxNQUFNLHFCQUFxQjtBQUNoQyxZQUFJLGdCQUFnQixDQUFDLHFCQUNqQixRQUFRO0FBRVosWUFBSSxrQkFBa0IsS0FBSyxTQUFTLGFBQWEsR0FBRztBQUNoRCxrQkFBUSxTQUFTLGFBQWE7QUFBQSxRQUNsQztBQUVBLGVBQU87QUFBQSxNQUNYO0FBRUEsVUFBSSxTQUFTLENBQUM7QUFFZCxlQUFTLGNBQWNBLFFBQU9kLFdBQVU7QUFDcEMsWUFBSSxHQUNBLE9BQU9BLFdBQ1A7QUFDSixZQUFJLE9BQU9jLFdBQVUsVUFBVTtBQUMzQixVQUFBQSxTQUFRLENBQUNBLE1BQUs7QUFBQSxRQUNsQjtBQUNBLFlBQUlYLFVBQVNILFNBQVEsR0FBRztBQUNwQixpQkFBTyxTQUFVLE9BQU8sT0FBTztBQUMzQixrQkFBTUEsU0FBUSxJQUFJLE1BQU0sS0FBSztBQUFBLFVBQ2pDO0FBQUEsUUFDSjtBQUNBLG1CQUFXYyxPQUFNO0FBQ2pCLGFBQUssSUFBSSxHQUFHLElBQUksVUFBVSxLQUFLO0FBQzNCLGlCQUFPQSxPQUFNLENBQUMsQ0FBQyxJQUFJO0FBQUEsUUFDdkI7QUFBQSxNQUNKO0FBRUEsZUFBUyxrQkFBa0JBLFFBQU9kLFdBQVU7QUFDeEMsc0JBQWNjLFFBQU8sU0FBVSxPQUFPLE9BQU8sUUFBUUEsUUFBTztBQUN4RCxpQkFBTyxLQUFLLE9BQU8sTUFBTSxDQUFDO0FBQzFCLFVBQUFkLFVBQVMsT0FBTyxPQUFPLElBQUksUUFBUWMsTUFBSztBQUFBLFFBQzVDLENBQUM7QUFBQSxNQUNMO0FBRUEsZUFBUyx3QkFBd0JBLFFBQU8sT0FBTyxRQUFRO0FBQ25ELFlBQUksU0FBUyxRQUFRLFdBQVcsUUFBUUEsTUFBSyxHQUFHO0FBQzVDLGlCQUFPQSxNQUFLLEVBQUUsT0FBTyxPQUFPLElBQUksUUFBUUEsTUFBSztBQUFBLFFBQ2pEO0FBQUEsTUFDSjtBQUVBLGVBQVMsV0FBVyxNQUFNO0FBQ3RCLGVBQVEsT0FBTyxNQUFNLEtBQUssT0FBTyxRQUFRLEtBQU0sT0FBTyxRQUFRO0FBQUEsTUFDbEU7QUFFQSxVQUFJLE9BQU8sR0FDUCxRQUFRLEdBQ1IsT0FBTyxHQUNQLE9BQU8sR0FDUCxTQUFTLEdBQ1QsU0FBUyxHQUNULGNBQWMsR0FDZCxPQUFPLEdBQ1AsVUFBVTtBQUlkLHFCQUFlLEtBQUssR0FBRyxHQUFHLFdBQVk7QUFDbEMsWUFBSSxJQUFJLEtBQUssS0FBSztBQUNsQixlQUFPLEtBQUssT0FBTyxTQUFTLEdBQUcsQ0FBQyxJQUFJLE1BQU07QUFBQSxNQUM5QyxDQUFDO0FBRUQscUJBQWUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsV0FBWTtBQUN4QyxlQUFPLEtBQUssS0FBSyxJQUFJO0FBQUEsTUFDekIsQ0FBQztBQUVELHFCQUFlLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLE1BQU07QUFDeEMscUJBQWUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsTUFBTTtBQUN6QyxxQkFBZSxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxHQUFHLE1BQU07QUFJaEQsb0JBQWMsS0FBSyxXQUFXO0FBQzlCLG9CQUFjLE1BQU0sV0FBVyxNQUFNO0FBQ3JDLG9CQUFjLFFBQVEsV0FBVyxNQUFNO0FBQ3ZDLG9CQUFjLFNBQVMsV0FBVyxNQUFNO0FBQ3hDLG9CQUFjLFVBQVUsV0FBVyxNQUFNO0FBRXpDLG9CQUFjLENBQUMsU0FBUyxRQUFRLEdBQUcsSUFBSTtBQUN2QyxvQkFBYyxRQUFRLFNBQVUsT0FBTyxPQUFPO0FBQzFDLGNBQU0sSUFBSSxJQUNOLE1BQU0sV0FBVyxJQUFJLE1BQU0sa0JBQWtCLEtBQUssSUFBSSxNQUFNLEtBQUs7QUFBQSxNQUN6RSxDQUFDO0FBQ0Qsb0JBQWMsTUFBTSxTQUFVLE9BQU8sT0FBTztBQUN4QyxjQUFNLElBQUksSUFBSSxNQUFNLGtCQUFrQixLQUFLO0FBQUEsTUFDL0MsQ0FBQztBQUNELG9CQUFjLEtBQUssU0FBVSxPQUFPLE9BQU87QUFDdkMsY0FBTSxJQUFJLElBQUksU0FBUyxPQUFPLEVBQUU7QUFBQSxNQUNwQyxDQUFDO0FBSUQsZUFBUyxXQUFXLE1BQU07QUFDdEIsZUFBTyxXQUFXLElBQUksSUFBSSxNQUFNO0FBQUEsTUFDcEM7QUFJQSxZQUFNLG9CQUFvQixTQUFVLE9BQU87QUFDdkMsZUFBTyxNQUFNLEtBQUssS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLE9BQU87QUFBQSxNQUN0RDtBQUlBLFVBQUksYUFBYSxXQUFXLFlBQVksSUFBSTtBQUU1QyxlQUFTLGdCQUFnQjtBQUNyQixlQUFPLFdBQVcsS0FBSyxLQUFLLENBQUM7QUFBQSxNQUNqQztBQUVBLGVBQVMsV0FBVyxNQUFNLFVBQVU7QUFDaEMsZUFBTyxTQUFVLE9BQU87QUFDcEIsY0FBSSxTQUFTLE1BQU07QUFDZixrQkFBTSxNQUFNLE1BQU0sS0FBSztBQUN2QixrQkFBTSxhQUFhLE1BQU0sUUFBUTtBQUNqQyxtQkFBTztBQUFBLFVBQ1gsT0FBTztBQUNILG1CQUFPLElBQUksTUFBTSxJQUFJO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLGVBQVMsSUFBSSxLQUFLLE1BQU07QUFDcEIsWUFBSSxDQUFDLElBQUksUUFBUSxHQUFHO0FBQ2hCLGlCQUFPO0FBQUEsUUFDWDtBQUVBLFlBQUksSUFBSSxJQUFJLElBQ1IsUUFBUSxJQUFJO0FBRWhCLGdCQUFRLE1BQU07QUFBQSxVQUNWLEtBQUs7QUFDRCxtQkFBTyxRQUFRLEVBQUUsbUJBQW1CLElBQUksRUFBRSxnQkFBZ0I7QUFBQSxVQUM5RCxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLGNBQWMsSUFBSSxFQUFFLFdBQVc7QUFBQSxVQUNwRCxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLGNBQWMsSUFBSSxFQUFFLFdBQVc7QUFBQSxVQUNwRCxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLFlBQVksSUFBSSxFQUFFLFNBQVM7QUFBQSxVQUNoRCxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLFdBQVcsSUFBSSxFQUFFLFFBQVE7QUFBQSxVQUM5QyxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLFVBQVUsSUFBSSxFQUFFLE9BQU87QUFBQSxVQUM1QyxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLFlBQVksSUFBSSxFQUFFLFNBQVM7QUFBQSxVQUNoRCxLQUFLO0FBQ0QsbUJBQU8sUUFBUSxFQUFFLGVBQWUsSUFBSSxFQUFFLFlBQVk7QUFBQSxVQUN0RDtBQUNJLG1CQUFPO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFFQSxlQUFTLE1BQU0sS0FBSyxNQUFNLE9BQU87QUFDN0IsWUFBSSxHQUFHLE9BQU8sTUFBTSxPQUFPO0FBRTNCLFlBQUksQ0FBQyxJQUFJLFFBQVEsS0FBSyxNQUFNLEtBQUssR0FBRztBQUNoQztBQUFBLFFBQ0o7QUFFQSxZQUFJLElBQUk7QUFDUixnQkFBUSxJQUFJO0FBRVosZ0JBQVEsTUFBTTtBQUFBLFVBQ1YsS0FBSztBQUNELG1CQUFPLE1BQU0sUUFDUCxFQUFFLG1CQUFtQixLQUFLLElBQzFCLEVBQUUsZ0JBQWdCLEtBQUs7QUFBQSxVQUNqQyxLQUFLO0FBQ0QsbUJBQU8sTUFBTSxRQUFRLEVBQUUsY0FBYyxLQUFLLElBQUksRUFBRSxXQUFXLEtBQUs7QUFBQSxVQUNwRSxLQUFLO0FBQ0QsbUJBQU8sTUFBTSxRQUFRLEVBQUUsY0FBYyxLQUFLLElBQUksRUFBRSxXQUFXLEtBQUs7QUFBQSxVQUNwRSxLQUFLO0FBQ0QsbUJBQU8sTUFBTSxRQUFRLEVBQUUsWUFBWSxLQUFLLElBQUksRUFBRSxTQUFTLEtBQUs7QUFBQSxVQUNoRSxLQUFLO0FBQ0QsbUJBQU8sTUFBTSxRQUFRLEVBQUUsV0FBVyxLQUFLLElBQUksRUFBRSxRQUFRLEtBQUs7QUFBQSxVQUs5RCxLQUFLO0FBQ0Q7QUFBQSxVQUNKO0FBQ0k7QUFBQSxRQUNSO0FBRUEsZUFBTztBQUNQLGdCQUFRLElBQUksTUFBTTtBQUNsQixlQUFPLElBQUksS0FBSztBQUNoQixlQUFPLFNBQVMsTUFBTSxVQUFVLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSSxLQUFLO0FBQzlELGNBQU0sUUFDQSxFQUFFLGVBQWUsTUFBTSxPQUFPLElBQUksSUFDbEMsRUFBRSxZQUFZLE1BQU0sT0FBTyxJQUFJO0FBQUEsTUFDekM7QUFJQSxlQUFTLFVBQVUsT0FBTztBQUN0QixnQkFBUSxlQUFlLEtBQUs7QUFDNUIsWUFBSUosWUFBVyxLQUFLLEtBQUssQ0FBQyxHQUFHO0FBQ3pCLGlCQUFPLEtBQUssS0FBSyxFQUFFO0FBQUEsUUFDdkI7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsVUFBVSxPQUFPLE9BQU87QUFDN0IsWUFBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixrQkFBUSxxQkFBcUIsS0FBSztBQUNsQyxjQUFJLGNBQWMsb0JBQW9CLEtBQUssR0FDdkMsR0FDQSxpQkFBaUIsWUFBWTtBQUNqQyxlQUFLLElBQUksR0FBRyxJQUFJLGdCQUFnQixLQUFLO0FBQ2pDLGlCQUFLLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztBQUFBLFVBQ3hEO0FBQUEsUUFDSixPQUFPO0FBQ0gsa0JBQVEsZUFBZSxLQUFLO0FBQzVCLGNBQUlBLFlBQVcsS0FBSyxLQUFLLENBQUMsR0FBRztBQUN6QixtQkFBTyxLQUFLLEtBQUssRUFBRSxLQUFLO0FBQUEsVUFDNUI7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLElBQUksR0FBRyxHQUFHO0FBQ2YsZ0JBQVMsSUFBSSxJQUFLLEtBQUs7QUFBQSxNQUMzQjtBQUVBLFVBQUk7QUFFSixVQUFJLE1BQU0sVUFBVSxTQUFTO0FBQ3pCLGtCQUFVLE1BQU0sVUFBVTtBQUFBLE1BQzlCLE9BQU87QUFDSCxrQkFBVSxTQUFVLEdBQUc7QUFFbkIsY0FBSTtBQUNKLGVBQUssSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEVBQUUsR0FBRztBQUM5QixnQkFBSSxLQUFLLENBQUMsTUFBTSxHQUFHO0FBQ2YscUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxlQUFTLFlBQVksTUFBTSxPQUFPO0FBQzlCLFlBQUksTUFBTSxJQUFJLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFDN0IsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxXQUFXLElBQUksT0FBTyxFQUFFO0FBQzVCLGlCQUFTLFFBQVEsWUFBWTtBQUM3QixlQUFPLGFBQWEsSUFDZCxXQUFXLElBQUksSUFDWCxLQUNBLEtBQ0osS0FBTyxXQUFXLElBQUs7QUFBQSxNQUNqQztBQUlBLHFCQUFlLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLFdBQVk7QUFDN0MsZUFBTyxLQUFLLE1BQU0sSUFBSTtBQUFBLE1BQzFCLENBQUM7QUFFRCxxQkFBZSxPQUFPLEdBQUcsR0FBRyxTQUFVTCxTQUFRO0FBQzFDLGVBQU8sS0FBSyxXQUFXLEVBQUUsWUFBWSxNQUFNQSxPQUFNO0FBQUEsTUFDckQsQ0FBQztBQUVELHFCQUFlLFFBQVEsR0FBRyxHQUFHLFNBQVVBLFNBQVE7QUFDM0MsZUFBTyxLQUFLLFdBQVcsRUFBRSxPQUFPLE1BQU1BLE9BQU07QUFBQSxNQUNoRCxDQUFDO0FBSUQsb0JBQWMsS0FBSyxXQUFXLHNCQUFzQjtBQUNwRCxvQkFBYyxNQUFNLFdBQVcsTUFBTTtBQUNyQyxvQkFBYyxPQUFPLFNBQVUsVUFBVUMsU0FBUTtBQUM3QyxlQUFPQSxRQUFPLGlCQUFpQixRQUFRO0FBQUEsTUFDM0MsQ0FBQztBQUNELG9CQUFjLFFBQVEsU0FBVSxVQUFVQSxTQUFRO0FBQzlDLGVBQU9BLFFBQU8sWUFBWSxRQUFRO0FBQUEsTUFDdEMsQ0FBQztBQUVELG9CQUFjLENBQUMsS0FBSyxJQUFJLEdBQUcsU0FBVSxPQUFPLE9BQU87QUFDL0MsY0FBTSxLQUFLLElBQUksTUFBTSxLQUFLLElBQUk7QUFBQSxNQUNsQyxDQUFDO0FBRUQsb0JBQWMsQ0FBQyxPQUFPLE1BQU0sR0FBRyxTQUFVLE9BQU8sT0FBTyxRQUFRUSxRQUFPO0FBQ2xFLFlBQUksUUFBUSxPQUFPLFFBQVEsWUFBWSxPQUFPQSxRQUFPLE9BQU8sT0FBTztBQUVuRSxZQUFJLFNBQVMsTUFBTTtBQUNmLGdCQUFNLEtBQUssSUFBSTtBQUFBLFFBQ25CLE9BQU87QUFDSCwwQkFBZ0IsTUFBTSxFQUFFLGVBQWU7QUFBQSxRQUMzQztBQUFBLE1BQ0osQ0FBQztBQUlELFVBQUksc0JBQ0ksd0ZBQXdGO0FBQUEsUUFDcEY7QUFBQSxNQUNKLEdBQ0osMkJBQ0ksa0RBQWtELE1BQU0sR0FBRyxHQUMvRCxtQkFBbUIsaUNBQ25CLDBCQUEwQixXQUMxQixxQkFBcUI7QUFFekIsZUFBUyxhQUFhLEdBQUdULFNBQVE7QUFDN0IsWUFBSSxDQUFDLEdBQUc7QUFDSixpQkFBT0osU0FBUSxLQUFLLE9BQU8sSUFDckIsS0FBSyxVQUNMLEtBQUssUUFBUSxZQUFZO0FBQUEsUUFDbkM7QUFDQSxlQUFPQSxTQUFRLEtBQUssT0FBTyxJQUNyQixLQUFLLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFDdEIsS0FBSyxTQUNBLEtBQUssUUFBUSxZQUFZLGtCQUFrQixLQUFLSSxPQUFNLElBQ2pELFdBQ0EsWUFDVixFQUFFLEVBQUUsTUFBTSxDQUFDO0FBQUEsTUFDckI7QUFFQSxlQUFTLGtCQUFrQixHQUFHQSxTQUFRO0FBQ2xDLFlBQUksQ0FBQyxHQUFHO0FBQ0osaUJBQU9KLFNBQVEsS0FBSyxZQUFZLElBQzFCLEtBQUssZUFDTCxLQUFLLGFBQWEsWUFBWTtBQUFBLFFBQ3hDO0FBQ0EsZUFBT0EsU0FBUSxLQUFLLFlBQVksSUFDMUIsS0FBSyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQzNCLEtBQUssYUFDRCxpQkFBaUIsS0FBS0ksT0FBTSxJQUFJLFdBQVcsWUFDL0MsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQ3JCO0FBRUEsZUFBUyxrQkFBa0IsV0FBV0EsU0FBUSxRQUFRO0FBQ2xELFlBQUksR0FDQSxJQUNBLEtBQ0EsTUFBTSxVQUFVLGtCQUFrQjtBQUN0QyxZQUFJLENBQUMsS0FBSyxjQUFjO0FBRXBCLGVBQUssZUFBZSxDQUFDO0FBQ3JCLGVBQUssbUJBQW1CLENBQUM7QUFDekIsZUFBSyxvQkFBb0IsQ0FBQztBQUMxQixlQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ3JCLGtCQUFNLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQztBQUN6QixpQkFBSyxrQkFBa0IsQ0FBQyxJQUFJLEtBQUs7QUFBQSxjQUM3QjtBQUFBLGNBQ0E7QUFBQSxZQUNKLEVBQUUsa0JBQWtCO0FBQ3BCLGlCQUFLLGlCQUFpQixDQUFDLElBQUksS0FBSyxPQUFPLEtBQUssRUFBRSxFQUFFLGtCQUFrQjtBQUFBLFVBQ3RFO0FBQUEsUUFDSjtBQUVBLFlBQUksUUFBUTtBQUNSLGNBQUlBLFlBQVcsT0FBTztBQUNsQixpQkFBSyxRQUFRLEtBQUssS0FBSyxtQkFBbUIsR0FBRztBQUM3QyxtQkFBTyxPQUFPLEtBQUssS0FBSztBQUFBLFVBQzVCLE9BQU87QUFDSCxpQkFBSyxRQUFRLEtBQUssS0FBSyxrQkFBa0IsR0FBRztBQUM1QyxtQkFBTyxPQUFPLEtBQUssS0FBSztBQUFBLFVBQzVCO0FBQUEsUUFDSixPQUFPO0FBQ0gsY0FBSUEsWUFBVyxPQUFPO0FBQ2xCLGlCQUFLLFFBQVEsS0FBSyxLQUFLLG1CQUFtQixHQUFHO0FBQzdDLGdCQUFJLE9BQU8sSUFBSTtBQUNYLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGlCQUFLLFFBQVEsS0FBSyxLQUFLLGtCQUFrQixHQUFHO0FBQzVDLG1CQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsVUFDNUIsT0FBTztBQUNILGlCQUFLLFFBQVEsS0FBSyxLQUFLLGtCQUFrQixHQUFHO0FBQzVDLGdCQUFJLE9BQU8sSUFBSTtBQUNYLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGlCQUFLLFFBQVEsS0FBSyxLQUFLLG1CQUFtQixHQUFHO0FBQzdDLG1CQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsVUFDNUI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLGVBQVMsa0JBQWtCLFdBQVdBLFNBQVEsUUFBUTtBQUNsRCxZQUFJLEdBQUcsS0FBSztBQUVaLFlBQUksS0FBSyxtQkFBbUI7QUFDeEIsaUJBQU8sa0JBQWtCLEtBQUssTUFBTSxXQUFXQSxTQUFRLE1BQU07QUFBQSxRQUNqRTtBQUVBLFlBQUksQ0FBQyxLQUFLLGNBQWM7QUFDcEIsZUFBSyxlQUFlLENBQUM7QUFDckIsZUFBSyxtQkFBbUIsQ0FBQztBQUN6QixlQUFLLG9CQUFvQixDQUFDO0FBQUEsUUFDOUI7QUFLQSxhQUFLLElBQUksR0FBRyxJQUFJLElBQUksS0FBSztBQUVyQixnQkFBTSxVQUFVLENBQUMsS0FBTSxDQUFDLENBQUM7QUFDekIsY0FBSSxVQUFVLENBQUMsS0FBSyxpQkFBaUIsQ0FBQyxHQUFHO0FBQ3JDLGlCQUFLLGlCQUFpQixDQUFDLElBQUksSUFBSTtBQUFBLGNBQzNCLE1BQU0sS0FBSyxPQUFPLEtBQUssRUFBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLElBQUk7QUFBQSxjQUM5QztBQUFBLFlBQ0o7QUFDQSxpQkFBSyxrQkFBa0IsQ0FBQyxJQUFJLElBQUk7QUFBQSxjQUM1QixNQUFNLEtBQUssWUFBWSxLQUFLLEVBQUUsRUFBRSxRQUFRLEtBQUssRUFBRSxJQUFJO0FBQUEsY0FDbkQ7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGNBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxhQUFhLENBQUMsR0FBRztBQUNsQyxvQkFDSSxNQUFNLEtBQUssT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssWUFBWSxLQUFLLEVBQUU7QUFDaEUsaUJBQUssYUFBYSxDQUFDLElBQUksSUFBSSxPQUFPLE1BQU0sUUFBUSxLQUFLLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDakU7QUFFQSxjQUNJLFVBQ0FBLFlBQVcsVUFDWCxLQUFLLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQ3pDO0FBQ0UsbUJBQU87QUFBQSxVQUNYLFdBQ0ksVUFDQUEsWUFBVyxTQUNYLEtBQUssa0JBQWtCLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FDMUM7QUFDRSxtQkFBTztBQUFBLFVBQ1gsV0FBVyxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRztBQUN4RCxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUlBLGVBQVMsU0FBUyxLQUFLLE9BQU87QUFDMUIsWUFBSSxDQUFDLElBQUksUUFBUSxHQUFHO0FBRWhCLGlCQUFPO0FBQUEsUUFDWDtBQUVBLFlBQUksT0FBTyxVQUFVLFVBQVU7QUFDM0IsY0FBSSxRQUFRLEtBQUssS0FBSyxHQUFHO0FBQ3JCLG9CQUFRLE1BQU0sS0FBSztBQUFBLFVBQ3ZCLE9BQU87QUFDSCxvQkFBUSxJQUFJLFdBQVcsRUFBRSxZQUFZLEtBQUs7QUFFMUMsZ0JBQUksQ0FBQ0YsVUFBUyxLQUFLLEdBQUc7QUFDbEIscUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxZQUFJLFFBQVEsT0FDUixPQUFPLElBQUksS0FBSztBQUVwQixlQUFPLE9BQU8sS0FBSyxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3ZFLGNBQU0sSUFBSSxTQUNKLElBQUksR0FBRyxZQUFZLE9BQU8sSUFBSSxJQUM5QixJQUFJLEdBQUcsU0FBUyxPQUFPLElBQUk7QUFDakMsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLFlBQVksT0FBTztBQUN4QixZQUFJLFNBQVMsTUFBTTtBQUNmLG1CQUFTLE1BQU0sS0FBSztBQUNwQixnQkFBTSxhQUFhLE1BQU0sSUFBSTtBQUM3QixpQkFBTztBQUFBLFFBQ1gsT0FBTztBQUNILGlCQUFPLElBQUksTUFBTSxPQUFPO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBRUEsZUFBUyxpQkFBaUI7QUFDdEIsZUFBTyxZQUFZLEtBQUssS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDO0FBQUEsTUFDaEQ7QUFFQSxlQUFTLGlCQUFpQixVQUFVO0FBQ2hDLFlBQUksS0FBSyxtQkFBbUI7QUFDeEIsY0FBSSxDQUFDLFdBQVcsTUFBTSxjQUFjLEdBQUc7QUFDbkMsK0JBQW1CLEtBQUssSUFBSTtBQUFBLFVBQ2hDO0FBQ0EsY0FBSSxVQUFVO0FBQ1YsbUJBQU8sS0FBSztBQUFBLFVBQ2hCLE9BQU87QUFDSCxtQkFBTyxLQUFLO0FBQUEsVUFDaEI7QUFBQSxRQUNKLE9BQU87QUFDSCxjQUFJLENBQUMsV0FBVyxNQUFNLG1CQUFtQixHQUFHO0FBQ3hDLGlCQUFLLG9CQUFvQjtBQUFBLFVBQzdCO0FBQ0EsaUJBQU8sS0FBSywyQkFBMkIsV0FDakMsS0FBSywwQkFDTCxLQUFLO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFFQSxlQUFTLFlBQVksVUFBVTtBQUMzQixZQUFJLEtBQUssbUJBQW1CO0FBQ3hCLGNBQUksQ0FBQyxXQUFXLE1BQU0sY0FBYyxHQUFHO0FBQ25DLCtCQUFtQixLQUFLLElBQUk7QUFBQSxVQUNoQztBQUNBLGNBQUksVUFBVTtBQUNWLG1CQUFPLEtBQUs7QUFBQSxVQUNoQixPQUFPO0FBQ0gsbUJBQU8sS0FBSztBQUFBLFVBQ2hCO0FBQUEsUUFDSixPQUFPO0FBQ0gsY0FBSSxDQUFDLFdBQVcsTUFBTSxjQUFjLEdBQUc7QUFDbkMsaUJBQUssZUFBZTtBQUFBLFVBQ3hCO0FBQ0EsaUJBQU8sS0FBSyxzQkFBc0IsV0FDNUIsS0FBSyxxQkFDTCxLQUFLO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFFQSxlQUFTLHFCQUFxQjtBQUMxQixpQkFBUyxVQUFVLEdBQUcsR0FBRztBQUNyQixpQkFBTyxFQUFFLFNBQVMsRUFBRTtBQUFBLFFBQ3hCO0FBRUEsWUFBSSxjQUFjLENBQUMsR0FDZixhQUFhLENBQUMsR0FDZCxjQUFjLENBQUMsR0FDZixHQUNBLEtBQ0EsUUFDQTtBQUNKLGFBQUssSUFBSSxHQUFHLElBQUksSUFBSSxLQUFLO0FBRXJCLGdCQUFNLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQztBQUN6QixtQkFBUyxZQUFZLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztBQUM5QyxrQkFBUSxZQUFZLEtBQUssT0FBTyxLQUFLLEVBQUUsQ0FBQztBQUN4QyxzQkFBWSxLQUFLLE1BQU07QUFDdkIscUJBQVcsS0FBSyxLQUFLO0FBQ3JCLHNCQUFZLEtBQUssS0FBSztBQUN0QixzQkFBWSxLQUFLLE1BQU07QUFBQSxRQUMzQjtBQUdBLG9CQUFZLEtBQUssU0FBUztBQUMxQixtQkFBVyxLQUFLLFNBQVM7QUFDekIsb0JBQVksS0FBSyxTQUFTO0FBRTFCLGFBQUssZUFBZSxJQUFJLE9BQU8sT0FBTyxZQUFZLEtBQUssR0FBRyxJQUFJLEtBQUssR0FBRztBQUN0RSxhQUFLLG9CQUFvQixLQUFLO0FBQzlCLGFBQUsscUJBQXFCLElBQUk7QUFBQSxVQUMxQixPQUFPLFdBQVcsS0FBSyxHQUFHLElBQUk7QUFBQSxVQUM5QjtBQUFBLFFBQ0o7QUFDQSxhQUFLLDBCQUEwQixJQUFJO0FBQUEsVUFDL0IsT0FBTyxZQUFZLEtBQUssR0FBRyxJQUFJO0FBQUEsVUFDL0I7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLGVBQVMsV0FBVyxHQUFHLEdBQUcsR0FBR2dCLElBQUcsR0FBRyxHQUFHLElBQUk7QUFHdEMsWUFBSTtBQUVKLFlBQUksSUFBSSxPQUFPLEtBQUssR0FBRztBQUVuQixpQkFBTyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBR0EsSUFBRyxHQUFHLEdBQUcsRUFBRTtBQUMxQyxjQUFJLFNBQVMsS0FBSyxZQUFZLENBQUMsR0FBRztBQUM5QixpQkFBSyxZQUFZLENBQUM7QUFBQSxVQUN0QjtBQUFBLFFBQ0osT0FBTztBQUNILGlCQUFPLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBR0EsSUFBRyxHQUFHLEdBQUcsRUFBRTtBQUFBLFFBQ3hDO0FBRUEsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLGNBQWMsR0FBRztBQUN0QixZQUFJLE1BQU07QUFFVixZQUFJLElBQUksT0FBTyxLQUFLLEdBQUc7QUFDbkIsaUJBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBRTNDLGVBQUssQ0FBQyxJQUFJLElBQUk7QUFDZCxpQkFBTyxJQUFJLEtBQUssS0FBSyxJQUFJLE1BQU0sTUFBTSxJQUFJLENBQUM7QUFDMUMsY0FBSSxTQUFTLEtBQUssZUFBZSxDQUFDLEdBQUc7QUFDakMsaUJBQUssZUFBZSxDQUFDO0FBQUEsVUFDekI7QUFBQSxRQUNKLE9BQU87QUFDSCxpQkFBTyxJQUFJLEtBQUssS0FBSyxJQUFJLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFBQSxRQUNuRDtBQUVBLGVBQU87QUFBQSxNQUNYO0FBR0EsZUFBUyxnQkFBZ0IsTUFBTSxLQUFLLEtBQUs7QUFDckMsWUFDSSxNQUFNLElBQUksTUFBTSxLQUVoQixTQUFTLElBQUksY0FBYyxNQUFNLEdBQUcsR0FBRyxFQUFFLFVBQVUsSUFBSSxPQUFPO0FBRWxFLGVBQU8sQ0FBQyxRQUFRLE1BQU07QUFBQSxNQUMxQjtBQUdBLGVBQVMsbUJBQW1CLE1BQU0sTUFBTSxTQUFTLEtBQUssS0FBSztBQUN2RCxZQUFJLGdCQUFnQixJQUFJLFVBQVUsT0FBTyxHQUNyQyxhQUFhLGdCQUFnQixNQUFNLEtBQUssR0FBRyxHQUMzQyxZQUFZLElBQUksS0FBSyxPQUFPLEtBQUssZUFBZSxZQUNoRCxTQUNBO0FBRUosWUFBSSxhQUFhLEdBQUc7QUFDaEIsb0JBQVUsT0FBTztBQUNqQix5QkFBZSxXQUFXLE9BQU8sSUFBSTtBQUFBLFFBQ3pDLFdBQVcsWUFBWSxXQUFXLElBQUksR0FBRztBQUNyQyxvQkFBVSxPQUFPO0FBQ2pCLHlCQUFlLFlBQVksV0FBVyxJQUFJO0FBQUEsUUFDOUMsT0FBTztBQUNILG9CQUFVO0FBQ1YseUJBQWU7QUFBQSxRQUNuQjtBQUVBLGVBQU87QUFBQSxVQUNILE1BQU07QUFBQSxVQUNOLFdBQVc7QUFBQSxRQUNmO0FBQUEsTUFDSjtBQUVBLGVBQVMsV0FBVyxLQUFLLEtBQUssS0FBSztBQUMvQixZQUFJLGFBQWEsZ0JBQWdCLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxHQUNqRCxPQUFPLEtBQUssT0FBTyxJQUFJLFVBQVUsSUFBSSxhQUFhLEtBQUssQ0FBQyxJQUFJLEdBQzVELFNBQ0E7QUFFSixZQUFJLE9BQU8sR0FBRztBQUNWLG9CQUFVLElBQUksS0FBSyxJQUFJO0FBQ3ZCLG9CQUFVLE9BQU8sWUFBWSxTQUFTLEtBQUssR0FBRztBQUFBLFFBQ2xELFdBQVcsT0FBTyxZQUFZLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHO0FBQ2pELG9CQUFVLE9BQU8sWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUc7QUFDakQsb0JBQVUsSUFBSSxLQUFLLElBQUk7QUFBQSxRQUMzQixPQUFPO0FBQ0gsb0JBQVUsSUFBSSxLQUFLO0FBQ25CLG9CQUFVO0FBQUEsUUFDZDtBQUVBLGVBQU87QUFBQSxVQUNILE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxRQUNWO0FBQUEsTUFDSjtBQUVBLGVBQVMsWUFBWSxNQUFNLEtBQUssS0FBSztBQUNqQyxZQUFJLGFBQWEsZ0JBQWdCLE1BQU0sS0FBSyxHQUFHLEdBQzNDLGlCQUFpQixnQkFBZ0IsT0FBTyxHQUFHLEtBQUssR0FBRztBQUN2RCxnQkFBUSxXQUFXLElBQUksSUFBSSxhQUFhLGtCQUFrQjtBQUFBLE1BQzlEO0FBSUEscUJBQWUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTTtBQUMzQyxxQkFBZSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxTQUFTO0FBSTlDLG9CQUFjLEtBQUssV0FBVyxzQkFBc0I7QUFDcEQsb0JBQWMsTUFBTSxXQUFXLE1BQU07QUFDckMsb0JBQWMsS0FBSyxXQUFXLHNCQUFzQjtBQUNwRCxvQkFBYyxNQUFNLFdBQVcsTUFBTTtBQUVyQztBQUFBLFFBQ0ksQ0FBQyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsUUFDckIsU0FBVSxPQUFPLE1BQU0sUUFBUUwsUUFBTztBQUNsQyxlQUFLQSxPQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLEtBQUs7QUFBQSxRQUMxQztBQUFBLE1BQ0o7QUFNQSxlQUFTLFdBQVcsS0FBSztBQUNyQixlQUFPLFdBQVcsS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLLE1BQU0sR0FBRyxFQUFFO0FBQUEsTUFDM0Q7QUFFQSxVQUFJLG9CQUFvQjtBQUFBLFFBQ3BCLEtBQUs7QUFBQTtBQUFBLFFBQ0wsS0FBSztBQUFBO0FBQUEsTUFDVDtBQUVBLGVBQVMsdUJBQXVCO0FBQzVCLGVBQU8sS0FBSyxNQUFNO0FBQUEsTUFDdEI7QUFFQSxlQUFTLHVCQUF1QjtBQUM1QixlQUFPLEtBQUssTUFBTTtBQUFBLE1BQ3RCO0FBSUEsZUFBUyxXQUFXLE9BQU87QUFDdkIsWUFBSSxPQUFPLEtBQUssV0FBVyxFQUFFLEtBQUssSUFBSTtBQUN0QyxlQUFPLFNBQVMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLFFBQVEsR0FBRyxHQUFHO0FBQUEsTUFDbEU7QUFFQSxlQUFTLGNBQWMsT0FBTztBQUMxQixZQUFJLE9BQU8sV0FBVyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLGVBQU8sU0FBUyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsUUFBUSxHQUFHLEdBQUc7QUFBQSxNQUNsRTtBQUlBLHFCQUFlLEtBQUssR0FBRyxNQUFNLEtBQUs7QUFFbEMscUJBQWUsTUFBTSxHQUFHLEdBQUcsU0FBVVQsU0FBUTtBQUN6QyxlQUFPLEtBQUssV0FBVyxFQUFFLFlBQVksTUFBTUEsT0FBTTtBQUFBLE1BQ3JELENBQUM7QUFFRCxxQkFBZSxPQUFPLEdBQUcsR0FBRyxTQUFVQSxTQUFRO0FBQzFDLGVBQU8sS0FBSyxXQUFXLEVBQUUsY0FBYyxNQUFNQSxPQUFNO0FBQUEsTUFDdkQsQ0FBQztBQUVELHFCQUFlLFFBQVEsR0FBRyxHQUFHLFNBQVVBLFNBQVE7QUFDM0MsZUFBTyxLQUFLLFdBQVcsRUFBRSxTQUFTLE1BQU1BLE9BQU07QUFBQSxNQUNsRCxDQUFDO0FBRUQscUJBQWUsS0FBSyxHQUFHLEdBQUcsU0FBUztBQUNuQyxxQkFBZSxLQUFLLEdBQUcsR0FBRyxZQUFZO0FBSXRDLG9CQUFjLEtBQUssU0FBUztBQUM1QixvQkFBYyxLQUFLLFNBQVM7QUFDNUIsb0JBQWMsS0FBSyxTQUFTO0FBQzVCLG9CQUFjLE1BQU0sU0FBVSxVQUFVQyxTQUFRO0FBQzVDLGVBQU9BLFFBQU8saUJBQWlCLFFBQVE7QUFBQSxNQUMzQyxDQUFDO0FBQ0Qsb0JBQWMsT0FBTyxTQUFVLFVBQVVBLFNBQVE7QUFDN0MsZUFBT0EsUUFBTyxtQkFBbUIsUUFBUTtBQUFBLE1BQzdDLENBQUM7QUFDRCxvQkFBYyxRQUFRLFNBQVUsVUFBVUEsU0FBUTtBQUM5QyxlQUFPQSxRQUFPLGNBQWMsUUFBUTtBQUFBLE1BQ3hDLENBQUM7QUFFRCx3QkFBa0IsQ0FBQyxNQUFNLE9BQU8sTUFBTSxHQUFHLFNBQVUsT0FBTyxNQUFNLFFBQVFRLFFBQU87QUFDM0UsWUFBSSxVQUFVLE9BQU8sUUFBUSxjQUFjLE9BQU9BLFFBQU8sT0FBTyxPQUFPO0FBRXZFLFlBQUksV0FBVyxNQUFNO0FBQ2pCLGVBQUssSUFBSTtBQUFBLFFBQ2IsT0FBTztBQUNILDBCQUFnQixNQUFNLEVBQUUsaUJBQWlCO0FBQUEsUUFDN0M7QUFBQSxNQUNKLENBQUM7QUFFRCx3QkFBa0IsQ0FBQyxLQUFLLEtBQUssR0FBRyxHQUFHLFNBQVUsT0FBTyxNQUFNLFFBQVFBLFFBQU87QUFDckUsYUFBS0EsTUFBSyxJQUFJLE1BQU0sS0FBSztBQUFBLE1BQzdCLENBQUM7QUFJRCxlQUFTLGFBQWEsT0FBT1IsU0FBUTtBQUNqQyxZQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzNCLGlCQUFPO0FBQUEsUUFDWDtBQUVBLFlBQUksQ0FBQyxNQUFNLEtBQUssR0FBRztBQUNmLGlCQUFPLFNBQVMsT0FBTyxFQUFFO0FBQUEsUUFDN0I7QUFFQSxnQkFBUUEsUUFBTyxjQUFjLEtBQUs7QUFDbEMsWUFBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixpQkFBTztBQUFBLFFBQ1g7QUFFQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsZ0JBQWdCLE9BQU9BLFNBQVE7QUFDcEMsWUFBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixpQkFBT0EsUUFBTyxjQUFjLEtBQUssSUFBSSxLQUFLO0FBQUEsUUFDOUM7QUFDQSxlQUFPLE1BQU0sS0FBSyxJQUFJLE9BQU87QUFBQSxNQUNqQztBQUdBLGVBQVMsY0FBYyxJQUFJLEdBQUc7QUFDMUIsZUFBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFBQSxNQUMvQztBQUVBLFVBQUksd0JBQ0ksMkRBQTJELE1BQU0sR0FBRyxHQUN4RSw2QkFBNkIsOEJBQThCLE1BQU0sR0FBRyxHQUNwRSwyQkFBMkIsdUJBQXVCLE1BQU0sR0FBRyxHQUMzRCx1QkFBdUIsV0FDdkIsNEJBQTRCLFdBQzVCLDBCQUEwQjtBQUU5QixlQUFTLGVBQWUsR0FBR0QsU0FBUTtBQUMvQixZQUFJLFdBQVdKLFNBQVEsS0FBSyxTQUFTLElBQy9CLEtBQUssWUFDTCxLQUFLLFVBQ0QsS0FBSyxNQUFNLFFBQVEsS0FBSyxVQUFVLFNBQVMsS0FBS0ksT0FBTSxJQUNoRCxXQUNBLFlBQ1Y7QUFDTixlQUFPLE1BQU0sT0FDUCxjQUFjLFVBQVUsS0FBSyxNQUFNLEdBQUcsSUFDdEMsSUFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQ2hCO0FBQUEsTUFDWjtBQUVBLGVBQVMsb0JBQW9CLEdBQUc7QUFDNUIsZUFBTyxNQUFNLE9BQ1AsY0FBYyxLQUFLLGdCQUFnQixLQUFLLE1BQU0sR0FBRyxJQUNqRCxJQUNFLEtBQUssZUFBZSxFQUFFLElBQUksQ0FBQyxJQUMzQixLQUFLO0FBQUEsTUFDakI7QUFFQSxlQUFTLGtCQUFrQixHQUFHO0FBQzFCLGVBQU8sTUFBTSxPQUNQLGNBQWMsS0FBSyxjQUFjLEtBQUssTUFBTSxHQUFHLElBQy9DLElBQ0UsS0FBSyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQ3pCLEtBQUs7QUFBQSxNQUNqQjtBQUVBLGVBQVMsb0JBQW9CLGFBQWFBLFNBQVEsUUFBUTtBQUN0RCxZQUFJLEdBQ0EsSUFDQSxLQUNBLE1BQU0sWUFBWSxrQkFBa0I7QUFDeEMsWUFBSSxDQUFDLEtBQUssZ0JBQWdCO0FBQ3RCLGVBQUssaUJBQWlCLENBQUM7QUFDdkIsZUFBSyxzQkFBc0IsQ0FBQztBQUM1QixlQUFLLG9CQUFvQixDQUFDO0FBRTFCLGVBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDcEIsa0JBQU0sVUFBVSxDQUFDLEtBQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ2hDLGlCQUFLLGtCQUFrQixDQUFDLElBQUksS0FBSztBQUFBLGNBQzdCO0FBQUEsY0FDQTtBQUFBLFlBQ0osRUFBRSxrQkFBa0I7QUFDcEIsaUJBQUssb0JBQW9CLENBQUMsSUFBSSxLQUFLO0FBQUEsY0FDL0I7QUFBQSxjQUNBO0FBQUEsWUFDSixFQUFFLGtCQUFrQjtBQUNwQixpQkFBSyxlQUFlLENBQUMsSUFBSSxLQUFLLFNBQVMsS0FBSyxFQUFFLEVBQUUsa0JBQWtCO0FBQUEsVUFDdEU7QUFBQSxRQUNKO0FBRUEsWUFBSSxRQUFRO0FBQ1IsY0FBSUEsWUFBVyxRQUFRO0FBQ25CLGlCQUFLLFFBQVEsS0FBSyxLQUFLLGdCQUFnQixHQUFHO0FBQzFDLG1CQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsVUFDNUIsV0FBV0EsWUFBVyxPQUFPO0FBQ3pCLGlCQUFLLFFBQVEsS0FBSyxLQUFLLHFCQUFxQixHQUFHO0FBQy9DLG1CQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsVUFDNUIsT0FBTztBQUNILGlCQUFLLFFBQVEsS0FBSyxLQUFLLG1CQUFtQixHQUFHO0FBQzdDLG1CQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsVUFDNUI7QUFBQSxRQUNKLE9BQU87QUFDSCxjQUFJQSxZQUFXLFFBQVE7QUFDbkIsaUJBQUssUUFBUSxLQUFLLEtBQUssZ0JBQWdCLEdBQUc7QUFDMUMsZ0JBQUksT0FBTyxJQUFJO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQ0EsaUJBQUssUUFBUSxLQUFLLEtBQUsscUJBQXFCLEdBQUc7QUFDL0MsZ0JBQUksT0FBTyxJQUFJO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQ0EsaUJBQUssUUFBUSxLQUFLLEtBQUssbUJBQW1CLEdBQUc7QUFDN0MsbUJBQU8sT0FBTyxLQUFLLEtBQUs7QUFBQSxVQUM1QixXQUFXQSxZQUFXLE9BQU87QUFDekIsaUJBQUssUUFBUSxLQUFLLEtBQUsscUJBQXFCLEdBQUc7QUFDL0MsZ0JBQUksT0FBTyxJQUFJO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQ0EsaUJBQUssUUFBUSxLQUFLLEtBQUssZ0JBQWdCLEdBQUc7QUFDMUMsZ0JBQUksT0FBTyxJQUFJO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQ0EsaUJBQUssUUFBUSxLQUFLLEtBQUssbUJBQW1CLEdBQUc7QUFDN0MsbUJBQU8sT0FBTyxLQUFLLEtBQUs7QUFBQSxVQUM1QixPQUFPO0FBQ0gsaUJBQUssUUFBUSxLQUFLLEtBQUssbUJBQW1CLEdBQUc7QUFDN0MsZ0JBQUksT0FBTyxJQUFJO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQ0EsaUJBQUssUUFBUSxLQUFLLEtBQUssZ0JBQWdCLEdBQUc7QUFDMUMsZ0JBQUksT0FBTyxJQUFJO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQ0EsaUJBQUssUUFBUSxLQUFLLEtBQUsscUJBQXFCLEdBQUc7QUFDL0MsbUJBQU8sT0FBTyxLQUFLLEtBQUs7QUFBQSxVQUM1QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsZUFBUyxvQkFBb0IsYUFBYUEsU0FBUSxRQUFRO0FBQ3RELFlBQUksR0FBRyxLQUFLO0FBRVosWUFBSSxLQUFLLHFCQUFxQjtBQUMxQixpQkFBTyxvQkFBb0IsS0FBSyxNQUFNLGFBQWFBLFNBQVEsTUFBTTtBQUFBLFFBQ3JFO0FBRUEsWUFBSSxDQUFDLEtBQUssZ0JBQWdCO0FBQ3RCLGVBQUssaUJBQWlCLENBQUM7QUFDdkIsZUFBSyxvQkFBb0IsQ0FBQztBQUMxQixlQUFLLHNCQUFzQixDQUFDO0FBQzVCLGVBQUsscUJBQXFCLENBQUM7QUFBQSxRQUMvQjtBQUVBLGFBQUssSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBR3BCLGdCQUFNLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNoQyxjQUFJLFVBQVUsQ0FBQyxLQUFLLG1CQUFtQixDQUFDLEdBQUc7QUFDdkMsaUJBQUssbUJBQW1CLENBQUMsSUFBSSxJQUFJO0FBQUEsY0FDN0IsTUFBTSxLQUFLLFNBQVMsS0FBSyxFQUFFLEVBQUUsUUFBUSxLQUFLLE1BQU0sSUFBSTtBQUFBLGNBQ3BEO0FBQUEsWUFDSjtBQUNBLGlCQUFLLG9CQUFvQixDQUFDLElBQUksSUFBSTtBQUFBLGNBQzlCLE1BQU0sS0FBSyxjQUFjLEtBQUssRUFBRSxFQUFFLFFBQVEsS0FBSyxNQUFNLElBQUk7QUFBQSxjQUN6RDtBQUFBLFlBQ0o7QUFDQSxpQkFBSyxrQkFBa0IsQ0FBQyxJQUFJLElBQUk7QUFBQSxjQUM1QixNQUFNLEtBQUssWUFBWSxLQUFLLEVBQUUsRUFBRSxRQUFRLEtBQUssTUFBTSxJQUFJO0FBQUEsY0FDdkQ7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGNBQUksQ0FBQyxLQUFLLGVBQWUsQ0FBQyxHQUFHO0FBQ3pCLG9CQUNJLE1BQ0EsS0FBSyxTQUFTLEtBQUssRUFBRSxJQUNyQixPQUNBLEtBQUssY0FBYyxLQUFLLEVBQUUsSUFDMUIsT0FDQSxLQUFLLFlBQVksS0FBSyxFQUFFO0FBQzVCLGlCQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksT0FBTyxNQUFNLFFBQVEsS0FBSyxFQUFFLEdBQUcsR0FBRztBQUFBLFVBQ25FO0FBRUEsY0FDSSxVQUNBQSxZQUFXLFVBQ1gsS0FBSyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssV0FBVyxHQUM3QztBQUNFLG1CQUFPO0FBQUEsVUFDWCxXQUNJLFVBQ0FBLFlBQVcsU0FDWCxLQUFLLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxXQUFXLEdBQzlDO0FBQ0UsbUJBQU87QUFBQSxVQUNYLFdBQ0ksVUFDQUEsWUFBVyxRQUNYLEtBQUssa0JBQWtCLENBQUMsRUFBRSxLQUFLLFdBQVcsR0FDNUM7QUFDRSxtQkFBTztBQUFBLFVBQ1gsV0FBVyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsR0FBRztBQUM1RCxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUlBLGVBQVMsZ0JBQWdCLE9BQU87QUFDNUIsWUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHO0FBQ2pCLGlCQUFPLFNBQVMsT0FBTyxPQUFPO0FBQUEsUUFDbEM7QUFFQSxZQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUs7QUFDekIsWUFBSSxTQUFTLE1BQU07QUFDZixrQkFBUSxhQUFhLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDN0MsaUJBQU8sS0FBSyxJQUFJLFFBQVEsS0FBSyxHQUFHO0FBQUEsUUFDcEMsT0FBTztBQUNILGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxlQUFTLHNCQUFzQixPQUFPO0FBQ2xDLFlBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNqQixpQkFBTyxTQUFTLE9BQU8sT0FBTztBQUFBLFFBQ2xDO0FBQ0EsWUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsTUFBTSxPQUFPO0FBQy9ELGVBQU8sU0FBUyxPQUFPLFVBQVUsS0FBSyxJQUFJLFFBQVEsU0FBUyxHQUFHO0FBQUEsTUFDbEU7QUFFQSxlQUFTLG1CQUFtQixPQUFPO0FBQy9CLFlBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNqQixpQkFBTyxTQUFTLE9BQU8sT0FBTztBQUFBLFFBQ2xDO0FBTUEsWUFBSSxTQUFTLE1BQU07QUFDZixjQUFJLFVBQVUsZ0JBQWdCLE9BQU8sS0FBSyxXQUFXLENBQUM7QUFDdEQsaUJBQU8sS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksVUFBVSxVQUFVLENBQUM7QUFBQSxRQUMxRCxPQUFPO0FBQ0gsaUJBQU8sS0FBSyxJQUFJLEtBQUs7QUFBQSxRQUN6QjtBQUFBLE1BQ0o7QUFFQSxlQUFTLGNBQWMsVUFBVTtBQUM3QixZQUFJLEtBQUsscUJBQXFCO0FBQzFCLGNBQUksQ0FBQyxXQUFXLE1BQU0sZ0JBQWdCLEdBQUc7QUFDckMsaUNBQXFCLEtBQUssSUFBSTtBQUFBLFVBQ2xDO0FBQ0EsY0FBSSxVQUFVO0FBQ1YsbUJBQU8sS0FBSztBQUFBLFVBQ2hCLE9BQU87QUFDSCxtQkFBTyxLQUFLO0FBQUEsVUFDaEI7QUFBQSxRQUNKLE9BQU87QUFDSCxjQUFJLENBQUMsV0FBVyxNQUFNLGdCQUFnQixHQUFHO0FBQ3JDLGlCQUFLLGlCQUFpQjtBQUFBLFVBQzFCO0FBQ0EsaUJBQU8sS0FBSyx3QkFBd0IsV0FDOUIsS0FBSyx1QkFDTCxLQUFLO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFFQSxlQUFTLG1CQUFtQixVQUFVO0FBQ2xDLFlBQUksS0FBSyxxQkFBcUI7QUFDMUIsY0FBSSxDQUFDLFdBQVcsTUFBTSxnQkFBZ0IsR0FBRztBQUNyQyxpQ0FBcUIsS0FBSyxJQUFJO0FBQUEsVUFDbEM7QUFDQSxjQUFJLFVBQVU7QUFDVixtQkFBTyxLQUFLO0FBQUEsVUFDaEIsT0FBTztBQUNILG1CQUFPLEtBQUs7QUFBQSxVQUNoQjtBQUFBLFFBQ0osT0FBTztBQUNILGNBQUksQ0FBQyxXQUFXLE1BQU0scUJBQXFCLEdBQUc7QUFDMUMsaUJBQUssc0JBQXNCO0FBQUEsVUFDL0I7QUFDQSxpQkFBTyxLQUFLLDZCQUE2QixXQUNuQyxLQUFLLDRCQUNMLEtBQUs7QUFBQSxRQUNmO0FBQUEsTUFDSjtBQUVBLGVBQVMsaUJBQWlCLFVBQVU7QUFDaEMsWUFBSSxLQUFLLHFCQUFxQjtBQUMxQixjQUFJLENBQUMsV0FBVyxNQUFNLGdCQUFnQixHQUFHO0FBQ3JDLGlDQUFxQixLQUFLLElBQUk7QUFBQSxVQUNsQztBQUNBLGNBQUksVUFBVTtBQUNWLG1CQUFPLEtBQUs7QUFBQSxVQUNoQixPQUFPO0FBQ0gsbUJBQU8sS0FBSztBQUFBLFVBQ2hCO0FBQUEsUUFDSixPQUFPO0FBQ0gsY0FBSSxDQUFDLFdBQVcsTUFBTSxtQkFBbUIsR0FBRztBQUN4QyxpQkFBSyxvQkFBb0I7QUFBQSxVQUM3QjtBQUNBLGlCQUFPLEtBQUssMkJBQTJCLFdBQ2pDLEtBQUssMEJBQ0wsS0FBSztBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBRUEsZUFBUyx1QkFBdUI7QUFDNUIsaUJBQVMsVUFBVSxHQUFHLEdBQUc7QUFDckIsaUJBQU8sRUFBRSxTQUFTLEVBQUU7QUFBQSxRQUN4QjtBQUVBLFlBQUksWUFBWSxDQUFDLEdBQ2IsY0FBYyxDQUFDLEdBQ2YsYUFBYSxDQUFDLEdBQ2QsY0FBYyxDQUFDLEdBQ2YsR0FDQSxLQUNBLE1BQ0EsUUFDQTtBQUNKLGFBQUssSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBRXBCLGdCQUFNLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUNoQyxpQkFBTyxZQUFZLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztBQUM1QyxtQkFBUyxZQUFZLEtBQUssY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUNoRCxrQkFBUSxZQUFZLEtBQUssU0FBUyxLQUFLLEVBQUUsQ0FBQztBQUMxQyxvQkFBVSxLQUFLLElBQUk7QUFDbkIsc0JBQVksS0FBSyxNQUFNO0FBQ3ZCLHFCQUFXLEtBQUssS0FBSztBQUNyQixzQkFBWSxLQUFLLElBQUk7QUFDckIsc0JBQVksS0FBSyxNQUFNO0FBQ3ZCLHNCQUFZLEtBQUssS0FBSztBQUFBLFFBQzFCO0FBR0Esa0JBQVUsS0FBSyxTQUFTO0FBQ3hCLG9CQUFZLEtBQUssU0FBUztBQUMxQixtQkFBVyxLQUFLLFNBQVM7QUFDekIsb0JBQVksS0FBSyxTQUFTO0FBRTFCLGFBQUssaUJBQWlCLElBQUksT0FBTyxPQUFPLFlBQVksS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHO0FBQ3hFLGFBQUssc0JBQXNCLEtBQUs7QUFDaEMsYUFBSyxvQkFBb0IsS0FBSztBQUU5QixhQUFLLHVCQUF1QixJQUFJO0FBQUEsVUFDNUIsT0FBTyxXQUFXLEtBQUssR0FBRyxJQUFJO0FBQUEsVUFDOUI7QUFBQSxRQUNKO0FBQ0EsYUFBSyw0QkFBNEIsSUFBSTtBQUFBLFVBQ2pDLE9BQU8sWUFBWSxLQUFLLEdBQUcsSUFBSTtBQUFBLFVBQy9CO0FBQUEsUUFDSjtBQUNBLGFBQUssMEJBQTBCLElBQUk7QUFBQSxVQUMvQixPQUFPLFVBQVUsS0FBSyxHQUFHLElBQUk7QUFBQSxVQUM3QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBSUEsZUFBUyxVQUFVO0FBQ2YsZUFBTyxLQUFLLE1BQU0sSUFBSSxNQUFNO0FBQUEsTUFDaEM7QUFFQSxlQUFTLFVBQVU7QUFDZixlQUFPLEtBQUssTUFBTSxLQUFLO0FBQUEsTUFDM0I7QUFFQSxxQkFBZSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNO0FBQ3hDLHFCQUFlLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU87QUFDekMscUJBQWUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsT0FBTztBQUV6QyxxQkFBZSxPQUFPLEdBQUcsR0FBRyxXQUFZO0FBQ3BDLGVBQU8sS0FBSyxRQUFRLE1BQU0sSUFBSSxJQUFJLFNBQVMsS0FBSyxRQUFRLEdBQUcsQ0FBQztBQUFBLE1BQ2hFLENBQUM7QUFFRCxxQkFBZSxTQUFTLEdBQUcsR0FBRyxXQUFZO0FBQ3RDLGVBQ0ksS0FDQSxRQUFRLE1BQU0sSUFBSSxJQUNsQixTQUFTLEtBQUssUUFBUSxHQUFHLENBQUMsSUFDMUIsU0FBUyxLQUFLLFFBQVEsR0FBRyxDQUFDO0FBQUEsTUFFbEMsQ0FBQztBQUVELHFCQUFlLE9BQU8sR0FBRyxHQUFHLFdBQVk7QUFDcEMsZUFBTyxLQUFLLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxRQUFRLEdBQUcsQ0FBQztBQUFBLE1BQ3pELENBQUM7QUFFRCxxQkFBZSxTQUFTLEdBQUcsR0FBRyxXQUFZO0FBQ3RDLGVBQ0ksS0FDQSxLQUFLLE1BQU0sSUFDWCxTQUFTLEtBQUssUUFBUSxHQUFHLENBQUMsSUFDMUIsU0FBUyxLQUFLLFFBQVEsR0FBRyxDQUFDO0FBQUEsTUFFbEMsQ0FBQztBQUVELGVBQVMsU0FBU1MsUUFBTyxXQUFXO0FBQ2hDLHVCQUFlQSxRQUFPLEdBQUcsR0FBRyxXQUFZO0FBQ3BDLGlCQUFPLEtBQUssV0FBVyxFQUFFO0FBQUEsWUFDckIsS0FBSyxNQUFNO0FBQUEsWUFDWCxLQUFLLFFBQVE7QUFBQSxZQUNiO0FBQUEsVUFDSjtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0w7QUFFQSxlQUFTLEtBQUssSUFBSTtBQUNsQixlQUFTLEtBQUssS0FBSztBQUluQixlQUFTLGNBQWMsVUFBVVIsU0FBUTtBQUNyQyxlQUFPQSxRQUFPO0FBQUEsTUFDbEI7QUFFQSxvQkFBYyxLQUFLLGFBQWE7QUFDaEMsb0JBQWMsS0FBSyxhQUFhO0FBQ2hDLG9CQUFjLEtBQUssV0FBVyxnQkFBZ0I7QUFDOUMsb0JBQWMsS0FBSyxXQUFXLHNCQUFzQjtBQUNwRCxvQkFBYyxLQUFLLFdBQVcsc0JBQXNCO0FBQ3BELG9CQUFjLE1BQU0sV0FBVyxNQUFNO0FBQ3JDLG9CQUFjLE1BQU0sV0FBVyxNQUFNO0FBQ3JDLG9CQUFjLE1BQU0sV0FBVyxNQUFNO0FBRXJDLG9CQUFjLE9BQU8sU0FBUztBQUM5QixvQkFBYyxTQUFTLFNBQVM7QUFDaEMsb0JBQWMsT0FBTyxTQUFTO0FBQzlCLG9CQUFjLFNBQVMsU0FBUztBQUVoQyxvQkFBYyxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUk7QUFDL0Isb0JBQWMsQ0FBQyxLQUFLLElBQUksR0FBRyxTQUFVLE9BQU8sT0FBTyxRQUFRO0FBQ3ZELFlBQUksU0FBUyxNQUFNLEtBQUs7QUFDeEIsY0FBTSxJQUFJLElBQUksV0FBVyxLQUFLLElBQUk7QUFBQSxNQUN0QyxDQUFDO0FBQ0Qsb0JBQWMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxTQUFVLE9BQU8sT0FBTyxRQUFRO0FBQ3RELGVBQU8sUUFBUSxPQUFPLFFBQVEsS0FBSyxLQUFLO0FBQ3hDLGVBQU8sWUFBWTtBQUFBLE1BQ3ZCLENBQUM7QUFDRCxvQkFBYyxDQUFDLEtBQUssSUFBSSxHQUFHLFNBQVUsT0FBTyxPQUFPLFFBQVE7QUFDdkQsY0FBTSxJQUFJLElBQUksTUFBTSxLQUFLO0FBQ3pCLHdCQUFnQixNQUFNLEVBQUUsVUFBVTtBQUFBLE1BQ3RDLENBQUM7QUFDRCxvQkFBYyxPQUFPLFNBQVUsT0FBTyxPQUFPLFFBQVE7QUFDakQsWUFBSSxNQUFNLE1BQU0sU0FBUztBQUN6QixjQUFNLElBQUksSUFBSSxNQUFNLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUN4QyxjQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDdkMsd0JBQWdCLE1BQU0sRUFBRSxVQUFVO0FBQUEsTUFDdEMsQ0FBQztBQUNELG9CQUFjLFNBQVMsU0FBVSxPQUFPLE9BQU8sUUFBUTtBQUNuRCxZQUFJLE9BQU8sTUFBTSxTQUFTLEdBQ3RCLE9BQU8sTUFBTSxTQUFTO0FBQzFCLGNBQU0sSUFBSSxJQUFJLE1BQU0sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLGNBQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLGNBQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztBQUN4Qyx3QkFBZ0IsTUFBTSxFQUFFLFVBQVU7QUFBQSxNQUN0QyxDQUFDO0FBQ0Qsb0JBQWMsT0FBTyxTQUFVLE9BQU8sT0FBTyxRQUFRO0FBQ2pELFlBQUksTUFBTSxNQUFNLFNBQVM7QUFDekIsY0FBTSxJQUFJLElBQUksTUFBTSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDeEMsY0FBTSxNQUFNLElBQUksTUFBTSxNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQUEsTUFDM0MsQ0FBQztBQUNELG9CQUFjLFNBQVMsU0FBVSxPQUFPLE9BQU8sUUFBUTtBQUNuRCxZQUFJLE9BQU8sTUFBTSxTQUFTLEdBQ3RCLE9BQU8sTUFBTSxTQUFTO0FBQzFCLGNBQU0sSUFBSSxJQUFJLE1BQU0sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLGNBQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLGNBQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxPQUFPLElBQUksQ0FBQztBQUFBLE1BQzVDLENBQUM7QUFJRCxlQUFTLFdBQVcsT0FBTztBQUd2QixnQkFBUSxRQUFRLElBQUksWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQUEsTUFDcEQ7QUFFQSxVQUFJLDZCQUE2QixpQkFLN0IsYUFBYSxXQUFXLFNBQVMsSUFBSTtBQUV6QyxlQUFTLGVBQWVjLFFBQU9DLFVBQVMsU0FBUztBQUM3QyxZQUFJRCxTQUFRLElBQUk7QUFDWixpQkFBTyxVQUFVLE9BQU87QUFBQSxRQUM1QixPQUFPO0FBQ0gsaUJBQU8sVUFBVSxPQUFPO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBRUEsVUFBSSxhQUFhO0FBQUEsUUFDYixVQUFVO0FBQUEsUUFDVixnQkFBZ0I7QUFBQSxRQUNoQixhQUFhO0FBQUEsUUFDYixTQUFTO0FBQUEsUUFDVCx3QkFBd0I7QUFBQSxRQUN4QixjQUFjO0FBQUEsUUFFZCxRQUFRO0FBQUEsUUFDUixhQUFhO0FBQUEsUUFFYixNQUFNO0FBQUEsUUFFTixVQUFVO0FBQUEsUUFDVixhQUFhO0FBQUEsUUFDYixlQUFlO0FBQUEsUUFFZixlQUFlO0FBQUEsTUFDbkI7QUFHQSxVQUFJLFVBQVUsQ0FBQyxHQUNYLGlCQUFpQixDQUFDLEdBQ2xCO0FBRUosZUFBUyxhQUFhLE1BQU0sTUFBTTtBQUM5QixZQUFJLEdBQ0EsT0FBTyxLQUFLLElBQUksS0FBSyxRQUFRLEtBQUssTUFBTTtBQUM1QyxhQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHO0FBQzFCLGNBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUc7QUFDckIsbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxnQkFBZ0IsS0FBSztBQUMxQixlQUFPLE1BQU0sSUFBSSxZQUFZLEVBQUUsUUFBUSxLQUFLLEdBQUcsSUFBSTtBQUFBLE1BQ3ZEO0FBS0EsZUFBUyxhQUFhRSxRQUFPO0FBQ3pCLFlBQUksSUFBSSxHQUNKLEdBQ0EsTUFDQWhCLFNBQ0E7QUFFSixlQUFPLElBQUlnQixPQUFNLFFBQVE7QUFDckIsa0JBQVEsZ0JBQWdCQSxPQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRztBQUMzQyxjQUFJLE1BQU07QUFDVixpQkFBTyxnQkFBZ0JBLE9BQU0sSUFBSSxDQUFDLENBQUM7QUFDbkMsaUJBQU8sT0FBTyxLQUFLLE1BQU0sR0FBRyxJQUFJO0FBQ2hDLGlCQUFPLElBQUksR0FBRztBQUNWLFlBQUFoQixVQUFTLFdBQVcsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQy9DLGdCQUFJQSxTQUFRO0FBQ1IscUJBQU9BO0FBQUEsWUFDWDtBQUNBLGdCQUNJLFFBQ0EsS0FBSyxVQUFVLEtBQ2YsYUFBYSxPQUFPLElBQUksS0FBSyxJQUFJLEdBQ25DO0FBRUU7QUFBQSxZQUNKO0FBQ0E7QUFBQSxVQUNKO0FBQ0E7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLGlCQUFpQixNQUFNO0FBRzVCLGVBQU8sQ0FBQyxFQUFFLFFBQVEsS0FBSyxNQUFNLGFBQWE7QUFBQSxNQUM5QztBQUVBLGVBQVMsV0FBVyxNQUFNO0FBQ3RCLFlBQUksWUFBWSxNQUNaO0FBRUosWUFDSSxRQUFRLElBQUksTUFBTSxVQUNsQixPQUFPUCxZQUFXLGVBQ2xCQSxXQUNBQSxRQUFPLFdBQ1AsaUJBQWlCLElBQUksR0FDdkI7QUFDRSxjQUFJO0FBQ0Esd0JBQVksYUFBYTtBQUN6Qiw2QkFBaUI7QUFDakIsMkJBQWUsY0FBYyxJQUFJO0FBQ2pDLCtCQUFtQixTQUFTO0FBQUEsVUFDaEMsU0FBUyxHQUFHO0FBR1Isb0JBQVEsSUFBSSxJQUFJO0FBQUEsVUFDcEI7QUFBQSxRQUNKO0FBQ0EsZUFBTyxRQUFRLElBQUk7QUFBQSxNQUN2QjtBQUtBLGVBQVMsbUJBQW1CLEtBQUssUUFBUTtBQUNyQyxZQUFJO0FBQ0osWUFBSSxLQUFLO0FBQ0wsY0FBSSxZQUFZLE1BQU0sR0FBRztBQUNyQixtQkFBTyxVQUFVLEdBQUc7QUFBQSxVQUN4QixPQUFPO0FBQ0gsbUJBQU8sYUFBYSxLQUFLLE1BQU07QUFBQSxVQUNuQztBQUVBLGNBQUksTUFBTTtBQUVOLDJCQUFlO0FBQUEsVUFDbkIsT0FBTztBQUNILGdCQUFJLE9BQU8sWUFBWSxlQUFlLFFBQVEsTUFBTTtBQUVoRCxzQkFBUTtBQUFBLGdCQUNKLFlBQVksTUFBTTtBQUFBLGNBQ3RCO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBRUEsZUFBTyxhQUFhO0FBQUEsTUFDeEI7QUFFQSxlQUFTLGFBQWEsTUFBTSxRQUFRO0FBQ2hDLFlBQUksV0FBVyxNQUFNO0FBQ2pCLGNBQUlPLFNBQ0EsZUFBZTtBQUNuQixpQkFBTyxPQUFPO0FBQ2QsY0FBSSxRQUFRLElBQUksS0FBSyxNQUFNO0FBQ3ZCO0FBQUEsY0FDSTtBQUFBLGNBQ0E7QUFBQSxZQUlKO0FBQ0EsMkJBQWUsUUFBUSxJQUFJLEVBQUU7QUFBQSxVQUNqQyxXQUFXLE9BQU8sZ0JBQWdCLE1BQU07QUFDcEMsZ0JBQUksUUFBUSxPQUFPLFlBQVksS0FBSyxNQUFNO0FBQ3RDLDZCQUFlLFFBQVEsT0FBTyxZQUFZLEVBQUU7QUFBQSxZQUNoRCxPQUFPO0FBQ0gsY0FBQUEsVUFBUyxXQUFXLE9BQU8sWUFBWTtBQUN2QyxrQkFBSUEsV0FBVSxNQUFNO0FBQ2hCLCtCQUFlQSxRQUFPO0FBQUEsY0FDMUIsT0FBTztBQUNILG9CQUFJLENBQUMsZUFBZSxPQUFPLFlBQVksR0FBRztBQUN0QyxpQ0FBZSxPQUFPLFlBQVksSUFBSSxDQUFDO0FBQUEsZ0JBQzNDO0FBQ0EsK0JBQWUsT0FBTyxZQUFZLEVBQUUsS0FBSztBQUFBLGtCQUNyQztBQUFBLGtCQUNBO0FBQUEsZ0JBQ0osQ0FBQztBQUNELHVCQUFPO0FBQUEsY0FDWDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQ0Esa0JBQVEsSUFBSSxJQUFJLElBQUksT0FBTyxhQUFhLGNBQWMsTUFBTSxDQUFDO0FBRTdELGNBQUksZUFBZSxJQUFJLEdBQUc7QUFDdEIsMkJBQWUsSUFBSSxFQUFFLFFBQVEsU0FBVSxHQUFHO0FBQ3RDLDJCQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFBQSxZQUNqQyxDQUFDO0FBQUEsVUFDTDtBQUtBLDZCQUFtQixJQUFJO0FBRXZCLGlCQUFPLFFBQVEsSUFBSTtBQUFBLFFBQ3ZCLE9BQU87QUFFSCxpQkFBTyxRQUFRLElBQUk7QUFDbkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLGVBQVMsYUFBYSxNQUFNLFFBQVE7QUFDaEMsWUFBSSxVQUFVLE1BQU07QUFDaEIsY0FBSUEsU0FDQSxXQUNBLGVBQWU7QUFFbkIsY0FBSSxRQUFRLElBQUksS0FBSyxRQUFRLFFBQVEsSUFBSSxFQUFFLGdCQUFnQixNQUFNO0FBRTdELG9CQUFRLElBQUksRUFBRSxJQUFJLGFBQWEsUUFBUSxJQUFJLEVBQUUsU0FBUyxNQUFNLENBQUM7QUFBQSxVQUNqRSxPQUFPO0FBRUgsd0JBQVksV0FBVyxJQUFJO0FBQzNCLGdCQUFJLGFBQWEsTUFBTTtBQUNuQiw2QkFBZSxVQUFVO0FBQUEsWUFDN0I7QUFDQSxxQkFBUyxhQUFhLGNBQWMsTUFBTTtBQUMxQyxnQkFBSSxhQUFhLE1BQU07QUFJbkIscUJBQU8sT0FBTztBQUFBLFlBQ2xCO0FBQ0EsWUFBQUEsVUFBUyxJQUFJLE9BQU8sTUFBTTtBQUMxQixZQUFBQSxRQUFPLGVBQWUsUUFBUSxJQUFJO0FBQ2xDLG9CQUFRLElBQUksSUFBSUE7QUFBQSxVQUNwQjtBQUdBLDZCQUFtQixJQUFJO0FBQUEsUUFDM0IsT0FBTztBQUVILGNBQUksUUFBUSxJQUFJLEtBQUssTUFBTTtBQUN2QixnQkFBSSxRQUFRLElBQUksRUFBRSxnQkFBZ0IsTUFBTTtBQUNwQyxzQkFBUSxJQUFJLElBQUksUUFBUSxJQUFJLEVBQUU7QUFDOUIsa0JBQUksU0FBUyxtQkFBbUIsR0FBRztBQUMvQixtQ0FBbUIsSUFBSTtBQUFBLGNBQzNCO0FBQUEsWUFDSixXQUFXLFFBQVEsSUFBSSxLQUFLLE1BQU07QUFDOUIscUJBQU8sUUFBUSxJQUFJO0FBQUEsWUFDdkI7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUNBLGVBQU8sUUFBUSxJQUFJO0FBQUEsTUFDdkI7QUFHQSxlQUFTLFVBQVUsS0FBSztBQUNwQixZQUFJQTtBQUVKLFlBQUksT0FBTyxJQUFJLFdBQVcsSUFBSSxRQUFRLE9BQU87QUFDekMsZ0JBQU0sSUFBSSxRQUFRO0FBQUEsUUFDdEI7QUFFQSxZQUFJLENBQUMsS0FBSztBQUNOLGlCQUFPO0FBQUEsUUFDWDtBQUVBLFlBQUksQ0FBQ0wsU0FBUSxHQUFHLEdBQUc7QUFFZixVQUFBSyxVQUFTLFdBQVcsR0FBRztBQUN2QixjQUFJQSxTQUFRO0FBQ1IsbUJBQU9BO0FBQUEsVUFDWDtBQUNBLGdCQUFNLENBQUMsR0FBRztBQUFBLFFBQ2Q7QUFFQSxlQUFPLGFBQWEsR0FBRztBQUFBLE1BQzNCO0FBRUEsZUFBUyxjQUFjO0FBQ25CLGVBQU8sS0FBSyxPQUFPO0FBQUEsTUFDdkI7QUFFQSxlQUFTLGNBQWMsR0FBRztBQUN0QixZQUFJLFVBQ0EsSUFBSSxFQUFFO0FBRVYsWUFBSSxLQUFLLGdCQUFnQixDQUFDLEVBQUUsYUFBYSxJQUFJO0FBQ3pDLHFCQUNJLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxLQUFLLElBQUksS0FDckIsUUFDQSxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLFlBQVksRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFDcEQsT0FDQSxFQUFFLElBQUksSUFBSSxLQUNSLEVBQUUsSUFBSSxJQUFJLE1BQ1QsRUFBRSxJQUFJLE1BQU0sT0FDUixFQUFFLE1BQU0sTUFBTSxLQUNYLEVBQUUsTUFBTSxNQUFNLEtBQ2QsRUFBRSxXQUFXLE1BQU0sS0FDM0IsT0FDQSxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQzNCLFNBQ0EsRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLE1BQU0sSUFBSSxLQUMzQixTQUNBLEVBQUUsV0FBVyxJQUFJLEtBQUssRUFBRSxXQUFXLElBQUksTUFDckMsY0FDQTtBQUVwQixjQUNJLGdCQUFnQixDQUFDLEVBQUUsdUJBQ2xCLFdBQVcsUUFBUSxXQUFXLE9BQ2pDO0FBQ0UsdUJBQVc7QUFBQSxVQUNmO0FBQ0EsY0FBSSxnQkFBZ0IsQ0FBQyxFQUFFLGtCQUFrQixhQUFhLElBQUk7QUFDdEQsdUJBQVc7QUFBQSxVQUNmO0FBQ0EsY0FBSSxnQkFBZ0IsQ0FBQyxFQUFFLG9CQUFvQixhQUFhLElBQUk7QUFDeEQsdUJBQVc7QUFBQSxVQUNmO0FBRUEsMEJBQWdCLENBQUMsRUFBRSxXQUFXO0FBQUEsUUFDbEM7QUFFQSxlQUFPO0FBQUEsTUFDWDtBQUlBLFVBQUksbUJBQ0ksa0pBQ0osZ0JBQ0ksOElBQ0osVUFBVSx5QkFDVixXQUFXO0FBQUEsUUFDUCxDQUFDLGdCQUFnQixxQkFBcUI7QUFBQSxRQUN0QyxDQUFDLGNBQWMsaUJBQWlCO0FBQUEsUUFDaEMsQ0FBQyxnQkFBZ0IsZ0JBQWdCO0FBQUEsUUFDakMsQ0FBQyxjQUFjLGVBQWUsS0FBSztBQUFBLFFBQ25DLENBQUMsWUFBWSxhQUFhO0FBQUEsUUFDMUIsQ0FBQyxXQUFXLGNBQWMsS0FBSztBQUFBLFFBQy9CLENBQUMsY0FBYyxZQUFZO0FBQUEsUUFDM0IsQ0FBQyxZQUFZLE9BQU87QUFBQSxRQUNwQixDQUFDLGNBQWMsYUFBYTtBQUFBLFFBQzVCLENBQUMsYUFBYSxlQUFlLEtBQUs7QUFBQSxRQUNsQyxDQUFDLFdBQVcsT0FBTztBQUFBLFFBQ25CLENBQUMsVUFBVSxTQUFTLEtBQUs7QUFBQSxRQUN6QixDQUFDLFFBQVEsU0FBUyxLQUFLO0FBQUEsTUFDM0IsR0FFQSxXQUFXO0FBQUEsUUFDUCxDQUFDLGlCQUFpQixxQkFBcUI7QUFBQSxRQUN2QyxDQUFDLGlCQUFpQixvQkFBb0I7QUFBQSxRQUN0QyxDQUFDLFlBQVksZ0JBQWdCO0FBQUEsUUFDN0IsQ0FBQyxTQUFTLFdBQVc7QUFBQSxRQUNyQixDQUFDLGVBQWUsbUJBQW1CO0FBQUEsUUFDbkMsQ0FBQyxlQUFlLGtCQUFrQjtBQUFBLFFBQ2xDLENBQUMsVUFBVSxjQUFjO0FBQUEsUUFDekIsQ0FBQyxRQUFRLFVBQVU7QUFBQSxRQUNuQixDQUFDLE1BQU0sTUFBTTtBQUFBLE1BQ2pCLEdBQ0Esa0JBQWtCLHNCQUVsQixVQUNJLDJMQUNKLGFBQWE7QUFBQSxRQUNULElBQUk7QUFBQSxRQUNKLEtBQUs7QUFBQSxRQUNMLEtBQUssS0FBSztBQUFBLFFBQ1YsS0FBSyxLQUFLO0FBQUEsUUFDVixLQUFLLEtBQUs7QUFBQSxRQUNWLEtBQUssS0FBSztBQUFBLFFBQ1YsS0FBSyxLQUFLO0FBQUEsUUFDVixLQUFLLEtBQUs7QUFBQSxRQUNWLEtBQUssS0FBSztBQUFBLFFBQ1YsS0FBSyxLQUFLO0FBQUEsTUFDZDtBQUdKLGVBQVMsY0FBYyxRQUFRO0FBQzNCLFlBQUksR0FDQSxHQUNBLFNBQVMsT0FBTyxJQUNoQixRQUFRLGlCQUFpQixLQUFLLE1BQU0sS0FBSyxjQUFjLEtBQUssTUFBTSxHQUNsRSxXQUNBLFlBQ0EsWUFDQSxVQUNBLGNBQWMsU0FBUyxRQUN2QixjQUFjLFNBQVM7QUFFM0IsWUFBSSxPQUFPO0FBQ1AsMEJBQWdCLE1BQU0sRUFBRSxNQUFNO0FBQzlCLGVBQUssSUFBSSxHQUFHLElBQUksYUFBYSxJQUFJLEdBQUcsS0FBSztBQUNyQyxnQkFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHO0FBQy9CLDJCQUFhLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDMUIsMEJBQVksU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQy9CO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxjQUFJLGNBQWMsTUFBTTtBQUNwQixtQkFBTyxXQUFXO0FBQ2xCO0FBQUEsVUFDSjtBQUNBLGNBQUksTUFBTSxDQUFDLEdBQUc7QUFDVixpQkFBSyxJQUFJLEdBQUcsSUFBSSxhQUFhLElBQUksR0FBRyxLQUFLO0FBQ3JDLGtCQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUc7QUFFL0IsOEJBQWMsTUFBTSxDQUFDLEtBQUssT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQzlDO0FBQUEsY0FDSjtBQUFBLFlBQ0o7QUFDQSxnQkFBSSxjQUFjLE1BQU07QUFDcEIscUJBQU8sV0FBVztBQUNsQjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQ0EsY0FBSSxDQUFDLGFBQWEsY0FBYyxNQUFNO0FBQ2xDLG1CQUFPLFdBQVc7QUFDbEI7QUFBQSxVQUNKO0FBQ0EsY0FBSSxNQUFNLENBQUMsR0FBRztBQUNWLGdCQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHO0FBQ3hCLHlCQUFXO0FBQUEsWUFDZixPQUFPO0FBQ0gscUJBQU8sV0FBVztBQUNsQjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQ0EsaUJBQU8sS0FBSyxjQUFjLGNBQWMsT0FBTyxZQUFZO0FBQzNELG9DQUEwQixNQUFNO0FBQUEsUUFDcEMsT0FBTztBQUNILGlCQUFPLFdBQVc7QUFBQSxRQUN0QjtBQUFBLE1BQ0o7QUFFQSxlQUFTLDBCQUNMLFNBQ0EsVUFDQSxRQUNBLFNBQ0EsV0FDQSxXQUNGO0FBQ0UsWUFBSSxTQUFTO0FBQUEsVUFDVCxlQUFlLE9BQU87QUFBQSxVQUN0Qix5QkFBeUIsUUFBUSxRQUFRO0FBQUEsVUFDekMsU0FBUyxRQUFRLEVBQUU7QUFBQSxVQUNuQixTQUFTLFNBQVMsRUFBRTtBQUFBLFVBQ3BCLFNBQVMsV0FBVyxFQUFFO0FBQUEsUUFDMUI7QUFFQSxZQUFJLFdBQVc7QUFDWCxpQkFBTyxLQUFLLFNBQVMsV0FBVyxFQUFFLENBQUM7QUFBQSxRQUN2QztBQUVBLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxlQUFlLFNBQVM7QUFDN0IsWUFBSSxPQUFPLFNBQVMsU0FBUyxFQUFFO0FBQy9CLFlBQUksUUFBUSxJQUFJO0FBQ1osaUJBQU8sTUFBTztBQUFBLFFBQ2xCLFdBQVcsUUFBUSxLQUFLO0FBQ3BCLGlCQUFPLE9BQU87QUFBQSxRQUNsQjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxrQkFBa0IsR0FBRztBQUUxQixlQUFPLEVBQ0YsUUFBUSxzQkFBc0IsR0FBRyxFQUNqQyxRQUFRLFlBQVksR0FBRyxFQUN2QixRQUFRLFVBQVUsRUFBRSxFQUNwQixRQUFRLFVBQVUsRUFBRTtBQUFBLE1BQzdCO0FBRUEsZUFBUyxhQUFhLFlBQVksYUFBYSxRQUFRO0FBQ25ELFlBQUksWUFBWTtBQUVaLGNBQUksa0JBQWtCLDJCQUEyQixRQUFRLFVBQVUsR0FDL0QsZ0JBQWdCLElBQUk7QUFBQSxZQUNoQixZQUFZLENBQUM7QUFBQSxZQUNiLFlBQVksQ0FBQztBQUFBLFlBQ2IsWUFBWSxDQUFDO0FBQUEsVUFDakIsRUFBRSxPQUFPO0FBQ2IsY0FBSSxvQkFBb0IsZUFBZTtBQUNuQyw0QkFBZ0IsTUFBTSxFQUFFLGtCQUFrQjtBQUMxQyxtQkFBTyxXQUFXO0FBQ2xCLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsZ0JBQWdCLFdBQVcsZ0JBQWdCLFdBQVc7QUFDM0QsWUFBSSxXQUFXO0FBQ1gsaUJBQU8sV0FBVyxTQUFTO0FBQUEsUUFDL0IsV0FBVyxnQkFBZ0I7QUFFdkIsaUJBQU87QUFBQSxRQUNYLE9BQU87QUFDSCxjQUFJLEtBQUssU0FBUyxXQUFXLEVBQUUsR0FDM0IsSUFBSSxLQUFLLEtBQ1RhLE1BQUssS0FBSyxLQUFLO0FBQ25CLGlCQUFPQSxLQUFJLEtBQUs7QUFBQSxRQUNwQjtBQUFBLE1BQ0o7QUFHQSxlQUFTLGtCQUFrQixRQUFRO0FBQy9CLFlBQUksUUFBUSxRQUFRLEtBQUssa0JBQWtCLE9BQU8sRUFBRSxDQUFDLEdBQ2pEO0FBQ0osWUFBSSxPQUFPO0FBQ1Asd0JBQWM7QUFBQSxZQUNWLE1BQU0sQ0FBQztBQUFBLFlBQ1AsTUFBTSxDQUFDO0FBQUEsWUFDUCxNQUFNLENBQUM7QUFBQSxZQUNQLE1BQU0sQ0FBQztBQUFBLFlBQ1AsTUFBTSxDQUFDO0FBQUEsWUFDUCxNQUFNLENBQUM7QUFBQSxVQUNYO0FBQ0EsY0FBSSxDQUFDLGFBQWEsTUFBTSxDQUFDLEdBQUcsYUFBYSxNQUFNLEdBQUc7QUFDOUM7QUFBQSxVQUNKO0FBRUEsaUJBQU8sS0FBSztBQUNaLGlCQUFPLE9BQU8sZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBRTNELGlCQUFPLEtBQUssY0FBYyxNQUFNLE1BQU0sT0FBTyxFQUFFO0FBQy9DLGlCQUFPLEdBQUcsY0FBYyxPQUFPLEdBQUcsY0FBYyxJQUFJLE9BQU8sSUFBSTtBQUUvRCwwQkFBZ0IsTUFBTSxFQUFFLFVBQVU7QUFBQSxRQUN0QyxPQUFPO0FBQ0gsaUJBQU8sV0FBVztBQUFBLFFBQ3RCO0FBQUEsTUFDSjtBQUdBLGVBQVMsaUJBQWlCLFFBQVE7QUFDOUIsWUFBSSxVQUFVLGdCQUFnQixLQUFLLE9BQU8sRUFBRTtBQUM1QyxZQUFJLFlBQVksTUFBTTtBQUNsQixpQkFBTyxLQUFLLG9CQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQztBQUFBLFFBQ0o7QUFFQSxzQkFBYyxNQUFNO0FBQ3BCLFlBQUksT0FBTyxhQUFhLE9BQU87QUFDM0IsaUJBQU8sT0FBTztBQUFBLFFBQ2xCLE9BQU87QUFDSDtBQUFBLFFBQ0o7QUFFQSwwQkFBa0IsTUFBTTtBQUN4QixZQUFJLE9BQU8sYUFBYSxPQUFPO0FBQzNCLGlCQUFPLE9BQU87QUFBQSxRQUNsQixPQUFPO0FBQ0g7QUFBQSxRQUNKO0FBRUEsWUFBSSxPQUFPLFNBQVM7QUFDaEIsaUJBQU8sV0FBVztBQUFBLFFBQ3RCLE9BQU87QUFFSCxnQkFBTSx3QkFBd0IsTUFBTTtBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUVBLFlBQU0sMEJBQTBCO0FBQUEsUUFDNUI7QUFBQSxRQUdBLFNBQVUsUUFBUTtBQUNkLGlCQUFPLEtBQUssb0JBQUksS0FBSyxPQUFPLE1BQU0sT0FBTyxVQUFVLFNBQVMsR0FBRztBQUFBLFFBQ25FO0FBQUEsTUFDSjtBQUdBLGVBQVNJLFVBQVMsR0FBRyxHQUFHLEdBQUc7QUFDdkIsWUFBSSxLQUFLLE1BQU07QUFDWCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLEtBQUssTUFBTTtBQUNYLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxpQkFBaUIsUUFBUTtBQUU5QixZQUFJLFdBQVcsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQ25DLFlBQUksT0FBTyxTQUFTO0FBQ2hCLGlCQUFPO0FBQUEsWUFDSCxTQUFTLGVBQWU7QUFBQSxZQUN4QixTQUFTLFlBQVk7QUFBQSxZQUNyQixTQUFTLFdBQVc7QUFBQSxVQUN4QjtBQUFBLFFBQ0o7QUFDQSxlQUFPLENBQUMsU0FBUyxZQUFZLEdBQUcsU0FBUyxTQUFTLEdBQUcsU0FBUyxRQUFRLENBQUM7QUFBQSxNQUMzRTtBQU1BLGVBQVMsZ0JBQWdCLFFBQVE7QUFDN0IsWUFBSSxHQUNBLE1BQ0EsUUFBUSxDQUFDLEdBQ1QsYUFDQSxpQkFDQTtBQUVKLFlBQUksT0FBTyxJQUFJO0FBQ1g7QUFBQSxRQUNKO0FBRUEsc0JBQWMsaUJBQWlCLE1BQU07QUFHckMsWUFBSSxPQUFPLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxRQUFRLE9BQU8sR0FBRyxLQUFLLEtBQUssTUFBTTtBQUNsRSxnQ0FBc0IsTUFBTTtBQUFBLFFBQ2hDO0FBR0EsWUFBSSxPQUFPLGNBQWMsTUFBTTtBQUMzQixzQkFBWUEsVUFBUyxPQUFPLEdBQUcsSUFBSSxHQUFHLFlBQVksSUFBSSxDQUFDO0FBRXZELGNBQ0ksT0FBTyxhQUFhLFdBQVcsU0FBUyxLQUN4QyxPQUFPLGVBQWUsR0FDeEI7QUFDRSw0QkFBZ0IsTUFBTSxFQUFFLHFCQUFxQjtBQUFBLFVBQ2pEO0FBRUEsaUJBQU8sY0FBYyxXQUFXLEdBQUcsT0FBTyxVQUFVO0FBQ3BELGlCQUFPLEdBQUcsS0FBSyxJQUFJLEtBQUssWUFBWTtBQUNwQyxpQkFBTyxHQUFHLElBQUksSUFBSSxLQUFLLFdBQVc7QUFBQSxRQUN0QztBQU9BLGFBQUssSUFBSSxHQUFHLElBQUksS0FBSyxPQUFPLEdBQUcsQ0FBQyxLQUFLLE1BQU0sRUFBRSxHQUFHO0FBQzVDLGlCQUFPLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQzNDO0FBR0EsZUFBTyxJQUFJLEdBQUcsS0FBSztBQUNmLGlCQUFPLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUNsQixPQUFPLEdBQUcsQ0FBQyxLQUFLLE9BQVEsTUFBTSxJQUFJLElBQUksSUFBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQzlEO0FBR0EsWUFDSSxPQUFPLEdBQUcsSUFBSSxNQUFNLE1BQ3BCLE9BQU8sR0FBRyxNQUFNLE1BQU0sS0FDdEIsT0FBTyxHQUFHLE1BQU0sTUFBTSxLQUN0QixPQUFPLEdBQUcsV0FBVyxNQUFNLEdBQzdCO0FBQ0UsaUJBQU8sV0FBVztBQUNsQixpQkFBTyxHQUFHLElBQUksSUFBSTtBQUFBLFFBQ3RCO0FBRUEsZUFBTyxNQUFNLE9BQU8sVUFBVSxnQkFBZ0IsWUFBWTtBQUFBLFVBQ3REO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFDQSwwQkFBa0IsT0FBTyxVQUNuQixPQUFPLEdBQUcsVUFBVSxJQUNwQixPQUFPLEdBQUcsT0FBTztBQUl2QixZQUFJLE9BQU8sUUFBUSxNQUFNO0FBQ3JCLGlCQUFPLEdBQUcsY0FBYyxPQUFPLEdBQUcsY0FBYyxJQUFJLE9BQU8sSUFBSTtBQUFBLFFBQ25FO0FBRUEsWUFBSSxPQUFPLFVBQVU7QUFDakIsaUJBQU8sR0FBRyxJQUFJLElBQUk7QUFBQSxRQUN0QjtBQUdBLFlBQ0ksT0FBTyxNQUNQLE9BQU8sT0FBTyxHQUFHLE1BQU0sZUFDdkIsT0FBTyxHQUFHLE1BQU0saUJBQ2xCO0FBQ0UsMEJBQWdCLE1BQU0sRUFBRSxrQkFBa0I7QUFBQSxRQUM5QztBQUFBLE1BQ0o7QUFFQSxlQUFTLHNCQUFzQixRQUFRO0FBQ25DLFlBQUksR0FBRyxVQUFVLE1BQU0sU0FBUyxLQUFLLEtBQUssTUFBTSxpQkFBaUI7QUFFakUsWUFBSSxPQUFPO0FBQ1gsWUFBSSxFQUFFLE1BQU0sUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssTUFBTTtBQUM1QyxnQkFBTTtBQUNOLGdCQUFNO0FBTU4scUJBQVdBO0FBQUEsWUFDUCxFQUFFO0FBQUEsWUFDRixPQUFPLEdBQUcsSUFBSTtBQUFBLFlBQ2QsV0FBVyxZQUFZLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFBQSxVQUNwQztBQUNBLGlCQUFPQSxVQUFTLEVBQUUsR0FBRyxDQUFDO0FBQ3RCLG9CQUFVQSxVQUFTLEVBQUUsR0FBRyxDQUFDO0FBQ3pCLGNBQUksVUFBVSxLQUFLLFVBQVUsR0FBRztBQUM1Qiw4QkFBa0I7QUFBQSxVQUN0QjtBQUFBLFFBQ0osT0FBTztBQUNILGdCQUFNLE9BQU8sUUFBUSxNQUFNO0FBQzNCLGdCQUFNLE9BQU8sUUFBUSxNQUFNO0FBRTNCLG9CQUFVLFdBQVcsWUFBWSxHQUFHLEtBQUssR0FBRztBQUU1QyxxQkFBV0EsVUFBUyxFQUFFLElBQUksT0FBTyxHQUFHLElBQUksR0FBRyxRQUFRLElBQUk7QUFHdkQsaUJBQU9BLFVBQVMsRUFBRSxHQUFHLFFBQVEsSUFBSTtBQUVqQyxjQUFJLEVBQUUsS0FBSyxNQUFNO0FBRWIsc0JBQVUsRUFBRTtBQUNaLGdCQUFJLFVBQVUsS0FBSyxVQUFVLEdBQUc7QUFDNUIsZ0NBQWtCO0FBQUEsWUFDdEI7QUFBQSxVQUNKLFdBQVcsRUFBRSxLQUFLLE1BQU07QUFFcEIsc0JBQVUsRUFBRSxJQUFJO0FBQ2hCLGdCQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxHQUFHO0FBQ3BCLGdDQUFrQjtBQUFBLFlBQ3RCO0FBQUEsVUFDSixPQUFPO0FBRUgsc0JBQVU7QUFBQSxVQUNkO0FBQUEsUUFDSjtBQUNBLFlBQUksT0FBTyxLQUFLLE9BQU8sWUFBWSxVQUFVLEtBQUssR0FBRyxHQUFHO0FBQ3BELDBCQUFnQixNQUFNLEVBQUUsaUJBQWlCO0FBQUEsUUFDN0MsV0FBVyxtQkFBbUIsTUFBTTtBQUNoQywwQkFBZ0IsTUFBTSxFQUFFLG1CQUFtQjtBQUFBLFFBQy9DLE9BQU87QUFDSCxpQkFBTyxtQkFBbUIsVUFBVSxNQUFNLFNBQVMsS0FBSyxHQUFHO0FBQzNELGlCQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUs7QUFDdkIsaUJBQU8sYUFBYSxLQUFLO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBR0EsWUFBTSxXQUFXLFdBQVk7QUFBQSxNQUFDO0FBRzlCLFlBQU0sV0FBVyxXQUFZO0FBQUEsTUFBQztBQUc5QixlQUFTLDBCQUEwQixRQUFRO0FBRXZDLFlBQUksT0FBTyxPQUFPLE1BQU0sVUFBVTtBQUM5Qix3QkFBYyxNQUFNO0FBQ3BCO0FBQUEsUUFDSjtBQUNBLFlBQUksT0FBTyxPQUFPLE1BQU0sVUFBVTtBQUM5Qiw0QkFBa0IsTUFBTTtBQUN4QjtBQUFBLFFBQ0o7QUFDQSxlQUFPLEtBQUssQ0FBQztBQUNiLHdCQUFnQixNQUFNLEVBQUUsUUFBUTtBQUdoQyxZQUFJLFNBQVMsS0FBSyxPQUFPLElBQ3JCLEdBQ0EsYUFDQUMsU0FDQVYsUUFDQSxTQUNBLGVBQWUsT0FBTyxRQUN0Qix5QkFBeUIsR0FDekIsS0FDQTtBQUVKLFFBQUFVLFVBQ0ksYUFBYSxPQUFPLElBQUksT0FBTyxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsS0FBSyxDQUFDO0FBQ3hFLG1CQUFXQSxRQUFPO0FBQ2xCLGFBQUssSUFBSSxHQUFHLElBQUksVUFBVSxLQUFLO0FBQzNCLFVBQUFWLFNBQVFVLFFBQU8sQ0FBQztBQUNoQix5QkFBZSxPQUFPLE1BQU0sc0JBQXNCVixRQUFPLE1BQU0sQ0FBQyxLQUM1RCxDQUFDLEdBQUcsQ0FBQztBQUNULGNBQUksYUFBYTtBQUNiLHNCQUFVLE9BQU8sT0FBTyxHQUFHLE9BQU8sUUFBUSxXQUFXLENBQUM7QUFDdEQsZ0JBQUksUUFBUSxTQUFTLEdBQUc7QUFDcEIsOEJBQWdCLE1BQU0sRUFBRSxZQUFZLEtBQUssT0FBTztBQUFBLFlBQ3BEO0FBQ0EscUJBQVMsT0FBTztBQUFBLGNBQ1osT0FBTyxRQUFRLFdBQVcsSUFBSSxZQUFZO0FBQUEsWUFDOUM7QUFDQSxzQ0FBMEIsWUFBWTtBQUFBLFVBQzFDO0FBRUEsY0FBSSxxQkFBcUJBLE1BQUssR0FBRztBQUM3QixnQkFBSSxhQUFhO0FBQ2IsOEJBQWdCLE1BQU0sRUFBRSxRQUFRO0FBQUEsWUFDcEMsT0FBTztBQUNILDhCQUFnQixNQUFNLEVBQUUsYUFBYSxLQUFLQSxNQUFLO0FBQUEsWUFDbkQ7QUFDQSxvQ0FBd0JBLFFBQU8sYUFBYSxNQUFNO0FBQUEsVUFDdEQsV0FBVyxPQUFPLFdBQVcsQ0FBQyxhQUFhO0FBQ3ZDLDRCQUFnQixNQUFNLEVBQUUsYUFBYSxLQUFLQSxNQUFLO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBR0Esd0JBQWdCLE1BQU0sRUFBRSxnQkFDcEIsZUFBZTtBQUNuQixZQUFJLE9BQU8sU0FBUyxHQUFHO0FBQ25CLDBCQUFnQixNQUFNLEVBQUUsWUFBWSxLQUFLLE1BQU07QUFBQSxRQUNuRDtBQUdBLFlBQ0ksT0FBTyxHQUFHLElBQUksS0FBSyxNQUNuQixnQkFBZ0IsTUFBTSxFQUFFLFlBQVksUUFDcEMsT0FBTyxHQUFHLElBQUksSUFBSSxHQUNwQjtBQUNFLDBCQUFnQixNQUFNLEVBQUUsVUFBVTtBQUFBLFFBQ3RDO0FBRUEsd0JBQWdCLE1BQU0sRUFBRSxrQkFBa0IsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUMzRCx3QkFBZ0IsTUFBTSxFQUFFLFdBQVcsT0FBTztBQUUxQyxlQUFPLEdBQUcsSUFBSSxJQUFJO0FBQUEsVUFDZCxPQUFPO0FBQUEsVUFDUCxPQUFPLEdBQUcsSUFBSTtBQUFBLFVBQ2QsT0FBTztBQUFBLFFBQ1g7QUFHQSxjQUFNLGdCQUFnQixNQUFNLEVBQUU7QUFDOUIsWUFBSSxRQUFRLE1BQU07QUFDZCxpQkFBTyxHQUFHLElBQUksSUFBSSxPQUFPLFFBQVEsZ0JBQWdCLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQztBQUFBLFFBQ3pFO0FBRUEsd0JBQWdCLE1BQU07QUFDdEIsc0JBQWMsTUFBTTtBQUFBLE1BQ3hCO0FBRUEsZUFBUyxnQkFBZ0JSLFNBQVEsTUFBTW1CLFdBQVU7QUFDN0MsWUFBSTtBQUVKLFlBQUlBLGFBQVksTUFBTTtBQUVsQixpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJbkIsUUFBTyxnQkFBZ0IsTUFBTTtBQUM3QixpQkFBT0EsUUFBTyxhQUFhLE1BQU1tQixTQUFRO0FBQUEsUUFDN0MsV0FBV25CLFFBQU8sUUFBUSxNQUFNO0FBRTVCLGlCQUFPQSxRQUFPLEtBQUttQixTQUFRO0FBQzNCLGNBQUksUUFBUSxPQUFPLElBQUk7QUFDbkIsb0JBQVE7QUFBQSxVQUNaO0FBQ0EsY0FBSSxDQUFDLFFBQVEsU0FBUyxJQUFJO0FBQ3RCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFPO0FBQUEsUUFDWCxPQUFPO0FBRUgsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUdBLGVBQVMseUJBQXlCLFFBQVE7QUFDdEMsWUFBSSxZQUNBLFlBQ0EsYUFDQSxHQUNBLGNBQ0Esa0JBQ0Esb0JBQW9CLE9BQ3BCLGFBQWEsT0FBTyxHQUFHO0FBRTNCLFlBQUksZUFBZSxHQUFHO0FBQ2xCLDBCQUFnQixNQUFNLEVBQUUsZ0JBQWdCO0FBQ3hDLGlCQUFPLEtBQUssb0JBQUksS0FBSyxHQUFHO0FBQ3hCO0FBQUEsUUFDSjtBQUVBLGFBQUssSUFBSSxHQUFHLElBQUksWUFBWSxLQUFLO0FBQzdCLHlCQUFlO0FBQ2YsNkJBQW1CO0FBQ25CLHVCQUFhLFdBQVcsQ0FBQyxHQUFHLE1BQU07QUFDbEMsY0FBSSxPQUFPLFdBQVcsTUFBTTtBQUN4Qix1QkFBVyxVQUFVLE9BQU87QUFBQSxVQUNoQztBQUNBLHFCQUFXLEtBQUssT0FBTyxHQUFHLENBQUM7QUFDM0Isb0NBQTBCLFVBQVU7QUFFcEMsY0FBSSxRQUFRLFVBQVUsR0FBRztBQUNyQiwrQkFBbUI7QUFBQSxVQUN2QjtBQUdBLDBCQUFnQixnQkFBZ0IsVUFBVSxFQUFFO0FBRzVDLDBCQUFnQixnQkFBZ0IsVUFBVSxFQUFFLGFBQWEsU0FBUztBQUVsRSwwQkFBZ0IsVUFBVSxFQUFFLFFBQVE7QUFFcEMsY0FBSSxDQUFDLG1CQUFtQjtBQUNwQixnQkFDSSxlQUFlLFFBQ2YsZUFBZSxlQUNmLGtCQUNGO0FBQ0UsNEJBQWM7QUFDZCwyQkFBYTtBQUNiLGtCQUFJLGtCQUFrQjtBQUNsQixvQ0FBb0I7QUFBQSxjQUN4QjtBQUFBLFlBQ0o7QUFBQSxVQUNKLE9BQU87QUFDSCxnQkFBSSxlQUFlLGFBQWE7QUFDNUIsNEJBQWM7QUFDZCwyQkFBYTtBQUFBLFlBQ2pCO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxlQUFPLFFBQVEsY0FBYyxVQUFVO0FBQUEsTUFDM0M7QUFFQSxlQUFTLGlCQUFpQixRQUFRO0FBQzlCLFlBQUksT0FBTyxJQUFJO0FBQ1g7QUFBQSxRQUNKO0FBRUEsWUFBSSxJQUFJLHFCQUFxQixPQUFPLEVBQUUsR0FDbEMsWUFBWSxFQUFFLFFBQVEsU0FBWSxFQUFFLE9BQU8sRUFBRTtBQUNqRCxlQUFPLEtBQUtyQjtBQUFBLFVBQ1IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXO0FBQUEsVUFDdEUsU0FBVSxLQUFLO0FBQ1gsbUJBQU8sT0FBTyxTQUFTLEtBQUssRUFBRTtBQUFBLFVBQ2xDO0FBQUEsUUFDSjtBQUVBLHdCQUFnQixNQUFNO0FBQUEsTUFDMUI7QUFFQSxlQUFTLGlCQUFpQixRQUFRO0FBQzlCLFlBQUksTUFBTSxJQUFJLE9BQU8sY0FBYyxjQUFjLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELFlBQUksSUFBSSxVQUFVO0FBRWQsY0FBSSxJQUFJLEdBQUcsR0FBRztBQUNkLGNBQUksV0FBVztBQUFBLFFBQ25CO0FBRUEsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLGNBQWMsUUFBUTtBQUMzQixZQUFJLFFBQVEsT0FBTyxJQUNmQyxVQUFTLE9BQU87QUFFcEIsZUFBTyxVQUFVLE9BQU8sV0FBVyxVQUFVLE9BQU8sRUFBRTtBQUV0RCxZQUFJLFVBQVUsUUFBU0EsWUFBVyxVQUFhLFVBQVUsSUFBSztBQUMxRCxpQkFBTyxjQUFjLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxRQUM1QztBQUVBLFlBQUksT0FBTyxVQUFVLFVBQVU7QUFDM0IsaUJBQU8sS0FBSyxRQUFRLE9BQU8sUUFBUSxTQUFTLEtBQUs7QUFBQSxRQUNyRDtBQUVBLFlBQUksU0FBUyxLQUFLLEdBQUc7QUFDakIsaUJBQU8sSUFBSSxPQUFPLGNBQWMsS0FBSyxDQUFDO0FBQUEsUUFDMUMsV0FBVyxPQUFPLEtBQUssR0FBRztBQUN0QixpQkFBTyxLQUFLO0FBQUEsUUFDaEIsV0FBV0osU0FBUUksT0FBTSxHQUFHO0FBQ3hCLG1DQUF5QixNQUFNO0FBQUEsUUFDbkMsV0FBV0EsU0FBUTtBQUNmLG9DQUEwQixNQUFNO0FBQUEsUUFDcEMsT0FBTztBQUNILDBCQUFnQixNQUFNO0FBQUEsUUFDMUI7QUFFQSxZQUFJLENBQUMsUUFBUSxNQUFNLEdBQUc7QUFDbEIsaUJBQU8sS0FBSztBQUFBLFFBQ2hCO0FBRUEsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLGdCQUFnQixRQUFRO0FBQzdCLFlBQUksUUFBUSxPQUFPO0FBQ25CLFlBQUksWUFBWSxLQUFLLEdBQUc7QUFDcEIsaUJBQU8sS0FBSyxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUM7QUFBQSxRQUNwQyxXQUFXLE9BQU8sS0FBSyxHQUFHO0FBQ3RCLGlCQUFPLEtBQUssSUFBSSxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQUEsUUFDeEMsV0FBVyxPQUFPLFVBQVUsVUFBVTtBQUNsQywyQkFBaUIsTUFBTTtBQUFBLFFBQzNCLFdBQVdKLFNBQVEsS0FBSyxHQUFHO0FBQ3ZCLGlCQUFPLEtBQUtHLEtBQUksTUFBTSxNQUFNLENBQUMsR0FBRyxTQUFVLEtBQUs7QUFDM0MsbUJBQU8sU0FBUyxLQUFLLEVBQUU7QUFBQSxVQUMzQixDQUFDO0FBQ0QsMEJBQWdCLE1BQU07QUFBQSxRQUMxQixXQUFXRixVQUFTLEtBQUssR0FBRztBQUN4QiwyQkFBaUIsTUFBTTtBQUFBLFFBQzNCLFdBQVdDLFVBQVMsS0FBSyxHQUFHO0FBRXhCLGlCQUFPLEtBQUssSUFBSSxLQUFLLEtBQUs7QUFBQSxRQUM5QixPQUFPO0FBQ0gsZ0JBQU0sd0JBQXdCLE1BQU07QUFBQSxRQUN4QztBQUFBLE1BQ0o7QUFFQSxlQUFTLGlCQUFpQixPQUFPRSxTQUFRQyxTQUFRLFFBQVEsT0FBTztBQUM1RCxZQUFJLElBQUksQ0FBQztBQUVULFlBQUlELFlBQVcsUUFBUUEsWUFBVyxPQUFPO0FBQ3JDLG1CQUFTQTtBQUNULFVBQUFBLFVBQVM7QUFBQSxRQUNiO0FBRUEsWUFBSUMsWUFBVyxRQUFRQSxZQUFXLE9BQU87QUFDckMsbUJBQVNBO0FBQ1QsVUFBQUEsVUFBUztBQUFBLFFBQ2I7QUFFQSxZQUNLSixVQUFTLEtBQUssS0FBSyxjQUFjLEtBQUssS0FDdENELFNBQVEsS0FBSyxLQUFLLE1BQU0sV0FBVyxHQUN0QztBQUNFLGtCQUFRO0FBQUEsUUFDWjtBQUdBLFVBQUUsbUJBQW1CO0FBQ3JCLFVBQUUsVUFBVSxFQUFFLFNBQVM7QUFDdkIsVUFBRSxLQUFLSztBQUNQLFVBQUUsS0FBSztBQUNQLFVBQUUsS0FBS0Q7QUFDUCxVQUFFLFVBQVU7QUFFWixlQUFPLGlCQUFpQixDQUFDO0FBQUEsTUFDN0I7QUFFQSxlQUFTLFlBQVksT0FBT0EsU0FBUUMsU0FBUSxRQUFRO0FBQ2hELGVBQU8saUJBQWlCLE9BQU9ELFNBQVFDLFNBQVEsUUFBUSxLQUFLO0FBQUEsTUFDaEU7QUFFQSxVQUFJLGVBQWU7QUFBQSxRQUNYO0FBQUEsUUFDQSxXQUFZO0FBQ1IsY0FBSSxRQUFRLFlBQVksTUFBTSxNQUFNLFNBQVM7QUFDN0MsY0FBSSxLQUFLLFFBQVEsS0FBSyxNQUFNLFFBQVEsR0FBRztBQUNuQyxtQkFBTyxRQUFRLE9BQU8sT0FBTztBQUFBLFVBQ2pDLE9BQU87QUFDSCxtQkFBTyxjQUFjO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsTUFDSixHQUNBLGVBQWU7QUFBQSxRQUNYO0FBQUEsUUFDQSxXQUFZO0FBQ1IsY0FBSSxRQUFRLFlBQVksTUFBTSxNQUFNLFNBQVM7QUFDN0MsY0FBSSxLQUFLLFFBQVEsS0FBSyxNQUFNLFFBQVEsR0FBRztBQUNuQyxtQkFBTyxRQUFRLE9BQU8sT0FBTztBQUFBLFVBQ2pDLE9BQU87QUFDSCxtQkFBTyxjQUFjO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQU9KLGVBQVMsT0FBTyxJQUFJLFNBQVM7QUFDekIsWUFBSSxLQUFLO0FBQ1QsWUFBSSxRQUFRLFdBQVcsS0FBS0wsU0FBUSxRQUFRLENBQUMsQ0FBQyxHQUFHO0FBQzdDLG9CQUFVLFFBQVEsQ0FBQztBQUFBLFFBQ3ZCO0FBQ0EsWUFBSSxDQUFDLFFBQVEsUUFBUTtBQUNqQixpQkFBTyxZQUFZO0FBQUEsUUFDdkI7QUFDQSxjQUFNLFFBQVEsQ0FBQztBQUNmLGFBQUssSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEVBQUUsR0FBRztBQUNqQyxjQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxLQUFLLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUc7QUFDOUMsa0JBQU0sUUFBUSxDQUFDO0FBQUEsVUFDbkI7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFHQSxlQUFTLE1BQU07QUFDWCxZQUFJLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFFckMsZUFBTyxPQUFPLFlBQVksSUFBSTtBQUFBLE1BQ2xDO0FBRUEsZUFBUyxNQUFNO0FBQ1gsWUFBSSxPQUFPLENBQUMsRUFBRSxNQUFNLEtBQUssV0FBVyxDQUFDO0FBRXJDLGVBQU8sT0FBTyxXQUFXLElBQUk7QUFBQSxNQUNqQztBQUVBLFVBQUksTUFBTSxXQUFZO0FBQ2xCLGVBQU8sS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsb0JBQUksS0FBSztBQUFBLE1BQzdDO0FBRUEsVUFBSSxXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUVBLGVBQVMsZ0JBQWdCLEdBQUc7QUFDeEIsWUFBSSxLQUNBLGlCQUFpQixPQUNqQixHQUNBLFdBQVcsU0FBUztBQUN4QixhQUFLLE9BQU8sR0FBRztBQUNYLGNBQ0ksV0FBVyxHQUFHLEdBQUcsS0FDakIsRUFDSSxRQUFRLEtBQUssVUFBVSxHQUFHLE1BQU0sT0FDL0IsRUFBRSxHQUFHLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FFdEM7QUFDRSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBRUEsYUFBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUUsR0FBRztBQUMzQixjQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRztBQUNoQixnQkFBSSxnQkFBZ0I7QUFDaEIscUJBQU87QUFBQSxZQUNYO0FBQ0EsZ0JBQUksV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ3RELCtCQUFpQjtBQUFBLFlBQ3JCO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsWUFBWTtBQUNqQixlQUFPLEtBQUs7QUFBQSxNQUNoQjtBQUVBLGVBQVMsa0JBQWtCO0FBQ3ZCLGVBQU8sZUFBZSxHQUFHO0FBQUEsTUFDN0I7QUFFQSxlQUFTLFNBQVMsVUFBVTtBQUN4QixZQUFJLGtCQUFrQixxQkFBcUIsUUFBUSxHQUMvQ3lCLFNBQVEsZ0JBQWdCLFFBQVEsR0FDaEMsV0FBVyxnQkFBZ0IsV0FBVyxHQUN0Q0MsVUFBUyxnQkFBZ0IsU0FBUyxHQUNsQ0MsU0FBUSxnQkFBZ0IsUUFBUSxnQkFBZ0IsV0FBVyxHQUMzREMsUUFBTyxnQkFBZ0IsT0FBTyxHQUM5QlQsU0FBUSxnQkFBZ0IsUUFBUSxHQUNoQ0MsV0FBVSxnQkFBZ0IsVUFBVSxHQUNwQ1MsV0FBVSxnQkFBZ0IsVUFBVSxHQUNwQ0MsZ0JBQWUsZ0JBQWdCLGVBQWU7QUFFbEQsYUFBSyxXQUFXLGdCQUFnQixlQUFlO0FBRy9DLGFBQUssZ0JBQ0QsQ0FBQ0EsZ0JBQ0RELFdBQVU7QUFBQSxRQUNWVCxXQUFVO0FBQUEsUUFDVkQsU0FBUSxNQUFPLEtBQUs7QUFHeEIsYUFBSyxRQUFRLENBQUNTLFFBQU9ELFNBQVE7QUFJN0IsYUFBSyxVQUFVLENBQUNELFVBQVMsV0FBVyxJQUFJRCxTQUFRO0FBRWhELGFBQUssUUFBUSxDQUFDO0FBRWQsYUFBSyxVQUFVLFVBQVU7QUFFekIsYUFBSyxRQUFRO0FBQUEsTUFDakI7QUFFQSxlQUFTLFdBQVcsS0FBSztBQUNyQixlQUFPLGVBQWU7QUFBQSxNQUMxQjtBQUVBLGVBQVMsU0FBUyxRQUFRO0FBQ3RCLFlBQUksU0FBUyxHQUFHO0FBQ1osaUJBQU8sS0FBSyxNQUFNLEtBQUssTUFBTSxJQUFJO0FBQUEsUUFDckMsT0FBTztBQUNILGlCQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBR0EsZUFBUyxjQUFjLFFBQVEsUUFBUSxhQUFhO0FBQ2hELFlBQUksTUFBTSxLQUFLLElBQUksT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUMzQyxhQUFhLEtBQUssSUFBSSxPQUFPLFNBQVMsT0FBTyxNQUFNLEdBQ25ELFFBQVEsR0FDUjtBQUNKLGFBQUssSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLO0FBQ3RCLGNBQ0ssZUFBZSxPQUFPLENBQUMsTUFBTSxPQUFPLENBQUMsS0FDckMsQ0FBQyxlQUFlLE1BQU0sT0FBTyxDQUFDLENBQUMsTUFBTSxNQUFNLE9BQU8sQ0FBQyxDQUFDLEdBQ3ZEO0FBQ0U7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUNBLGVBQU8sUUFBUTtBQUFBLE1BQ25CO0FBSUEsZUFBUyxPQUFPWixRQUFPLFdBQVc7QUFDOUIsdUJBQWVBLFFBQU8sR0FBRyxHQUFHLFdBQVk7QUFDcEMsY0FBSWtCLFVBQVMsS0FBSyxVQUFVLEdBQ3hCbkIsUUFBTztBQUNYLGNBQUltQixVQUFTLEdBQUc7QUFDWixZQUFBQSxVQUFTLENBQUNBO0FBQ1YsWUFBQW5CLFFBQU87QUFBQSxVQUNYO0FBQ0EsaUJBQ0lBLFFBQ0EsU0FBUyxDQUFDLEVBQUVtQixVQUFTLEtBQUssQ0FBQyxJQUMzQixZQUNBLFNBQVMsQ0FBQyxDQUFDQSxVQUFTLElBQUksQ0FBQztBQUFBLFFBRWpDLENBQUM7QUFBQSxNQUNMO0FBRUEsYUFBTyxLQUFLLEdBQUc7QUFDZixhQUFPLE1BQU0sRUFBRTtBQUlmLG9CQUFjLEtBQUssZ0JBQWdCO0FBQ25DLG9CQUFjLE1BQU0sZ0JBQWdCO0FBQ3BDLG9CQUFjLENBQUMsS0FBSyxJQUFJLEdBQUcsU0FBVSxPQUFPLE9BQU8sUUFBUTtBQUN2RCxlQUFPLFVBQVU7QUFDakIsZUFBTyxPQUFPLGlCQUFpQixrQkFBa0IsS0FBSztBQUFBLE1BQzFELENBQUM7QUFPRCxVQUFJLGNBQWM7QUFFbEIsZUFBUyxpQkFBaUIsU0FBUyxRQUFRO0FBQ3ZDLFlBQUksV0FBVyxVQUFVLElBQUksTUFBTSxPQUFPLEdBQ3RDLE9BQ0EsT0FDQVg7QUFFSixZQUFJLFlBQVksTUFBTTtBQUNsQixpQkFBTztBQUFBLFFBQ1g7QUFFQSxnQkFBUSxRQUFRLFFBQVEsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUN4QyxpQkFBUyxRQUFRLElBQUksTUFBTSxXQUFXLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUNyRCxRQUFBQSxXQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxNQUFNLE1BQU0sQ0FBQyxDQUFDO0FBRTNDLGVBQU9BLGFBQVksSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLE1BQU1BLFdBQVUsQ0FBQ0E7QUFBQSxNQUM3RDtBQUdBLGVBQVMsZ0JBQWdCLE9BQU8sT0FBTztBQUNuQyxZQUFJLEtBQUtKO0FBQ1QsWUFBSSxNQUFNLFFBQVE7QUFDZCxnQkFBTSxNQUFNLE1BQU07QUFDbEIsVUFBQUEsU0FDSyxTQUFTLEtBQUssS0FBSyxPQUFPLEtBQUssSUFDMUIsTUFBTSxRQUFRLElBQ2QsWUFBWSxLQUFLLEVBQUUsUUFBUSxLQUFLLElBQUksUUFBUTtBQUV0RCxjQUFJLEdBQUcsUUFBUSxJQUFJLEdBQUcsUUFBUSxJQUFJQSxLQUFJO0FBQ3RDLGdCQUFNLGFBQWEsS0FBSyxLQUFLO0FBQzdCLGlCQUFPO0FBQUEsUUFDWCxPQUFPO0FBQ0gsaUJBQU8sWUFBWSxLQUFLLEVBQUUsTUFBTTtBQUFBLFFBQ3BDO0FBQUEsTUFDSjtBQUVBLGVBQVMsY0FBYyxHQUFHO0FBR3RCLGVBQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxHQUFHLGtCQUFrQixDQUFDO0FBQUEsTUFDL0M7QUFNQSxZQUFNLGVBQWUsV0FBWTtBQUFBLE1BQUM7QUFjbEMsZUFBUyxhQUFhLE9BQU8sZUFBZSxhQUFhO0FBQ3JELFlBQUllLFVBQVMsS0FBSyxXQUFXLEdBQ3pCO0FBQ0osWUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHO0FBQ2pCLGlCQUFPLFNBQVMsT0FBTyxPQUFPO0FBQUEsUUFDbEM7QUFDQSxZQUFJLFNBQVMsTUFBTTtBQUNmLGNBQUksT0FBTyxVQUFVLFVBQVU7QUFDM0Isb0JBQVEsaUJBQWlCLGtCQUFrQixLQUFLO0FBQ2hELGdCQUFJLFVBQVUsTUFBTTtBQUNoQixxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKLFdBQVcsS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsYUFBYTtBQUM3QyxvQkFBUSxRQUFRO0FBQUEsVUFDcEI7QUFDQSxjQUFJLENBQUMsS0FBSyxVQUFVLGVBQWU7QUFDL0IsMEJBQWMsY0FBYyxJQUFJO0FBQUEsVUFDcEM7QUFDQSxlQUFLLFVBQVU7QUFDZixlQUFLLFNBQVM7QUFDZCxjQUFJLGVBQWUsTUFBTTtBQUNyQixpQkFBSyxJQUFJLGFBQWEsR0FBRztBQUFBLFVBQzdCO0FBQ0EsY0FBSUEsWUFBVyxPQUFPO0FBQ2xCLGdCQUFJLENBQUMsaUJBQWlCLEtBQUssbUJBQW1CO0FBQzFDO0FBQUEsZ0JBQ0k7QUFBQSxnQkFDQSxlQUFlLFFBQVFBLFNBQVEsR0FBRztBQUFBLGdCQUNsQztBQUFBLGdCQUNBO0FBQUEsY0FDSjtBQUFBLFlBQ0osV0FBVyxDQUFDLEtBQUssbUJBQW1CO0FBQ2hDLG1CQUFLLG9CQUFvQjtBQUN6QixvQkFBTSxhQUFhLE1BQU0sSUFBSTtBQUM3QixtQkFBSyxvQkFBb0I7QUFBQSxZQUM3QjtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1gsT0FBTztBQUNILGlCQUFPLEtBQUssU0FBU0EsVUFBUyxjQUFjLElBQUk7QUFBQSxRQUNwRDtBQUFBLE1BQ0o7QUFFQSxlQUFTLFdBQVcsT0FBTyxlQUFlO0FBQ3RDLFlBQUksU0FBUyxNQUFNO0FBQ2YsY0FBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixvQkFBUSxDQUFDO0FBQUEsVUFDYjtBQUVBLGVBQUssVUFBVSxPQUFPLGFBQWE7QUFFbkMsaUJBQU87QUFBQSxRQUNYLE9BQU87QUFDSCxpQkFBTyxDQUFDLEtBQUssVUFBVTtBQUFBLFFBQzNCO0FBQUEsTUFDSjtBQUVBLGVBQVMsZUFBZSxlQUFlO0FBQ25DLGVBQU8sS0FBSyxVQUFVLEdBQUcsYUFBYTtBQUFBLE1BQzFDO0FBRUEsZUFBUyxpQkFBaUIsZUFBZTtBQUNyQyxZQUFJLEtBQUssUUFBUTtBQUNiLGVBQUssVUFBVSxHQUFHLGFBQWE7QUFDL0IsZUFBSyxTQUFTO0FBRWQsY0FBSSxlQUFlO0FBQ2YsaUJBQUssU0FBUyxjQUFjLElBQUksR0FBRyxHQUFHO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLDBCQUEwQjtBQUMvQixZQUFJLEtBQUssUUFBUSxNQUFNO0FBQ25CLGVBQUssVUFBVSxLQUFLLE1BQU0sT0FBTyxJQUFJO0FBQUEsUUFDekMsV0FBVyxPQUFPLEtBQUssT0FBTyxVQUFVO0FBQ3BDLGNBQUksUUFBUSxpQkFBaUIsYUFBYSxLQUFLLEVBQUU7QUFDakQsY0FBSSxTQUFTLE1BQU07QUFDZixpQkFBSyxVQUFVLEtBQUs7QUFBQSxVQUN4QixPQUFPO0FBQ0gsaUJBQUssVUFBVSxHQUFHLElBQUk7QUFBQSxVQUMxQjtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMscUJBQXFCLE9BQU87QUFDakMsWUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHO0FBQ2pCLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGdCQUFRLFFBQVEsWUFBWSxLQUFLLEVBQUUsVUFBVSxJQUFJO0FBRWpELGdCQUFRLEtBQUssVUFBVSxJQUFJLFNBQVMsT0FBTztBQUFBLE1BQy9DO0FBRUEsZUFBUyx1QkFBdUI7QUFDNUIsZUFDSSxLQUFLLFVBQVUsSUFBSSxLQUFLLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxVQUFVLEtBQ25ELEtBQUssVUFBVSxJQUFJLEtBQUssTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFVBQVU7QUFBQSxNQUUzRDtBQUVBLGVBQVMsOEJBQThCO0FBQ25DLFlBQUksQ0FBQyxZQUFZLEtBQUssYUFBYSxHQUFHO0FBQ2xDLGlCQUFPLEtBQUs7QUFBQSxRQUNoQjtBQUVBLFlBQUksSUFBSSxDQUFDLEdBQ0w7QUFFSixtQkFBVyxHQUFHLElBQUk7QUFDbEIsWUFBSSxjQUFjLENBQUM7QUFFbkIsWUFBSSxFQUFFLElBQUk7QUFDTixrQkFBUSxFQUFFLFNBQVMsVUFBVSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNyRCxlQUFLLGdCQUNELEtBQUssUUFBUSxLQUFLLGNBQWMsRUFBRSxJQUFJLE1BQU0sUUFBUSxDQUFDLElBQUk7QUFBQSxRQUNqRSxPQUFPO0FBQ0gsZUFBSyxnQkFBZ0I7QUFBQSxRQUN6QjtBQUVBLGVBQU8sS0FBSztBQUFBLE1BQ2hCO0FBRUEsZUFBUyxVQUFVO0FBQ2YsZUFBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUztBQUFBLE1BQzNDO0FBRUEsZUFBUyxjQUFjO0FBQ25CLGVBQU8sS0FBSyxRQUFRLElBQUksS0FBSyxTQUFTO0FBQUEsTUFDMUM7QUFFQSxlQUFTLFFBQVE7QUFDYixlQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssVUFBVSxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ2hFO0FBR0EsVUFBSSxjQUFjLHlEQUlkLFdBQ0k7QUFFUixlQUFTLGVBQWUsT0FBTyxLQUFLO0FBQ2hDLFlBQUksV0FBVyxPQUVYLFFBQVEsTUFDUm5CLE9BQ0EsS0FDQTtBQUVKLFlBQUksV0FBVyxLQUFLLEdBQUc7QUFDbkIscUJBQVc7QUFBQSxZQUNQLElBQUksTUFBTTtBQUFBLFlBQ1YsR0FBRyxNQUFNO0FBQUEsWUFDVCxHQUFHLE1BQU07QUFBQSxVQUNiO0FBQUEsUUFDSixXQUFXVixVQUFTLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUc7QUFDMUMscUJBQVcsQ0FBQztBQUNaLGNBQUksS0FBSztBQUNMLHFCQUFTLEdBQUcsSUFBSSxDQUFDO0FBQUEsVUFDckIsT0FBTztBQUNILHFCQUFTLGVBQWUsQ0FBQztBQUFBLFVBQzdCO0FBQUEsUUFDSixXQUFZLFFBQVEsWUFBWSxLQUFLLEtBQUssR0FBSTtBQUMxQyxVQUFBVSxRQUFPLE1BQU0sQ0FBQyxNQUFNLE1BQU0sS0FBSztBQUMvQixxQkFBVztBQUFBLFlBQ1AsR0FBRztBQUFBLFlBQ0gsR0FBRyxNQUFNLE1BQU0sSUFBSSxDQUFDLElBQUlBO0FBQUEsWUFDeEIsR0FBRyxNQUFNLE1BQU0sSUFBSSxDQUFDLElBQUlBO0FBQUEsWUFDeEIsR0FBRyxNQUFNLE1BQU0sTUFBTSxDQUFDLElBQUlBO0FBQUEsWUFDMUIsR0FBRyxNQUFNLE1BQU0sTUFBTSxDQUFDLElBQUlBO0FBQUEsWUFDMUIsSUFBSSxNQUFNLFNBQVMsTUFBTSxXQUFXLElBQUksR0FBSSxDQUFDLElBQUlBO0FBQUE7QUFBQSxVQUNyRDtBQUFBLFFBQ0osV0FBWSxRQUFRLFNBQVMsS0FBSyxLQUFLLEdBQUk7QUFDdkMsVUFBQUEsUUFBTyxNQUFNLENBQUMsTUFBTSxNQUFNLEtBQUs7QUFDL0IscUJBQVc7QUFBQSxZQUNQLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFlBQzFCLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFlBQzFCLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFlBQzFCLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFlBQzFCLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFlBQzFCLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFlBQzFCLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBR0EsS0FBSTtBQUFBLFVBQzlCO0FBQUEsUUFDSixXQUFXLFlBQVksTUFBTTtBQUV6QixxQkFBVyxDQUFDO0FBQUEsUUFDaEIsV0FDSSxPQUFPLGFBQWEsYUFDbkIsVUFBVSxZQUFZLFFBQVEsV0FDakM7QUFDRSxvQkFBVTtBQUFBLFlBQ04sWUFBWSxTQUFTLElBQUk7QUFBQSxZQUN6QixZQUFZLFNBQVMsRUFBRTtBQUFBLFVBQzNCO0FBRUEscUJBQVcsQ0FBQztBQUNaLG1CQUFTLEtBQUssUUFBUTtBQUN0QixtQkFBUyxJQUFJLFFBQVE7QUFBQSxRQUN6QjtBQUVBLGNBQU0sSUFBSSxTQUFTLFFBQVE7QUFFM0IsWUFBSSxXQUFXLEtBQUssS0FBSyxXQUFXLE9BQU8sU0FBUyxHQUFHO0FBQ25ELGNBQUksVUFBVSxNQUFNO0FBQUEsUUFDeEI7QUFFQSxZQUFJLFdBQVcsS0FBSyxLQUFLLFdBQVcsT0FBTyxVQUFVLEdBQUc7QUFDcEQsY0FBSSxXQUFXLE1BQU07QUFBQSxRQUN6QjtBQUVBLGVBQU87QUFBQSxNQUNYO0FBRUEscUJBQWUsS0FBSyxTQUFTO0FBQzdCLHFCQUFlLFVBQVU7QUFFekIsZUFBUyxTQUFTLEtBQUtBLE9BQU07QUFJekIsWUFBSSxNQUFNLE9BQU8sV0FBVyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFFakQsZ0JBQVEsTUFBTSxHQUFHLElBQUksSUFBSSxPQUFPQTtBQUFBLE1BQ3BDO0FBRUEsZUFBUywwQkFBMEIsTUFBTSxPQUFPO0FBQzVDLFlBQUksTUFBTSxDQUFDO0FBRVgsWUFBSSxTQUNBLE1BQU0sTUFBTSxJQUFJLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssS0FBSyxLQUFLO0FBQ2xFLFlBQUksS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLFFBQVEsR0FBRyxFQUFFLFFBQVEsS0FBSyxHQUFHO0FBQ2xELFlBQUUsSUFBSTtBQUFBLFFBQ1Y7QUFFQSxZQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLFFBQVEsR0FBRztBQUU3RCxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsa0JBQWtCLE1BQU0sT0FBTztBQUNwQyxZQUFJO0FBQ0osWUFBSSxFQUFFLEtBQUssUUFBUSxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBQ3RDLGlCQUFPLEVBQUUsY0FBYyxHQUFHLFFBQVEsRUFBRTtBQUFBLFFBQ3hDO0FBRUEsZ0JBQVEsZ0JBQWdCLE9BQU8sSUFBSTtBQUNuQyxZQUFJLEtBQUssU0FBUyxLQUFLLEdBQUc7QUFDdEIsZ0JBQU0sMEJBQTBCLE1BQU0sS0FBSztBQUFBLFFBQy9DLE9BQU87QUFDSCxnQkFBTSwwQkFBMEIsT0FBTyxJQUFJO0FBQzNDLGNBQUksZUFBZSxDQUFDLElBQUk7QUFDeEIsY0FBSSxTQUFTLENBQUMsSUFBSTtBQUFBLFFBQ3RCO0FBRUEsZUFBTztBQUFBLE1BQ1g7QUFHQSxlQUFTLFlBQVksV0FBVyxNQUFNO0FBQ2xDLGVBQU8sU0FBVSxLQUFLLFFBQVE7QUFDMUIsY0FBSSxLQUFLO0FBRVQsY0FBSSxXQUFXLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHO0FBQ3BDO0FBQUEsY0FDSTtBQUFBLGNBQ0EsY0FDSSxPQUNBLHlEQUNBLE9BQ0E7QUFBQSxZQUVSO0FBQ0Esa0JBQU07QUFDTixrQkFBTTtBQUNOLHFCQUFTO0FBQUEsVUFDYjtBQUVBLGdCQUFNLGVBQWUsS0FBSyxNQUFNO0FBQ2hDLHNCQUFZLE1BQU0sS0FBSyxTQUFTO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxlQUFTLFlBQVksS0FBSyxVQUFVLFVBQVUsY0FBYztBQUN4RCxZQUFJa0IsZ0JBQWUsU0FBUyxlQUN4QkYsUUFBTyxTQUFTLFNBQVMsS0FBSyxHQUM5QkYsVUFBUyxTQUFTLFNBQVMsT0FBTztBQUV0QyxZQUFJLENBQUMsSUFBSSxRQUFRLEdBQUc7QUFFaEI7QUFBQSxRQUNKO0FBRUEsdUJBQWUsZ0JBQWdCLE9BQU8sT0FBTztBQUU3QyxZQUFJQSxTQUFRO0FBQ1IsbUJBQVMsS0FBSyxJQUFJLEtBQUssT0FBTyxJQUFJQSxVQUFTLFFBQVE7QUFBQSxRQUN2RDtBQUNBLFlBQUlFLE9BQU07QUFDTixnQkFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLLE1BQU0sSUFBSUEsUUFBTyxRQUFRO0FBQUEsUUFDekQ7QUFDQSxZQUFJRSxlQUFjO0FBQ2QsY0FBSSxHQUFHLFFBQVEsSUFBSSxHQUFHLFFBQVEsSUFBSUEsZ0JBQWUsUUFBUTtBQUFBLFFBQzdEO0FBQ0EsWUFBSSxjQUFjO0FBQ2QsZ0JBQU0sYUFBYSxLQUFLRixTQUFRRixPQUFNO0FBQUEsUUFDMUM7QUFBQSxNQUNKO0FBRUEsVUFBSSxNQUFNLFlBQVksR0FBRyxLQUFLLEdBQzFCLFdBQVcsWUFBWSxJQUFJLFVBQVU7QUFFekMsZUFBUyxTQUFTLE9BQU87QUFDckIsZUFBTyxPQUFPLFVBQVUsWUFBWSxpQkFBaUI7QUFBQSxNQUN6RDtBQUdBLGVBQVMsY0FBYyxPQUFPO0FBQzFCLGVBQ0ksU0FBUyxLQUFLLEtBQ2QsT0FBTyxLQUFLLEtBQ1osU0FBUyxLQUFLLEtBQ2R4QixVQUFTLEtBQUssS0FDZCxzQkFBc0IsS0FBSyxLQUMzQixvQkFBb0IsS0FBSyxLQUN6QixVQUFVLFFBQ1YsVUFBVTtBQUFBLE1BRWxCO0FBRUEsZUFBUyxvQkFBb0IsT0FBTztBQUNoQyxZQUFJLGFBQWFELFVBQVMsS0FBSyxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQ3BELGVBQWUsT0FDZixhQUFhO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixHQUNBLEdBQ0EsVUFDQSxjQUFjLFdBQVc7QUFFN0IsYUFBSyxJQUFJLEdBQUcsSUFBSSxhQUFhLEtBQUssR0FBRztBQUNqQyxxQkFBVyxXQUFXLENBQUM7QUFDdkIseUJBQWUsZ0JBQWdCLFdBQVcsT0FBTyxRQUFRO0FBQUEsUUFDN0Q7QUFFQSxlQUFPLGNBQWM7QUFBQSxNQUN6QjtBQUVBLGVBQVMsc0JBQXNCLE9BQU87QUFDbEMsWUFBSSxZQUFZRCxTQUFRLEtBQUssR0FDekIsZUFBZTtBQUNuQixZQUFJLFdBQVc7QUFDWCx5QkFDSSxNQUFNLE9BQU8sU0FBVSxNQUFNO0FBQ3pCLG1CQUFPLENBQUNFLFVBQVMsSUFBSSxLQUFLLFNBQVMsS0FBSztBQUFBLFVBQzVDLENBQUMsRUFBRSxXQUFXO0FBQUEsUUFDdEI7QUFDQSxlQUFPLGFBQWE7QUFBQSxNQUN4QjtBQUVBLGVBQVMsZUFBZSxPQUFPO0FBQzNCLFlBQUksYUFBYUQsVUFBUyxLQUFLLEtBQUssQ0FBQyxjQUFjLEtBQUssR0FDcEQsZUFBZSxPQUNmLGFBQWE7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKLEdBQ0EsR0FDQTtBQUVKLGFBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUssR0FBRztBQUN2QyxxQkFBVyxXQUFXLENBQUM7QUFDdkIseUJBQWUsZ0JBQWdCLFdBQVcsT0FBTyxRQUFRO0FBQUEsUUFDN0Q7QUFFQSxlQUFPLGNBQWM7QUFBQSxNQUN6QjtBQUVBLGVBQVMsa0JBQWtCLFVBQVVVLE1BQUs7QUFDdEMsWUFBSUssUUFBTyxTQUFTLEtBQUtMLE1BQUssUUFBUSxJQUFJO0FBQzFDLGVBQU9LLFFBQU8sS0FDUixhQUNBQSxRQUFPLEtBQ0wsYUFDQUEsUUFBTyxJQUNMLFlBQ0FBLFFBQU8sSUFDTCxZQUNBQSxRQUFPLElBQ0wsWUFDQUEsUUFBTyxJQUNMLGFBQ0E7QUFBQSxNQUNwQjtBQUVBLGVBQVMsV0FBVyxNQUFNLFNBQVM7QUFFL0IsWUFBSSxVQUFVLFdBQVcsR0FBRztBQUN4QixjQUFJLENBQUMsVUFBVSxDQUFDLEdBQUc7QUFDZixtQkFBTztBQUNQLHNCQUFVO0FBQUEsVUFDZCxXQUFXLGNBQWMsVUFBVSxDQUFDLENBQUMsR0FBRztBQUNwQyxtQkFBTyxVQUFVLENBQUM7QUFDbEIsc0JBQVU7QUFBQSxVQUNkLFdBQVcsZUFBZSxVQUFVLENBQUMsQ0FBQyxHQUFHO0FBQ3JDLHNCQUFVLFVBQVUsQ0FBQztBQUNyQixtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBR0EsWUFBSUwsT0FBTSxRQUFRLFlBQVksR0FDMUIsTUFBTSxnQkFBZ0JBLE1BQUssSUFBSSxFQUFFLFFBQVEsS0FBSyxHQUM5Q1AsVUFBUyxNQUFNLGVBQWUsTUFBTSxHQUFHLEtBQUssWUFDNUMsU0FDSSxZQUNDSyxZQUFXLFFBQVFMLE9BQU0sQ0FBQyxJQUNyQixRQUFRQSxPQUFNLEVBQUUsS0FBSyxNQUFNTyxJQUFHLElBQzlCLFFBQVFQLE9BQU07QUFFNUIsZUFBTyxLQUFLO0FBQUEsVUFDUixVQUFVLEtBQUssV0FBVyxFQUFFLFNBQVNBLFNBQVEsTUFBTSxZQUFZTyxJQUFHLENBQUM7QUFBQSxRQUN2RTtBQUFBLE1BQ0o7QUFFQSxlQUFTcUIsU0FBUTtBQUNiLGVBQU8sSUFBSSxPQUFPLElBQUk7QUFBQSxNQUMxQjtBQUVBLGVBQVMsUUFBUSxPQUFPLE9BQU87QUFDM0IsWUFBSSxhQUFhLFNBQVMsS0FBSyxJQUFJLFFBQVEsWUFBWSxLQUFLO0FBQzVELFlBQUksRUFBRSxLQUFLLFFBQVEsS0FBSyxXQUFXLFFBQVEsSUFBSTtBQUMzQyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxnQkFBUSxlQUFlLEtBQUssS0FBSztBQUNqQyxZQUFJLFVBQVUsZUFBZTtBQUN6QixpQkFBTyxLQUFLLFFBQVEsSUFBSSxXQUFXLFFBQVE7QUFBQSxRQUMvQyxPQUFPO0FBQ0gsaUJBQU8sV0FBVyxRQUFRLElBQUksS0FBSyxNQUFNLEVBQUUsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUFBLFFBQ3RFO0FBQUEsTUFDSjtBQUVBLGVBQVMsU0FBUyxPQUFPLE9BQU87QUFDNUIsWUFBSSxhQUFhLFNBQVMsS0FBSyxJQUFJLFFBQVEsWUFBWSxLQUFLO0FBQzVELFlBQUksRUFBRSxLQUFLLFFBQVEsS0FBSyxXQUFXLFFBQVEsSUFBSTtBQUMzQyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxnQkFBUSxlQUFlLEtBQUssS0FBSztBQUNqQyxZQUFJLFVBQVUsZUFBZTtBQUN6QixpQkFBTyxLQUFLLFFBQVEsSUFBSSxXQUFXLFFBQVE7QUFBQSxRQUMvQyxPQUFPO0FBQ0gsaUJBQU8sS0FBSyxNQUFNLEVBQUUsTUFBTSxLQUFLLEVBQUUsUUFBUSxJQUFJLFdBQVcsUUFBUTtBQUFBLFFBQ3BFO0FBQUEsTUFDSjtBQUVBLGVBQVMsVUFBVXhCLE9BQU1ELEtBQUksT0FBTyxhQUFhO0FBQzdDLFlBQUksWUFBWSxTQUFTQyxLQUFJLElBQUlBLFFBQU8sWUFBWUEsS0FBSSxHQUNwRCxVQUFVLFNBQVNELEdBQUUsSUFBSUEsTUFBSyxZQUFZQSxHQUFFO0FBQ2hELFlBQUksRUFBRSxLQUFLLFFBQVEsS0FBSyxVQUFVLFFBQVEsS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUMvRCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxzQkFBYyxlQUFlO0FBQzdCLGdCQUNLLFlBQVksQ0FBQyxNQUFNLE1BQ2QsS0FBSyxRQUFRLFdBQVcsS0FBSyxJQUM3QixDQUFDLEtBQUssU0FBUyxXQUFXLEtBQUssT0FDcEMsWUFBWSxDQUFDLE1BQU0sTUFDZCxLQUFLLFNBQVMsU0FBUyxLQUFLLElBQzVCLENBQUMsS0FBSyxRQUFRLFNBQVMsS0FBSztBQUFBLE1BRTFDO0FBRUEsZUFBUyxPQUFPLE9BQU8sT0FBTztBQUMxQixZQUFJLGFBQWEsU0FBUyxLQUFLLElBQUksUUFBUSxZQUFZLEtBQUssR0FDeEQ7QUFDSixZQUFJLEVBQUUsS0FBSyxRQUFRLEtBQUssV0FBVyxRQUFRLElBQUk7QUFDM0MsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZ0JBQVEsZUFBZSxLQUFLLEtBQUs7QUFDakMsWUFBSSxVQUFVLGVBQWU7QUFDekIsaUJBQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxRQUFRO0FBQUEsUUFDakQsT0FBTztBQUNILG9CQUFVLFdBQVcsUUFBUTtBQUM3QixpQkFDSSxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLEtBQUssV0FDekMsV0FBVyxLQUFLLE1BQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxRQUFRO0FBQUEsUUFFckQ7QUFBQSxNQUNKO0FBRUEsZUFBUyxjQUFjLE9BQU8sT0FBTztBQUNqQyxlQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssS0FBSyxLQUFLLFFBQVEsT0FBTyxLQUFLO0FBQUEsTUFDakU7QUFFQSxlQUFTLGVBQWUsT0FBTyxPQUFPO0FBQ2xDLGVBQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxLQUFLLEtBQUssU0FBUyxPQUFPLEtBQUs7QUFBQSxNQUNsRTtBQUVBLGVBQVMsS0FBSyxPQUFPLE9BQU8sU0FBUztBQUNqQyxZQUFJLE1BQU0sV0FBVztBQUVyQixZQUFJLENBQUMsS0FBSyxRQUFRLEdBQUc7QUFDakIsaUJBQU87QUFBQSxRQUNYO0FBRUEsZUFBTyxnQkFBZ0IsT0FBTyxJQUFJO0FBRWxDLFlBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNqQixpQkFBTztBQUFBLFFBQ1g7QUFFQSxxQkFBYSxLQUFLLFVBQVUsSUFBSSxLQUFLLFVBQVUsS0FBSztBQUVwRCxnQkFBUSxlQUFlLEtBQUs7QUFFNUIsZ0JBQVEsT0FBTztBQUFBLFVBQ1gsS0FBSztBQUNELHFCQUFTLFVBQVUsTUFBTSxJQUFJLElBQUk7QUFDakM7QUFBQSxVQUNKLEtBQUs7QUFDRCxxQkFBUyxVQUFVLE1BQU0sSUFBSTtBQUM3QjtBQUFBLFVBQ0osS0FBSztBQUNELHFCQUFTLFVBQVUsTUFBTSxJQUFJLElBQUk7QUFDakM7QUFBQSxVQUNKLEtBQUs7QUFDRCxzQkFBVSxPQUFPLFFBQVE7QUFDekI7QUFBQSxVQUNKLEtBQUs7QUFDRCxzQkFBVSxPQUFPLFFBQVE7QUFDekI7QUFBQSxVQUNKLEtBQUs7QUFDRCxzQkFBVSxPQUFPLFFBQVE7QUFDekI7QUFBQSxVQUNKLEtBQUs7QUFDRCxzQkFBVSxPQUFPLE9BQU8sYUFBYTtBQUNyQztBQUFBLFVBQ0osS0FBSztBQUNELHNCQUFVLE9BQU8sT0FBTyxhQUFhO0FBQ3JDO0FBQUEsVUFDSjtBQUNJLHFCQUFTLE9BQU87QUFBQSxRQUN4QjtBQUVBLGVBQU8sVUFBVSxTQUFTLFNBQVMsTUFBTTtBQUFBLE1BQzdDO0FBRUEsZUFBUyxVQUFVLEdBQUcsR0FBRztBQUNyQixZQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBR3JCLGlCQUFPLENBQUMsVUFBVSxHQUFHLENBQUM7QUFBQSxRQUMxQjtBQUVBLFlBQUksa0JBQWtCLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxNQUFNLElBRW5FLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxnQkFBZ0IsUUFBUSxHQUMvQyxTQUNBO0FBRUosWUFBSSxJQUFJLFNBQVMsR0FBRztBQUNoQixvQkFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLGlCQUFpQixHQUFHLFFBQVE7QUFFcEQsb0JBQVUsSUFBSSxXQUFXLFNBQVM7QUFBQSxRQUN0QyxPQUFPO0FBQ0gsb0JBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxpQkFBaUIsR0FBRyxRQUFRO0FBRXBELG9CQUFVLElBQUksV0FBVyxVQUFVO0FBQUEsUUFDdkM7QUFHQSxlQUFPLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUN6QztBQUVBLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sbUJBQW1CO0FBRXpCLGVBQVMsV0FBVztBQUNoQixlQUFPLEtBQUssTUFBTSxFQUFFLE9BQU8sSUFBSSxFQUFFLE9BQU8sa0NBQWtDO0FBQUEsTUFDOUU7QUFFQSxlQUFTLFlBQVksWUFBWTtBQUM3QixZQUFJLENBQUMsS0FBSyxRQUFRLEdBQUc7QUFDakIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxNQUFNLGVBQWUsTUFDckIsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSTtBQUNuQyxZQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxLQUFLLElBQUksTUFBTTtBQUNqQyxpQkFBTztBQUFBLFlBQ0g7QUFBQSxZQUNBLE1BQ00sbUNBQ0E7QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUNBLFlBQUlFLFlBQVcsS0FBSyxVQUFVLFdBQVcsR0FBRztBQUV4QyxjQUFJLEtBQUs7QUFDTCxtQkFBTyxLQUFLLE9BQU8sRUFBRSxZQUFZO0FBQUEsVUFDckMsT0FBTztBQUNILG1CQUFPLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLFVBQVUsSUFBSSxLQUFLLEdBQUksRUFDeEQsWUFBWSxFQUNaLFFBQVEsS0FBSyxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLFVBQ0g7QUFBQSxVQUNBLE1BQU0saUNBQWlDO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBUUEsZUFBUyxVQUFVO0FBQ2YsWUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHO0FBQ2pCLGlCQUFPLHVCQUF1QixLQUFLLEtBQUs7QUFBQSxRQUM1QztBQUNBLFlBQUksT0FBTyxVQUNQLE9BQU8sSUFDUCxRQUNBLE1BQ0EsVUFDQTtBQUNKLFlBQUksQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNqQixpQkFBTyxLQUFLLFVBQVUsTUFBTSxJQUFJLGVBQWU7QUFDL0MsaUJBQU87QUFBQSxRQUNYO0FBQ0EsaUJBQVMsTUFBTSxPQUFPO0FBQ3RCLGVBQU8sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLFNBQVM7QUFDMUQsbUJBQVc7QUFDWCxpQkFBUyxPQUFPO0FBRWhCLGVBQU8sS0FBSyxPQUFPLFNBQVMsT0FBTyxXQUFXLE1BQU07QUFBQSxNQUN4RDtBQUVBLGVBQVMsT0FBTyxhQUFhO0FBQ3pCLFlBQUksQ0FBQyxhQUFhO0FBQ2Qsd0JBQWMsS0FBSyxNQUFNLElBQ25CLE1BQU0sbUJBQ04sTUFBTTtBQUFBLFFBQ2hCO0FBQ0EsWUFBSSxTQUFTLGFBQWEsTUFBTSxXQUFXO0FBQzNDLGVBQU8sS0FBSyxXQUFXLEVBQUUsV0FBVyxNQUFNO0FBQUEsTUFDOUM7QUFFQSxlQUFTRCxNQUFLLE1BQU0sZUFBZTtBQUMvQixZQUNJLEtBQUssUUFBUSxNQUNYLFNBQVMsSUFBSSxLQUFLLEtBQUssUUFBUSxLQUFNLFlBQVksSUFBSSxFQUFFLFFBQVEsSUFDbkU7QUFDRSxpQkFBTyxlQUFlLEVBQUUsSUFBSSxNQUFNLE1BQU0sS0FBSyxDQUFDLEVBQ3pDLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFDcEIsU0FBUyxDQUFDLGFBQWE7QUFBQSxRQUNoQyxPQUFPO0FBQ0gsaUJBQU8sS0FBSyxXQUFXLEVBQUUsWUFBWTtBQUFBLFFBQ3pDO0FBQUEsTUFDSjtBQUVBLGVBQVMsUUFBUSxlQUFlO0FBQzVCLGVBQU8sS0FBSyxLQUFLLFlBQVksR0FBRyxhQUFhO0FBQUEsTUFDakQ7QUFFQSxlQUFTRCxJQUFHLE1BQU0sZUFBZTtBQUM3QixZQUNJLEtBQUssUUFBUSxNQUNYLFNBQVMsSUFBSSxLQUFLLEtBQUssUUFBUSxLQUFNLFlBQVksSUFBSSxFQUFFLFFBQVEsSUFDbkU7QUFDRSxpQkFBTyxlQUFlLEVBQUUsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLEVBQ3pDLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFDcEIsU0FBUyxDQUFDLGFBQWE7QUFBQSxRQUNoQyxPQUFPO0FBQ0gsaUJBQU8sS0FBSyxXQUFXLEVBQUUsWUFBWTtBQUFBLFFBQ3pDO0FBQUEsTUFDSjtBQUVBLGVBQVMsTUFBTSxlQUFlO0FBQzFCLGVBQU8sS0FBSyxHQUFHLFlBQVksR0FBRyxhQUFhO0FBQUEsTUFDL0M7QUFLQSxlQUFTRixRQUFPLEtBQUs7QUFDakIsWUFBSTtBQUVKLFlBQUksUUFBUSxRQUFXO0FBQ25CLGlCQUFPLEtBQUssUUFBUTtBQUFBLFFBQ3hCLE9BQU87QUFDSCwwQkFBZ0IsVUFBVSxHQUFHO0FBQzdCLGNBQUksaUJBQWlCLE1BQU07QUFDdkIsaUJBQUssVUFBVTtBQUFBLFVBQ25CO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLFVBQUksT0FBTztBQUFBLFFBQ1A7QUFBQSxRQUNBLFNBQVUsS0FBSztBQUNYLGNBQUksUUFBUSxRQUFXO0FBQ25CLG1CQUFPLEtBQUssV0FBVztBQUFBLFVBQzNCLE9BQU87QUFDSCxtQkFBTyxLQUFLLE9BQU8sR0FBRztBQUFBLFVBQzFCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxlQUFTLGFBQWE7QUFDbEIsZUFBTyxLQUFLO0FBQUEsTUFDaEI7QUFFQSxVQUFJLGdCQUFnQixLQUNoQixnQkFBZ0IsS0FBSyxlQUNyQixjQUFjLEtBQUssZUFDbkIsb0JBQW9CLE1BQU0sTUFBTSxNQUFNLEtBQUs7QUFHL0MsZUFBUyxNQUFNLFVBQVUsU0FBUztBQUM5QixnQkFBUyxXQUFXLFVBQVcsV0FBVztBQUFBLE1BQzlDO0FBRUEsZUFBUyxpQkFBaUIsR0FBRyxHQUFHLEdBQUc7QUFFL0IsWUFBSSxJQUFJLE9BQU8sS0FBSyxHQUFHO0FBRW5CLGlCQUFPLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUk7QUFBQSxRQUNyQyxPQUFPO0FBQ0gsaUJBQU8sSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEVBQUUsUUFBUTtBQUFBLFFBQ3JDO0FBQUEsTUFDSjtBQUVBLGVBQVMsZUFBZSxHQUFHLEdBQUcsR0FBRztBQUU3QixZQUFJLElBQUksT0FBTyxLQUFLLEdBQUc7QUFFbkIsaUJBQU8sS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSTtBQUFBLFFBQ3JDLE9BQU87QUFDSCxpQkFBTyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUM7QUFBQSxRQUMzQjtBQUFBLE1BQ0o7QUFFQSxlQUFTLFFBQVEsT0FBTztBQUNwQixZQUFJLE1BQU07QUFDVixnQkFBUSxlQUFlLEtBQUs7QUFDNUIsWUFBSSxVQUFVLFVBQWEsVUFBVSxpQkFBaUIsQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNuRSxpQkFBTztBQUFBLFFBQ1g7QUFFQSxzQkFBYyxLQUFLLFNBQVMsaUJBQWlCO0FBRTdDLGdCQUFRLE9BQU87QUFBQSxVQUNYLEtBQUs7QUFDRCxtQkFBTyxZQUFZLEtBQUssS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNwQztBQUFBLFVBQ0osS0FBSztBQUNELG1CQUFPO0FBQUEsY0FDSCxLQUFLLEtBQUs7QUFBQSxjQUNWLEtBQUssTUFBTSxJQUFLLEtBQUssTUFBTSxJQUFJO0FBQUEsY0FDL0I7QUFBQSxZQUNKO0FBQ0E7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFBTyxZQUFZLEtBQUssS0FBSyxHQUFHLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDL0M7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFBTztBQUFBLGNBQ0gsS0FBSyxLQUFLO0FBQUEsY0FDVixLQUFLLE1BQU07QUFBQSxjQUNYLEtBQUssS0FBSyxJQUFJLEtBQUssUUFBUTtBQUFBLFlBQy9CO0FBQ0E7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFBTztBQUFBLGNBQ0gsS0FBSyxLQUFLO0FBQUEsY0FDVixLQUFLLE1BQU07QUFBQSxjQUNYLEtBQUssS0FBSyxLQUFLLEtBQUssV0FBVyxJQUFJO0FBQUEsWUFDdkM7QUFDQTtBQUFBLFVBQ0osS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNELG1CQUFPLFlBQVksS0FBSyxLQUFLLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxLQUFLLENBQUM7QUFDekQ7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFBTyxLQUFLLEdBQUcsUUFBUTtBQUN2QixvQkFBUTtBQUFBLGNBQ0osUUFBUSxLQUFLLFNBQVMsSUFBSSxLQUFLLFVBQVUsSUFBSTtBQUFBLGNBQzdDO0FBQUEsWUFDSjtBQUNBO0FBQUEsVUFDSixLQUFLO0FBQ0QsbUJBQU8sS0FBSyxHQUFHLFFBQVE7QUFDdkIsb0JBQVEsTUFBTSxNQUFNLGFBQWE7QUFDakM7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFBTyxLQUFLLEdBQUcsUUFBUTtBQUN2QixvQkFBUSxNQUFNLE1BQU0sYUFBYTtBQUNqQztBQUFBLFFBQ1I7QUFFQSxhQUFLLEdBQUcsUUFBUSxJQUFJO0FBQ3BCLGNBQU0sYUFBYSxNQUFNLElBQUk7QUFDN0IsZUFBTztBQUFBLE1BQ1g7QUFFQSxlQUFTLE1BQU0sT0FBTztBQUNsQixZQUFJLE1BQU07QUFDVixnQkFBUSxlQUFlLEtBQUs7QUFDNUIsWUFBSSxVQUFVLFVBQWEsVUFBVSxpQkFBaUIsQ0FBQyxLQUFLLFFBQVEsR0FBRztBQUNuRSxpQkFBTztBQUFBLFFBQ1g7QUFFQSxzQkFBYyxLQUFLLFNBQVMsaUJBQWlCO0FBRTdDLGdCQUFRLE9BQU87QUFBQSxVQUNYLEtBQUs7QUFDRCxtQkFBTyxZQUFZLEtBQUssS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUk7QUFDNUM7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFDSTtBQUFBLGNBQ0ksS0FBSyxLQUFLO0FBQUEsY0FDVixLQUFLLE1BQU0sSUFBSyxLQUFLLE1BQU0sSUFBSSxJQUFLO0FBQUEsY0FDcEM7QUFBQSxZQUNKLElBQUk7QUFDUjtBQUFBLFVBQ0osS0FBSztBQUNELG1CQUFPLFlBQVksS0FBSyxLQUFLLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUk7QUFDdkQ7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFDSTtBQUFBLGNBQ0ksS0FBSyxLQUFLO0FBQUEsY0FDVixLQUFLLE1BQU07QUFBQSxjQUNYLEtBQUssS0FBSyxJQUFJLEtBQUssUUFBUSxJQUFJO0FBQUEsWUFDbkMsSUFBSTtBQUNSO0FBQUEsVUFDSixLQUFLO0FBQ0QsbUJBQ0k7QUFBQSxjQUNJLEtBQUssS0FBSztBQUFBLGNBQ1YsS0FBSyxNQUFNO0FBQUEsY0FDWCxLQUFLLEtBQUssS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLO0FBQUEsWUFDNUMsSUFBSTtBQUNSO0FBQUEsVUFDSixLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0QsbUJBQU8sWUFBWSxLQUFLLEtBQUssR0FBRyxLQUFLLE1BQU0sR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUk7QUFDakU7QUFBQSxVQUNKLEtBQUs7QUFDRCxtQkFBTyxLQUFLLEdBQUcsUUFBUTtBQUN2QixvQkFDSSxjQUNBO0FBQUEsY0FDSSxRQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssVUFBVSxJQUFJO0FBQUEsY0FDN0M7QUFBQSxZQUNKLElBQ0E7QUFDSjtBQUFBLFVBQ0osS0FBSztBQUNELG1CQUFPLEtBQUssR0FBRyxRQUFRO0FBQ3ZCLG9CQUFRLGdCQUFnQixNQUFNLE1BQU0sYUFBYSxJQUFJO0FBQ3JEO0FBQUEsVUFDSixLQUFLO0FBQ0QsbUJBQU8sS0FBSyxHQUFHLFFBQVE7QUFDdkIsb0JBQVEsZ0JBQWdCLE1BQU0sTUFBTSxhQUFhLElBQUk7QUFDckQ7QUFBQSxRQUNSO0FBRUEsYUFBSyxHQUFHLFFBQVEsSUFBSTtBQUNwQixjQUFNLGFBQWEsTUFBTSxJQUFJO0FBQzdCLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxVQUFVO0FBQ2YsZUFBTyxLQUFLLEdBQUcsUUFBUSxLQUFLLEtBQUssV0FBVyxLQUFLO0FBQUEsTUFDckQ7QUFFQSxlQUFTLE9BQU87QUFDWixlQUFPLEtBQUssTUFBTSxLQUFLLFFBQVEsSUFBSSxHQUFJO0FBQUEsTUFDM0M7QUFFQSxlQUFTLFNBQVM7QUFDZCxlQUFPLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUFBLE1BQ2xDO0FBRUEsZUFBUyxVQUFVO0FBQ2YsWUFBSSxJQUFJO0FBQ1IsZUFBTztBQUFBLFVBQ0gsRUFBRSxLQUFLO0FBQUEsVUFDUCxFQUFFLE1BQU07QUFBQSxVQUNSLEVBQUUsS0FBSztBQUFBLFVBQ1AsRUFBRSxLQUFLO0FBQUEsVUFDUCxFQUFFLE9BQU87QUFBQSxVQUNULEVBQUUsT0FBTztBQUFBLFVBQ1QsRUFBRSxZQUFZO0FBQUEsUUFDbEI7QUFBQSxNQUNKO0FBRUEsZUFBUyxXQUFXO0FBQ2hCLFlBQUksSUFBSTtBQUNSLGVBQU87QUFBQSxVQUNILE9BQU8sRUFBRSxLQUFLO0FBQUEsVUFDZCxRQUFRLEVBQUUsTUFBTTtBQUFBLFVBQ2hCLE1BQU0sRUFBRSxLQUFLO0FBQUEsVUFDYixPQUFPLEVBQUUsTUFBTTtBQUFBLFVBQ2YsU0FBUyxFQUFFLFFBQVE7QUFBQSxVQUNuQixTQUFTLEVBQUUsUUFBUTtBQUFBLFVBQ25CLGNBQWMsRUFBRSxhQUFhO0FBQUEsUUFDakM7QUFBQSxNQUNKO0FBRUEsZUFBUyxTQUFTO0FBRWQsZUFBTyxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ2pEO0FBRUEsZUFBUyxZQUFZO0FBQ2pCLGVBQU8sUUFBUSxJQUFJO0FBQUEsTUFDdkI7QUFFQSxlQUFTLGVBQWU7QUFDcEIsZUFBTyxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDO0FBQUEsTUFDM0M7QUFFQSxlQUFTLFlBQVk7QUFDakIsZUFBTyxnQkFBZ0IsSUFBSSxFQUFFO0FBQUEsTUFDakM7QUFFQSxlQUFTLGVBQWU7QUFDcEIsZUFBTztBQUFBLFVBQ0gsT0FBTyxLQUFLO0FBQUEsVUFDWixRQUFRLEtBQUs7QUFBQSxVQUNiLFFBQVEsS0FBSztBQUFBLFVBQ2IsT0FBTyxLQUFLO0FBQUEsVUFDWixRQUFRLEtBQUs7QUFBQSxRQUNqQjtBQUFBLE1BQ0o7QUFFQSxxQkFBZSxLQUFLLEdBQUcsR0FBRyxTQUFTO0FBQ25DLHFCQUFlLE1BQU0sR0FBRyxHQUFHLFNBQVM7QUFDcEMscUJBQWUsT0FBTyxHQUFHLEdBQUcsU0FBUztBQUNyQyxxQkFBZSxRQUFRLEdBQUcsR0FBRyxTQUFTO0FBQ3RDLHFCQUFlLFNBQVMsR0FBRyxHQUFHLFdBQVc7QUFFekMscUJBQWUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sU0FBUztBQUM3QyxxQkFBZSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTO0FBQzNDLHFCQUFlLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVM7QUFDNUMscUJBQWUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsU0FBUztBQUU3QyxvQkFBYyxLQUFLLFlBQVk7QUFDL0Isb0JBQWMsTUFBTSxZQUFZO0FBQ2hDLG9CQUFjLE9BQU8sWUFBWTtBQUNqQyxvQkFBYyxRQUFRLFlBQVk7QUFDbEMsb0JBQWMsU0FBUyxjQUFjO0FBRXJDO0FBQUEsUUFDSSxDQUFDLEtBQUssTUFBTSxPQUFPLFFBQVEsT0FBTztBQUFBLFFBQ2xDLFNBQVUsT0FBTyxPQUFPLFFBQVFRLFFBQU87QUFDbkMsY0FBSSxNQUFNLE9BQU8sUUFBUSxVQUFVLE9BQU9BLFFBQU8sT0FBTyxPQUFPO0FBQy9ELGNBQUksS0FBSztBQUNMLDRCQUFnQixNQUFNLEVBQUUsTUFBTTtBQUFBLFVBQ2xDLE9BQU87QUFDSCw0QkFBZ0IsTUFBTSxFQUFFLGFBQWE7QUFBQSxVQUN6QztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsb0JBQWMsS0FBSyxhQUFhO0FBQ2hDLG9CQUFjLE1BQU0sYUFBYTtBQUNqQyxvQkFBYyxPQUFPLGFBQWE7QUFDbEMsb0JBQWMsUUFBUSxhQUFhO0FBQ25DLG9CQUFjLE1BQU0sbUJBQW1CO0FBRXZDLG9CQUFjLENBQUMsS0FBSyxNQUFNLE9BQU8sTUFBTSxHQUFHLElBQUk7QUFDOUMsb0JBQWMsQ0FBQyxJQUFJLEdBQUcsU0FBVSxPQUFPLE9BQU8sUUFBUUEsUUFBTztBQUN6RCxZQUFJO0FBQ0osWUFBSSxPQUFPLFFBQVEsc0JBQXNCO0FBQ3JDLGtCQUFRLE1BQU0sTUFBTSxPQUFPLFFBQVEsb0JBQW9CO0FBQUEsUUFDM0Q7QUFFQSxZQUFJLE9BQU8sUUFBUSxxQkFBcUI7QUFDcEMsZ0JBQU0sSUFBSSxJQUFJLE9BQU8sUUFBUSxvQkFBb0IsT0FBTyxLQUFLO0FBQUEsUUFDakUsT0FBTztBQUNILGdCQUFNLElBQUksSUFBSSxTQUFTLE9BQU8sRUFBRTtBQUFBLFFBQ3BDO0FBQUEsTUFDSixDQUFDO0FBRUQsZUFBUyxXQUFXLEdBQUdULFNBQVE7QUFDM0IsWUFBSSxHQUNBLEdBQ0EsTUFDQSxPQUFPLEtBQUssU0FBUyxVQUFVLElBQUksRUFBRTtBQUN6QyxhQUFLLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ3JDLGtCQUFRLE9BQU8sS0FBSyxDQUFDLEVBQUUsT0FBTztBQUFBLFlBQzFCLEtBQUs7QUFFRCxxQkFBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEtBQUs7QUFDekMsbUJBQUssQ0FBQyxFQUFFLFFBQVEsS0FBSyxRQUFRO0FBQzdCO0FBQUEsVUFDUjtBQUVBLGtCQUFRLE9BQU8sS0FBSyxDQUFDLEVBQUUsT0FBTztBQUFBLFlBQzFCLEtBQUs7QUFDRCxtQkFBSyxDQUFDLEVBQUUsUUFBUTtBQUNoQjtBQUFBLFlBQ0osS0FBSztBQUVELHFCQUFPLE1BQU0sS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFDbkQsbUJBQUssQ0FBQyxFQUFFLFFBQVEsS0FBSyxRQUFRO0FBQzdCO0FBQUEsVUFDUjtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsZ0JBQWdCLFNBQVNBLFNBQVEsUUFBUTtBQUM5QyxZQUFJLEdBQ0EsR0FDQSxPQUFPLEtBQUssS0FBSyxHQUNqQixNQUNBLE1BQ0E7QUFDSixrQkFBVSxRQUFRLFlBQVk7QUFFOUIsYUFBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNyQyxpQkFBTyxLQUFLLENBQUMsRUFBRSxLQUFLLFlBQVk7QUFDaEMsaUJBQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxZQUFZO0FBQ2hDLG1CQUFTLEtBQUssQ0FBQyxFQUFFLE9BQU8sWUFBWTtBQUVwQyxjQUFJLFFBQVE7QUFDUixvQkFBUUEsU0FBUTtBQUFBLGNBQ1osS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNELG9CQUFJLFNBQVMsU0FBUztBQUNsQix5QkFBTyxLQUFLLENBQUM7QUFBQSxnQkFDakI7QUFDQTtBQUFBLGNBRUosS0FBSztBQUNELG9CQUFJLFNBQVMsU0FBUztBQUNsQix5QkFBTyxLQUFLLENBQUM7QUFBQSxnQkFDakI7QUFDQTtBQUFBLGNBRUosS0FBSztBQUNELG9CQUFJLFdBQVcsU0FBUztBQUNwQix5QkFBTyxLQUFLLENBQUM7QUFBQSxnQkFDakI7QUFDQTtBQUFBLFlBQ1I7QUFBQSxVQUNKLFdBQVcsQ0FBQyxNQUFNLE1BQU0sTUFBTSxFQUFFLFFBQVEsT0FBTyxLQUFLLEdBQUc7QUFDbkQsbUJBQU8sS0FBSyxDQUFDO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLGVBQVMsc0JBQXNCLEtBQUssTUFBTTtBQUN0QyxZQUFJLE1BQU0sSUFBSSxTQUFTLElBQUksUUFBUSxJQUFLO0FBQ3hDLFlBQUksU0FBUyxRQUFXO0FBQ3BCLGlCQUFPLE1BQU0sSUFBSSxLQUFLLEVBQUUsS0FBSztBQUFBLFFBQ2pDLE9BQU87QUFDSCxpQkFBTyxNQUFNLElBQUksS0FBSyxFQUFFLEtBQUssS0FBSyxPQUFPLElBQUksVUFBVTtBQUFBLFFBQzNEO0FBQUEsTUFDSjtBQUVBLGVBQVMsYUFBYTtBQUNsQixZQUFJLEdBQ0EsR0FDQSxLQUNBLE9BQU8sS0FBSyxXQUFXLEVBQUUsS0FBSztBQUNsQyxhQUFLLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBRXJDLGdCQUFNLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFFMUMsY0FBSSxLQUFLLENBQUMsRUFBRSxTQUFTLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFPO0FBQzlDLG1CQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsVUFDbkI7QUFDQSxjQUFJLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQU87QUFDOUMsbUJBQU8sS0FBSyxDQUFDLEVBQUU7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFFQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsZUFBZTtBQUNwQixZQUFJLEdBQ0EsR0FDQSxLQUNBLE9BQU8sS0FBSyxXQUFXLEVBQUUsS0FBSztBQUNsQyxhQUFLLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBRXJDLGdCQUFNLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFFMUMsY0FBSSxLQUFLLENBQUMsRUFBRSxTQUFTLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFPO0FBQzlDLG1CQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsVUFDbkI7QUFDQSxjQUFJLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQU87QUFDOUMsbUJBQU8sS0FBSyxDQUFDLEVBQUU7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFFQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsYUFBYTtBQUNsQixZQUFJLEdBQ0EsR0FDQSxLQUNBLE9BQU8sS0FBSyxXQUFXLEVBQUUsS0FBSztBQUNsQyxhQUFLLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBRXJDLGdCQUFNLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxFQUFFLFFBQVE7QUFFMUMsY0FBSSxLQUFLLENBQUMsRUFBRSxTQUFTLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRSxPQUFPO0FBQzlDLG1CQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsVUFDbkI7QUFDQSxjQUFJLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQU87QUFDOUMsbUJBQU8sS0FBSyxDQUFDLEVBQUU7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFFQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsYUFBYTtBQUNsQixZQUFJLEdBQ0EsR0FDQSxLQUNBLEtBQ0EsT0FBTyxLQUFLLFdBQVcsRUFBRSxLQUFLO0FBQ2xDLGFBQUssSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDckMsZ0JBQU0sS0FBSyxDQUFDLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRSxRQUFRLElBQUs7QUFHNUMsZ0JBQU0sS0FBSyxNQUFNLEVBQUUsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUUxQyxjQUNLLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFLFNBQ3ZDLEtBQUssQ0FBQyxFQUFFLFNBQVMsT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQzFDO0FBQ0Usb0JBQ0ssS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLE1BQzlDLEtBQUssQ0FBQyxFQUFFO0FBQUEsVUFFaEI7QUFBQSxRQUNKO0FBRUEsZUFBTyxLQUFLLEtBQUs7QUFBQSxNQUNyQjtBQUVBLGVBQVMsY0FBYyxVQUFVO0FBQzdCLFlBQUksQ0FBQyxXQUFXLE1BQU0sZ0JBQWdCLEdBQUc7QUFDckMsMkJBQWlCLEtBQUssSUFBSTtBQUFBLFFBQzlCO0FBQ0EsZUFBTyxXQUFXLEtBQUssaUJBQWlCLEtBQUs7QUFBQSxNQUNqRDtBQUVBLGVBQVMsY0FBYyxVQUFVO0FBQzdCLFlBQUksQ0FBQyxXQUFXLE1BQU0sZ0JBQWdCLEdBQUc7QUFDckMsMkJBQWlCLEtBQUssSUFBSTtBQUFBLFFBQzlCO0FBQ0EsZUFBTyxXQUFXLEtBQUssaUJBQWlCLEtBQUs7QUFBQSxNQUNqRDtBQUVBLGVBQVMsZ0JBQWdCLFVBQVU7QUFDL0IsWUFBSSxDQUFDLFdBQVcsTUFBTSxrQkFBa0IsR0FBRztBQUN2QywyQkFBaUIsS0FBSyxJQUFJO0FBQUEsUUFDOUI7QUFDQSxlQUFPLFdBQVcsS0FBSyxtQkFBbUIsS0FBSztBQUFBLE1BQ25EO0FBRUEsZUFBUyxhQUFhLFVBQVVDLFNBQVE7QUFDcEMsZUFBT0EsUUFBTyxjQUFjLFFBQVE7QUFBQSxNQUN4QztBQUVBLGVBQVMsYUFBYSxVQUFVQSxTQUFRO0FBQ3BDLGVBQU9BLFFBQU8sY0FBYyxRQUFRO0FBQUEsTUFDeEM7QUFFQSxlQUFTLGVBQWUsVUFBVUEsU0FBUTtBQUN0QyxlQUFPQSxRQUFPLGdCQUFnQixRQUFRO0FBQUEsTUFDMUM7QUFFQSxlQUFTLG9CQUFvQixVQUFVQSxTQUFRO0FBQzNDLGVBQU9BLFFBQU8sd0JBQXdCO0FBQUEsTUFDMUM7QUFFQSxlQUFTLG1CQUFtQjtBQUN4QixZQUFJLGFBQWEsQ0FBQyxHQUNkLGFBQWEsQ0FBQyxHQUNkLGVBQWUsQ0FBQyxHQUNoQixjQUFjLENBQUMsR0FDZixHQUNBLEdBQ0EsVUFDQSxVQUNBLFlBQ0EsT0FBTyxLQUFLLEtBQUs7QUFFckIsYUFBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNyQyxxQkFBVyxZQUFZLEtBQUssQ0FBQyxFQUFFLElBQUk7QUFDbkMscUJBQVcsWUFBWSxLQUFLLENBQUMsRUFBRSxJQUFJO0FBQ25DLHVCQUFhLFlBQVksS0FBSyxDQUFDLEVBQUUsTUFBTTtBQUV2QyxxQkFBVyxLQUFLLFFBQVE7QUFDeEIscUJBQVcsS0FBSyxRQUFRO0FBQ3hCLHVCQUFhLEtBQUssVUFBVTtBQUM1QixzQkFBWSxLQUFLLFFBQVE7QUFDekIsc0JBQVksS0FBSyxRQUFRO0FBQ3pCLHNCQUFZLEtBQUssVUFBVTtBQUFBLFFBQy9CO0FBRUEsYUFBSyxhQUFhLElBQUksT0FBTyxPQUFPLFlBQVksS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHO0FBQ3BFLGFBQUssaUJBQWlCLElBQUksT0FBTyxPQUFPLFdBQVcsS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHO0FBQ3ZFLGFBQUssaUJBQWlCLElBQUksT0FBTyxPQUFPLFdBQVcsS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHO0FBQ3ZFLGFBQUssbUJBQW1CLElBQUk7QUFBQSxVQUN4QixPQUFPLGFBQWEsS0FBSyxHQUFHLElBQUk7QUFBQSxVQUNoQztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBSUEscUJBQWUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsV0FBWTtBQUN4QyxlQUFPLEtBQUssU0FBUyxJQUFJO0FBQUEsTUFDN0IsQ0FBQztBQUVELHFCQUFlLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFdBQVk7QUFDeEMsZUFBTyxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ2hDLENBQUM7QUFFRCxlQUFTLHVCQUF1QlEsUUFBTyxRQUFRO0FBQzNDLHVCQUFlLEdBQUcsQ0FBQ0EsUUFBT0EsT0FBTSxNQUFNLEdBQUcsR0FBRyxNQUFNO0FBQUEsTUFDdEQ7QUFFQSw2QkFBdUIsUUFBUSxVQUFVO0FBQ3pDLDZCQUF1QixTQUFTLFVBQVU7QUFDMUMsNkJBQXVCLFFBQVEsYUFBYTtBQUM1Qyw2QkFBdUIsU0FBUyxhQUFhO0FBTTdDLG9CQUFjLEtBQUssV0FBVztBQUM5QixvQkFBYyxLQUFLLFdBQVc7QUFDOUIsb0JBQWMsTUFBTSxXQUFXLE1BQU07QUFDckMsb0JBQWMsTUFBTSxXQUFXLE1BQU07QUFDckMsb0JBQWMsUUFBUSxXQUFXLE1BQU07QUFDdkMsb0JBQWMsUUFBUSxXQUFXLE1BQU07QUFDdkMsb0JBQWMsU0FBUyxXQUFXLE1BQU07QUFDeEMsb0JBQWMsU0FBUyxXQUFXLE1BQU07QUFFeEM7QUFBQSxRQUNJLENBQUMsUUFBUSxTQUFTLFFBQVEsT0FBTztBQUFBLFFBQ2pDLFNBQVUsT0FBTyxNQUFNLFFBQVFBLFFBQU87QUFDbEMsZUFBS0EsT0FBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxLQUFLO0FBQUEsUUFDMUM7QUFBQSxNQUNKO0FBRUEsd0JBQWtCLENBQUMsTUFBTSxJQUFJLEdBQUcsU0FBVSxPQUFPLE1BQU0sUUFBUUEsUUFBTztBQUNsRSxhQUFLQSxNQUFLLElBQUksTUFBTSxrQkFBa0IsS0FBSztBQUFBLE1BQy9DLENBQUM7QUFJRCxlQUFTLGVBQWUsT0FBTztBQUMzQixlQUFPLHFCQUFxQjtBQUFBLFVBQ3hCO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBSyxLQUFLO0FBQUEsVUFDVixLQUFLLFFBQVEsSUFBSSxLQUFLLFdBQVcsRUFBRSxNQUFNO0FBQUEsVUFDekMsS0FBSyxXQUFXLEVBQUUsTUFBTTtBQUFBLFVBQ3hCLEtBQUssV0FBVyxFQUFFLE1BQU07QUFBQSxRQUM1QjtBQUFBLE1BQ0o7QUFFQSxlQUFTLGtCQUFrQixPQUFPO0FBQzlCLGVBQU8scUJBQXFCO0FBQUEsVUFDeEI7QUFBQSxVQUNBO0FBQUEsVUFDQSxLQUFLLFFBQVE7QUFBQSxVQUNiLEtBQUssV0FBVztBQUFBLFVBQ2hCO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsZUFBUyxvQkFBb0I7QUFDekIsZUFBTyxZQUFZLEtBQUssS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ3hDO0FBRUEsZUFBUywyQkFBMkI7QUFDaEMsZUFBTyxZQUFZLEtBQUssWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQy9DO0FBRUEsZUFBUyxpQkFBaUI7QUFDdEIsWUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFO0FBQ2pDLGVBQU8sWUFBWSxLQUFLLEtBQUssR0FBRyxTQUFTLEtBQUssU0FBUyxHQUFHO0FBQUEsTUFDOUQ7QUFFQSxlQUFTLHFCQUFxQjtBQUMxQixZQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7QUFDakMsZUFBTyxZQUFZLEtBQUssU0FBUyxHQUFHLFNBQVMsS0FBSyxTQUFTLEdBQUc7QUFBQSxNQUNsRTtBQUVBLGVBQVMscUJBQXFCLE9BQU8sTUFBTSxTQUFTLEtBQUssS0FBSztBQUMxRCxZQUFJO0FBQ0osWUFBSSxTQUFTLE1BQU07QUFDZixpQkFBTyxXQUFXLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFBQSxRQUN0QyxPQUFPO0FBQ0gsd0JBQWMsWUFBWSxPQUFPLEtBQUssR0FBRztBQUN6QyxjQUFJLE9BQU8sYUFBYTtBQUNwQixtQkFBTztBQUFBLFVBQ1g7QUFDQSxpQkFBTyxXQUFXLEtBQUssTUFBTSxPQUFPLE1BQU0sU0FBUyxLQUFLLEdBQUc7QUFBQSxRQUMvRDtBQUFBLE1BQ0o7QUFFQSxlQUFTLFdBQVcsVUFBVSxNQUFNLFNBQVMsS0FBSyxLQUFLO0FBQ25ELFlBQUksZ0JBQWdCLG1CQUFtQixVQUFVLE1BQU0sU0FBUyxLQUFLLEdBQUcsR0FDcEUsT0FBTyxjQUFjLGNBQWMsTUFBTSxHQUFHLGNBQWMsU0FBUztBQUV2RSxhQUFLLEtBQUssS0FBSyxlQUFlLENBQUM7QUFDL0IsYUFBSyxNQUFNLEtBQUssWUFBWSxDQUFDO0FBQzdCLGFBQUssS0FBSyxLQUFLLFdBQVcsQ0FBQztBQUMzQixlQUFPO0FBQUEsTUFDWDtBQUlBLHFCQUFlLEtBQUssR0FBRyxNQUFNLFNBQVM7QUFJdEMsb0JBQWMsS0FBSyxNQUFNO0FBQ3pCLG9CQUFjLEtBQUssU0FBVSxPQUFPLE9BQU87QUFDdkMsY0FBTSxLQUFLLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSztBQUFBLE1BQ3hDLENBQUM7QUFJRCxlQUFTLGNBQWMsT0FBTztBQUMxQixlQUFPLFNBQVMsT0FDVixLQUFLLE1BQU0sS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLElBQ2hDLEtBQUssT0FBTyxRQUFRLEtBQUssSUFBSyxLQUFLLE1BQU0sSUFBSSxDQUFFO0FBQUEsTUFDekQ7QUFJQSxxQkFBZSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNO0FBSTNDLG9CQUFjLEtBQUssV0FBVyxzQkFBc0I7QUFDcEQsb0JBQWMsTUFBTSxXQUFXLE1BQU07QUFDckMsb0JBQWMsTUFBTSxTQUFVLFVBQVVSLFNBQVE7QUFFNUMsZUFBTyxXQUNEQSxRQUFPLDJCQUEyQkEsUUFBTyxnQkFDekNBLFFBQU87QUFBQSxNQUNqQixDQUFDO0FBRUQsb0JBQWMsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJO0FBQy9CLG9CQUFjLE1BQU0sU0FBVSxPQUFPLE9BQU87QUFDeEMsY0FBTSxJQUFJLElBQUksTUFBTSxNQUFNLE1BQU0sU0FBUyxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQ2pELENBQUM7QUFJRCxVQUFJLG1CQUFtQixXQUFXLFFBQVEsSUFBSTtBQUk5QyxxQkFBZSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxXQUFXO0FBSXRELG9CQUFjLE9BQU8sU0FBUztBQUM5QixvQkFBYyxRQUFRLE1BQU07QUFDNUIsb0JBQWMsQ0FBQyxPQUFPLE1BQU0sR0FBRyxTQUFVLE9BQU8sT0FBTyxRQUFRO0FBQzNELGVBQU8sYUFBYSxNQUFNLEtBQUs7QUFBQSxNQUNuQyxDQUFDO0FBTUQsZUFBUyxnQkFBZ0IsT0FBTztBQUM1QixZQUFJLFlBQ0EsS0FBSztBQUFBLFdBQ0EsS0FBSyxNQUFNLEVBQUUsUUFBUSxLQUFLLElBQUksS0FBSyxNQUFNLEVBQUUsUUFBUSxNQUFNLEtBQUs7QUFBQSxRQUNuRSxJQUFJO0FBQ1IsZUFBTyxTQUFTLE9BQU8sWUFBWSxLQUFLLElBQUksUUFBUSxXQUFXLEdBQUc7QUFBQSxNQUN0RTtBQUlBLHFCQUFlLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVE7QUFJMUMsb0JBQWMsS0FBSyxXQUFXLGdCQUFnQjtBQUM5QyxvQkFBYyxNQUFNLFdBQVcsTUFBTTtBQUNyQyxvQkFBYyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU07QUFJakMsVUFBSSxlQUFlLFdBQVcsV0FBVyxLQUFLO0FBSTlDLHFCQUFlLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVE7QUFJMUMsb0JBQWMsS0FBSyxXQUFXLGdCQUFnQjtBQUM5QyxvQkFBYyxNQUFNLFdBQVcsTUFBTTtBQUNyQyxvQkFBYyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU07QUFJakMsVUFBSSxlQUFlLFdBQVcsV0FBVyxLQUFLO0FBSTlDLHFCQUFlLEtBQUssR0FBRyxHQUFHLFdBQVk7QUFDbEMsZUFBTyxDQUFDLEVBQUUsS0FBSyxZQUFZLElBQUk7QUFBQSxNQUNuQyxDQUFDO0FBRUQscUJBQWUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsV0FBWTtBQUN4QyxlQUFPLENBQUMsRUFBRSxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ25DLENBQUM7QUFFRCxxQkFBZSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxhQUFhO0FBQzlDLHFCQUFlLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLFdBQVk7QUFDMUMsZUFBTyxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ2hDLENBQUM7QUFDRCxxQkFBZSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxXQUFZO0FBQzNDLGVBQU8sS0FBSyxZQUFZLElBQUk7QUFBQSxNQUNoQyxDQUFDO0FBQ0QscUJBQWUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsV0FBWTtBQUM1QyxlQUFPLEtBQUssWUFBWSxJQUFJO0FBQUEsTUFDaEMsQ0FBQztBQUNELHFCQUFlLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVk7QUFDN0MsZUFBTyxLQUFLLFlBQVksSUFBSTtBQUFBLE1BQ2hDLENBQUM7QUFDRCxxQkFBZSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxXQUFZO0FBQzlDLGVBQU8sS0FBSyxZQUFZLElBQUk7QUFBQSxNQUNoQyxDQUFDO0FBQ0QscUJBQWUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsV0FBWTtBQUMvQyxlQUFPLEtBQUssWUFBWSxJQUFJO0FBQUEsTUFDaEMsQ0FBQztBQUlELG9CQUFjLEtBQUssV0FBVyxNQUFNO0FBQ3BDLG9CQUFjLE1BQU0sV0FBVyxNQUFNO0FBQ3JDLG9CQUFjLE9BQU8sV0FBVyxNQUFNO0FBRXRDLFVBQUksT0FBTztBQUNYLFdBQUssUUFBUSxRQUFRLE1BQU0sVUFBVSxHQUFHLFNBQVMsS0FBSztBQUNsRCxzQkFBYyxPQUFPLGFBQWE7QUFBQSxNQUN0QztBQUVBLGVBQVMsUUFBUSxPQUFPLE9BQU87QUFDM0IsY0FBTSxXQUFXLElBQUksT0FBTyxPQUFPLFNBQVMsR0FBSTtBQUFBLE1BQ3BEO0FBRUEsV0FBSyxRQUFRLEtBQUssTUFBTSxVQUFVLEdBQUcsU0FBUyxLQUFLO0FBQy9DLHNCQUFjLE9BQU8sT0FBTztBQUFBLE1BQ2hDO0FBRUEsMEJBQW9CLFdBQVcsZ0JBQWdCLEtBQUs7QUFJcEQscUJBQWUsS0FBSyxHQUFHLEdBQUcsVUFBVTtBQUNwQyxxQkFBZSxNQUFNLEdBQUcsR0FBRyxVQUFVO0FBSXJDLGVBQVMsY0FBYztBQUNuQixlQUFPLEtBQUssU0FBUyxRQUFRO0FBQUEsTUFDakM7QUFFQSxlQUFTLGNBQWM7QUFDbkIsZUFBTyxLQUFLLFNBQVMsK0JBQStCO0FBQUEsTUFDeEQ7QUFFQSxVQUFJLFFBQVEsT0FBTztBQUVuQixZQUFNLE1BQU07QUFDWixZQUFNLFdBQVc7QUFDakIsWUFBTSxRQUFRMkI7QUFDZCxZQUFNLE9BQU87QUFDYixZQUFNLFFBQVE7QUFDZCxZQUFNLFNBQVM7QUFDZixZQUFNLE9BQU94QjtBQUNiLFlBQU0sVUFBVTtBQUNoQixZQUFNLEtBQUtEO0FBQ1gsWUFBTSxRQUFRO0FBQ2QsWUFBTSxNQUFNO0FBQ1osWUFBTSxZQUFZO0FBQ2xCLFlBQU0sVUFBVTtBQUNoQixZQUFNLFdBQVc7QUFDakIsWUFBTSxZQUFZO0FBQ2xCLFlBQU0sU0FBUztBQUNmLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0saUJBQWlCO0FBQ3ZCLFlBQU0sVUFBVTtBQUNoQixZQUFNLE9BQU87QUFDYixZQUFNLFNBQVNGO0FBQ2YsWUFBTSxhQUFhO0FBQ25CLFlBQU0sTUFBTTtBQUNaLFlBQU0sTUFBTTtBQUNaLFlBQU0sZUFBZTtBQUNyQixZQUFNLE1BQU07QUFDWixZQUFNLFVBQVU7QUFDaEIsWUFBTSxXQUFXO0FBQ2pCLFlBQU0sVUFBVTtBQUNoQixZQUFNLFdBQVc7QUFDakIsWUFBTSxTQUFTO0FBQ2YsWUFBTSxjQUFjO0FBQ3BCLFlBQU0sVUFBVTtBQUNoQixVQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sT0FBTyxNQUFNO0FBQ3JELGNBQU0sT0FBTyxJQUFJLDRCQUE0QixDQUFDLElBQUksV0FBWTtBQUMxRCxpQkFBTyxZQUFZLEtBQUssT0FBTyxJQUFJO0FBQUEsUUFDdkM7QUFBQSxNQUNKO0FBQ0EsWUFBTSxTQUFTO0FBQ2YsWUFBTSxXQUFXO0FBQ2pCLFlBQU0sT0FBTztBQUNiLFlBQU0sVUFBVTtBQUNoQixZQUFNLGVBQWU7QUFDckIsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sWUFBWTtBQUNsQixZQUFNLFVBQVU7QUFDaEIsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sT0FBTztBQUNiLFlBQU0sYUFBYTtBQUNuQixZQUFNLFdBQVc7QUFDakIsWUFBTSxjQUFjO0FBQ3BCLFlBQU0sVUFBVSxNQUFNLFdBQVc7QUFDakMsWUFBTSxRQUFRO0FBQ2QsWUFBTSxjQUFjO0FBQ3BCLFlBQU0sT0FBTyxNQUFNLFFBQVE7QUFDM0IsWUFBTSxVQUFVLE1BQU0sV0FBVztBQUNqQyxZQUFNLGNBQWM7QUFDcEIsWUFBTSxrQkFBa0I7QUFDeEIsWUFBTSxpQkFBaUI7QUFDdkIsWUFBTSx3QkFBd0I7QUFDOUIsWUFBTSxPQUFPO0FBQ2IsWUFBTSxNQUFNLE1BQU0sT0FBTztBQUN6QixZQUFNLFVBQVU7QUFDaEIsWUFBTSxhQUFhO0FBQ25CLFlBQU0sWUFBWTtBQUNsQixZQUFNLE9BQU8sTUFBTSxRQUFRO0FBQzNCLFlBQU0sU0FBUyxNQUFNLFVBQVU7QUFDL0IsWUFBTSxTQUFTLE1BQU0sVUFBVTtBQUMvQixZQUFNLGNBQWMsTUFBTSxlQUFlO0FBQ3pDLFlBQU0sWUFBWTtBQUNsQixZQUFNLE1BQU07QUFDWixZQUFNLFFBQVE7QUFDZCxZQUFNLFlBQVk7QUFDbEIsWUFBTSx1QkFBdUI7QUFDN0IsWUFBTSxRQUFRO0FBQ2QsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sY0FBYztBQUNwQixZQUFNLFFBQVE7QUFDZCxZQUFNLFFBQVE7QUFDZCxZQUFNLFdBQVc7QUFDakIsWUFBTSxXQUFXO0FBQ2pCLFlBQU0sUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUNBLFlBQU0sU0FBUztBQUFBLFFBQ1g7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUNBLFlBQU0sUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUNBLFlBQU0sT0FBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUNBLFlBQU0sZUFBZTtBQUFBLFFBQ2pCO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFFQSxlQUFTLFdBQVcsT0FBTztBQUN2QixlQUFPLFlBQVksUUFBUSxHQUFJO0FBQUEsTUFDbkM7QUFFQSxlQUFTLGVBQWU7QUFDcEIsZUFBTyxZQUFZLE1BQU0sTUFBTSxTQUFTLEVBQUUsVUFBVTtBQUFBLE1BQ3hEO0FBRUEsZUFBUyxtQkFBbUIsUUFBUTtBQUNoQyxlQUFPO0FBQUEsTUFDWDtBQUVBLFVBQUksVUFBVSxPQUFPO0FBRXJCLGNBQVEsV0FBVztBQUNuQixjQUFRLGlCQUFpQjtBQUN6QixjQUFRLGNBQWM7QUFDdEIsY0FBUSxVQUFVO0FBQ2xCLGNBQVEsV0FBVztBQUNuQixjQUFRLGFBQWE7QUFDckIsY0FBUSxlQUFlO0FBQ3ZCLGNBQVEsYUFBYTtBQUNyQixjQUFRLE1BQU1LO0FBQ2QsY0FBUSxPQUFPO0FBQ2YsY0FBUSxZQUFZO0FBQ3BCLGNBQVEsa0JBQWtCO0FBQzFCLGNBQVEsZ0JBQWdCO0FBQ3hCLGNBQVEsZ0JBQWdCO0FBQ3hCLGNBQVEsa0JBQWtCO0FBRTFCLGNBQVEsU0FBUztBQUNqQixjQUFRLGNBQWM7QUFDdEIsY0FBUSxjQUFjO0FBQ3RCLGNBQVEsY0FBYztBQUN0QixjQUFRLG1CQUFtQjtBQUMzQixjQUFRLE9BQU87QUFDZixjQUFRLGlCQUFpQjtBQUN6QixjQUFRLGlCQUFpQjtBQUV6QixjQUFRLFdBQVc7QUFDbkIsY0FBUSxjQUFjO0FBQ3RCLGNBQVEsZ0JBQWdCO0FBQ3hCLGNBQVEsZ0JBQWdCO0FBRXhCLGNBQVEsZ0JBQWdCO0FBQ3hCLGNBQVEscUJBQXFCO0FBQzdCLGNBQVEsbUJBQW1CO0FBRTNCLGNBQVEsT0FBTztBQUNmLGNBQVEsV0FBVztBQUVuQixlQUFTLE1BQU1OLFNBQVEsT0FBTyxPQUFPLFFBQVE7QUFDekMsWUFBSUMsVUFBUyxVQUFVLEdBQ25CLE1BQU0sVUFBVSxFQUFFLElBQUksUUFBUSxLQUFLO0FBQ3ZDLGVBQU9BLFFBQU8sS0FBSyxFQUFFLEtBQUtELE9BQU07QUFBQSxNQUNwQztBQUVBLGVBQVMsZUFBZUEsU0FBUSxPQUFPLE9BQU87QUFDMUMsWUFBSUYsVUFBU0UsT0FBTSxHQUFHO0FBQ2xCLGtCQUFRQTtBQUNSLFVBQUFBLFVBQVM7QUFBQSxRQUNiO0FBRUEsUUFBQUEsVUFBU0EsV0FBVTtBQUVuQixZQUFJLFNBQVMsTUFBTTtBQUNmLGlCQUFPLE1BQU1BLFNBQVEsT0FBTyxPQUFPLE9BQU87QUFBQSxRQUM5QztBQUVBLFlBQUksR0FDQSxNQUFNLENBQUM7QUFDWCxhQUFLLElBQUksR0FBRyxJQUFJLElBQUksS0FBSztBQUNyQixjQUFJLENBQUMsSUFBSSxNQUFNQSxTQUFRLEdBQUcsT0FBTyxPQUFPO0FBQUEsUUFDNUM7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQVVBLGVBQVMsaUJBQWlCLGNBQWNBLFNBQVEsT0FBTyxPQUFPO0FBQzFELFlBQUksT0FBTyxpQkFBaUIsV0FBVztBQUNuQyxjQUFJRixVQUFTRSxPQUFNLEdBQUc7QUFDbEIsb0JBQVFBO0FBQ1IsWUFBQUEsVUFBUztBQUFBLFVBQ2I7QUFFQSxVQUFBQSxVQUFTQSxXQUFVO0FBQUEsUUFDdkIsT0FBTztBQUNILFVBQUFBLFVBQVM7QUFDVCxrQkFBUUE7QUFDUix5QkFBZTtBQUVmLGNBQUlGLFVBQVNFLE9BQU0sR0FBRztBQUNsQixvQkFBUUE7QUFDUixZQUFBQSxVQUFTO0FBQUEsVUFDYjtBQUVBLFVBQUFBLFVBQVNBLFdBQVU7QUFBQSxRQUN2QjtBQUVBLFlBQUlDLFVBQVMsVUFBVSxHQUNuQixRQUFRLGVBQWVBLFFBQU8sTUFBTSxNQUFNLEdBQzFDLEdBQ0EsTUFBTSxDQUFDO0FBRVgsWUFBSSxTQUFTLE1BQU07QUFDZixpQkFBTyxNQUFNRCxVQUFTLFFBQVEsU0FBUyxHQUFHLE9BQU8sS0FBSztBQUFBLFFBQzFEO0FBRUEsYUFBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDcEIsY0FBSSxDQUFDLElBQUksTUFBTUEsVUFBUyxJQUFJLFNBQVMsR0FBRyxPQUFPLEtBQUs7QUFBQSxRQUN4RDtBQUNBLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxXQUFXQSxTQUFRLE9BQU87QUFDL0IsZUFBTyxlQUFlQSxTQUFRLE9BQU8sUUFBUTtBQUFBLE1BQ2pEO0FBRUEsZUFBUyxnQkFBZ0JBLFNBQVEsT0FBTztBQUNwQyxlQUFPLGVBQWVBLFNBQVEsT0FBTyxhQUFhO0FBQUEsTUFDdEQ7QUFFQSxlQUFTLGFBQWEsY0FBY0EsU0FBUSxPQUFPO0FBQy9DLGVBQU8saUJBQWlCLGNBQWNBLFNBQVEsT0FBTyxVQUFVO0FBQUEsTUFDbkU7QUFFQSxlQUFTLGtCQUFrQixjQUFjQSxTQUFRLE9BQU87QUFDcEQsZUFBTyxpQkFBaUIsY0FBY0EsU0FBUSxPQUFPLGVBQWU7QUFBQSxNQUN4RTtBQUVBLGVBQVMsZ0JBQWdCLGNBQWNBLFNBQVEsT0FBTztBQUNsRCxlQUFPLGlCQUFpQixjQUFjQSxTQUFRLE9BQU8sYUFBYTtBQUFBLE1BQ3RFO0FBRUEseUJBQW1CLE1BQU07QUFBQSxRQUNyQixNQUFNO0FBQUEsVUFDRjtBQUFBLFlBQ0ksT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsWUFDSSxPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsWUFDTixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHdCQUF3QjtBQUFBLFFBQ3hCLFNBQVMsU0FBVSxRQUFRO0FBQ3ZCLGNBQUksSUFBSSxTQUFTLElBQ2IsU0FDSSxNQUFPLFNBQVMsTUFBTyxFQUFFLE1BQU0sSUFDekIsT0FDQSxNQUFNLElBQ0osT0FDQSxNQUFNLElBQ0osT0FDQSxNQUFNLElBQ0osT0FDQTtBQUNwQixpQkFBTyxTQUFTO0FBQUEsUUFDcEI7QUFBQSxNQUNKLENBQUM7QUFJRCxZQUFNLE9BQU87QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFDQSxZQUFNLFdBQVc7QUFBQSxRQUNiO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFFQSxVQUFJLFVBQVUsS0FBSztBQUVuQixlQUFTLE1BQU07QUFDWCxZQUFJLE9BQU8sS0FBSztBQUVoQixhQUFLLGdCQUFnQixRQUFRLEtBQUssYUFBYTtBQUMvQyxhQUFLLFFBQVEsUUFBUSxLQUFLLEtBQUs7QUFDL0IsYUFBSyxVQUFVLFFBQVEsS0FBSyxPQUFPO0FBRW5DLGFBQUssZUFBZSxRQUFRLEtBQUssWUFBWTtBQUM3QyxhQUFLLFVBQVUsUUFBUSxLQUFLLE9BQU87QUFDbkMsYUFBSyxVQUFVLFFBQVEsS0FBSyxPQUFPO0FBQ25DLGFBQUssUUFBUSxRQUFRLEtBQUssS0FBSztBQUMvQixhQUFLLFNBQVMsUUFBUSxLQUFLLE1BQU07QUFDakMsYUFBSyxRQUFRLFFBQVEsS0FBSyxLQUFLO0FBRS9CLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxjQUFjLFVBQVUsT0FBTyxPQUFPLFdBQVc7QUFDdEQsWUFBSSxRQUFRLGVBQWUsT0FBTyxLQUFLO0FBRXZDLGlCQUFTLGlCQUFpQixZQUFZLE1BQU07QUFDNUMsaUJBQVMsU0FBUyxZQUFZLE1BQU07QUFDcEMsaUJBQVMsV0FBVyxZQUFZLE1BQU07QUFFdEMsZUFBTyxTQUFTLFFBQVE7QUFBQSxNQUM1QjtBQUdBLGVBQVMsTUFBTSxPQUFPLE9BQU87QUFDekIsZUFBTyxjQUFjLE1BQU0sT0FBTyxPQUFPLENBQUM7QUFBQSxNQUM5QztBQUdBLGVBQVMsV0FBVyxPQUFPLE9BQU87QUFDOUIsZUFBTyxjQUFjLE1BQU0sT0FBTyxPQUFPLEVBQUU7QUFBQSxNQUMvQztBQUVBLGVBQVMsUUFBUSxRQUFRO0FBQ3JCLFlBQUksU0FBUyxHQUFHO0FBQ1osaUJBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxRQUM1QixPQUFPO0FBQ0gsaUJBQU8sS0FBSyxLQUFLLE1BQU07QUFBQSxRQUMzQjtBQUFBLE1BQ0o7QUFFQSxlQUFTLFNBQVM7QUFDZCxZQUFJMEIsZ0JBQWUsS0FBSyxlQUNwQkYsUUFBTyxLQUFLLE9BQ1pGLFVBQVMsS0FBSyxTQUNkLE9BQU8sS0FBSyxPQUNaRyxVQUNBVCxVQUNBRCxRQUNBTSxRQUNBO0FBSUosWUFDSSxFQUNLSyxpQkFBZ0IsS0FBS0YsU0FBUSxLQUFLRixXQUFVLEtBQzVDSSxpQkFBZ0IsS0FBS0YsU0FBUSxLQUFLRixXQUFVLElBRW5EO0FBQ0UsVUFBQUksaUJBQWdCLFFBQVEsYUFBYUosT0FBTSxJQUFJRSxLQUFJLElBQUk7QUFDdkQsVUFBQUEsUUFBTztBQUNQLFVBQUFGLFVBQVM7QUFBQSxRQUNiO0FBSUEsYUFBSyxlQUFlSSxnQkFBZTtBQUVuQyxRQUFBRCxXQUFVLFNBQVNDLGdCQUFlLEdBQUk7QUFDdEMsYUFBSyxVQUFVRCxXQUFVO0FBRXpCLFFBQUFULFdBQVUsU0FBU1MsV0FBVSxFQUFFO0FBQy9CLGFBQUssVUFBVVQsV0FBVTtBQUV6QixRQUFBRCxTQUFRLFNBQVNDLFdBQVUsRUFBRTtBQUM3QixhQUFLLFFBQVFELFNBQVE7QUFFckIsUUFBQVMsU0FBUSxTQUFTVCxTQUFRLEVBQUU7QUFHM0IseUJBQWlCLFNBQVMsYUFBYVMsS0FBSSxDQUFDO0FBQzVDLFFBQUFGLFdBQVU7QUFDVixRQUFBRSxTQUFRLFFBQVEsYUFBYSxjQUFjLENBQUM7QUFHNUMsUUFBQUgsU0FBUSxTQUFTQyxVQUFTLEVBQUU7QUFDNUIsUUFBQUEsV0FBVTtBQUVWLGFBQUssT0FBT0U7QUFDWixhQUFLLFNBQVNGO0FBQ2QsYUFBSyxRQUFRRDtBQUViLGVBQU87QUFBQSxNQUNYO0FBRUEsZUFBUyxhQUFhRyxPQUFNO0FBR3hCLGVBQVFBLFFBQU8sT0FBUTtBQUFBLE1BQzNCO0FBRUEsZUFBUyxhQUFhRixTQUFRO0FBRTFCLGVBQVFBLFVBQVMsU0FBVTtBQUFBLE1BQy9CO0FBRUEsZUFBUyxHQUFHLE9BQU87QUFDZixZQUFJLENBQUMsS0FBSyxRQUFRLEdBQUc7QUFDakIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSUUsT0FDQUYsU0FDQUksZ0JBQWUsS0FBSztBQUV4QixnQkFBUSxlQUFlLEtBQUs7QUFFNUIsWUFBSSxVQUFVLFdBQVcsVUFBVSxhQUFhLFVBQVUsUUFBUTtBQUM5RCxVQUFBRixRQUFPLEtBQUssUUFBUUUsZ0JBQWU7QUFDbkMsVUFBQUosVUFBUyxLQUFLLFVBQVUsYUFBYUUsS0FBSTtBQUN6QyxrQkFBUSxPQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU9GO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU9BLFVBQVM7QUFBQSxZQUNwQixLQUFLO0FBQ0QscUJBQU9BLFVBQVM7QUFBQSxVQUN4QjtBQUFBLFFBQ0osT0FBTztBQUVILFVBQUFFLFFBQU8sS0FBSyxRQUFRLEtBQUssTUFBTSxhQUFhLEtBQUssT0FBTyxDQUFDO0FBQ3pELGtCQUFRLE9BQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBT0EsUUFBTyxJQUFJRSxnQkFBZTtBQUFBLFlBQ3JDLEtBQUs7QUFDRCxxQkFBT0YsUUFBT0UsZ0JBQWU7QUFBQSxZQUNqQyxLQUFLO0FBQ0QscUJBQU9GLFFBQU8sS0FBS0UsZ0JBQWU7QUFBQSxZQUN0QyxLQUFLO0FBQ0QscUJBQU9GLFFBQU8sT0FBT0UsZ0JBQWU7QUFBQSxZQUN4QyxLQUFLO0FBQ0QscUJBQU9GLFFBQU8sUUFBUUUsZ0JBQWU7QUFBQSxZQUV6QyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxNQUFNRixRQUFPLEtBQUssSUFBSUU7QUFBQSxZQUN0QztBQUNJLG9CQUFNLElBQUksTUFBTSxrQkFBa0IsS0FBSztBQUFBLFVBQy9DO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxlQUFTLE9BQU8sT0FBTztBQUNuQixlQUFPLFdBQVk7QUFDZixpQkFBTyxLQUFLLEdBQUcsS0FBSztBQUFBLFFBQ3hCO0FBQUEsTUFDSjtBQUVBLFVBQUksaUJBQWlCLE9BQU8sSUFBSSxHQUM1QixZQUFZLE9BQU8sR0FBRyxHQUN0QixZQUFZLE9BQU8sR0FBRyxHQUN0QixVQUFVLE9BQU8sR0FBRyxHQUNwQixTQUFTLE9BQU8sR0FBRyxHQUNuQixVQUFVLE9BQU8sR0FBRyxHQUNwQixXQUFXLE9BQU8sR0FBRyxHQUNyQixhQUFhLE9BQU8sR0FBRyxHQUN2QixVQUFVLE9BQU8sR0FBRyxHQUNwQixZQUFZO0FBRWhCLGVBQVMsVUFBVTtBQUNmLGVBQU8sZUFBZSxJQUFJO0FBQUEsTUFDOUI7QUFFQSxlQUFTLE1BQU0sT0FBTztBQUNsQixnQkFBUSxlQUFlLEtBQUs7QUFDNUIsZUFBTyxLQUFLLFFBQVEsSUFBSSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUk7QUFBQSxNQUNsRDtBQUVBLGVBQVMsV0FBVyxNQUFNO0FBQ3RCLGVBQU8sV0FBWTtBQUNmLGlCQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUk7QUFBQSxRQUMvQztBQUFBLE1BQ0o7QUFFQSxVQUFJLGVBQWUsV0FBVyxjQUFjLEdBQ3hDLFVBQVUsV0FBVyxTQUFTLEdBQzlCLFVBQVUsV0FBVyxTQUFTLEdBQzlCLFFBQVEsV0FBVyxPQUFPLEdBQzFCLE9BQU8sV0FBVyxNQUFNLEdBQ3hCLFNBQVMsV0FBVyxRQUFRLEdBQzVCLFFBQVEsV0FBVyxPQUFPO0FBRTlCLGVBQVMsUUFBUTtBQUNiLGVBQU8sU0FBUyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDbkM7QUFFQSxVQUFJRyxTQUFRLEtBQUssT0FDYixhQUFhO0FBQUEsUUFDVCxJQUFJO0FBQUE7QUFBQSxRQUNKLEdBQUc7QUFBQTtBQUFBLFFBQ0gsR0FBRztBQUFBO0FBQUEsUUFDSCxHQUFHO0FBQUE7QUFBQSxRQUNILEdBQUc7QUFBQTtBQUFBLFFBQ0gsR0FBRztBQUFBO0FBQUEsUUFDSCxHQUFHO0FBQUE7QUFBQSxNQUNQO0FBR0osZUFBUyxrQkFBa0IsUUFBUSxRQUFRLGVBQWUsVUFBVTVCLFNBQVE7QUFDeEUsZUFBT0EsUUFBTyxhQUFhLFVBQVUsR0FBRyxDQUFDLENBQUMsZUFBZSxRQUFRLFFBQVE7QUFBQSxNQUM3RTtBQUVBLGVBQVMsZUFBZSxnQkFBZ0IsZUFBZTZCLGFBQVk3QixTQUFRO0FBQ3ZFLFlBQUksV0FBVyxlQUFlLGNBQWMsRUFBRSxJQUFJLEdBQzlDd0IsV0FBVUksT0FBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQ2hDYixXQUFVYSxPQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FDaENkLFNBQVFjLE9BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUM5QkwsUUFBT0ssT0FBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQzdCUCxVQUFTTyxPQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FDL0JOLFNBQVFNLE9BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUM5QlIsU0FBUVEsT0FBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQzlCLElBQ0tKLFlBQVdLLFlBQVcsTUFBTSxDQUFDLEtBQUtMLFFBQU8sS0FDekNBLFdBQVVLLFlBQVcsS0FBSyxDQUFDLE1BQU1MLFFBQU8sS0FDeENULFlBQVcsS0FBSyxDQUFDLEdBQUcsS0FDcEJBLFdBQVVjLFlBQVcsS0FBSyxDQUFDLE1BQU1kLFFBQU8sS0FDeENELFVBQVMsS0FBSyxDQUFDLEdBQUcsS0FDbEJBLFNBQVFlLFlBQVcsS0FBSyxDQUFDLE1BQU1mLE1BQUssS0FDcENTLFNBQVEsS0FBSyxDQUFDLEdBQUcsS0FDakJBLFFBQU9NLFlBQVcsS0FBSyxDQUFDLE1BQU1OLEtBQUk7QUFFM0MsWUFBSU0sWUFBVyxLQUFLLE1BQU07QUFDdEIsY0FDSSxLQUNDUCxVQUFTLEtBQUssQ0FBQyxHQUFHLEtBQ2xCQSxTQUFRTyxZQUFXLEtBQUssQ0FBQyxNQUFNUCxNQUFLO0FBQUEsUUFDN0M7QUFDQSxZQUFJLEtBQ0NELFdBQVUsS0FBSyxDQUFDLEdBQUcsS0FDbkJBLFVBQVNRLFlBQVcsS0FBSyxDQUFDLE1BQU1SLE9BQU0sS0FDdENELFVBQVMsS0FBSyxDQUFDLEdBQUcsS0FBTSxDQUFDLE1BQU1BLE1BQUs7QUFFekMsVUFBRSxDQUFDLElBQUk7QUFDUCxVQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtBQUN6QixVQUFFLENBQUMsSUFBSXBCO0FBQ1AsZUFBTyxrQkFBa0IsTUFBTSxNQUFNLENBQUM7QUFBQSxNQUMxQztBQUdBLGVBQVMsMkJBQTJCLGtCQUFrQjtBQUNsRCxZQUFJLHFCQUFxQixRQUFXO0FBQ2hDLGlCQUFPNEI7QUFBQSxRQUNYO0FBQ0EsWUFBSSxPQUFPLHFCQUFxQixZQUFZO0FBQ3hDLFVBQUFBLFNBQVE7QUFDUixpQkFBTztBQUFBLFFBQ1g7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUdBLGVBQVMsNEJBQTRCLFdBQVcsT0FBTztBQUNuRCxZQUFJLFdBQVcsU0FBUyxNQUFNLFFBQVc7QUFDckMsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxVQUFVLFFBQVc7QUFDckIsaUJBQU8sV0FBVyxTQUFTO0FBQUEsUUFDL0I7QUFDQSxtQkFBVyxTQUFTLElBQUk7QUFDeEIsWUFBSSxjQUFjLEtBQUs7QUFDbkIscUJBQVcsS0FBSyxRQUFRO0FBQUEsUUFDNUI7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUVBLGVBQVMsU0FBUyxlQUFlLGVBQWU7QUFDNUMsWUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHO0FBQ2pCLGlCQUFPLEtBQUssV0FBVyxFQUFFLFlBQVk7QUFBQSxRQUN6QztBQUVBLFlBQUksYUFBYSxPQUNiLEtBQUssWUFDTDVCLFNBQ0E7QUFFSixZQUFJLE9BQU8sa0JBQWtCLFVBQVU7QUFDbkMsMEJBQWdCO0FBQ2hCLDBCQUFnQjtBQUFBLFFBQ3BCO0FBQ0EsWUFBSSxPQUFPLGtCQUFrQixXQUFXO0FBQ3BDLHVCQUFhO0FBQUEsUUFDakI7QUFDQSxZQUFJLE9BQU8sa0JBQWtCLFVBQVU7QUFDbkMsZUFBSyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFlBQVksYUFBYTtBQUNoRCxjQUFJLGNBQWMsS0FBSyxRQUFRLGNBQWMsTUFBTSxNQUFNO0FBQ3JELGVBQUcsS0FBSyxjQUFjLElBQUk7QUFBQSxVQUM5QjtBQUFBLFFBQ0o7QUFFQSxRQUFBQSxVQUFTLEtBQUssV0FBVztBQUN6QixpQkFBUyxlQUFlLE1BQU0sQ0FBQyxZQUFZLElBQUlBLE9BQU07QUFFckQsWUFBSSxZQUFZO0FBQ1osbUJBQVNBLFFBQU8sV0FBVyxDQUFDLE1BQU0sTUFBTTtBQUFBLFFBQzVDO0FBRUEsZUFBT0EsUUFBTyxXQUFXLE1BQU07QUFBQSxNQUNuQztBQUVBLFVBQUksUUFBUSxLQUFLO0FBRWpCLGVBQVNPLE1BQUssR0FBRztBQUNiLGdCQUFRLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUFBLE1BQ2pDO0FBRUEsZUFBUyxnQkFBZ0I7QUFRckIsWUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHO0FBQ2pCLGlCQUFPLEtBQUssV0FBVyxFQUFFLFlBQVk7QUFBQSxRQUN6QztBQUVBLFlBQUlpQixXQUFVLE1BQU0sS0FBSyxhQUFhLElBQUksS0FDdENELFFBQU8sTUFBTSxLQUFLLEtBQUssR0FDdkJGLFVBQVMsTUFBTSxLQUFLLE9BQU8sR0FDM0JOLFVBQ0FELFFBQ0FNLFFBQ0EsR0FDQSxRQUFRLEtBQUssVUFBVSxHQUN2QixXQUNBLFFBQ0EsVUFDQTtBQUVKLFlBQUksQ0FBQyxPQUFPO0FBR1IsaUJBQU87QUFBQSxRQUNYO0FBR0EsUUFBQUwsV0FBVSxTQUFTUyxXQUFVLEVBQUU7QUFDL0IsUUFBQVYsU0FBUSxTQUFTQyxXQUFVLEVBQUU7QUFDN0IsUUFBQVMsWUFBVztBQUNYLFFBQUFULFlBQVc7QUFHWCxRQUFBSyxTQUFRLFNBQVNDLFVBQVMsRUFBRTtBQUM1QixRQUFBQSxXQUFVO0FBR1YsWUFBSUcsV0FBVUEsU0FBUSxRQUFRLENBQUMsRUFBRSxRQUFRLFVBQVUsRUFBRSxJQUFJO0FBRXpELG9CQUFZLFFBQVEsSUFBSSxNQUFNO0FBQzlCLGlCQUFTakIsTUFBSyxLQUFLLE9BQU8sTUFBTUEsTUFBSyxLQUFLLElBQUksTUFBTTtBQUNwRCxtQkFBV0EsTUFBSyxLQUFLLEtBQUssTUFBTUEsTUFBSyxLQUFLLElBQUksTUFBTTtBQUNwRCxrQkFBVUEsTUFBSyxLQUFLLGFBQWEsTUFBTUEsTUFBSyxLQUFLLElBQUksTUFBTTtBQUUzRCxlQUNJLFlBQ0EsT0FDQ2EsU0FBUSxTQUFTQSxTQUFRLE1BQU0sT0FDL0JDLFVBQVMsU0FBU0EsVUFBUyxNQUFNLE9BQ2pDRSxRQUFPLFdBQVdBLFFBQU8sTUFBTSxPQUMvQlQsVUFBU0MsWUFBV1MsV0FBVSxNQUFNLE9BQ3BDVixTQUFRLFVBQVVBLFNBQVEsTUFBTSxPQUNoQ0MsV0FBVSxVQUFVQSxXQUFVLE1BQU0sT0FDcENTLFdBQVUsVUFBVSxJQUFJLE1BQU07QUFBQSxNQUV2QztBQUVBLFVBQUksVUFBVSxTQUFTO0FBRXZCLGNBQVEsVUFBVTtBQUNsQixjQUFRLE1BQU07QUFDZCxjQUFRLE1BQU07QUFDZCxjQUFRLFdBQVc7QUFDbkIsY0FBUSxLQUFLO0FBQ2IsY0FBUSxpQkFBaUI7QUFDekIsY0FBUSxZQUFZO0FBQ3BCLGNBQVEsWUFBWTtBQUNwQixjQUFRLFVBQVU7QUFDbEIsY0FBUSxTQUFTO0FBQ2pCLGNBQVEsVUFBVTtBQUNsQixjQUFRLFdBQVc7QUFDbkIsY0FBUSxhQUFhO0FBQ3JCLGNBQVEsVUFBVTtBQUNsQixjQUFRLFVBQVU7QUFDbEIsY0FBUSxVQUFVO0FBQ2xCLGNBQVEsUUFBUTtBQUNoQixjQUFRLE1BQU07QUFDZCxjQUFRLGVBQWU7QUFDdkIsY0FBUSxVQUFVO0FBQ2xCLGNBQVEsVUFBVTtBQUNsQixjQUFRLFFBQVE7QUFDaEIsY0FBUSxPQUFPO0FBQ2YsY0FBUSxRQUFRO0FBQ2hCLGNBQVEsU0FBUztBQUNqQixjQUFRLFFBQVE7QUFDaEIsY0FBUSxXQUFXO0FBQ25CLGNBQVEsY0FBYztBQUN0QixjQUFRLFdBQVc7QUFDbkIsY0FBUSxTQUFTO0FBQ2pCLGNBQVEsU0FBU3hCO0FBQ2pCLGNBQVEsYUFBYTtBQUVyQixjQUFRLGNBQWM7QUFBQSxRQUNsQjtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQ0EsY0FBUSxPQUFPO0FBSWYscUJBQWUsS0FBSyxHQUFHLEdBQUcsTUFBTTtBQUNoQyxxQkFBZSxLQUFLLEdBQUcsR0FBRyxTQUFTO0FBSW5DLG9CQUFjLEtBQUssV0FBVztBQUM5QixvQkFBYyxLQUFLLGNBQWM7QUFDakMsb0JBQWMsS0FBSyxTQUFVLE9BQU8sT0FBTyxRQUFRO0FBQy9DLGVBQU8sS0FBSyxJQUFJLEtBQUssV0FBVyxLQUFLLElBQUksR0FBSTtBQUFBLE1BQ2pELENBQUM7QUFDRCxvQkFBYyxLQUFLLFNBQVUsT0FBTyxPQUFPLFFBQVE7QUFDL0MsZUFBTyxLQUFLLElBQUksS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBLE1BQ3JDLENBQUM7QUFJRCxZQUFNLFVBQVU7QUFFaEIsc0JBQWdCLFdBQVc7QUFFM0IsWUFBTSxLQUFLO0FBQ1gsWUFBTSxNQUFNO0FBQ1osWUFBTSxNQUFNO0FBQ1osWUFBTSxNQUFNO0FBQ1osWUFBTSxNQUFNO0FBQ1osWUFBTSxPQUFPO0FBQ2IsWUFBTSxTQUFTO0FBQ2YsWUFBTSxTQUFTO0FBQ2YsWUFBTSxTQUFTO0FBQ2YsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sV0FBVztBQUNqQixZQUFNLFdBQVc7QUFDakIsWUFBTSxXQUFXO0FBQ2pCLFlBQU0sWUFBWTtBQUNsQixZQUFNLGFBQWE7QUFDbkIsWUFBTSxhQUFhO0FBQ25CLFlBQU0sY0FBYztBQUNwQixZQUFNLGNBQWM7QUFDcEIsWUFBTSxlQUFlO0FBQ3JCLFlBQU0sZUFBZTtBQUNyQixZQUFNLFVBQVU7QUFDaEIsWUFBTSxnQkFBZ0I7QUFDdEIsWUFBTSxpQkFBaUI7QUFDdkIsWUFBTSx1QkFBdUI7QUFDN0IsWUFBTSx3QkFBd0I7QUFDOUIsWUFBTSxpQkFBaUI7QUFDdkIsWUFBTSxZQUFZO0FBR2xCLFlBQU0sWUFBWTtBQUFBLFFBQ2QsZ0JBQWdCO0FBQUE7QUFBQSxRQUNoQix3QkFBd0I7QUFBQTtBQUFBLFFBQ3hCLG1CQUFtQjtBQUFBO0FBQUEsUUFDbkIsTUFBTTtBQUFBO0FBQUEsUUFDTixNQUFNO0FBQUE7QUFBQSxRQUNOLGNBQWM7QUFBQTtBQUFBLFFBQ2QsU0FBUztBQUFBO0FBQUEsUUFDVCxNQUFNO0FBQUE7QUFBQSxRQUNOLE9BQU87QUFBQTtBQUFBLE1BQ1g7QUFFQSxhQUFPO0FBQUEsSUFFWCxDQUFFO0FBQUE7QUFBQTs7O0FDdmpMRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQThCLG9CQVFPO0FBQ1AsWUFBdUI7OztBQ1R2QixJQUFBQyxtQkFBaUU7OztBQ0VqRSxzQkFBdUI7OztBQ0F2QixJQUFPLGFBQVEsQ0FBQzs7O0FDQWhCLElBQU8sYUFBUTtBQUFBO0FBQUEsRUFFWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVix3QkFBd0I7QUFBQSxFQUN4Qiw0QkFBNEI7QUFBQSxFQUM1QixxQkFBcUI7QUFBQTtBQUFBLEVBR3JCLHNCQUFzQjtBQUFBLEVBQ3RCLGNBQWM7QUFBQSxFQUNkLDZCQUE2QjtBQUFBLEVBQzdCLDRCQUE0QjtBQUFBLEVBQzVCLGdCQUFnQjtBQUFBLEVBQ2hCLGtCQUFrQjtBQUFBLEVBQ2xCLHNCQUFzQjtBQUFBLEVBQ3RCLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLHdCQUF3QjtBQUFBLEVBQ3hCLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLHdCQUF3QjtBQUFBLEVBQ3hCLGlCQUFpQjtBQUFBLEVBQ2pCLG1CQUFtQjtBQUFBLEVBQ25CLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQTtBQUFBLEVBR2YsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBLEVBQ2YscUJBQXFCO0FBQUEsRUFDckIsdUJBQXVCO0FBQUEsRUFDdkIsc0JBQXNCO0FBQUE7QUFBQSxFQUd0QixpQkFBaUI7QUFBQSxFQUNqQixZQUFZO0FBQUEsRUFDWixtQkFBbUI7QUFBQSxFQUNuQix3QkFDSTtBQUFBLEVBQ0osWUFBWTtBQUFBLEVBQ1osc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQXFCO0FBQUEsRUFDckIsMEJBQTBCO0FBQUEsRUFDMUIsK0JBQStCO0FBQUEsRUFDL0IsNEJBQTRCO0FBQUEsRUFDNUIsaUNBQWlDO0FBQUEsRUFDakMsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQ0k7QUFBQSxFQUNKLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUFBLEVBQ3hCLDJCQUEyQjtBQUFBLEVBQzNCLDhCQUNJO0FBQUEsRUFDSixlQUFlO0FBQUEsRUFDZiwwQkFBMEI7QUFBQSxFQUMxQixzQkFBc0I7QUFBQSxFQUN0QiwrQkFBK0I7QUFBQSxFQUMvQix3Q0FBd0M7QUFBQSxFQUN4Qyx3Q0FBd0M7QUFBQSxFQUN4QyxvQ0FBb0M7QUFBQSxFQUNwQyxvQ0FBb0M7QUFBQSxFQUNwQyx3Q0FBd0M7QUFBQSxFQUN4QyxtQkFBbUI7QUFBQSxFQUNuQixpREFDSTtBQUFBLEVBQ0osNkNBQ0k7QUFBQSxFQUNKLHdDQUF3QztBQUFBLEVBQ3hDLHFCQUFxQjtBQUFBLEVBQ3JCLDhCQUE4QjtBQUFBLEVBQzlCLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUFrQztBQUFBLEVBQ2xDLHdCQUF3QjtBQUFBLEVBQ3hCLGlDQUNJO0FBQUEsRUFDSixpQ0FBaUM7QUFBQSxFQUNqQywyQkFBMkI7QUFBQSxFQUMzQixvQ0FBb0M7QUFBQSxFQUNwQyxPQUFPO0FBQUEsRUFDUCx3QkFBd0I7QUFBQSxFQUN4QixnQkFBZ0I7QUFBQSxFQUNoQixxQkFBcUI7QUFBQSxFQUNyQixrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixnQkFBZ0I7QUFBQSxFQUNoQixrQ0FDSTtBQUFBLEVBQ0osdUNBQ0k7QUFBQSxFQUNKLHlCQUF5QjtBQUFBLEVBQ3pCLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLG1DQUNJO0FBQUEsRUFDSix3Q0FDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsc0JBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLHVCQUF1QjtBQUFBLEVBQ3ZCLHVCQUF1QjtBQUFBLEVBQ3ZCLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUNJO0FBQUEsRUFDSix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxtQkFBbUI7QUFBQSxFQUNuQiwwQkFBMEI7QUFBQSxFQUMxQixrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixTQUFTO0FBQUEsRUFDVCxvQkFBb0I7QUFBQTtBQUFBLEVBR3BCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBR1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04saUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsbUJBQW1CO0FBQUEsRUFDbkIsT0FBTztBQUFBLEVBQ1AsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsZUFBZTtBQUFBLEVBQ2YsaUJBQWlCO0FBQUEsRUFDakIsa0JBQWtCO0FBQUEsRUFDbEIsb0JBQW9CO0FBQ3hCOzs7QUM1S0EsSUFBTyxhQUFRO0FBQUE7QUFBQSxFQUVYLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxFQUNiLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLHdCQUF3QjtBQUFBLEVBQ3hCLDRCQUE0QjtBQUFBLEVBQzVCLHFCQUFxQjtBQUFBO0FBQUEsRUFHckIsc0JBQXNCO0FBQUEsRUFDdEIsY0FBYztBQUFBLEVBQ2QsNkJBQTZCO0FBQUEsRUFDN0IsNEJBQTRCO0FBQUEsRUFDNUIsa0JBQWtCO0FBQUEsRUFDbEIsZ0JBQWdCO0FBQUEsRUFDaEIsc0JBQXNCO0FBQUEsRUFDdEIsb0JBQW9CO0FBQUEsRUFDcEIsWUFBWTtBQUFBLEVBQ1osd0JBQXdCO0FBQUEsRUFDeEIsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsd0JBQXdCO0FBQUEsRUFDeEIsaUJBQWlCO0FBQUEsRUFDakIsbUJBQW1CO0FBQUEsRUFDbkIsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBO0FBQUEsRUFHZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUEsRUFDZixxQkFBcUI7QUFBQSxFQUNyQix1QkFBdUI7QUFBQSxFQUN2QixzQkFBc0I7QUFBQTtBQUFBLEVBR3RCLGlCQUFpQjtBQUFBLEVBQ2pCLFlBQVk7QUFBQSxFQUNaLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUNJO0FBQUEsRUFDSixZQUFZO0FBQUEsRUFDWixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0I7QUFBQSxFQUNoQixxQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsK0JBQStCO0FBQUEsRUFDL0IsNEJBQ0k7QUFBQSxFQUNKLGlDQUNJO0FBQUEsRUFDSiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FDSTtBQUFBLEVBQ0osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQXdCO0FBQUEsRUFDeEIsMkJBQTJCO0FBQUEsRUFDM0IsOEJBQ0k7QUFBQSxFQUNKLGVBQWU7QUFBQSxFQUNmLDBCQUEwQjtBQUFBLEVBQzFCLHNCQUFzQjtBQUFBLEVBQ3RCLCtCQUErQjtBQUFBLEVBQy9CLHdDQUF3QztBQUFBLEVBQ3hDLHdDQUF3QztBQUFBLEVBQ3hDLG9DQUFvQztBQUFBLEVBQ3BDLG9DQUFvQztBQUFBLEVBQ3BDLHdDQUF3QztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLGlEQUNJO0FBQUEsRUFDSiw2Q0FDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsOEJBQThCO0FBQUEsRUFDOUIsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQWtDO0FBQUEsRUFDbEMsd0JBQXdCO0FBQUEsRUFDeEIsaUNBQ0k7QUFBQSxFQUNKLGlDQUFpQztBQUFBLEVBQ2pDLDJCQUEyQjtBQUFBLEVBQzNCLG9DQUFvQztBQUFBLEVBQ3BDLE9BQU87QUFBQSxFQUNQLHdCQUF3QjtBQUFBLEVBQ3hCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSixrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixnQkFBZ0I7QUFBQSxFQUNoQixrQ0FDSTtBQUFBLEVBQ0osdUNBQ0k7QUFBQSxFQUNKLHlCQUF5QjtBQUFBLEVBQ3pCLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLG1DQUNJO0FBQUEsRUFDSix3Q0FDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsc0JBQXNCO0FBQUEsRUFDdEIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsNEJBQTRCO0FBQUEsRUFDNUIsWUFBWTtBQUFBLEVBQ1osaUJBQ0k7QUFBQSxFQUNKLHdCQUF3QjtBQUFBLEVBQ3hCLGNBQWM7QUFBQSxFQUNkLG1CQUFtQjtBQUFBLEVBQ25CLDBCQUEwQjtBQUFBLEVBQzFCLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUNJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxvQkFBb0I7QUFBQTtBQUFBLEVBR3BCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBR1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04saUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsbUJBQW1CO0FBQUEsRUFDbkIsT0FBTztBQUFBLEVBQ1AsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsZUFBZTtBQUFBLEVBQ2YsaUJBQWlCO0FBQUEsRUFDakIsa0JBQWtCO0FBQUEsRUFDbEIsb0JBQW9CO0FBQ3hCOzs7QUNoTEEsSUFBTyxhQUFRLENBQUM7OztBQ0FoQixJQUFPLGFBQVEsQ0FBQzs7O0FDR2hCLElBQU8sYUFBUTtBQUFBO0FBQUEsRUFFWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVix3QkFBd0I7QUFBQSxFQUN4Qiw0QkFBNEI7QUFBQSxFQUM1QixxQkFBcUI7QUFBQTtBQUFBLEVBR3JCLHNCQUFzQjtBQUFBLEVBQ3RCLGNBQWM7QUFBQSxFQUNkLDZCQUE2QjtBQUFBLEVBQzdCLDRCQUE0QjtBQUFBLEVBQzVCLGtCQUFrQjtBQUFBLEVBQ2xCLGdCQUFnQjtBQUFBLEVBQ2hCLHNCQUFzQjtBQUFBLEVBQ3RCLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLHdCQUF3QjtBQUFBLEVBQ3hCLFlBQ0k7QUFBQSxFQUNKLGlCQUFpQjtBQUFBLEVBQ2pCLHdCQUNJO0FBQUEsRUFDSixpQkFDSTtBQUFBLEVBQ0osbUJBQW1CO0FBQUEsRUFDbkIsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBO0FBQUEsRUFHZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUEsRUFDZixxQkFBcUI7QUFBQSxFQUNyQix1QkFBdUI7QUFBQSxFQUN2QixzQkFBc0I7QUFBQTtBQUFBLEVBR3RCLGlCQUFpQjtBQUFBLEVBQ2pCLFlBQVk7QUFBQSxFQUNaLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUNJO0FBQUEsRUFDSixZQUFZO0FBQUEsRUFDWixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0I7QUFBQSxFQUNoQixxQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsK0JBQStCO0FBQUEsRUFDL0IsNEJBQ0k7QUFBQSxFQUNKLGlDQUNJO0FBQUEsRUFDSiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FDSTtBQUFBLEVBQ0osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQXdCO0FBQUEsRUFDeEIsMkJBQTJCO0FBQUEsRUFDM0IsOEJBQ0k7QUFBQSxFQUNKLGVBQWU7QUFBQSxFQUNmLDBCQUEwQjtBQUFBLEVBQzFCLHNCQUFzQjtBQUFBLEVBQ3RCLCtCQUErQjtBQUFBLEVBQy9CLHdDQUF3QztBQUFBLEVBQ3hDLHdDQUF3QztBQUFBLEVBQ3hDLG9DQUFvQztBQUFBLEVBQ3BDLG9DQUFvQztBQUFBLEVBQ3BDLHdDQUF3QztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLGlEQUNJO0FBQUEsRUFDSiw2Q0FDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsOEJBQThCO0FBQUEsRUFDOUIsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQ0k7QUFBQSxFQUNKLHdCQUF3QjtBQUFBLEVBQ3hCLGlDQUNJO0FBQUEsRUFDSixpQ0FBaUM7QUFBQSxFQUNqQywyQkFBMkI7QUFBQSxFQUMzQixvQ0FBb0M7QUFBQSxFQUNwQyxPQUFPO0FBQUEsRUFDUCx3QkFBd0I7QUFBQSxFQUN4QixnQkFBZ0I7QUFBQSxFQUNoQixxQkFDSTtBQUFBLEVBQ0osa0JBQWtCO0FBQUEsRUFDbEIsdUJBQ0k7QUFBQSxFQUNKLGdCQUFnQjtBQUFBLEVBQ2hCLGtDQUNJO0FBQUEsRUFDSix1Q0FDSTtBQUFBLEVBQ0oseUJBQ0k7QUFBQSxFQUNKLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLG1DQUFtQztBQUFBLEVBQ25DLHdDQUNJO0FBQUEsRUFDSixXQUFXO0FBQUEsRUFDWCxzQkFDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQ0k7QUFBQSxFQUNKLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUNJO0FBQUEsRUFDSix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxtQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsa0JBQWtCO0FBQUEsRUFDbEIsdUJBQ0k7QUFBQSxFQUNKLFNBQVM7QUFBQSxFQUNULG9CQUFvQjtBQUFBO0FBQUEsRUFHcEIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBO0FBQUEsRUFHVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxtQkFBbUI7QUFBQSxFQUNuQixPQUFPO0FBQUEsRUFDUCxlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQixlQUFlO0FBQUEsRUFDZixpQkFBaUI7QUFBQSxFQUNqQixrQkFBa0I7QUFBQSxFQUNsQixvQkFBb0I7QUFDeEI7OztBQzNMQSxJQUFPLGFBQVE7QUFBQTtBQUFBLEVBRVgsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gscUJBQXFCO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IscUJBQXFCO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1Ysd0JBQXdCO0FBQUEsRUFDeEIsNEJBQTRCO0FBQUEsRUFDNUIscUJBQXFCO0FBQUE7QUFBQSxFQUdyQixzQkFBc0I7QUFBQSxFQUN0QixjQUFjO0FBQUEsRUFDZCw2QkFBNkI7QUFBQSxFQUM3Qiw0QkFBNEI7QUFBQSxFQUM1QixnQkFBZ0I7QUFBQSxFQUNoQixrQkFBa0I7QUFBQSxFQUNsQixzQkFBc0I7QUFBQSxFQUN0QixvQkFBb0I7QUFBQSxFQUNwQixZQUFZO0FBQUEsRUFDWix3QkFBd0I7QUFBQSxFQUN4QixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQix3QkFBd0I7QUFBQSxFQUN4QixpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQixnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUE7QUFBQSxFQUdmLGNBQWM7QUFBQSxFQUNkLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQSxFQUNmLHFCQUFxQjtBQUFBLEVBQ3JCLHVCQUF1QjtBQUFBLEVBQ3ZCLHNCQUFzQjtBQUFBO0FBQUEsRUFHdEIsaUJBQWlCO0FBQUEsRUFDakIsWUFBWTtBQUFBLEVBQ1osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQXdCO0FBQUEsRUFDeEIsWUFBWTtBQUFBLEVBQ1osc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQ0k7QUFBQSxFQUNKLDBCQUEwQjtBQUFBLEVBQzFCLCtCQUErQjtBQUFBLEVBQy9CLDRCQUNJO0FBQUEsRUFDSixpQ0FDSTtBQUFBLEVBQ0osNkJBQTZCO0FBQUEsRUFDN0Isa0NBQ0k7QUFBQSxFQUNKLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUFBLEVBQ3hCLDJCQUEyQjtBQUFBLEVBQzNCLDhCQUNJO0FBQUEsRUFDSixlQUFlO0FBQUEsRUFDZiwwQkFBMEI7QUFBQSxFQUMxQixzQkFBc0I7QUFBQSxFQUN0QiwrQkFBK0I7QUFBQSxFQUMvQix3Q0FBd0M7QUFBQSxFQUN4Qyx3Q0FBd0M7QUFBQSxFQUN4QyxvQ0FBb0M7QUFBQSxFQUNwQyxvQ0FBb0M7QUFBQSxFQUNwQyx3Q0FBd0M7QUFBQSxFQUN4QyxtQkFBbUI7QUFBQSxFQUNuQixpREFDSTtBQUFBLEVBQ0osNkNBQ0k7QUFBQSxFQUNKLHdDQUF3QztBQUFBLEVBQ3hDLHFCQUFxQjtBQUFBLEVBQ3JCLDhCQUE4QjtBQUFBLEVBQzlCLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUFrQztBQUFBLEVBQ2xDLHdCQUF3QjtBQUFBLEVBQ3hCLGlDQUNJO0FBQUEsRUFDSixpQ0FBaUM7QUFBQSxFQUNqQywyQkFBMkI7QUFBQSxFQUMzQixvQ0FBb0M7QUFBQSxFQUNwQyxPQUFPO0FBQUEsRUFDUCx3QkFBd0I7QUFBQSxFQUN4QixnQkFBZ0I7QUFBQSxFQUNoQixxQkFBcUI7QUFBQSxFQUNyQixrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixnQkFBZ0I7QUFBQSxFQUNoQixrQ0FDSTtBQUFBLEVBQ0osdUNBQ0k7QUFBQSxFQUNKLHlCQUF5QjtBQUFBLEVBQ3pCLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLG1DQUFtQztBQUFBLEVBQ25DLHdDQUNJO0FBQUEsRUFDSixXQUFXO0FBQUEsRUFDWCxzQkFDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsNEJBQTRCO0FBQUEsRUFDNUIsWUFBWTtBQUFBLEVBQ1osaUJBQ0k7QUFBQSxFQUNKLHdCQUF3QjtBQUFBLEVBQ3hCLGNBQWM7QUFBQSxFQUNkLG1CQUFtQjtBQUFBLEVBQ25CLDBCQUEwQjtBQUFBLEVBQzFCLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUNJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxvQkFBb0I7QUFBQTtBQUFBLEVBR3BCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBR1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04saUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsbUJBQW1CO0FBQUEsRUFDbkIsT0FBTztBQUFBLEVBQ1AsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsZUFBZTtBQUFBLEVBQ2YsaUJBQWlCO0FBQUEsRUFDakIsa0JBQWtCO0FBQUEsRUFDbEIsb0JBQW9CO0FBQ3hCOzs7QUM5S0EsSUFBTyxnQkFBUSxDQUFDOzs7QUNBaEIsSUFBTyxhQUFRO0FBQUE7QUFBQSxFQUVYLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxFQUNiLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLHdCQUF3QjtBQUFBLEVBQ3hCLDRCQUE0QjtBQUFBLEVBQzVCLHFCQUFxQjtBQUFBO0FBQUEsRUFHckIsc0JBQXNCO0FBQUEsRUFDdEIsY0FBYztBQUFBLEVBQ2QsNkJBQTZCO0FBQUEsRUFDN0IsNEJBQTRCO0FBQUEsRUFDNUIsZ0JBQWdCO0FBQUEsRUFDaEIsa0JBQWtCO0FBQUEsRUFDbEIsc0JBQXNCO0FBQUEsRUFDdEIsb0JBQW9CO0FBQUEsRUFDcEIsWUFBWTtBQUFBLEVBQ1osd0JBQXdCO0FBQUEsRUFDeEIsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsd0JBQXdCO0FBQUEsRUFDeEIsaUJBQWlCO0FBQUEsRUFDakIsbUJBQW1CO0FBQUEsRUFDbkIsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBO0FBQUEsRUFHZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUEsRUFDZixxQkFBcUI7QUFBQSxFQUNyQix1QkFBdUI7QUFBQSxFQUN2QixzQkFBc0I7QUFBQTtBQUFBLEVBR3RCLGlCQUFpQjtBQUFBLEVBQ2pCLFlBQVk7QUFBQSxFQUNaLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUNJO0FBQUEsRUFDSixZQUFZO0FBQUEsRUFDWixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0I7QUFBQSxFQUNoQixxQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsK0JBQ0k7QUFBQSxFQUNKLDRCQUNJO0FBQUEsRUFDSixpQ0FDSTtBQUFBLEVBQ0osNkJBQTZCO0FBQUEsRUFDN0Isa0NBQ0k7QUFBQSxFQUNKLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUFBLEVBQ3hCLDJCQUEyQjtBQUFBLEVBQzNCLDhCQUE4QjtBQUFBLEVBQzlCLGVBQWU7QUFBQSxFQUNmLDBCQUEwQjtBQUFBLEVBQzFCLHNCQUFzQjtBQUFBLEVBQ3RCLCtCQUErQjtBQUFBLEVBQy9CLHdDQUF3QztBQUFBLEVBQ3hDLHdDQUF3QztBQUFBLEVBQ3hDLG9DQUFvQztBQUFBLEVBQ3BDLG9DQUFvQztBQUFBLEVBQ3BDLHdDQUF3QztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLGlEQUNJO0FBQUEsRUFDSiw2Q0FDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsOEJBQThCO0FBQUEsRUFDOUIsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQWtDO0FBQUEsRUFDbEMsd0JBQXdCO0FBQUEsRUFDeEIsaUNBQ0k7QUFBQSxFQUNKLGlDQUNJO0FBQUEsRUFDSiwyQkFBMkI7QUFBQSxFQUMzQixvQ0FDSTtBQUFBLEVBQ0osT0FBTztBQUFBLEVBQ1Asd0JBQXdCO0FBQUEsRUFDeEIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQ0k7QUFBQSxFQUNKLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUNJO0FBQUEsRUFDSixnQkFBZ0I7QUFBQSxFQUNoQixrQ0FDSTtBQUFBLEVBQ0osdUNBQ0k7QUFBQSxFQUNKLHlCQUF5QjtBQUFBLEVBQ3pCLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLG1DQUFtQztBQUFBLEVBQ25DLHdDQUNJO0FBQUEsRUFDSixXQUFXO0FBQUEsRUFDWCxzQkFDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQ0k7QUFBQSxFQUNKLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUNJO0FBQUEsRUFDSix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxtQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsa0JBQWtCO0FBQUEsRUFDbEIsdUJBQ0k7QUFBQSxFQUNKLFNBQVM7QUFBQSxFQUNULG9CQUFvQjtBQUFBO0FBQUEsRUFHcEIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBO0FBQUEsRUFHVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUE7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLGVBQWU7QUFBQSxFQUNmLFdBQVc7QUFBQSxFQUNYLE1BQU07QUFBQSxFQUNOLGlCQUFpQjtBQUFBLEVBQ2pCLGlCQUFpQjtBQUFBLEVBQ2pCLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLE9BQU87QUFBQSxFQUNQLG1CQUFtQjtBQUFBLEVBQ25CLE9BQU87QUFBQSxFQUNQLGVBQWU7QUFBQSxFQUNmLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLGVBQWU7QUFBQSxFQUNmLGlCQUFpQjtBQUFBLEVBQ2pCLGtCQUFrQjtBQUFBLEVBQ2xCLG9CQUFvQjtBQUN4Qjs7O0FDckxBLElBQU8sYUFBUSxDQUFDOzs7QUNBaEIsSUFBTyxhQUFRLENBQUM7OztBQ0FoQixJQUFPLGFBQVEsQ0FBQzs7O0FDQWhCLElBQU8sYUFBUTtBQUFBO0FBQUEsRUFFWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVix3QkFBd0I7QUFBQSxFQUN4Qiw0QkFBNEI7QUFBQSxFQUM1QixxQkFBcUI7QUFBQTtBQUFBLEVBR3JCLHNCQUFzQjtBQUFBLEVBQ3RCLGNBQWM7QUFBQSxFQUNkLDZCQUE2QjtBQUFBLEVBQzdCLDRCQUE0QjtBQUFBLEVBQzVCLGdCQUFnQjtBQUFBLEVBQ2hCLGtCQUFrQjtBQUFBLEVBQ2xCLHNCQUFzQjtBQUFBLEVBQ3RCLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLHdCQUF3QjtBQUFBLEVBQ3hCLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLHdCQUF3QjtBQUFBLEVBQ3hCLGlCQUNJO0FBQUEsRUFDSixtQkFBbUI7QUFBQSxFQUNuQixnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUE7QUFBQSxFQUdmLGNBQWM7QUFBQSxFQUNkLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQSxFQUNmLHFCQUFxQjtBQUFBLEVBQ3JCLHVCQUF1QjtBQUFBLEVBQ3ZCLHNCQUFzQjtBQUFBO0FBQUEsRUFHdEIsaUJBQWlCO0FBQUEsRUFDakIsWUFBWTtBQUFBLEVBQ1osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQ0k7QUFBQSxFQUNKLFlBQVk7QUFBQSxFQUNaLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSiwwQkFBMEI7QUFBQSxFQUMxQiwrQkFDSTtBQUFBLEVBQ0osNEJBQ0k7QUFBQSxFQUNKLGlDQUNJO0FBQUEsRUFDSiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FDSTtBQUFBLEVBQ0osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQ0k7QUFBQSxFQUNKLDJCQUEyQjtBQUFBLEVBQzNCLDhCQUNJO0FBQUEsRUFDSixlQUFlO0FBQUEsRUFDZiwwQkFBMEI7QUFBQSxFQUMxQixzQkFBc0I7QUFBQSxFQUN0QiwrQkFDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMsd0NBQ0k7QUFBQSxFQUNKLG9DQUFvQztBQUFBLEVBQ3BDLG9DQUFvQztBQUFBLEVBQ3BDLHdDQUF3QztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLGlEQUNJO0FBQUEsRUFDSiw2Q0FDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsOEJBQThCO0FBQUEsRUFDOUIsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQWtDO0FBQUEsRUFDbEMsd0JBQXdCO0FBQUEsRUFDeEIsaUNBQ0k7QUFBQSxFQUNKLGlDQUFpQztBQUFBLEVBQ2pDLDJCQUEyQjtBQUFBLEVBQzNCLG9DQUFvQztBQUFBLEVBQ3BDLE9BQU87QUFBQSxFQUNQLHdCQUF3QjtBQUFBLEVBQ3hCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSixrQkFBa0I7QUFBQSxFQUNsQix1QkFDSTtBQUFBLEVBQ0osZ0JBQWdCO0FBQUEsRUFDaEIsa0NBQ0k7QUFBQSxFQUNKLHVDQUNJO0FBQUEsRUFDSix5QkFBeUI7QUFBQSxFQUN6QixhQUFhO0FBQUEsRUFDYixzQkFBc0I7QUFBQSxFQUN0QixnQkFBZ0I7QUFBQSxFQUNoQixtQ0FDSTtBQUFBLEVBQ0osd0NBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLHNCQUNJO0FBQUEsRUFDSixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQix1QkFBdUI7QUFBQSxFQUN2Qix1QkFBdUI7QUFBQSxFQUN2Qiw0QkFBNEI7QUFBQSxFQUM1QixZQUFZO0FBQUEsRUFDWixpQkFDSTtBQUFBLEVBQ0osd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsbUJBQ0k7QUFBQSxFQUNKLDBCQUEwQjtBQUFBLEVBQzFCLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUNJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxvQkFBb0I7QUFBQTtBQUFBLEVBR3BCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBR1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04saUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsbUJBQW1CO0FBQUEsRUFDbkIsT0FBTztBQUFBLEVBQ1AsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsZUFBZTtBQUFBLEVBQ2YsaUJBQWlCO0FBQUEsRUFDakIsa0JBQWtCO0FBQUEsRUFDbEIsb0JBQW9CO0FBQ3hCOzs7QUN4TEEsSUFBTyxhQUFRO0FBQUE7QUFBQSxFQUVYLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxFQUNiLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLHdCQUF3QjtBQUFBLEVBQ3hCLDRCQUE0QjtBQUFBLEVBQzVCLHFCQUFxQjtBQUFBO0FBQUEsRUFHckIsc0JBQXNCO0FBQUEsRUFDdEIsY0FBYztBQUFBLEVBQ2QsNkJBQTZCO0FBQUEsRUFDN0IsNEJBQTRCO0FBQUEsRUFDNUIsa0JBQWtCO0FBQUEsRUFDbEIsZ0JBQWdCO0FBQUEsRUFDaEIsc0JBQXNCO0FBQUEsRUFDdEIsb0JBQW9CO0FBQUEsRUFDcEIsWUFBWTtBQUFBLEVBQ1osd0JBQXdCO0FBQUEsRUFDeEIsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsd0JBQXdCO0FBQUEsRUFDeEIsaUJBQ0k7QUFBQSxFQUNKLG1CQUFtQjtBQUFBLEVBQ25CLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQTtBQUFBLEVBR2YsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBLEVBQ2YscUJBQXFCO0FBQUEsRUFDckIsdUJBQXVCO0FBQUEsRUFDdkIsc0JBQXNCO0FBQUE7QUFBQSxFQUd0QixpQkFBaUI7QUFBQSxFQUNqQixZQUFZO0FBQUEsRUFDWixtQkFBbUI7QUFBQSxFQUNuQix3QkFDSTtBQUFBLEVBQ0osWUFBWTtBQUFBLEVBQ1osc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQ0k7QUFBQSxFQUNKLDBCQUEwQjtBQUFBLEVBQzFCLCtCQUNJO0FBQUEsRUFDSiw0QkFDSTtBQUFBLEVBQ0osaUNBQ0k7QUFBQSxFQUNKLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUNJO0FBQUEsRUFDSixtQkFBbUI7QUFBQSxFQUNuQix3QkFDSTtBQUFBLEVBQ0osMkJBQTJCO0FBQUEsRUFDM0IsOEJBQ0k7QUFBQSxFQUNKLGVBQWU7QUFBQSxFQUNmLDBCQUEwQjtBQUFBLEVBQzFCLHNCQUFzQjtBQUFBLEVBQ3RCLCtCQUErQjtBQUFBLEVBQy9CLHdDQUF3QztBQUFBLEVBQ3hDLHdDQUF3QztBQUFBLEVBQ3hDLG9DQUFvQztBQUFBLEVBQ3BDLG9DQUFvQztBQUFBLEVBQ3BDLHdDQUF3QztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLGlEQUNJO0FBQUEsRUFDSiw2Q0FDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsOEJBQThCO0FBQUEsRUFDOUIsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQWtDO0FBQUEsRUFDbEMsd0JBQXdCO0FBQUEsRUFDeEIsaUNBQ0k7QUFBQSxFQUNKLGlDQUFpQztBQUFBLEVBQ2pDLDJCQUEyQjtBQUFBLEVBQzNCLG9DQUFvQztBQUFBLEVBQ3BDLE9BQU87QUFBQSxFQUNQLHdCQUF3QjtBQUFBLEVBQ3hCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSixrQkFBa0I7QUFBQSxFQUNsQix1QkFDSTtBQUFBLEVBQ0osZ0JBQWdCO0FBQUEsRUFDaEIsa0NBQ0k7QUFBQSxFQUNKLHVDQUNJO0FBQUEsRUFDSix5QkFBeUI7QUFBQSxFQUN6QixhQUFhO0FBQUEsRUFDYixzQkFBc0I7QUFBQSxFQUN0QixnQkFBZ0I7QUFBQSxFQUNoQixtQ0FBbUM7QUFBQSxFQUNuQyx3Q0FDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsc0JBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLHVCQUF1QjtBQUFBLEVBQ3ZCLHVCQUF1QjtBQUFBLEVBQ3ZCLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUNJO0FBQUEsRUFDSix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxtQkFBbUI7QUFBQSxFQUNuQiwwQkFBMEI7QUFBQSxFQUMxQixrQkFBa0I7QUFBQSxFQUNsQix1QkFDSTtBQUFBLEVBQ0osU0FBUztBQUFBLEVBQ1Qsb0JBQW9CO0FBQUE7QUFBQSxFQUdwQixvQkFBb0I7QUFBQSxFQUNwQixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUE7QUFBQSxFQUdWLGFBQWE7QUFBQSxFQUNiLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLGVBQWU7QUFBQSxFQUNmLFdBQVc7QUFBQSxFQUNYLE1BQU07QUFBQSxFQUNOLGlCQUFpQjtBQUFBLEVBQ2pCLGlCQUFpQjtBQUFBLEVBQ2pCLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLE9BQU87QUFBQSxFQUNQLG1CQUFtQjtBQUFBLEVBQ25CLE9BQU87QUFBQSxFQUNQLGVBQWU7QUFBQSxFQUNmLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLGVBQWU7QUFBQSxFQUNmLGlCQUFpQjtBQUFBLEVBQ2pCLGtCQUFrQjtBQUFBLEVBQ2xCLG9CQUFvQjtBQUN4Qjs7O0FDcExBLElBQU8sYUFBUTtBQUFBO0FBQUEsRUFFWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVix3QkFBd0I7QUFBQSxFQUN4Qiw0QkFBNEI7QUFBQSxFQUM1QixxQkFBcUI7QUFBQTtBQUFBLEVBR3JCLHNCQUFzQjtBQUFBLEVBQ3RCLGNBQWM7QUFBQSxFQUNkLDZCQUE2QjtBQUFBLEVBQzdCLDRCQUE0QjtBQUFBLEVBQzVCLGtCQUFrQjtBQUFBLEVBQ2xCLGdCQUFnQjtBQUFBLEVBQ2hCLHNCQUFzQjtBQUFBLEVBQ3RCLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLHdCQUF3QjtBQUFBLEVBQ3hCLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLHdCQUF3QjtBQUFBLEVBQ3hCLGlCQUFpQjtBQUFBLEVBQ2pCLG1CQUFtQjtBQUFBLEVBQ25CLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQTtBQUFBLEVBR2YsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBLEVBQ2YscUJBQXFCO0FBQUEsRUFDckIsdUJBQXVCO0FBQUEsRUFDdkIsc0JBQXNCO0FBQUE7QUFBQSxFQUd0QixpQkFBaUI7QUFBQSxFQUNqQixZQUFZO0FBQUEsRUFDWixtQkFBbUI7QUFBQSxFQUNuQix3QkFDSTtBQUFBLEVBQ0osWUFBWTtBQUFBLEVBQ1osc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQ0k7QUFBQSxFQUNKLDBCQUEwQjtBQUFBLEVBQzFCLCtCQUErQjtBQUFBLEVBQy9CLDRCQUNJO0FBQUEsRUFDSixpQ0FDSTtBQUFBLEVBQ0osNkJBQTZCO0FBQUEsRUFDN0Isa0NBQ0k7QUFBQSxFQUNKLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUNJO0FBQUEsRUFDSiwyQkFBMkI7QUFBQSxFQUMzQiw4QkFDSTtBQUFBLEVBQ0osZUFBZTtBQUFBLEVBQ2YsMEJBQTBCO0FBQUEsRUFDMUIsc0JBQXNCO0FBQUEsRUFDdEIsK0JBQStCO0FBQUEsRUFDL0Isd0NBQXdDO0FBQUEsRUFDeEMsd0NBQXdDO0FBQUEsRUFDeEMsb0NBQW9DO0FBQUEsRUFDcEMsb0NBQW9DO0FBQUEsRUFDcEMsd0NBQXdDO0FBQUEsRUFDeEMsbUJBQW1CO0FBQUEsRUFDbkIsaURBQ0k7QUFBQSxFQUNKLDZDQUNJO0FBQUEsRUFDSix3Q0FBd0M7QUFBQSxFQUN4QyxxQkFBcUI7QUFBQSxFQUNyQiw4QkFBOEI7QUFBQSxFQUM5Qiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FBa0M7QUFBQSxFQUNsQyx3QkFBd0I7QUFBQSxFQUN4QixpQ0FDSTtBQUFBLEVBQ0osaUNBQWlDO0FBQUEsRUFDakMsMkJBQTJCO0FBQUEsRUFDM0Isb0NBQW9DO0FBQUEsRUFDcEMsT0FBTztBQUFBLEVBQ1Asd0JBQXdCO0FBQUEsRUFDeEIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQ0k7QUFBQSxFQUNKLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUF1QjtBQUFBLEVBQ3ZCLGdCQUFnQjtBQUFBLEVBQ2hCLGtDQUNJO0FBQUEsRUFDSix1Q0FDSTtBQUFBLEVBQ0oseUJBQXlCO0FBQUEsRUFDekIsYUFBYTtBQUFBLEVBQ2Isc0JBQXNCO0FBQUEsRUFDdEIsZ0JBQWdCO0FBQUEsRUFDaEIsbUNBQW1DO0FBQUEsRUFDbkMsd0NBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLHNCQUNJO0FBQUEsRUFDSixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQix1QkFBdUI7QUFBQSxFQUN2Qix1QkFBdUI7QUFBQSxFQUN2Qiw0QkFBNEI7QUFBQSxFQUM1QixZQUFZO0FBQUEsRUFDWixpQkFDSTtBQUFBLEVBQ0osd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsbUJBQW1CO0FBQUEsRUFDbkIsMEJBQTBCO0FBQUEsRUFDMUIsa0JBQWtCO0FBQUEsRUFDbEIsdUJBQ0k7QUFBQSxFQUNKLFNBQVM7QUFBQSxFQUNULG9CQUFvQjtBQUFBO0FBQUEsRUFHcEIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBO0FBQUEsRUFHVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxtQkFBbUI7QUFBQSxFQUNuQixPQUFPO0FBQUEsRUFDUCxlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQixlQUFlO0FBQUEsRUFDZixpQkFBaUI7QUFBQSxFQUNqQixrQkFBa0I7QUFBQSxFQUNsQixvQkFBb0I7QUFDeEI7OztBQ2pMQSxJQUFPLGFBQVEsQ0FBQzs7O0FDQWhCLElBQU8sYUFBUSxDQUFDOzs7QUNBaEIsSUFBTyxhQUFRLENBQUM7OztBQ0FoQixJQUFPLGFBQVE7QUFBQTtBQUFBLEVBRVgsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gscUJBQXFCO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IscUJBQXFCO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1Ysd0JBQXdCO0FBQUEsRUFDeEIsNEJBQTRCO0FBQUEsRUFDNUIscUJBQXFCO0FBQUE7QUFBQSxFQUdyQixzQkFBc0I7QUFBQSxFQUN0QixjQUFjO0FBQUEsRUFDZCw2QkFBNkI7QUFBQSxFQUM3Qiw0QkFBNEI7QUFBQSxFQUM1QixnQkFBZ0I7QUFBQSxFQUNoQixrQkFBa0I7QUFBQSxFQUNsQixzQkFBc0I7QUFBQSxFQUN0QixvQkFBb0I7QUFBQSxFQUNwQixZQUFZO0FBQUEsRUFDWix3QkFBd0I7QUFBQSxFQUN4QixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQix3QkFBd0I7QUFBQSxFQUN4QixpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQixnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUE7QUFBQSxFQUdmLGNBQWM7QUFBQSxFQUNkLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQSxFQUNmLHFCQUFxQjtBQUFBLEVBQ3JCLHVCQUF1QjtBQUFBLEVBQ3ZCLHNCQUFzQjtBQUFBO0FBQUEsRUFHdEIsaUJBQWlCO0FBQUEsRUFDakIsWUFBWTtBQUFBLEVBQ1osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQ0k7QUFBQSxFQUNKLFlBQVk7QUFBQSxFQUNaLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSiwwQkFBMEI7QUFBQSxFQUMxQiwrQkFBK0I7QUFBQSxFQUMvQiw0QkFDSTtBQUFBLEVBQ0osaUNBQ0k7QUFBQSxFQUNKLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUNJO0FBQUEsRUFDSixtQkFBbUI7QUFBQSxFQUNuQix3QkFBd0I7QUFBQSxFQUN4QiwyQkFBMkI7QUFBQSxFQUMzQiw4QkFDSTtBQUFBLEVBQ0osZUFBZTtBQUFBLEVBQ2YsMEJBQTBCO0FBQUEsRUFDMUIsc0JBQXNCO0FBQUEsRUFDdEIsK0JBQStCO0FBQUEsRUFDL0Isd0NBQ0k7QUFBQSxFQUNKLHdDQUNJO0FBQUEsRUFDSixvQ0FBb0M7QUFBQSxFQUNwQyxvQ0FDSTtBQUFBLEVBQ0osd0NBQXdDO0FBQUEsRUFDeEMsbUJBQW1CO0FBQUEsRUFDbkIsaURBQ0k7QUFBQSxFQUNKLDZDQUNJO0FBQUEsRUFDSix3Q0FBd0M7QUFBQSxFQUN4QyxxQkFBcUI7QUFBQSxFQUNyQiw4QkFBOEI7QUFBQSxFQUM5Qiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FBa0M7QUFBQSxFQUNsQyx3QkFBd0I7QUFBQSxFQUN4QixpQ0FDSTtBQUFBLEVBQ0osaUNBQWlDO0FBQUEsRUFDakMsMkJBQTJCO0FBQUEsRUFDM0Isb0NBQ0k7QUFBQSxFQUNKLE9BQU87QUFBQSxFQUNQLHdCQUF3QjtBQUFBLEVBQ3hCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSixrQkFBa0I7QUFBQSxFQUNsQix1QkFDSTtBQUFBLEVBQ0osZ0JBQWdCO0FBQUEsRUFDaEIsa0NBQ0k7QUFBQSxFQUNKLHVDQUNJO0FBQUEsRUFDSix5QkFBeUI7QUFBQSxFQUN6QixhQUFhO0FBQUEsRUFDYixzQkFBc0I7QUFBQSxFQUN0QixnQkFBZ0I7QUFBQSxFQUNoQixtQ0FBbUM7QUFBQSxFQUNuQyx3Q0FDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsc0JBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLHVCQUF1QjtBQUFBLEVBQ3ZCLHVCQUF1QjtBQUFBLEVBQ3ZCLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUNJO0FBQUEsRUFDSix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxtQkFBbUI7QUFBQSxFQUNuQiwwQkFBMEI7QUFBQSxFQUMxQixrQkFBa0I7QUFBQSxFQUNsQix1QkFDSTtBQUFBLEVBQ0osU0FBUztBQUFBLEVBQ1Qsb0JBQW9CO0FBQUE7QUFBQTtBQUFBLEVBR3BCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBR1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04saUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsbUJBQW1CO0FBQUEsRUFDbkIsT0FBTztBQUFBLEVBQ1AsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsZUFBZTtBQUFBLEVBQ2YsaUJBQWlCO0FBQUEsRUFDakIsa0JBQWtCO0FBQUEsRUFDbEIsb0JBQW9CO0FBQ3hCOzs7QUNyTEEsSUFBTyxhQUFRLENBQUM7OztBQ0NoQixJQUFPLGdCQUFRO0FBQUE7QUFBQSxFQUVYLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxFQUNiLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLHdCQUF3QjtBQUFBLEVBQ3hCLDRCQUE0QjtBQUFBLEVBQzVCLHFCQUFxQjtBQUFBO0FBQUEsRUFHckIsc0JBQXNCO0FBQUEsRUFDdEIsY0FBYztBQUFBLEVBQ2QsNkJBQTZCO0FBQUEsRUFDN0IsNEJBQTRCO0FBQUEsRUFDNUIsa0JBQWtCO0FBQUEsRUFDbEIsZ0JBQWdCO0FBQUEsRUFDaEIsc0JBQXNCO0FBQUEsRUFDdEIsb0JBQW9CO0FBQUEsRUFDcEIsWUFBWTtBQUFBLEVBQ1osd0JBQXdCO0FBQUEsRUFDeEIsWUFDSTtBQUFBLEVBQ0osaUJBQWlCO0FBQUEsRUFDakIsd0JBQXdCO0FBQUEsRUFDeEIsaUJBQWlCO0FBQUEsRUFDakIsbUJBQW1CO0FBQUEsRUFDbkIsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBO0FBQUEsRUFHZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUEsRUFDZixxQkFBcUI7QUFBQSxFQUNyQix1QkFBdUI7QUFBQSxFQUN2QixzQkFBc0I7QUFBQTtBQUFBLEVBR3RCLGlCQUFpQjtBQUFBLEVBQ2pCLFlBQVk7QUFBQSxFQUNaLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUNJO0FBQUEsRUFDSixZQUFZO0FBQUEsRUFDWixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixzQkFBc0I7QUFBQSxFQUN0QixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0I7QUFBQSxFQUNoQixxQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsK0JBQ0k7QUFBQSxFQUNKLDRCQUNJO0FBQUEsRUFDSixpQ0FDSTtBQUFBLEVBQ0osNkJBQTZCO0FBQUEsRUFDN0Isa0NBQ0k7QUFBQSxFQUNKLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUFBLEVBQ3hCLDJCQUEyQjtBQUFBLEVBQzNCLDhCQUNJO0FBQUEsRUFDSixlQUFlO0FBQUEsRUFDZiwwQkFBMEI7QUFBQSxFQUMxQixzQkFBc0I7QUFBQSxFQUN0QiwrQkFBK0I7QUFBQSxFQUMvQix3Q0FBd0M7QUFBQSxFQUN4Qyx3Q0FBd0M7QUFBQSxFQUN4QyxvQ0FBb0M7QUFBQSxFQUNwQyxvQ0FBb0M7QUFBQSxFQUNwQyx3Q0FBd0M7QUFBQSxFQUN4QyxtQkFBbUI7QUFBQSxFQUNuQixpREFDSTtBQUFBLEVBQ0osNkNBQ0k7QUFBQSxFQUNKLHdDQUF3QztBQUFBLEVBQ3hDLHFCQUFxQjtBQUFBLEVBQ3JCLDhCQUE4QjtBQUFBLEVBQzlCLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUFrQztBQUFBLEVBQ2xDLHdCQUF3QjtBQUFBLEVBQ3hCLGlDQUNJO0FBQUEsRUFDSixpQ0FBaUM7QUFBQSxFQUNqQywyQkFBMkI7QUFBQSxFQUMzQixvQ0FBb0M7QUFBQSxFQUNwQyxPQUFPO0FBQUEsRUFDUCx3QkFBd0I7QUFBQSxFQUN4QixnQkFBZ0I7QUFBQSxFQUNoQixxQkFDSTtBQUFBLEVBQ0osa0JBQWtCO0FBQUEsRUFDbEIsdUJBQ0k7QUFBQSxFQUNKLGdCQUFnQjtBQUFBLEVBQ2hCLGtDQUNJO0FBQUEsRUFDSix1Q0FDSTtBQUFBLEVBQ0oseUJBQXlCO0FBQUEsRUFDekIsYUFBYTtBQUFBLEVBQ2Isc0JBQXNCO0FBQUEsRUFDdEIsZ0JBQWdCO0FBQUEsRUFDaEIsbUNBQ0k7QUFBQSxFQUNKLHdDQUNJO0FBQUEsRUFDSixXQUFXO0FBQUEsRUFDWCxzQkFDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQ0k7QUFBQSxFQUNKLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUNJO0FBQUEsRUFDSix3QkFBd0I7QUFBQSxFQUN4QixjQUFjO0FBQUEsRUFDZCxtQkFDSTtBQUFBLEVBQ0osMEJBQTBCO0FBQUEsRUFDMUIsa0JBQWtCO0FBQUEsRUFDbEIsdUJBQ0k7QUFBQSxFQUNKLFNBQVM7QUFBQSxFQUNULG9CQUFvQjtBQUFBO0FBQUEsRUFHcEIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBO0FBQUEsRUFHVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxtQkFBbUI7QUFBQSxFQUNuQixPQUFPO0FBQUEsRUFDUCxlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQixlQUFlO0FBQUEsRUFDZixpQkFBaUI7QUFBQSxFQUNqQixrQkFBa0I7QUFBQSxFQUNsQixvQkFBb0I7QUFDeEI7OztBQ3ZMQSxJQUFPLGFBQVEsQ0FBQzs7O0FDU2hCLElBQU8sYUFBUTtBQUFBO0FBQUEsRUFFWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixxQkFBcUI7QUFBQSxFQUNyQixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVix3QkFBd0I7QUFBQSxFQUN4Qiw0QkFBNEI7QUFBQSxFQUM1QixxQkFBcUI7QUFBQTtBQUFBLEVBR3JCLHNCQUFzQjtBQUFBLEVBQ3RCLGNBQWM7QUFBQSxFQUNkLDZCQUE2QjtBQUFBLEVBQzdCLDRCQUE0QjtBQUFBLEVBQzVCLGdCQUFnQjtBQUFBLEVBQ2hCLGtCQUFrQjtBQUFBLEVBQ2xCLHNCQUFzQjtBQUFBLEVBQ3RCLG9CQUFvQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLHdCQUF3QjtBQUFBLEVBQ3hCLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLHdCQUF3QjtBQUFBLEVBQ3hCLGlCQUFpQjtBQUFBLEVBQ2pCLG1CQUFtQjtBQUFBLEVBQ25CLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQTtBQUFBLEVBR2YsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBLEVBQ2YscUJBQXFCO0FBQUEsRUFDckIsdUJBQXVCO0FBQUEsRUFDdkIsc0JBQXNCO0FBQUE7QUFBQSxFQUd0QixpQkFBaUI7QUFBQSxFQUNqQixZQUFZO0FBQUEsRUFDWixtQkFBbUI7QUFBQSxFQUNuQix3QkFDSTtBQUFBLEVBQ0osWUFBWTtBQUFBLEVBQ1osc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQ0k7QUFBQSxFQUNKLDBCQUEwQjtBQUFBLEVBQzFCLCtCQUErQjtBQUFBLEVBQy9CLDRCQUE0QjtBQUFBLEVBQzVCLGlDQUNJO0FBQUEsRUFDSiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FDSTtBQUFBLEVBQ0osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQXdCO0FBQUEsRUFDeEIsMkJBQTJCO0FBQUEsRUFDM0IsOEJBQ0k7QUFBQSxFQUNKLGVBQWU7QUFBQSxFQUNmLDBCQUEwQjtBQUFBLEVBQzFCLHNCQUFzQjtBQUFBLEVBQ3RCLCtCQUErQjtBQUFBLEVBQy9CLHdDQUNJO0FBQUEsRUFDSix3Q0FDSTtBQUFBLEVBQ0osb0NBQW9DO0FBQUEsRUFDcEMsb0NBQW9DO0FBQUEsRUFDcEMsd0NBQXdDO0FBQUEsRUFDeEMsbUJBQW1CO0FBQUEsRUFDbkIsaURBQ0k7QUFBQSxFQUNKLDZDQUNJO0FBQUEsRUFDSix3Q0FBd0M7QUFBQSxFQUN4QyxxQkFBcUI7QUFBQSxFQUNyQiw4QkFBOEI7QUFBQSxFQUM5Qiw2QkFBNkI7QUFBQSxFQUM3QixrQ0FDSTtBQUFBLEVBQ0osd0JBQXdCO0FBQUEsRUFDeEIsaUNBQ0k7QUFBQSxFQUNKLGlDQUFpQztBQUFBLEVBQ2pDLDJCQUEyQjtBQUFBLEVBQzNCLG9DQUFvQztBQUFBLEVBQ3BDLE9BQU87QUFBQSxFQUNQLHdCQUF3QjtBQUFBLEVBQ3hCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUNJO0FBQUEsRUFDSixrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixnQkFBZ0I7QUFBQSxFQUNoQixrQ0FDSTtBQUFBLEVBQ0osdUNBQ0k7QUFBQSxFQUNKLHlCQUF5QjtBQUFBLEVBQ3pCLGFBQWE7QUFBQSxFQUNiLHNCQUFzQjtBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLG1DQUNJO0FBQUEsRUFDSix3Q0FDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsc0JBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLHVCQUF1QjtBQUFBLEVBQ3ZCLHVCQUNJO0FBQUEsRUFDSiw0QkFBNEI7QUFBQSxFQUM1QixZQUFZO0FBQUEsRUFDWixpQkFDSTtBQUFBLEVBQ0osd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsbUJBQ0k7QUFBQSxFQUNKLDBCQUEwQjtBQUFBLEVBQzFCLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUNJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxvQkFBb0I7QUFBQTtBQUFBLEVBR3BCLG9CQUFvQjtBQUFBLEVBQ3BCLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBR1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04saUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsbUJBQW1CO0FBQUEsRUFDbkIsT0FBTztBQUFBLEVBQ1AsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsZUFBZTtBQUFBLEVBQ2YsaUJBQWlCO0FBQUEsRUFDakIsa0JBQWtCO0FBQUEsRUFDbEIsb0JBQW9CO0FBQ3hCOzs7QUM5TEEsSUFBTyxhQUFRLENBQUM7OztBQ0FoQixJQUFPLGFBQVEsQ0FBQzs7O0FDQWhCLElBQU8sYUFBUSxDQUFDOzs7QUNBaEIsSUFBTyxhQUFRLENBQUM7OztBQ0FoQixJQUFPLGFBQVEsQ0FBQzs7O0FDQWhCLElBQU8sYUFBUSxDQUFDOzs7QUNBaEIsSUFBTyxhQUFRLENBQUM7OztBQ0FoQixJQUFPLGdCQUFRO0FBQUE7QUFBQSxFQUVYLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxFQUNiLHFCQUFxQjtBQUFBLEVBQ3JCLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLHdCQUF3QjtBQUFBLEVBQ3hCLDRCQUE0QjtBQUFBLEVBQzVCLHFCQUFxQjtBQUFBO0FBQUEsRUFHckIsc0JBQXNCO0FBQUEsRUFDdEIsY0FBYztBQUFBLEVBQ2QsNkJBQTZCO0FBQUEsRUFDN0IsNEJBQTRCO0FBQUEsRUFDNUIsa0JBQWtCO0FBQUEsRUFDbEIsZ0JBQWdCO0FBQUEsRUFDaEIsc0JBQXNCO0FBQUEsRUFDdEIsb0JBQW9CO0FBQUEsRUFDcEIsWUFBWTtBQUFBLEVBQ1osd0JBQXdCO0FBQUEsRUFDeEIsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsd0JBQXdCO0FBQUEsRUFDeEIsaUJBQWlCO0FBQUEsRUFDakIsbUJBQW1CO0FBQUEsRUFDbkIsZ0JBQWdCO0FBQUEsRUFDaEIsZUFBZTtBQUFBO0FBQUEsRUFHZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUEsRUFDZixxQkFBcUI7QUFBQSxFQUNyQix1QkFBdUI7QUFBQSxFQUN2QixzQkFBc0I7QUFBQTtBQUFBLEVBR3RCLGlCQUFpQjtBQUFBLEVBQ2pCLFlBQVk7QUFBQSxFQUNaLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUFBLEVBQ3hCLFlBQVk7QUFBQSxFQUNaLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLEVBQ3RCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUFxQjtBQUFBLEVBQ3JCLDBCQUEwQjtBQUFBLEVBQzFCLCtCQUErQjtBQUFBLEVBQy9CLDRCQUE0QjtBQUFBLEVBQzVCLGlDQUFpQztBQUFBLEVBQ2pDLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUFrQztBQUFBLEVBQ2xDLG1CQUFtQjtBQUFBLEVBQ25CLHdCQUF3QjtBQUFBLEVBQ3hCLDJCQUEyQjtBQUFBLEVBQzNCLDhCQUE4QjtBQUFBLEVBQzlCLGVBQWU7QUFBQSxFQUNmLDBCQUEwQjtBQUFBLEVBQzFCLHNCQUFzQjtBQUFBLEVBQ3RCLCtCQUErQjtBQUFBLEVBQy9CLHdDQUF3QztBQUFBLEVBQ3hDLHdDQUF3QztBQUFBLEVBQ3hDLG9DQUFvQztBQUFBLEVBQ3BDLG9DQUFvQztBQUFBLEVBQ3BDLHdDQUF3QztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLGlEQUFpRDtBQUFBLEVBQ2pELDZDQUE2QztBQUFBLEVBQzdDLHdDQUF3QztBQUFBLEVBQ3hDLHFCQUFxQjtBQUFBLEVBQ3JCLDhCQUE4QjtBQUFBLEVBQzlCLDZCQUE2QjtBQUFBLEVBQzdCLGtDQUFrQztBQUFBLEVBQ2xDLHdCQUF3QjtBQUFBLEVBQ3hCLGlDQUFpQztBQUFBLEVBQ2pDLGlDQUFpQztBQUFBLEVBQ2pDLDJCQUEyQjtBQUFBLEVBQzNCLG9DQUFvQztBQUFBLEVBQ3BDLE9BQU87QUFBQSxFQUNQLHdCQUF3QjtBQUFBLEVBQ3hCLGdCQUFnQjtBQUFBLEVBQ2hCLHFCQUFxQjtBQUFBLEVBQ3JCLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUF1QjtBQUFBLEVBQ3ZCLGdCQUFnQjtBQUFBLEVBQ2hCLGtDQUFrQztBQUFBLEVBQ2xDLHVDQUNJO0FBQUEsRUFDSix5QkFBeUI7QUFBQSxFQUN6QixhQUFhO0FBQUEsRUFDYixzQkFBc0I7QUFBQSxFQUN0QixnQkFBZ0I7QUFBQSxFQUNoQixtQ0FBbUM7QUFBQSxFQUNuQyx3Q0FDSTtBQUFBLEVBQ0osV0FBVztBQUFBLEVBQ1gsc0JBQXNCO0FBQUEsRUFDdEIsV0FBVztBQUFBLEVBQ1gsZ0JBQWdCO0FBQUEsRUFDaEIsdUJBQXVCO0FBQUEsRUFDdkIsdUJBQXVCO0FBQUEsRUFDdkIsNEJBQTRCO0FBQUEsRUFDNUIsWUFBWTtBQUFBLEVBQ1osaUJBQWlCO0FBQUEsRUFDakIsd0JBQXdCO0FBQUEsRUFDeEIsY0FBYztBQUFBLEVBQ2QsbUJBQW1CO0FBQUEsRUFDbkIsMEJBQTBCO0FBQUEsRUFDMUIsa0JBQWtCO0FBQUEsRUFDbEIsdUJBQXVCO0FBQUEsRUFDdkIsU0FBUztBQUFBLEVBQ1Qsb0JBQW9CO0FBQUE7QUFBQSxFQUdwQixvQkFBb0I7QUFBQSxFQUNwQixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUE7QUFBQSxFQUdWLGFBQWE7QUFBQSxFQUNiLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLGVBQWU7QUFBQSxFQUNmLFdBQVc7QUFBQSxFQUNYLE1BQU07QUFBQSxFQUNOLGlCQUFpQjtBQUFBLEVBQ2pCLGlCQUFpQjtBQUFBLEVBQ2pCLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLE9BQU87QUFBQSxFQUNQLG1CQUFtQjtBQUFBLEVBQ25CLE9BQU87QUFBQSxFQUNQLGVBQWU7QUFBQSxFQUNmLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLGVBQWU7QUFBQSxFQUNmLGlCQUFpQjtBQUFBLEVBQ2pCLGtCQUFrQjtBQUFBLEVBQ2xCLG9CQUFvQjtBQUN4Qjs7O0FDbEtBLElBQU8sZ0JBQVE7QUFBQTtBQUFBLEVBRVgsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gscUJBQXFCO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IscUJBQXFCO0FBQUEsRUFDckIsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1Ysd0JBQXdCO0FBQUEsRUFDeEIsNEJBQTRCO0FBQUEsRUFDNUIscUJBQXFCO0FBQUE7QUFBQSxFQUdyQixzQkFBc0I7QUFBQSxFQUN0QixjQUFjO0FBQUEsRUFDZCw2QkFBNkI7QUFBQSxFQUM3Qiw0QkFBNEI7QUFBQSxFQUM1QixzQkFBc0I7QUFBQSxFQUN0QixnQkFBZ0I7QUFBQSxFQUNoQixrQkFBa0I7QUFBQSxFQUNsQixvQkFBb0I7QUFBQSxFQUNwQixZQUFZO0FBQUEsRUFDWix3QkFBd0I7QUFBQSxFQUN4QixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQix3QkFBd0I7QUFBQSxFQUN4QixpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQixnQkFBZ0I7QUFBQSxFQUNoQixlQUFlO0FBQUE7QUFBQSxFQUdmLGNBQWM7QUFBQSxFQUNkLGdCQUFnQjtBQUFBLEVBQ2hCLGVBQWU7QUFBQSxFQUNmLHFCQUFxQjtBQUFBLEVBQ3JCLHVCQUF1QjtBQUFBLEVBQ3ZCLHNCQUFzQjtBQUFBO0FBQUEsRUFHdEIsaUJBQWlCO0FBQUEsRUFDakIsWUFBWTtBQUFBLEVBQ1osbUJBQW1CO0FBQUEsRUFDbkIsd0JBQXdCO0FBQUEsRUFDeEIsWUFBWTtBQUFBLEVBQ1osc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIsc0JBQXNCO0FBQUEsRUFDdEIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQXFCO0FBQUEsRUFDckIsMEJBQTBCO0FBQUEsRUFDMUIsK0JBQStCO0FBQUEsRUFDL0IsNEJBQTRCO0FBQUEsRUFDNUIsaUNBQWlDO0FBQUEsRUFDakMsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQWtDO0FBQUEsRUFDbEMsbUJBQW1CO0FBQUEsRUFDbkIsd0JBQXdCO0FBQUEsRUFDeEIsMkJBQTJCO0FBQUEsRUFDM0IsOEJBQThCO0FBQUEsRUFDOUIsZUFBZTtBQUFBLEVBQ2YsMEJBQTBCO0FBQUEsRUFDMUIsc0JBQXNCO0FBQUEsRUFDdEIsK0JBQStCO0FBQUEsRUFDL0Isd0NBQXdDO0FBQUEsRUFDeEMsd0NBQXdDO0FBQUEsRUFDeEMsb0NBQW9DO0FBQUEsRUFDcEMsb0NBQW9DO0FBQUEsRUFDcEMsd0NBQXdDO0FBQUEsRUFDeEMsbUJBQW1CO0FBQUEsRUFDbkIsaURBQWlEO0FBQUEsRUFDakQsNkNBQTZDO0FBQUEsRUFDN0Msd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsOEJBQThCO0FBQUEsRUFDOUIsNkJBQTZCO0FBQUEsRUFDN0Isa0NBQWtDO0FBQUEsRUFDbEMsd0JBQXdCO0FBQUEsRUFDeEIsaUNBQWlDO0FBQUEsRUFDakMsaUNBQWlDO0FBQUEsRUFDakMsMkJBQTJCO0FBQUEsRUFDM0Isb0NBQW9DO0FBQUEsRUFDcEMsT0FBTztBQUFBLEVBQ1Asd0JBQXdCO0FBQUEsRUFDeEIsZ0JBQWdCO0FBQUEsRUFDaEIscUJBQXFCO0FBQUEsRUFDckIsa0JBQWtCO0FBQUEsRUFDbEIsdUJBQXVCO0FBQUEsRUFDdkIsZ0JBQWdCO0FBQUEsRUFDaEIsa0NBQWtDO0FBQUEsRUFDbEMsdUNBQXVDO0FBQUEsRUFDdkMseUJBQXlCO0FBQUEsRUFDekIsYUFBYTtBQUFBLEVBQ2Isc0JBQXNCO0FBQUEsRUFDdEIsZ0JBQWdCO0FBQUEsRUFDaEIsbUNBQW1DO0FBQUEsRUFDbkMsd0NBQ0k7QUFBQSxFQUNKLFdBQVc7QUFBQSxFQUNYLHNCQUFzQjtBQUFBLEVBQ3RCLFdBQVc7QUFBQSxFQUNYLGdCQUFnQjtBQUFBLEVBQ2hCLHVCQUF1QjtBQUFBLEVBQ3ZCLHVCQUF1QjtBQUFBLEVBQ3ZCLDRCQUE0QjtBQUFBLEVBQzVCLFlBQVk7QUFBQSxFQUNaLGlCQUFpQjtBQUFBLEVBQ2pCLHdCQUF3QjtBQUFBLEVBQ3hCLGNBQWM7QUFBQSxFQUNkLG1CQUFtQjtBQUFBLEVBQ25CLDBCQUEwQjtBQUFBLEVBQzFCLGtCQUFrQjtBQUFBLEVBQ2xCLHVCQUF1QjtBQUFBLEVBQ3ZCLFNBQVM7QUFBQSxFQUNULG9CQUFvQjtBQUFBO0FBQUEsRUFHcEIsb0JBQW9CO0FBQUEsRUFDcEIsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBO0FBQUEsRUFHVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixXQUFXO0FBQUEsRUFDWCxnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxtQkFBbUI7QUFBQSxFQUNuQixPQUFPO0FBQUEsRUFDUCxlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixpQkFBaUI7QUFBQSxFQUNqQixlQUFlO0FBQUEsRUFDZixpQkFBaUI7QUFBQSxFQUNqQixrQkFBa0I7QUFBQSxFQUNsQixvQkFBb0I7QUFDeEI7OztBaEMvSE8sSUFBTSxZQUFpRDtBQUFBLEVBQzFEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLElBQUk7QUFBQSxFQUNKO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFNBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLElBQUk7QUFBQSxFQUNKO0FBQUEsRUFDQTtBQUFBLEVBQ0EsU0FBUztBQUFBLEVBQ1Q7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUNiO0FBRUEsSUFBTSxTQUFTLFVBQVUsdUJBQU8sT0FBTyxDQUFDO0FBR3hDLFNBQVMsWUFBWSxLQUFhLFFBQXlDO0FBQ3ZFLFFBQU1DLFNBQWtCLE9BQU8sS0FBSyxNQUFNO0FBQzFDLFFBQU0sT0FBa0IsT0FBTyxPQUFPLE1BQU07QUFDNUMsU0FBTyxJQUFJLFNBQVMsR0FBR0EsUUFBTyxZQUFZLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSTtBQUMvRDtBQUVPLFNBQVMsRUFBRSxLQUFzQixRQUEwQztBQUM5RSxNQUFJLENBQUMsUUFBUTtBQUNULFlBQVEsTUFBTSxxQkFBcUIsdUJBQU8sT0FBTyxDQUFDLGFBQWE7QUFBQSxFQUNuRTtBQUVBLFFBQU0sU0FBVSxVQUFVLE9BQU8sR0FBRyxLQUFNLFdBQUcsR0FBRztBQUVoRCxNQUFJLFFBQVE7QUFDUixXQUFPLFlBQVksUUFBUSxNQUFNO0FBQUEsRUFDckM7QUFFQSxTQUFPO0FBQ1g7OztBRDdDTyxJQUFNLG1CQUErQjtBQUFBO0FBQUEsRUFFeEMsbUJBQW1CLEVBQUUsTUFBTTtBQUFBLEVBQzNCLG1CQUFtQixFQUFFLE1BQU07QUFBQSxFQUMzQixtQkFBbUIsRUFBRSxNQUFNO0FBQUEsRUFDM0IsZUFBZSxDQUFDLGFBQWE7QUFBQSxFQUM3Qix1QkFBdUI7QUFBQSxFQUN2Qix1QkFBdUI7QUFBQSxFQUN2QixrQkFBa0I7QUFBQSxFQUNsQixvQkFBb0I7QUFBQSxFQUNwQiwyQkFBMkIsMEJBQVMsV0FBVyxNQUFNO0FBQUEsRUFDckQsMEJBQTBCLDBCQUFTLFdBQVcsTUFBTTtBQUFBLEVBQ3BELG9CQUFvQjtBQUFBLEVBQ3BCLG9CQUFvQjtBQUFBLEVBQ3BCLG9CQUFvQjtBQUFBLEVBRXBCLDJCQUEyQjtBQUFBLEVBQzNCLHlCQUF5QjtBQUFBLEVBQ3pCLDhCQUE4QjtBQUFBLEVBQzlCLHlCQUF5QjtBQUFBLEVBQ3pCLGlDQUFpQztBQUFBLEVBQ2pDLHdCQUF3QjtBQUFBLEVBQ3hCLGdDQUFnQztBQUFBLEVBQ2hDLGNBQWM7QUFBQTtBQUFBLEVBRWQsK0JBQStCO0FBQUEsRUFDL0IsY0FBYyxDQUFDLFNBQVM7QUFBQSxFQUN4QixxQkFBcUIsQ0FBQztBQUFBLEVBQ3RCLGdCQUFnQjtBQUFBLEVBQ2hCLGNBQWM7QUFBQSxFQUNkLDhCQUE4QjtBQUFBLEVBQzlCLDBCQUEwQjtBQUFBO0FBQUEsRUFFMUIsa0NBQWtDO0FBQUE7QUFBQSxFQUVsQyxVQUFVO0FBQUEsRUFDVixzQkFBc0I7QUFBQSxFQUN0QixXQUFXO0FBQUEsRUFDWCxpQkFBaUI7QUFBQSxFQUNqQixlQUFlO0FBQUE7QUFBQSxFQUVmLG1CQUFtQjtBQUN2QjtBQUVPLFNBQVMsZ0JBQWdCLFVBQXNCO0FBQ2xELE1BQ0ksU0FBUyxzQkFBc0IsUUFDL0IsU0FBUyxzQkFBc0IsUUFDL0IsU0FBUyxzQkFBc0IsTUFDakM7QUFDRSxZQUFRLElBQUksdUNBQXVDLFNBQVMsa0JBQWtCLEVBQUU7QUFDaEYsYUFBUyxxQkFBcUIsU0FBUyxxQkFDakMsbUJBQ0E7QUFDTixhQUFTLHFCQUFxQjtBQUc5QixhQUFTLHFCQUFxQjtBQUFBLEVBQ2xDO0FBQ0o7QUFFTyxJQUFNLGVBQU4sTUFBTSxjQUFhO0FBQUEsRUFDdEIsT0FBTyxlQUFlLFVBQXNCLEtBQXNCO0FBQzlELFdBQU8sY0FBYSxZQUFZLFNBQVMsZUFBZSxHQUFHO0FBQUEsRUFDL0Q7QUFBQSxFQUVBLE9BQWUsWUFBWSxTQUFtQixLQUFzQjtBQUNoRSxlQUFXLGVBQWUsU0FBUztBQUMvQixVQUFJLFFBQVEsZUFBZSxJQUFJLFdBQVcsY0FBYyxHQUFHLEdBQUc7QUFDMUQsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDSjtBQUdBLElBQUkscUJBQXFCO0FBQ3pCLFNBQVMsb0JBQW9CQyxXQUE0QjtBQUNyRCxlQUFhLGtCQUFrQjtBQUMvQix1QkFBcUIsT0FBTyxXQUFXQSxXQUFVLEdBQUc7QUFDeEQ7QUFFTyxJQUFNLGVBQU4sY0FBMkIsa0NBQWlCO0FBQUEsRUFHL0MsWUFBWSxLQUFVLFFBQWtCO0FBQ3BDLFVBQU0sS0FBSyxNQUFNO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUEsRUFFQSxVQUFnQjtBQUNaLFVBQU0sRUFBRSxZQUFZLElBQUk7QUFFeEIsZ0JBQVksTUFBTTtBQUVsQixVQUFNLFNBQVMsWUFBWSxTQUFTLE1BQU0sRUFBRSxNQUFNLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7QUFDN0UsV0FBTyxTQUFTLGFBQWE7QUFFN0IsZ0JBQVksVUFBVSxFQUFFLFlBQVksRUFBRSxjQUFjO0FBQUEsTUFDaEQsVUFBVTtBQUFBLElBQ2QsQ0FBQztBQUVELFFBQUkseUJBQVEsV0FBVyxFQUNsQixRQUFRLEVBQUUsbUJBQW1CLENBQUMsRUFDOUIsUUFBUSxFQUFFLHdCQUF3QixDQUFDLEVBQ25DO0FBQUEsTUFBWSxDQUFDLFNBQ1YsS0FDSyxTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsb0JBQW9CLEtBQUssSUFBSSxDQUFDLEVBQ2pFLFNBQVMsQ0FBQyxVQUFVO0FBQ2pCLDRCQUFvQixZQUFZO0FBQzVCLGVBQUssT0FBTyxLQUFLLFNBQVMsc0JBQXNCLE1BQzNDLE1BQU0sS0FBSyxFQUNYLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDcEIsZ0JBQU0sS0FBSyxPQUFPLGVBQWU7QUFBQSxRQUNyQyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDVDtBQUVKLGdCQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7QUFFekQsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUMzQixRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFDaEM7QUFBQSxNQUFZLENBQUMsU0FDVixLQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxjQUFjLEtBQUssR0FBRyxDQUFDLEVBQzFELFNBQVMsQ0FBQyxVQUFVO0FBQ2pCLDRCQUFvQixZQUFZO0FBQzVCLGVBQUssT0FBTyxLQUFLLFNBQVMsZ0JBQWdCLE1BQU0sTUFBTSxLQUFLO0FBQzNELGdCQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsUUFDckMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ1Q7QUFFSixRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLDBCQUEwQixDQUFDLEVBQ3JDLFFBQVEsRUFBRSwrQkFBK0IsQ0FBQyxFQUMxQztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLHFCQUFxQixFQUN4RCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLHdCQUF3QjtBQUNsRCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1Q7QUFFSixRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLDRCQUE0QixDQUFDLEVBQ3ZDLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxFQUM1QztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLHFCQUFxQixFQUN4RCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLHdCQUF3QjtBQUNsRCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1Q7QUFFSixRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLDZCQUE2QixDQUFDLEVBQ3hDLFFBQVEsRUFBRSxrQ0FBa0MsQ0FBQyxFQUM3QztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLGdCQUFnQixFQUNuRCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLG1CQUFtQjtBQUM3QyxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1Q7QUFFSixRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLG1CQUFtQixDQUFDLEVBQzlCLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQyxFQUNuQztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLGtCQUFrQixFQUNyRCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLHFCQUFxQjtBQUMvQyxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1Q7QUFFSixRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLDJCQUEyQixDQUFDLEVBQ3RDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxFQUN6QztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssVUFBVSxJQUFJLEtBQUssQ0FBQyxFQUNwQixTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMseUJBQXlCLEVBQzVELGtCQUFrQixFQUNsQixTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLDRCQUE0QjtBQUN0RCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1QsRUFDQyxlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsT0FBTyxFQUNmLFdBQVcsRUFBRSxlQUFlLENBQUMsRUFDN0IsUUFBUSxZQUFZO0FBQ2pCLGFBQUssT0FBTyxLQUFLLFNBQVMsNEJBQ3RCLGlCQUFpQjtBQUNyQixjQUFNLEtBQUssT0FBTyxlQUFlO0FBQ2pDLGFBQUssUUFBUTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLDBCQUEwQixDQUFDLEVBQ3JDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxFQUN6QztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssVUFBVSxJQUFJLEtBQUssQ0FBQyxFQUNwQixTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsd0JBQXdCLEVBQzNELGtCQUFrQixFQUNsQixTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLDJCQUEyQjtBQUNyRCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1QsRUFDQyxlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsT0FBTyxFQUNmLFdBQVcsRUFBRSxlQUFlLENBQUMsRUFDN0IsUUFBUSxZQUFZO0FBQ2pCLGFBQUssT0FBTyxLQUFLLFNBQVMsMkJBQ3RCLGlCQUFpQjtBQUNyQixjQUFNLEtBQUssT0FBTyxlQUFlO0FBQ2pDLGFBQUssUUFBUTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxRQUFJLHlCQUFRLEtBQUssV0FBVyxFQUN2QixRQUFRLEVBQUUsK0JBQStCLENBQUMsRUFDMUM7QUFBQSxNQUFZLENBQUMsYUFDVixTQUNLLFdBQVc7QUFBQSxRQUNSLG9CQUFvQixFQUFFLHdDQUF3QztBQUFBLFFBQzlELG9CQUFvQixFQUFFLHdDQUF3QztBQUFBLFFBQzlELGdCQUFnQixFQUFFLG9DQUFvQztBQUFBLFFBQ3RELGdCQUFnQixFQUFFLG9DQUFvQztBQUFBLFFBQ3RELDRCQUE0QixFQUFFLHdDQUF3QztBQUFBLE1BQzFFLENBQUMsRUFDQSxTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsa0JBQWtCLEVBQ3JELFNBQVMsT0FBTyxVQUFVO0FBQ3ZCLGFBQUssT0FBTyxLQUFLLFNBQVMscUJBQXFCO0FBQy9DLGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFHakMsYUFBSyxRQUFRO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ1Q7QUFFSixVQUFNLG1CQUNGLEtBQUssT0FBTyxLQUFLLFNBQVMsc0JBQXNCO0FBQ3BELFFBQUkseUJBQVEsS0FBSyxXQUFXLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLEVBQUU7QUFBQSxNQUFZLENBQUMsYUFDdkUsU0FDSztBQUFBLFFBQ0csbUJBQ007QUFBQSxVQUNJLDZCQUE2QjtBQUFBLFlBQ3pCO0FBQUEsVUFDSjtBQUFBLFVBQ0EseUJBQXlCO0FBQUEsWUFDckI7QUFBQSxVQUNKO0FBQUEsUUFDSixJQUNBO0FBQUEsVUFDSSw0QkFBNEI7QUFBQSxZQUN4QjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDVixFQUNDO0FBQUEsUUFDRyxtQkFDTSxLQUFLLE9BQU8sS0FBSyxTQUFTLHFCQUMxQjtBQUFBLE1BQ1YsRUFDQyxZQUFZLENBQUMsZ0JBQWdCLEVBQzdCLFNBQVMsT0FBTyxVQUFVO0FBQ3ZCLGFBQUssT0FBTyxLQUFLLFNBQVMscUJBQXFCO0FBQy9DLGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFDVDtBQUVBLFFBQUkseUJBQVEsV0FBVyxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFO0FBQUEsTUFBVSxDQUFDLFdBQzNFLE9BQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLHlCQUF5QixFQUM1RCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLDRCQUE0QjtBQUN0RCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1Q7QUFFQSxRQUFJLHlCQUFRLFdBQVcsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLENBQUMsRUFBRTtBQUFBLE1BQVUsQ0FBQyxXQUMxRSxPQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyx1QkFBdUIsRUFDMUQsU0FBUyxPQUFPLFVBQVU7QUFDdkIsYUFBSyxPQUFPLEtBQUssU0FBUywwQkFBMEI7QUFDcEQsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNUO0FBRUEsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxrQ0FBa0MsQ0FBQyxFQUM3QztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLDRCQUE0QixFQUMvRCxTQUFTLE9BQU8sVUFBVTtBQUN2QixhQUFLLE9BQU8sS0FBSyxTQUFTLCtCQUErQjtBQUN6RCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsTUFDckMsQ0FBQztBQUFBLElBQ1Q7QUFFSixRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLHdCQUF3QixDQUFDLEVBQ25DLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxFQUM1QztBQUFBLE1BQVEsQ0FBQyxTQUNOLEtBQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLHVCQUF1QixFQUMxRCxTQUFTLENBQUMsVUFBVTtBQUNqQiw0QkFBb0IsWUFBWTtBQUM1QixlQUFLLE9BQU8sS0FBSyxTQUFTLDBCQUEwQjtBQUNwRCxnQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNULEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLDBCQUN0QixpQkFBaUI7QUFDckIsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUNqQyxhQUFLLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxFQUM1QyxRQUFRLEVBQUUsaUNBQWlDLENBQUMsRUFDNUM7QUFBQSxNQUFRLENBQUMsU0FDTixLQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUywrQkFBK0IsRUFDbEUsU0FBUyxDQUFDLFVBQVU7QUFDakIsNEJBQW9CLFlBQVk7QUFDNUIsZUFBSyxPQUFPLEtBQUssU0FBUyxrQ0FBa0M7QUFDNUQsZ0JBQU0sS0FBSyxPQUFPLGVBQWU7QUFBQSxRQUNyQyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDVCxFQUNDLGVBQWUsQ0FBQyxXQUFXO0FBQ3hCLGFBQ0ssUUFBUSxPQUFPLEVBQ2YsV0FBVyxFQUFFLGVBQWUsQ0FBQyxFQUM3QixRQUFRLFlBQVk7QUFDakIsYUFBSyxPQUFPLEtBQUssU0FBUyxrQ0FDdEIsaUJBQWlCO0FBQ3JCLGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFDakMsYUFBSyxRQUFRO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUVMLFFBQUkseUJBQVEsV0FBVyxFQUNsQixRQUFRLEVBQUUsMkJBQTJCLENBQUMsRUFDdEMsUUFBUSxFQUFFLGlDQUFpQyxDQUFDLEVBQzVDO0FBQUEsTUFBUSxDQUFDLFNBQ04sS0FDSyxTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsc0JBQXNCLEVBQ3pELFNBQVMsQ0FBQyxVQUFVO0FBQ2pCLDRCQUFvQixZQUFZO0FBQzVCLGVBQUssT0FBTyxLQUFLLFNBQVMseUJBQXlCO0FBQ25ELGdCQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsUUFDckMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ1QsRUFDQyxlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsT0FBTyxFQUNmLFdBQVcsRUFBRSxlQUFlLENBQUMsRUFDN0IsUUFBUSxZQUFZO0FBQ2pCLGFBQUssT0FBTyxLQUFLLFNBQVMseUJBQ3RCLGlCQUFpQjtBQUNyQixjQUFNLEtBQUssT0FBTyxlQUFlO0FBQ2pDLGFBQUssUUFBUTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLG9DQUFvQyxDQUFDLEVBQy9DLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxFQUM1QztBQUFBLE1BQVEsQ0FBQyxTQUNOLEtBQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLDhCQUE4QixFQUNqRSxTQUFTLENBQUMsVUFBVTtBQUNqQiw0QkFBb0IsWUFBWTtBQUM1QixlQUFLLE9BQU8sS0FBSyxTQUFTLGlDQUFpQztBQUMzRCxnQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNULEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLGlDQUN0QixpQkFBaUI7QUFDckIsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUNqQyxhQUFLLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxFQUNqQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFDaEM7QUFBQSxNQUFRLENBQUMsU0FDTixLQUFLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsVUFBVTtBQUMzRSw0QkFBb0IsWUFBWTtBQUM1QixlQUFLLE9BQU8sS0FBSyxTQUFTLG9CQUFvQjtBQUM5QyxnQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLG9CQUN0QixpQkFBaUI7QUFDckIsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUNqQyxhQUFLLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxFQUNqQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFDaEM7QUFBQSxNQUFRLENBQUMsU0FDTixLQUFLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsVUFBVTtBQUMzRSw0QkFBb0IsWUFBWTtBQUM1QixlQUFLLE9BQU8sS0FBSyxTQUFTLG9CQUFvQjtBQUM5QyxnQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLG9CQUN0QixpQkFBaUI7QUFDckIsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUNqQyxhQUFLLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxFQUNqQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFDaEM7QUFBQSxNQUFRLENBQUMsU0FDTixLQUFLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsVUFBVTtBQUMzRSw0QkFBb0IsWUFBWTtBQUM1QixlQUFLLE9BQU8sS0FBSyxTQUFTLG9CQUFvQjtBQUM5QyxnQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLG9CQUN0QixpQkFBaUI7QUFDckIsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUNqQyxhQUFLLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsZ0JBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUVwRCxRQUFJLHlCQUFRLFdBQVcsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLENBQUMsRUFBRTtBQUFBLE1BQVUsQ0FBQyxXQUNyRSxPQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyw2QkFBNkIsRUFDaEUsU0FBUyxPQUFPLFVBQVU7QUFDdkIsYUFBSyxPQUFPLEtBQUssU0FBUyxnQ0FBZ0M7QUFDMUQsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNUO0FBRUEsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUMzQixRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFDaEM7QUFBQSxNQUFZLENBQUMsU0FDVixLQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxhQUFhLEtBQUssR0FBRyxDQUFDLEVBQ3pELFNBQVMsQ0FBQyxVQUFVO0FBQ2pCLDRCQUFvQixZQUFZO0FBQzVCLGVBQUssT0FBTyxLQUFLLFNBQVMsZUFBZSxNQUFNLE1BQU0sS0FBSztBQUMxRCxnQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNUO0FBRUosUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxFQUM3QixRQUFRLEVBQUUsdUJBQXVCLENBQUMsRUFDbEM7QUFBQSxNQUFVLENBQUMsV0FDUixPQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxjQUFjLEVBQ2pELFNBQVMsT0FBTyxVQUFVO0FBQ3ZCLGFBQUssT0FBTyxLQUFLLFNBQVMsaUJBQWlCO0FBQzNDLGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFDVDtBQUVKLFFBQUkseUJBQVEsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0FBQUEsTUFBVSxDQUFDLFdBQzdELE9BQU8sU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLFlBQVksRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUM5RSxhQUFLLE9BQU8sS0FBSyxTQUFTLGVBQWU7QUFDekMsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNMO0FBRUEsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxrQ0FBa0MsQ0FBQyxFQUM3QyxRQUFRLEVBQUUsdUNBQXVDLENBQUMsRUFDbEQ7QUFBQSxNQUFVLENBQUMsV0FDUixPQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyw0QkFBNEIsRUFDL0QsU0FBUyxPQUFPLFVBQVU7QUFDdkIsYUFBSyxPQUFPLEtBQUssU0FBUywrQkFBK0I7QUFDekQsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNUO0FBRUosUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxFQUNwQztBQUFBLE1BQVEsQ0FBQyxTQUNOLEtBQ0ssU0FBUyxLQUFLLE9BQU8sS0FBSyxTQUFTLHlCQUF5QixTQUFTLENBQUMsRUFDdEUsU0FBUyxDQUFDLFVBQVU7QUFDakIsNEJBQW9CLFlBQVk7QUFDNUIsZ0JBQU0sV0FBbUIsT0FBTyxTQUFTLEtBQUs7QUFDOUMsY0FBSSxDQUFDLE1BQU0sUUFBUSxHQUFHO0FBQ2xCLGdCQUFJLFdBQVcsR0FBRztBQUNkLGtCQUFJLHdCQUFPLEVBQUUsYUFBYSxDQUFDO0FBQzNCLG1CQUFLO0FBQUEsZ0JBQ0QsS0FBSyxPQUFPLEtBQUssU0FBUyx5QkFBeUIsU0FBUztBQUFBLGNBQ2hFO0FBQ0E7QUFBQSxZQUNKO0FBRUEsaUJBQUssT0FBTyxLQUFLLFNBQVMsMkJBQTJCO0FBQ3JELGtCQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsVUFDckMsT0FBTztBQUNILGdCQUFJLHdCQUFPLEVBQUUsc0JBQXNCLENBQUM7QUFBQSxVQUN4QztBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ1QsRUFDQyxlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsT0FBTyxFQUNmLFdBQVcsRUFBRSxlQUFlLENBQUMsRUFDN0IsUUFBUSxZQUFZO0FBQ2pCLGFBQUssT0FBTyxLQUFLLFNBQVMsMkJBQ3RCLGlCQUFpQjtBQUNyQixjQUFNLEtBQUssT0FBTyxlQUFlO0FBQ2pDLGFBQUssUUFBUTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxnQkFBWSxTQUFTLE1BQU0sRUFBRSxNQUFNLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7QUFFN0QsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxtQ0FBbUMsQ0FBQyxFQUM5QyxRQUFRLEVBQUUsd0NBQXdDLENBQUMsRUFDbkQ7QUFBQSxNQUFVLENBQUMsV0FDUixPQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxnQ0FBZ0MsRUFDbkUsU0FBUyxPQUFPLFVBQVU7QUFDdkIsYUFBSyxPQUFPLEtBQUssU0FBUyxtQ0FBbUM7QUFDN0QsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNUO0FBRUosZ0JBQVksU0FBUyxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztBQUN4RCxnQkFBWSxVQUFVLEVBQUUsWUFBWSxFQUFFLHdCQUF3QjtBQUFBLE1BQzFELFVBQVU7QUFBQSxJQUNkLENBQUM7QUFFRCxRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUN0QixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFDM0I7QUFBQSxNQUFRLENBQUMsU0FDTixLQUFLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxTQUFTLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxVQUFVO0FBQzdFLDRCQUFvQixZQUFZO0FBQzVCLGdCQUFNLFdBQW1CLE9BQU8sU0FBUyxLQUFLO0FBQzlDLGNBQUksQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUNsQixnQkFBSSxXQUFXLEtBQUs7QUFDaEIsa0JBQUksd0JBQU8sRUFBRSx1QkFBdUIsQ0FBQztBQUNyQyxtQkFBSyxTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsU0FBUyxTQUFTLENBQUM7QUFDM0Q7QUFBQSxZQUNKO0FBRUEsaUJBQUssT0FBTyxLQUFLLFNBQVMsV0FBVztBQUNyQyxrQkFBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLFVBQ3JDLE9BQU87QUFDSCxnQkFBSSx3QkFBTyxFQUFFLHNCQUFzQixDQUFDO0FBQUEsVUFDeEM7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLFdBQVcsaUJBQWlCO0FBQ3RELGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFDakMsYUFBSyxRQUFRO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUVMLFFBQUkseUJBQVEsV0FBVyxFQUNsQixRQUFRLEVBQUUsdUJBQXVCLENBQUMsRUFDbEMsUUFBUSxFQUFFLDRCQUE0QixDQUFDLEVBQ3ZDO0FBQUEsTUFBVSxDQUFDLFdBQ1IsT0FDSyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQ2xCLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyx1QkFBdUIsR0FBRyxFQUM3RCxrQkFBa0IsRUFDbEIsU0FBUyxPQUFPLFVBQWtCO0FBQy9CLGFBQUssT0FBTyxLQUFLLFNBQVMsdUJBQXVCLFFBQVE7QUFDekQsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNULEVBQ0MsZUFBZSxDQUFDLFdBQVc7QUFDeEIsYUFDSyxRQUFRLE9BQU8sRUFDZixXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQzdCLFFBQVEsWUFBWTtBQUNqQixhQUFLLE9BQU8sS0FBSyxTQUFTLHVCQUN0QixpQkFBaUI7QUFDckIsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUNqQyxhQUFLLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDVCxDQUFDO0FBRUwsUUFBSSx5QkFBUSxXQUFXLEVBQ2xCLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFDdkIsUUFBUSxFQUFFLGlCQUFpQixDQUFDLEVBQzVCO0FBQUEsTUFBUSxDQUFDLFNBQ04sS0FDSyxVQUFVLEtBQUssT0FBTyxLQUFLLFNBQVMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxFQUMvRCxTQUFTLENBQUMsVUFBVTtBQUNqQiw0QkFBb0IsWUFBWTtBQUM1QixnQkFBTSxXQUFtQixPQUFPLFNBQVMsS0FBSyxJQUFJO0FBQ2xELGNBQUksQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUNsQixnQkFBSSxXQUFXLEdBQUs7QUFDaEIsa0JBQUksd0JBQU8sRUFBRSx3QkFBd0IsQ0FBQztBQUN0QyxtQkFBSztBQUFBLGlCQUNBLEtBQUssT0FBTyxLQUFLLFNBQVMsWUFBWSxLQUFLLFNBQVM7QUFBQSxjQUN6RDtBQUNBO0FBQUEsWUFDSjtBQUVBLGlCQUFLLE9BQU8sS0FBSyxTQUFTLFlBQVk7QUFDdEMsa0JBQU0sS0FBSyxPQUFPLGVBQWU7QUFBQSxVQUNyQyxPQUFPO0FBQ0gsZ0JBQUksd0JBQU8sRUFBRSxzQkFBc0IsQ0FBQztBQUFBLFVBQ3hDO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDVCxFQUNDLGVBQWUsQ0FBQyxXQUFXO0FBQ3hCLGFBQ0ssUUFBUSxPQUFPLEVBQ2YsV0FBVyxFQUFFLGVBQWUsQ0FBQyxFQUM3QixRQUFRLFlBQVk7QUFDakIsYUFBSyxPQUFPLEtBQUssU0FBUyxZQUFZLGlCQUFpQjtBQUN2RCxjQUFNLEtBQUssT0FBTyxlQUFlO0FBQ2pDLGFBQUssUUFBUTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUN6QixRQUFRLEVBQUUsbUJBQW1CLENBQUMsRUFDOUI7QUFBQSxNQUFRLENBQUMsU0FDTixLQUNLLFNBQVMsS0FBSyxPQUFPLEtBQUssU0FBUyxnQkFBZ0IsU0FBUyxDQUFDLEVBQzdELFNBQVMsQ0FBQyxVQUFVO0FBQ2pCLDRCQUFvQixZQUFZO0FBQzVCLGdCQUFNLFdBQW1CLE9BQU8sU0FBUyxLQUFLO0FBQzlDLGNBQUksQ0FBQyxNQUFNLFFBQVEsR0FBRztBQUNsQixnQkFBSSxXQUFXLEdBQUc7QUFDZCxrQkFBSSx3QkFBTyxFQUFFLDBCQUEwQixDQUFDO0FBQ3hDLG1CQUFLO0FBQUEsZ0JBQ0QsS0FBSyxPQUFPLEtBQUssU0FBUyxnQkFBZ0IsU0FBUztBQUFBLGNBQ3ZEO0FBQ0E7QUFBQSxZQUNKO0FBRUEsaUJBQUssT0FBTyxLQUFLLFNBQVMsa0JBQWtCO0FBQzVDLGtCQUFNLEtBQUssT0FBTyxlQUFlO0FBQUEsVUFDckMsT0FBTztBQUNILGdCQUFJLHdCQUFPLEVBQUUsc0JBQXNCLENBQUM7QUFBQSxVQUN4QztBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ1QsRUFDQyxlQUFlLENBQUMsV0FBVztBQUN4QixhQUNLLFFBQVEsT0FBTyxFQUNmLFdBQVcsRUFBRSxlQUFlLENBQUMsRUFDN0IsUUFBUSxZQUFZO0FBQ2pCLGFBQUssT0FBTyxLQUFLLFNBQVMsa0JBQ3RCLGlCQUFpQjtBQUNyQixjQUFNLEtBQUssT0FBTyxlQUFlO0FBQ2pDLGFBQUssUUFBUTtBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNULENBQUM7QUFFTCxRQUFJLHlCQUFRLFdBQVcsRUFDbEIsUUFBUSxFQUFFLGtCQUFrQixDQUFDLEVBQzdCLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxFQUNsQztBQUFBLE1BQVUsQ0FBQyxXQUNSLE9BQ0ssVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUNuQixTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsZ0JBQWdCLEdBQUcsRUFDdEQsa0JBQWtCLEVBQ2xCLFNBQVMsT0FBTyxVQUFrQjtBQUMvQixhQUFLLE9BQU8sS0FBSyxTQUFTLGdCQUFnQixRQUFRO0FBQ2xELGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFDVCxFQUNDLGVBQWUsQ0FBQyxXQUFXO0FBQ3hCLGFBQ0ssUUFBUSxPQUFPLEVBQ2YsV0FBVyxFQUFFLGVBQWUsQ0FBQyxFQUM3QixRQUFRLFlBQVk7QUFDakIsYUFBSyxPQUFPLEtBQUssU0FBUyxnQkFBZ0IsaUJBQWlCO0FBQzNELGNBQU0sS0FBSyxPQUFPLGVBQWU7QUFDakMsYUFBSyxRQUFRO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ1QsQ0FBQztBQUVMLGdCQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDdEQsUUFBSSx5QkFBUSxXQUFXLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLEVBQUU7QUFBQSxNQUFVLENBQUMsV0FDakUsT0FBTyxTQUFTLEtBQUssT0FBTyxLQUFLLFNBQVMsaUJBQWlCLEVBQUUsU0FBUyxPQUFPLFVBQVU7QUFDbkYsYUFBSyxPQUFPLEtBQUssU0FBUyxvQkFBb0I7QUFDOUMsY0FBTSxLQUFLLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDSjtBQUNKOzs7QWtDenlCQSxJQUFBQyxtQkFBMkI7OztBQ0EzQixJQUFBQyxtQkFBMkI7QUFJcEIsSUFBTSxxQkFBTixNQUFNLDRCQUEyQix1QkFBTTtBQUFBLEVBcUIxQyxZQUFZLEtBQVUsY0FBc0I7QUFDeEMsVUFBTSxHQUFHO0FBVGIsU0FBUSxpQkFBaUI7QUFpRXpCO0FBQUEsU0FBUSxvQkFBb0IsQ0FBQyxNQUFrQixLQUFLLEtBQUs7QUFFekQsU0FBUSxzQkFBc0IsQ0FBQyxNQUFrQixLQUFLLE9BQU87QUFFN0QsU0FBUSxzQkFBc0IsQ0FBQyxRQUF1QjtBQUNsRCxXQUFLLElBQUksV0FBVyxJQUFJLFlBQVksSUFBSSxRQUFRLFNBQVM7QUFDckQsWUFBSSxlQUFlO0FBQ25CLGFBQUssS0FBSztBQUFBLE1BQ2Q7QUFBQSxJQUNKO0FBL0RJLFNBQUssWUFBWTtBQUNqQixTQUFLLGNBQWM7QUFFbkIsU0FBSyxlQUFlLElBQUksUUFBZ0IsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3pELFdBQUssaUJBQWlCQTtBQUN0QixXQUFLLGdCQUFnQjtBQUFBLElBQ3pCLENBQUM7QUFHRCxTQUFLLFFBQVEsV0FBVyxDQUFDLFlBQVksZUFBZSxDQUFDO0FBQ3JELFNBQUssS0FBSztBQUVWLFNBQUssS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQXJCQSxPQUFjLE9BQU8sS0FBVSxhQUFzQztBQUNqRSxVQUFNLGlCQUFpQixJQUFJLG9CQUFtQixLQUFLLFdBQVc7QUFDOUQsV0FBTyxlQUFlO0FBQUEsRUFDMUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXVCQSxPQUFPO0FBOUNYO0FBK0NRLFNBQUssVUFBVSxNQUFNO0FBQ3JCLFNBQUssVUFBVSxTQUFTLGNBQWM7QUFFdEMsU0FBSyxRQUFRLEtBQUssVUFBVSxVQUFVO0FBQ3RDLFNBQUssTUFBTSxRQUFRLEVBQUUsV0FBVyxDQUFDO0FBQ2pDLFNBQUssTUFBTSxTQUFTLFVBQVU7QUFFOUIsU0FBSyxXQUFXLEtBQUssVUFBVSxTQUFTLFVBQVU7QUFDbEQsU0FBSyxTQUFTLFNBQVMsVUFBVTtBQUNqQyxTQUFLLFNBQVMsU0FBUSxVQUFLLGNBQUwsWUFBa0IsRUFBRTtBQUMxQyxTQUFLLFNBQVMsaUJBQWlCLFdBQVcsS0FBSyxtQkFBbUI7QUFFbEUsU0FBSyxnQkFBZ0IsS0FBSyxTQUFTO0FBQUEsRUFDdkM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLFNBQVM7QUFDTCxVQUFNLE9BQU87QUFFYixTQUFLLFNBQVMsTUFBTTtBQUFBLEVBQ3hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxVQUFVO0FBQ04sVUFBTSxRQUFRO0FBQ2QsU0FBSyxhQUFhO0FBQ2xCLFNBQUssb0JBQW9CO0FBQUEsRUFDN0I7QUFBQSxFQWVRLE9BQU87QUFDWCxTQUFLLGlCQUFpQjtBQUN0QixTQUFLLGNBQWMsS0FBSyxTQUFTO0FBQ2pDLFNBQUssTUFBTTtBQUFBLEVBQ2Y7QUFBQSxFQUVRLFNBQVM7QUFDYixTQUFLLE1BQU07QUFBQSxFQUNmO0FBQUEsRUFFUSxlQUFlO0FBQ25CLFFBQUksQ0FBQyxLQUFLO0FBQWdCLFdBQUssY0FBYyxFQUFFLFVBQVUsQ0FBQztBQUFBO0FBQ3JELFdBQUssZUFBZSxLQUFLLFdBQVc7QUFBQSxFQUM3QztBQUFBLEVBRVEsc0JBQXNCO0FBQzFCLFNBQUssU0FBUyxvQkFBb0IsV0FBVyxLQUFLLG1CQUFtQjtBQUFBLEVBQ3pFO0FBQUE7QUFBQSxFQUlRLHNCQUNKLFdBQ0EsTUFDQSxZQUNBQyxXQUNGO0FBQ0UsVUFBTSxTQUFTLFVBQVUsU0FBUyxRQUFRO0FBQzFDLFdBQU8sV0FBVyxDQUFDLHNCQUFzQixVQUFVLENBQUM7QUFDcEQsV0FBTyxRQUFRLElBQUk7QUFDbkIsV0FBTyxpQkFBaUIsU0FBU0EsU0FBUTtBQUFBLEVBQzdDO0FBQUEsRUFFUSxnQkFBZ0Isc0JBQW1DO0FBQ3ZELFVBQU0sV0FBMkIscUJBQXFCLFVBQVU7QUFDaEUsYUFBUyxTQUFTLGFBQWE7QUFDL0IsU0FBSyxzQkFBc0IsVUFBVSxFQUFFLFFBQVEsR0FBRyxhQUFhLEtBQUssbUJBQW1CO0FBQ3ZGLFNBQUssc0JBQXNCLFVBQVUsSUFBSSxhQUFhLE1BQU07QUFBQSxJQUFDLENBQUM7QUFDOUQsU0FBSyxzQkFBc0IsVUFBVSxFQUFFLE1BQU0sR0FBRyxlQUFlLEtBQUssaUJBQWlCO0FBQUEsRUFDekY7QUFDSjs7O0FDcElBLG1CQUFjOzs7QUNDUCxJQUFNLHdCQUNUO0FBQ0csSUFBTSwwQkFBMEI7QUFDaEMsSUFBTSwyQkFBMkI7QUFFakMsSUFBTSw2QkFBNkI7QUFDbkMsSUFBTSw4QkFBOEI7QUFDcEMsSUFBTSxvQ0FBb0M7QUFNMUMsSUFBTSxvQ0FBb0M7QUFFMUMsSUFBTSx3QkFBd0I7QUFDOUIsSUFBTSx1QkFBdUIsQ0FBQyx1QkFBdUIsY0FBYyxpQkFBaUI7QUFFcEYsSUFBTSxnQkFBZ0I7QUFBQSxFQUN6QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0o7QUFDTyxJQUFNLGdCQUFnQixDQUFDLE9BQU8sUUFBUSxPQUFPLE9BQU8sS0FBSztBQUN6RCxJQUFNLGdCQUFnQixDQUFDLE9BQU8sT0FBTyxPQUFPLEtBQUs7QUFFakQsSUFBTSxnQkFDVDtBQUVHLElBQU0sZ0JBQWdCLEtBQUssT0FBTztBQUVsQyxJQUFNLHdCQUF3QjtBQUM5QixJQUFNLHNCQUFzQjs7O0FDdkM1QixJQUFNLFlBQU4sTUFBTSxXQUFVO0FBQUEsRUFHbkIsWUFBWSxNQUFnQjtBQUN4QixRQUFJLFFBQVE7QUFBTSxZQUFNO0FBQ3hCLFFBQUksS0FBSyxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQUcsWUFBTTtBQUNqRCxTQUFLLE9BQU87QUFBQSxFQUNoQjtBQUFBLEVBRUEsSUFBSSxVQUFtQjtBQUNuQixXQUFPLEtBQUssS0FBSyxTQUFTO0FBQUEsRUFDOUI7QUFBQSxFQUVBLElBQUksY0FBdUI7QUFDdkIsV0FBTyxDQUFDLEtBQUs7QUFBQSxFQUNqQjtBQUFBLEVBRUEsV0FBVyxZQUF1QjtBQUM5QixXQUFPLElBQUksV0FBVSxDQUFDLENBQUM7QUFBQSxFQUMzQjtBQUFBLEVBRUEsUUFBZ0I7QUFDWixRQUFJLEtBQUs7QUFBYSxZQUFNO0FBQzVCLFdBQU8sS0FBSyxLQUFLLE1BQU07QUFBQSxFQUMzQjtBQUFBLEVBRUEsUUFBbUI7QUFDZixXQUFPLElBQUksV0FBVSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFBQSxFQUN2QztBQUFBLEVBRUEsY0FBc0I7QUFDbEIsUUFBSSxLQUFLO0FBQWEsWUFBTTtBQUM1QixVQUFNLFNBQVMsTUFBTSxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQ3ZDLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxtQkFBbUIsV0FBK0I7QUFDOUMsUUFBSSxLQUFLO0FBQWEsYUFBTyxVQUFVO0FBQ3ZDLFFBQUksS0FBSyxLQUFLLFNBQVMsVUFBVSxLQUFLO0FBQVEsYUFBTztBQUNyRCxhQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxRQUFRLEtBQUs7QUFDdkMsVUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLFVBQVUsS0FBSyxDQUFDO0FBQUcsZUFBTztBQUFBLElBQ2xEO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVBLE9BQU8seUJBQXlCLFVBQTZCO0FBakRqRTtBQWtEUSxVQUFNLFFBQU8sY0FBUyxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsTUFBNUQsbUJBQStELE1BQU0sSUFBSTtBQUN0RixZQUFPLDZCQUFNLFVBQVMsSUFBSSxXQUFVLG9CQUFvQixJQUFJLElBQUk7QUFBQSxFQUNwRTtBQUFBLEVBRUEsT0FBTyxXQUFXLEtBQXNCO0FBQ3BDLFFBQUksT0FBTyxRQUFRLElBQUksVUFBVTtBQUFHLGFBQU87QUFDM0MsUUFBSSxJQUFJLENBQUMsS0FBSztBQUFLLGFBQU87QUFDMUIsUUFBSSxJQUFJLFVBQVU7QUFBRyxhQUFPO0FBRTVCLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxPQUFPLG9CQUFvQixLQUF3QjtBQUMvQyxRQUFJLE9BQU8sUUFBUSxJQUFJLFVBQVU7QUFBRyxZQUFNO0FBQzFDLFFBQUksSUFBSSxDQUFDLEtBQUs7QUFBSyxZQUFNO0FBQ3pCLFFBQUksSUFBSSxVQUFVO0FBQUcsWUFBTTtBQUUzQixVQUFNLE9BQWlCLElBQ2xCLFFBQVEsS0FBSyxFQUFFLEVBQ2YsTUFBTSxHQUFHLEVBQ1QsT0FBTyxDQUFDLFFBQVEsR0FBRztBQUN4QixXQUFPLElBQUksV0FBVSxJQUFJO0FBQUEsRUFDN0I7QUFBQSxFQUVBLE9BQU8sMEJBQTBCLFVBQW1CLFVBQWlDO0FBQ2pGLFFBQUksU0FBb0IsV0FBVTtBQUVsQyxRQUFJLFNBQVMsdUJBQXVCO0FBQ2hDLFlBQU0sV0FBcUIsU0FBUyxLQUFLLE1BQU0sR0FBRztBQUNsRCxlQUFTLElBQUk7QUFDYixVQUFJLFNBQVMsVUFBVSxHQUFHO0FBQ3RCLGlCQUFTLElBQUksV0FBVSxRQUFRO0FBQUEsTUFDbkM7QUFBQSxJQUNKO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFDSjtBQUVPLElBQU0sZ0JBQU4sTUFBTSxlQUFjO0FBQUEsRUFJdkIsWUFBWSxNQUFtQixVQUFrQixNQUFNO0FBQ25ELFFBQUksUUFBUTtBQUFNLFlBQU07QUFDeEIsU0FBSyxPQUFPO0FBQ1osU0FBSyxVQUFVO0FBQUEsRUFDbkI7QUFBQSxFQUVBLElBQUksU0FBaUI7QUFDakIsV0FBTyxLQUFLLEtBQUs7QUFBQSxFQUNyQjtBQUFBLEVBRUEsNkJBQTZCLFdBQStCO0FBQ3hELFdBQU8sS0FBSyxLQUFLLEtBQUssQ0FBQyxTQUFTLEtBQUssbUJBQW1CLFNBQVMsQ0FBQztBQUFBLEVBQ3RFO0FBQUEsRUFFQSxZQUFZO0FBQ1IsV0FBTyxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCO0FBQUEsRUFFQSxPQUFPLEtBQWE7QUFDaEIsV0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsVUFBVSxZQUFZLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFBQSxFQUN6RTtBQUFBLEVBRUEsT0FBTyxRQUF1QjtBQUMxQixXQUFPLElBQUksZUFBYyxDQUFDLENBQUM7QUFBQSxFQUMvQjtBQUFBLEVBRUEsT0FBTyxRQUFRLEtBQWEsU0FBZ0M7QUFDeEQsVUFBTSxTQUF3QixlQUFjLDhCQUE4QixJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQ3hGLFdBQU8sVUFBVTtBQUNqQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFlQSxPQUFPLGlDQUNILE1BQ0Esb0JBQ0EsVUFBa0IsTUFDTDtBQUNiLFVBQU0sU0FBc0IsQ0FBQztBQUM3QixlQUFXLE9BQU8sS0FBSyxNQUFNO0FBQ3pCLFVBQUksbUJBQW1CLDZCQUE2QixHQUFHO0FBQUcsZUFBTyxLQUFLLEdBQUc7QUFBQSxJQUM3RTtBQUVBLFdBQU8sSUFBSSxlQUFjLFFBQVEsT0FBTztBQUFBLEVBQzVDO0FBQUEsRUFFQSxPQUFPLDhCQUE4QixTQUFrQztBQUNuRSxVQUFNLFNBQXNCLENBQUM7QUFDN0IsZUFBVyxPQUFPLFNBQVM7QUFDdkIsVUFBSSxVQUFVLFdBQVcsR0FBRztBQUFHLGVBQU8sS0FBSyxVQUFVLG9CQUFvQixHQUFHLENBQUM7QUFBQSxJQUNqRjtBQUNBLFdBQU8sSUFBSSxlQUFjLE1BQU07QUFBQSxFQUNuQztBQUNKO0FBRU8sSUFBTSxrQkFBTixNQUFzQjtBQUFBLEVBU3pCLFlBQVksV0FBc0IsZUFBdUIsZ0JBQXdCO0FBQzdFLFFBQUksQ0FBQyxhQUFhLFVBQVU7QUFBYSxZQUFNO0FBRS9DLFNBQUssWUFBWTtBQUNqQixTQUFLLGdCQUFnQjtBQUNyQixTQUFLLGlCQUFpQjtBQUFBLEVBQzFCO0FBQUEsRUFFQSxlQUF1QjtBQUNuQixXQUFPLEdBQUcsS0FBSyxhQUFhLEdBQUcsS0FBSyxVQUFVLFlBQVksQ0FBQyxHQUFHLEtBQUssY0FBYztBQUFBLEVBQ3JGO0FBQ0o7OztBRnJLTyxJQUFNLGVBQU4sTUFBbUI7QUFBQSxFQWV0QixZQUNJLFFBQ0EsVUFDQSxpQkFDQSxXQUNBLG1CQUNGO0FBRUUsU0FBSyxTQUFTO0FBQ2QsU0FBSyxXQUFXO0FBQ2hCLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssaUJBQWlCO0FBQ3RCLFNBQUssb0JBQW9CO0FBR3pCLFNBQUssS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWE7QUFDVCxTQUFLLE9BQU8sS0FBSyxlQUFlLFVBQVU7QUFDMUMsU0FBSyxLQUFLLFdBQVcsQ0FBQyxnQkFBZ0IsY0FBYyxDQUFDO0FBRXJELFNBQUssU0FBUyxLQUFLLEtBQUssVUFBVTtBQUNsQyxTQUFLLE9BQU8sU0FBUyxXQUFXO0FBRWhDLFNBQUssUUFBUSxLQUFLLE9BQU8sVUFBVTtBQUNuQyxTQUFLLE1BQU0sU0FBUyxVQUFVO0FBQzlCLFNBQUssTUFBTSxRQUFRLEVBQUUsT0FBTyxDQUFDO0FBRTdCLFNBQUssUUFBUSxLQUFLLE9BQU8sVUFBVTtBQUNuQyxTQUFLLE1BQU0sU0FBUywyQkFBMkI7QUFDL0MsU0FBSyxtQkFBbUI7QUFFeEIsU0FBSyxVQUFVLEtBQUssS0FBSyxVQUFVO0FBQ25DLFNBQUssUUFBUSxTQUFTLFlBQVk7QUFBQSxFQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYTtBQUNULFNBQUs7QUFHTCxTQUFLLG1CQUFtQjtBQUV4QixTQUFLLFFBQVEsTUFBTTtBQUNuQixlQUFXLFFBQVEsS0FBSyxnQkFBZ0IsaUJBQWlCLFVBQVU7QUFDL0QsV0FBSyxZQUFZLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDdkM7QUFFQSxRQUFJLEtBQUssS0FBSyxTQUFTLGNBQWMsR0FBRztBQUNwQyxXQUFLLEtBQUssWUFBWSxjQUFjO0FBQUEsSUFDeEM7QUFBQSxFQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxPQUFPO0FBQ0gsUUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLGNBQWMsR0FBRztBQUNyQyxXQUFLLEtBQUssU0FBUyxjQUFjO0FBQUEsSUFDckM7QUFBQSxFQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxRQUFRO0FBQ0osU0FBSyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUEsRUFJUSxxQkFBcUI7QUFDekIsVUFBTSxhQUF3QixLQUFLLGdCQUFnQixhQUFhLFVBQVUsU0FBUztBQUNuRixTQUFLLE1BQU0sTUFBTTtBQUVqQixTQUFLLDRCQUE0QixFQUFFLFdBQVcsR0FBRyxXQUFXLFVBQVUsYUFBYTtBQUNuRixTQUFLLDRCQUE0QixFQUFFLFdBQVcsR0FBRyxXQUFXLFVBQVUsWUFBWTtBQUNsRixTQUFLLDRCQUE0QixFQUFFLGFBQWEsR0FBRyxXQUFXLFlBQVksV0FBVztBQUFBLEVBQ3pGO0FBQUEsRUFFUSw0QkFDSixZQUNBLGFBQ0EsWUFDSTtBQUNKLFVBQU0saUJBQWlCLEtBQUssTUFBTSxVQUFVO0FBQzVDLG1CQUFlLFlBQVk7QUFDM0IsbUJBQWUsV0FBVztBQUFBLE1BQ3RCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSixDQUFDO0FBRUQsVUFBTSxRQUFRLGVBQWUsVUFBVTtBQUN2QyxVQUFNLFFBQVEsYUFBYSxHQUFHO0FBRTlCLFVBQU0sU0FBUyxlQUFlLFVBQVU7QUFDeEMsV0FBTyxRQUFRLFlBQVksU0FBUyxDQUFDO0FBQUEsRUFDekM7QUFBQTtBQUFBLEVBSVEsWUFBWSxNQUFZLFdBQThCO0FBQzFELFVBQU0sV0FBd0IsVUFBVSxVQUFVLGtDQUFrQztBQUNwRixVQUFNLGVBQTRCLFNBQVM7QUFBQSxNQUN2QztBQUFBLElBQ0o7QUFFQSxVQUFNLDRCQUFxQyxLQUFLLFNBQVM7QUFDekQsUUFBSSxZQUFZLENBQUM7QUFDakIsUUFBSSxpQkFBcUM7QUFDekMsUUFBSSxLQUFLLFNBQVMsU0FBUyxHQUFHO0FBQzFCLHVCQUFpQixhQUFhLFVBQVUsOEJBQThCO0FBQ3RFLHFCQUFlLFlBQVk7QUFDM0IsTUFBQyxlQUFlLFdBQVcsQ0FBQyxFQUFrQixNQUFNLFlBQVksWUFDMUQsbUJBQ0E7QUFBQSxJQUNWO0FBRUEsVUFBTSxnQkFBNkIsYUFBYSxVQUFVLGlCQUFpQjtBQUMzRSxVQUFNLG9CQUFpQyxjQUFjLFVBQVUsbUJBQW1CO0FBQ2xGLHNCQUFrQixhQUFhLGlDQUFBQyxTQUFDLFVBQUssT0FBTSx1QkFBcUIsS0FBSyxRQUFTO0FBRTlFLFVBQU0sZ0JBQWdDLGFBQWEsVUFBVTtBQUM3RCxrQkFBYyxXQUFXLENBQUMseUJBQXlCLHlCQUF5QixDQUFDO0FBRTdFLFVBQU0sWUFBWSxLQUFLLGdCQUFnQixhQUFhLEtBQUssYUFBYSxDQUFDO0FBQ3ZFLFNBQUssYUFBYSxXQUFXLGFBQWE7QUFFMUMsVUFBTSxtQkFBZ0MsU0FBUyxVQUFVLG9CQUFvQjtBQUM3RSxxQkFBaUIsTUFBTSxVQUFVLFlBQVksU0FBUztBQUN0RCxRQUFJLEtBQUssU0FBUyxTQUFTLEdBQUc7QUFDMUIscUJBQWUsaUJBQWlCLFNBQVMsQ0FBQyxNQUFNO0FBQzVDLFlBQUksV0FBVztBQUNYLFVBQUMsZUFBZSxXQUFXLENBQUMsRUFBa0IsTUFBTSxZQUFZO0FBQ2hFLDJCQUFpQixNQUFNLFVBQVU7QUFBQSxRQUNyQyxPQUFPO0FBQ0gsVUFBQyxlQUFlLFdBQVcsQ0FBQyxFQUFrQixNQUFNLFlBQ2hEO0FBQ0osMkJBQWlCLE1BQU0sVUFBVTtBQUFBLFFBQ3JDO0FBSUEsVUFBRSxnQkFBZ0I7QUFDbEIsb0JBQVksQ0FBQztBQUFBLE1BQ2pCLENBQUM7QUFBQSxJQUNMO0FBS0EsaUJBQWEsaUJBQWlCLFNBQVMsTUFBTTtBQUN6QyxXQUFLLGtCQUFrQixJQUFJO0FBQUEsSUFDL0IsQ0FBQztBQUVELGVBQVcsV0FBVyxLQUFLLFVBQVU7QUFDakMsV0FBSyxZQUFZLFNBQVMsZ0JBQWdCO0FBQUEsSUFDOUM7QUFBQSxFQUNKO0FBQUEsRUFFUSxhQUFhLFlBQXVCLGNBQThCO0FBQ3RFLGlCQUFhLE1BQU07QUFFbkIsU0FBSztBQUFBLE1BQ0QsRUFBRSxXQUFXO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxJQUNKO0FBQ0EsU0FBSyxzQkFBc0IsRUFBRSxXQUFXLEdBQUcsV0FBVyxVQUFVLGNBQWMsWUFBWTtBQUMxRixTQUFLO0FBQUEsTUFDRCxFQUFFLGFBQWE7QUFBQSxNQUNmLFdBQVc7QUFBQSxNQUNYO0FBQUEsTUFDQTtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUEsRUFFUSxzQkFDSixZQUNBLGFBQ0EsWUFDQSxjQUNJO0FBQ0osVUFBTSxpQkFBaUIsYUFBYSxVQUFVO0FBRTlDLG1CQUFlLFlBQVk7QUFFM0IsbUJBQWUsV0FBVztBQUFBLE1BQ3RCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSixDQUFDO0FBRUQsbUJBQWUsUUFBUSxZQUFZLFNBQVMsQ0FBQztBQUFBLEVBQ2pEO0FBQ0o7OztBRzNPQSxJQUFBQyxtQkFBK0M7OztBQ1l4QyxTQUFTLFNBQ1osVUFDQSxVQUNBLE1BQ0EsbUJBQ0EsYUFDQSxVQUNzQjtBQUN0QixzQkFBb0IsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLHFCQUFxQixLQUFLLE9BQU8sSUFBSyxDQUFDO0FBRWxGLE1BQUksYUFBYSxjQUFxQjtBQUNsQyxZQUFRO0FBQ1IsZ0JBQWEsV0FBVyxxQkFBcUIsT0FBUTtBQUNyRCxnQkFBWSxZQUFZO0FBQUEsRUFDNUIsV0FBVyxhQUFhLGNBQXFCO0FBQ3pDLGdCQUFhLFdBQVcsb0JBQW9CLEtBQUssT0FBUTtBQUFBLEVBQzdELFdBQVcsYUFBYSxjQUFxQjtBQUN6QyxXQUFPLEtBQUssSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUM5QixlQUFXLEtBQUs7QUFBQSxNQUNaO0FBQUEsT0FDQyxXQUFXLG9CQUFvQixLQUFLLFlBQVk7QUFBQSxJQUNyRDtBQUFBLEVBQ0o7QUFHQSxNQUFJLGFBQWEsUUFBVztBQUN4QixlQUFXLEtBQUssTUFBTSxRQUFRO0FBQzlCLFFBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFVBQVUsUUFBUSxHQUFHO0FBQzNELGVBQVMsUUFBUSxJQUFJO0FBQUEsSUFDekIsT0FBTztBQUVILFVBQUksV0FBVyxHQUFHO0FBQ2QsWUFBSSxPQUFPO0FBQ1gsWUFBSSxXQUFXO0FBQUcsaUJBQU87QUFBQSxpQkFDaEIsV0FBVztBQUFJLGlCQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxXQUFXLElBQUksQ0FBQztBQUFBO0FBQ2pFLGlCQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxXQUFXLElBQUksQ0FBQztBQUVuRCxjQUFNLG1CQUFtQjtBQUN6QjtBQUFPLG1CQUFTLElBQUksR0FBRyxLQUFLLE1BQU0sS0FBSztBQUNuQyx1QkFBVyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsR0FBRztBQUM1RCxrQkFBSSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssVUFBVSxHQUFHLEdBQUc7QUFDdEQseUJBQVMsR0FBRyxJQUFJO0FBQ2hCLDJCQUFXO0FBQ1gsc0JBQU07QUFBQSxjQUNWO0FBQ0Esa0JBQUksU0FBUyxHQUFHLElBQUksU0FBUyxRQUFRO0FBQUcsMkJBQVc7QUFBQSxZQUN2RDtBQUFBLFVBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLGFBQVMsUUFBUTtBQUFBLEVBQ3JCO0FBRUEsYUFBVyxLQUFLLElBQUksVUFBVSxZQUFZLGVBQWU7QUFFekQsU0FBTyxFQUFFLFVBQVUsS0FBSyxNQUFNLFdBQVcsRUFBRSxJQUFJLElBQUksS0FBSztBQUM1RDtBQUVPLFNBQVMsYUFBYSxVQUFrQixVQUEyQjtBQUN0RSxNQUFJLGFBQWEsUUFBVztBQUN4QixXQUFPLEVBQUUsS0FBSztBQUFBLEVBQ2xCO0FBRUEsUUFBTSxJQUFZLEtBQUssTUFBTSxXQUFXLE9BQU8sSUFBSSxJQUMvQyxJQUFZLEtBQUssTUFBTSxXQUFXLE1BQU0sSUFBSTtBQUVoRCxNQUFJLFVBQVU7QUFDVixRQUFJLElBQUk7QUFBSyxhQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxDQUFDO0FBQUEsYUFDaEQsSUFBSTtBQUFLLGFBQU8sRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUFBO0FBQzlELGFBQU8sRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUFBLEVBQ3pELE9BQU87QUFDSCxRQUFJLElBQUk7QUFBSyxhQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsYUFDekMsSUFBSTtBQUFLLGFBQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUFBO0FBQ3ZELGFBQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUFBLEVBQ2xEO0FBQ0o7OztBQzVETyxJQUFNLFlBQU4sTUFBZ0I7QUFBQSxFQUtuQixZQUFZLFVBQWtCLFVBQWtCLFlBQW9CO0FBQ2hFLFNBQUssV0FBVztBQUNoQixTQUFLLFdBQVc7QUFDaEIsU0FBSyxhQUFhO0FBQUEsRUFDdEI7QUFDSjtBQU9PLElBQU0sMkJBQU4sTUFBb0U7QUFBQSxFQWF2RSxZQUNJLFlBQ0EsZUFDQSxVQUNBLHdCQUNBLDBCQUNGO0FBQ0UsU0FBSyxhQUFhO0FBQ2xCLFNBQUssZ0JBQWdCO0FBQ3JCLFNBQUssV0FBVztBQUNoQixTQUFLLHlCQUF5QjtBQUM5QixTQUFLLDJCQUEyQjtBQUFBLEVBQ3BDO0FBQUEsRUFFQSxJQUFJLGlCQUEwQjtBQUMxQixXQUFPLEtBQUssY0FBYyxlQUFlO0FBQUEsRUFDN0M7QUFBQSxFQUVBLElBQUksY0FBb0I7QUFDcEIsV0FBTyxLQUFLLGNBQWM7QUFBQSxFQUM5QjtBQUFBLEVBRUEsSUFBSSxrQkFBNEI7QUFoRnBDO0FBaUZRLFlBQU8sVUFBSyxnQkFBTCxtQkFBa0I7QUFBQSxFQUM3QjtBQUFBLEVBRUEsSUFBSSxjQUFvQjtBQUNwQixXQUFPLEtBQUssY0FBYztBQUFBLEVBQzlCO0FBQUEsRUFFQSxJQUFJLGNBQW9CO0FBQ3BCLFdBQU8sS0FBSyxnQkFBZ0I7QUFBQSxFQUNoQztBQUFBO0FBQUE7QUFBQSxFQUlBLFlBQVksa0JBQXdCLG1CQUErQjtBQUMvRCxTQUFLLGNBQWMsWUFBWSxpQkFBaUI7QUFDaEQsU0FBSyxvQkFBb0I7QUFDekIsU0FBSyxvQkFBb0I7QUFDekIsU0FBSyxlQUFlLFVBQVUsU0FBUztBQUFBLEVBQzNDO0FBQUEsRUFFQSxlQUFlLFdBQTRCO0FBQ3ZDLFNBQUssY0FBYyxxQkFBcUIsU0FBUztBQUNqRCxTQUFLLGNBQWMsU0FBUztBQUFBLEVBQ2hDO0FBQUEsRUFFQSxJQUFJLG1CQUF5QjtBQUN6QixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsYUFBYSxXQUFpQztBQUMxQyxVQUFNLGFBQXFCLEtBQUssa0JBQzNCLFFBQVEsU0FBUyxFQUNqQixrQ0FBdUMsSUFBSTtBQUNoRCxVQUFNLGdCQUFzQixLQUFLLGtCQUFrQixRQUFRLFNBQVM7QUFDcEUsVUFBTSxXQUFtQixjQUFjLHNDQUEyQyxJQUFJO0FBQ3RGLFVBQU0sV0FBbUIsY0FBYyxzQ0FBMkMsSUFBSTtBQUN0RixXQUFPLElBQUksVUFBVSxVQUFVLFVBQVUsVUFBVTtBQUFBLEVBQ3ZEO0FBQUEsRUFFQSxrQkFBd0I7QUFDcEIsU0FBSyxjQUFjLGtDQUFrQztBQUFBLEVBQ3pEO0FBQUEsRUFFUSxvQkFBMEI7QUFDOUIsU0FBSyxjQUFjLDhCQUE4QjtBQUFBLEVBQ3JEO0FBQUEsRUFFQSxNQUFNLGNBQWMsVUFBeUM7QUFDekQsWUFBUSxLQUFLLFlBQVk7QUFBQSxNQUNyQixLQUFLO0FBQ0QsY0FBTSxLQUFLLHlCQUF5QixRQUFRO0FBQzVDO0FBQUEsTUFFSixLQUFLO0FBQ0QsY0FBTSxLQUFLLHVCQUF1QixRQUFRO0FBQzFDO0FBQUEsSUFDUjtBQUFBLEVBQ0o7QUFBQSxFQUVBLE1BQU0seUJBQXlCLFVBQXlDO0FBQ3BFLFFBQUksNkJBQW9DLEtBQUssWUFBWSxhQUFhO0FBS2xFLFdBQUssWUFBWSxlQUFlLEtBQUssc0JBQXNCLFVBQVUsS0FBSyxXQUFXO0FBR3JGLFlBQU0sS0FBSyxnQkFBZ0IsY0FBYyxLQUFLLFFBQVE7QUFBQSxJQUMxRDtBQUdBLFFBQUksMkJBQWtDO0FBQ2xDLFdBQUssY0FBYywyQkFBMkI7QUFDOUMsV0FBSyxjQUFjLFNBQVM7QUFBQSxJQUNoQyxPQUFPO0FBQ0gsVUFBSSxLQUFLLFNBQVMsa0JBQWtCO0FBQ2hDLGNBQU0sS0FBSyxpQkFBaUI7QUFDNUIsYUFBSyxjQUFjLGtDQUFrQztBQUFBLE1BQ3pELE9BQU87QUFDSCxhQUFLLGtCQUFrQjtBQUFBLE1BQzNCO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQSxFQUVBLE1BQWMsbUJBQWtDO0FBSTVDLFVBQU0sWUFBWSxLQUFLLFlBQVkscUJBQXFCLEtBQUssZUFBZTtBQUM1RSxRQUFJLFlBQVksR0FBRztBQUNmLFdBQUsseUJBQXlCLElBQUksS0FBSyxlQUFlO0FBQ3RELFlBQU0sS0FBSyx5QkFBeUIsTUFBTTtBQUFBLElBQzlDO0FBQUEsRUFDSjtBQUFBLEVBRUEsTUFBTSx1QkFBdUIsVUFBeUM7QUFDbEUsUUFBSTtBQUFpQyxXQUFLLGtCQUFrQjtBQUFBLFNBQ3ZEO0FBQ0QsV0FBSyxjQUFjLDJCQUEyQjtBQUM5QyxXQUFLLGNBQWMsU0FBUztBQUFBLElBQ2hDO0FBQUEsRUFDSjtBQUFBLEVBRUEsc0JBQXNCLFVBQTBCLE1BQThCO0FBQzFFLFFBQUk7QUFFSixRQUFJLDJCQUFrQztBQUVsQyxlQUFTLEtBQUssdUJBQXVCLHFCQUFxQjtBQUFBLElBQzlELE9BQU87QUFFSCxVQUFJLEtBQUssYUFBYTtBQUNsQixpQkFBUyxLQUFLLHVCQUF1QjtBQUFBLFVBQ2pDO0FBQUEsVUFDQSxLQUFLO0FBQUEsUUFDVDtBQUFBLE1BQ0osT0FBTztBQUNILGNBQU0sY0FBb0IsS0FBSyxTQUFTO0FBQ3hDLGlCQUFTLEtBQUssdUJBQXVCO0FBQUEsVUFDakM7QUFBQSxVQUNBLFlBQVk7QUFBQSxRQUNoQjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVBLE1BQU0sMEJBQTBCLE1BQTZCO0FBQ3pELFVBQU0sSUFBa0IsS0FBSyxnQkFBZ0I7QUFFN0MsTUFBRSxpQkFBaUI7QUFFbkIsVUFBTSxLQUFLLGdCQUFnQixjQUFjLEtBQUssUUFBUTtBQUFBLEVBQzFEO0FBQ0o7OztBQ3RNTyxJQUFNQyxRQUFOLE1BQU0sTUFBSztBQUFBLEVBT2QsWUFBWSxVQUFrQixRQUFxQjtBQUMvQyxTQUFLLFdBQVc7QUFDaEIsU0FBSyxnQkFBZ0IsQ0FBQztBQUN0QixTQUFLLGdCQUFnQixDQUFDO0FBQ3RCLFNBQUssV0FBVyxDQUFDO0FBQ2pCLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUEsRUFFTyxhQUFhLGNBQTRCLHNCQUF1QztBQUNuRixRQUFJLFNBQWlCO0FBQ3JCLFFBQUksZ0JBQWdCLG1CQUF3QixnQkFBZ0I7QUFDeEQsZ0JBQVUsS0FBSyxjQUFjO0FBQ2pDLFFBQUksZ0JBQWdCLG1CQUF3QixnQkFBZ0I7QUFDeEQsZ0JBQVUsS0FBSyxjQUFjO0FBRWpDLFFBQUksc0JBQXNCO0FBQ3RCLGlCQUFXLFFBQVEsS0FBSyxVQUFVO0FBQzlCLGtCQUFVLEtBQUssYUFBYSxjQUFjLG9CQUFvQjtBQUFBLE1BQ2xFO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFTyxxQkFBcUIsY0FBNEIsc0JBQXVDO0FBQzNGLFVBQU0sV0FBbUIsS0FBSyxzQkFBc0IsY0FBYyxvQkFBb0I7QUFHdEYsVUFBTSxrQkFBa0IsSUFBSSxJQUFJLFFBQVE7QUFDeEMsV0FBTyxnQkFBZ0I7QUFBQSxFQUMzQjtBQUFBLEVBRU8sc0JBQ0gsY0FDQSxzQkFDTTtBQUNOLFFBQUksU0FBaUIsQ0FBQztBQUN0QixZQUFRLGNBQWM7QUFBQSxNQUNsQixLQUFLO0FBQ0QsaUJBQVMsS0FBSztBQUNkO0FBQUEsTUFDSixLQUFLO0FBQ0QsaUJBQVMsS0FBSztBQUNkO0FBQUEsTUFDSixLQUFLO0FBQ0QsaUJBQVMsS0FBSyxjQUFjLE9BQU8sS0FBSyxhQUFhO0FBQUEsSUFDN0Q7QUFFQSxRQUFJLHNCQUFzQjtBQUN0QixpQkFBVyxXQUFXLEtBQUssVUFBVTtBQUNqQyxpQkFBUyxPQUFPO0FBQUEsVUFDWixRQUFRLHNCQUFzQixjQUFjLG9CQUFvQjtBQUFBLFFBQ3BFO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxxQkFBcUIsVUFBNEI7QUFDcEQsUUFBSSxTQUFpQjtBQUNyQixjQUFVLEtBQUssb0NBQW9DLFVBQVUsS0FBSyxhQUFhO0FBQy9FLGNBQVUsS0FBSyxvQ0FBb0MsVUFBVSxLQUFLLGFBQWE7QUFDL0UsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVRLG9DQUFvQyxVQUFvQixPQUF1QjtBQUNuRixRQUFJLFNBQWlCO0FBQ3JCLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDbkMsVUFBSSxPQUFPLEdBQUcsVUFBVSxNQUFNLENBQUMsRUFBRSxRQUFRO0FBQUc7QUFBQSxJQUNoRDtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxXQUFXLFlBQWtCO0FBQ3pCLFdBQU8sSUFBSSxNQUFLLFFBQVEsSUFBSTtBQUFBLEVBQ2hDO0FBQUEsRUFFQSxJQUFJLGFBQWE7QUFDYixXQUFPLEtBQUssVUFBVTtBQUFBLEVBQzFCO0FBQUEsRUFFQSxrQkFBa0IsS0FBbUI7QUFDakMsV0FBTyxLQUFLLFFBQVEsVUFBVSxvQkFBb0IsR0FBRyxDQUFDO0FBQUEsRUFDMUQ7QUFBQSxFQUVBLFFBQVEsV0FBNEI7QUFDaEMsV0FBTyxLQUFLLGlCQUFpQixXQUFXLEtBQUs7QUFBQSxFQUNqRDtBQUFBLEVBRUEsZ0JBQWdCLFdBQTRCO0FBQ3hDLFdBQU8sS0FBSyxpQkFBaUIsV0FBVyxJQUFJO0FBQUEsRUFDaEQ7QUFBQSxFQUVRLGlCQUFpQixXQUFzQixlQUE4QjtBQUN6RSxRQUFJLENBQUMsVUFBVSxTQUFTO0FBQ3BCLGFBQU87QUFBQSxJQUNYO0FBQ0EsVUFBTUMsS0FBZSxVQUFVLE1BQU07QUFDckMsVUFBTSxXQUFtQkEsR0FBRSxNQUFNO0FBQ2pDLGVBQVcsV0FBVyxLQUFLLFVBQVU7QUFDakMsVUFBSSxhQUFhLFFBQVEsVUFBVTtBQUMvQixlQUFPLFFBQVEsaUJBQWlCQSxJQUFHLGFBQWE7QUFBQSxNQUNwRDtBQUFBLElBQ0o7QUFFQSxRQUFJLFNBQWU7QUFDbkIsUUFBSSxlQUFlO0FBQ2YsWUFBTSxVQUFnQixJQUFJO0FBQUEsUUFBSztBQUFBLFFBQVU7QUFBQTtBQUFBLE1BQWlCO0FBQzFELFdBQUssU0FBUyxLQUFLLE9BQU87QUFDMUIsZUFBUyxRQUFRLGlCQUFpQkEsSUFBRyxhQUFhO0FBQUEsSUFDdEQ7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRUEsZUFBMEI7QUFDdEIsVUFBTSxPQUFpQixDQUFDO0FBRXhCLFFBQUksT0FBYTtBQUdqQixXQUFPLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFdBQUssS0FBSyxLQUFLLFFBQVE7QUFDdkIsYUFBTyxLQUFLO0FBQUEsSUFDaEI7QUFDQSxXQUFPLElBQUksVUFBVSxLQUFLLFFBQVEsQ0FBQztBQUFBLEVBQ3ZDO0FBQUEsRUFFQSxjQUFvQjtBQUVoQixRQUFJLE9BQWE7QUFDakIsV0FBTyxDQUFDLEtBQUssWUFBWTtBQUNyQixhQUFPLEtBQUs7QUFBQSxJQUNoQjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxRQUFRLE9BQWUsY0FBa0M7QUFDckQsVUFBTSxXQUFtQixLQUFLLHVCQUF1QixZQUFZO0FBQ2pFLFdBQU8sU0FBUyxLQUFLO0FBQUEsRUFDekI7QUFBQSxFQUVBLHVCQUF1QixjQUFvQztBQUN2RCxXQUFPLGdCQUFnQixrQkFBdUIsS0FBSyxnQkFBZ0IsS0FBSztBQUFBLEVBQzVFO0FBQUEsRUFFQSxXQUFXLGVBQThCLFNBQXFCO0FBQzFELFFBQUksY0FBYyxLQUFLLFVBQVUsR0FBRztBQUNoQyxXQUFLLHFCQUFxQixPQUFPO0FBQUEsSUFDckMsT0FBTztBQUdILGlCQUFXLGFBQWEsY0FBYyxNQUFNO0FBQ3hDLGFBQUssdUJBQXVCLFdBQVcsT0FBTztBQUFBLE1BQ2xEO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQSxFQUVBLHFCQUFxQixTQUFxQjtBQUN0QyxTQUFLLHVCQUF1QixVQUFVLFdBQVcsT0FBTztBQUFBLEVBQzVEO0FBQUEsRUFFQSx1QkFBdUIsV0FBc0IsU0FBcUI7QUFDOUQsVUFBTSxPQUFhLEtBQUssZ0JBQWdCLFNBQVM7QUFDakQsVUFBTSxXQUFtQixLQUFLLHVCQUF1QixRQUFRLFlBQVk7QUFFekUsYUFBUyxLQUFLLE9BQU87QUFBQSxFQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSwyQkFBMkIsVUFBb0Isb0JBQW1DO0FBQzlFLGVBQVcsUUFBUSxTQUFTLE9BQU87QUFDL0IsV0FBSyx1QkFBdUIsTUFBTSxrQkFBa0I7QUFBQSxJQUN4RDtBQUFBLEVBQ0o7QUFBQSxFQUVBLGVBQWUsVUFBb0Isb0JBQW1DO0FBQ2xFLGVBQVcsUUFBUSxTQUFTLE9BQU87QUFDL0IsV0FBSyx1QkFBdUIsTUFBTSxrQkFBa0I7QUFBQSxJQUN4RDtBQUFBLEVBQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsdUJBQXVCLE1BQVksb0JBQW1DO0FBQ2xFLGVBQVcsYUFBYSxLQUFLLFNBQVMsY0FBYyxNQUFNO0FBQ3RELFlBQU0sT0FBYSxLQUFLLFFBQVEsU0FBUztBQUN6QyxXQUFLLHVCQUF1QixNQUFNLGtCQUFrQjtBQUFBLElBQ3hEO0FBQUEsRUFDSjtBQUFBLEVBRUEsdUJBQXVCLE1BQVksb0JBQW1DO0FBQ2xFLFVBQU0sU0FBUyxLQUFLLGNBQWMsUUFBUSxJQUFJO0FBQzlDLFFBQUksVUFBVTtBQUFJLFdBQUssY0FBYyxPQUFPLFFBQVEsQ0FBQztBQUNyRCxVQUFNLFNBQVMsS0FBSyxjQUFjLFFBQVEsSUFBSTtBQUM5QyxRQUFJLFVBQVU7QUFBSSxXQUFLLGNBQWMsT0FBTyxRQUFRLENBQUM7QUFDckQsUUFBSSxVQUFVLE1BQU0sVUFBVSxNQUFNLG9CQUFvQjtBQUNwRCxZQUFNLGlDQUFpQyxLQUFLLEtBQUssdUJBQXVCLEtBQUssUUFBUTtBQUFBLElBQ3pGO0FBQUEsRUFDSjtBQUFBLEVBRUEsa0JBQWtCLE9BQWUsY0FBa0M7QUFDL0QsVUFBTSxXQUFtQixLQUFLLHVCQUF1QixZQUFZO0FBQ2pFLGFBQVMsT0FBTyxPQUFPLENBQUM7QUFBQSxFQUM1QjtBQUFBLEVBRUEsY0FBc0I7QUFDbEIsVUFBTSxTQUFpQixDQUFDO0FBQ3hCLFdBQU8sS0FBSyxJQUFJO0FBQ2hCLGVBQVcsV0FBVyxLQUFLLFVBQVU7QUFDakMsYUFBTyxLQUFLLEdBQUcsUUFBUSxZQUFZLENBQUM7QUFBQSxJQUN4QztBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxtQkFBeUI7QUFDckIsU0FBSyxTQUFTLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDekIsVUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVO0FBQ3pCLGVBQU87QUFBQSxNQUNYLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVTtBQUNoQyxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU87QUFBQSxJQUNYLENBQUM7QUFFRCxlQUFXLFFBQVEsS0FBSyxVQUFVO0FBQzlCLFdBQUssaUJBQWlCO0FBQUEsSUFDMUI7QUFBQSxFQUNKO0FBQUEsRUFFQSxrQkFBa0IsT0FBZSxNQUFNLFNBQWlCLEdBQUc7QUFDdkQsUUFBSSxNQUFjLFFBQVEsT0FBTyxHQUFHLElBQUksT0FBTztBQUMvQyxZQUFRLElBQUssT0FBTyxLQUFLLFNBQVMsTUFBTSxDQUFFO0FBQUEsRUFDOUM7QUFBQSxFQUVBLFNBQVMsU0FBaUIsR0FBVztBQUNqQyxRQUFJLFNBQWlCO0FBQ3JCLFFBQUksWUFBb0IsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUU3QyxjQUFVLEdBQUcsU0FBUyxHQUFHLEtBQUssUUFBUTtBQUFBO0FBQ3RDLGlCQUFhO0FBQ2IsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLGNBQWMsUUFBUSxLQUFLO0FBQ2hELFlBQU0sT0FBTyxLQUFLLGNBQWMsQ0FBQztBQUNqQyxnQkFBVSxHQUFHLFNBQVMsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUNoRTtBQUNBLGFBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxjQUFjLFFBQVEsS0FBSztBQUNoRCxZQUFNLE9BQU8sS0FBSyxjQUFjLENBQUM7QUFDakMsWUFBTSxJQUFJLEtBQUssUUFBUSxRQUFRO0FBQy9CLGdCQUFVLEdBQUcsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUNqRTtBQUVBLGVBQVcsV0FBVyxLQUFLLFVBQVU7QUFDakMsZ0JBQVUsUUFBUSxTQUFTLFNBQVMsQ0FBQztBQUFBLElBQ3pDO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVBLFFBQWM7QUFDVixXQUFPLEtBQUssbUJBQW1CLE1BQU0sSUFBSTtBQUFBLEVBQzdDO0FBQUEsRUFFQSxtQkFBbUIsV0FBcUMsU0FBZSxNQUFZO0FBQy9FLFVBQU0sU0FBZSxJQUFJLE1BQUssS0FBSyxVQUFVLE1BQU07QUFDbkQsV0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUssY0FBYyxPQUFPLENBQUMsU0FBUyxVQUFVLElBQUksQ0FBQyxDQUFDO0FBQy9FLFdBQU8sZ0JBQWdCLENBQUMsR0FBRyxLQUFLLGNBQWMsT0FBTyxDQUFDLFNBQVMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUUvRSxlQUFXLEtBQUssS0FBSyxVQUFVO0FBQzNCLFlBQU0sWUFBWTtBQUNsQixZQUFNLFVBQVUsRUFBRSxtQkFBbUIsV0FBVyxTQUFTO0FBQ3pELGFBQU8sU0FBUyxLQUFLLE9BQU87QUFBQSxJQUNoQztBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxPQUFPLGNBQWMsY0FBMEM7QUFDM0QsUUFBSTtBQUNKLFFBQUksZ0JBQWdCO0FBQXNCLGVBQVM7QUFBQSxhQUMxQyxnQkFBZ0I7QUFBc0IsZUFBUztBQUFBO0FBQ25ELFlBQU07QUFDWCxXQUFPO0FBQUEsRUFDWDtBQUNKO0FBRU8sSUFBTSxpQkFBTixNQUFxQjtBQUFBLEVBQ3hCLE9BQU8seUJBQXlCLG9CQUFnQztBQUM1RCxXQUFPLG1CQUFtQixtQkFBbUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLGVBQWU7QUFBQSxFQUN6RjtBQUFBLEVBRUEsT0FBTyx3QkFDSCwwQkFDQSxVQUNBLFlBQ0k7QUFDSixXQUFPLFNBQVM7QUFBQSxNQUNaLENBQUMsVUFDSSw4QkFBMEMsS0FBSyxTQUFTLEtBQUssVUFDOUQsQ0FBQyx5QkFBeUIsU0FBUyxLQUFLLFFBQVE7QUFBQSxJQUN4RDtBQUFBLEVBQ0o7QUFDSjs7O0FDM1VBLG9CQUFtQjtBQVlaLFNBQVMsc0JBQWdELEtBQWtDO0FBQzlGLFNBQU8sT0FBTyxRQUFRLEdBQUc7QUFDN0I7QUFVTyxJQUFNLHNCQUFzQixPQUFPO0FBZ0JuQyxTQUFTLHFCQUNaLE1BQ0EsV0FDQSxnQkFDTTtBQUNOLE1BQUksU0FBaUI7QUFDckIsUUFBTSxXQUFtQixLQUFLLFFBQVEsU0FBUztBQUMvQyxNQUFJLFlBQVksR0FBRztBQUNmLFVBQU0sV0FBbUIsS0FBSyxVQUFVLEdBQUcsUUFBUTtBQUNuRCxVQUFNLFNBQWlCLFdBQVcsVUFBVTtBQUM1QyxVQUFNLFNBQWlCLEtBQUssVUFBVSxNQUFNO0FBQzVDLGFBQVMsV0FBVyxpQkFBaUI7QUFBQSxFQUN6QztBQUNBLFNBQU87QUFDWDtBQVVPLFNBQVMsT0FBTyxLQUFhLE9BQU8sR0FBVztBQUNsRCxNQUFJQyxNQUFVLGFBQWEsTUFDdkJDLE1BQVUsYUFBYTtBQUMzQixXQUFTLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDckMsU0FBSyxJQUFJLFdBQVcsQ0FBQztBQUNyQixJQUFBRCxNQUFLLEtBQUssS0FBS0EsTUFBSyxJQUFJLFVBQVU7QUFDbEMsSUFBQUMsTUFBSyxLQUFLLEtBQUtBLE1BQUssSUFBSSxVQUFVO0FBQUEsRUFDdEM7QUFDQSxFQUFBRCxNQUFLLEtBQUssS0FBS0EsTUFBTUEsUUFBTyxJQUFLLFVBQVUsSUFBSSxLQUFLLEtBQUtDLE1BQU1BLFFBQU8sSUFBSyxVQUFVO0FBQ3JGLEVBQUFBLE1BQUssS0FBSyxLQUFLQSxNQUFNQSxRQUFPLElBQUssVUFBVSxJQUFJLEtBQUssS0FBS0QsTUFBTUEsUUFBTyxJQUFLLFVBQVU7QUFDckYsVUFBUSxjQUFjLFVBQVVDLFFBQU9ELFFBQU8sSUFBSSxTQUFTLEVBQUU7QUFDakU7QUFRTyxTQUFTLHNCQUFzQixPQUF1QjtBQUN6RCxTQUFPLE1BQU0sT0FBTyxxQkFBcUI7QUFDN0M7QUFFTyxTQUFTLHVCQUF1QixNQUF3QjtBQUMzRCxTQUFPLEtBQUssV0FBVyxRQUFRLElBQUksRUFBRSxNQUFNLElBQUk7QUFDbkQ7QUFFTyxTQUFTLGdCQUFnQixLQUErQjtBQUMzRCxRQUFNLFVBQWtCLElBQUksVUFBVTtBQUN0QyxRQUFNLFVBQWtCLElBQUksU0FBUyxRQUFRO0FBQzdDLFFBQU0sS0FBYSxJQUFJLFVBQVUsR0FBRyxPQUFPO0FBQzNDLFNBQU8sQ0FBQyxJQUFJLE9BQU87QUFDdkI7QUFFTyxTQUFTLG1CQUFtQixLQUErQjtBQUM5RCxNQUFJLGNBQXNCO0FBQzFCLE1BQUksVUFBa0I7QUFDdEIsTUFBSSx3QkFBZ0M7QUFDcEMsTUFBSSx3QkFBd0IsTUFBTTtBQUM5QixVQUFNLFFBQWtCLHVCQUF1QixHQUFHO0FBR2xELGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDbkMsVUFBSSxNQUFNLENBQUMsS0FBSyxPQUFPO0FBQ25CLGdDQUF3QjtBQUN4QjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsUUFBSSx1QkFBdUI7QUFDdkIsWUFBTSwwQkFBa0M7QUFDeEMsWUFBTSx1QkFDRix3QkFBd0IsMEJBQTBCO0FBQ3RELFlBQU0sbUJBQTZCLE1BQU07QUFBQSxRQUNyQztBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQ0Esb0JBQWMsaUJBQWlCLEtBQUssSUFBSTtBQUN4QyxnQkFBVSxNQUFNLEtBQUssSUFBSTtBQUFBLElBQzdCO0FBQUEsRUFDSjtBQUNBLE1BQUksWUFBWSxVQUFVO0FBQUcsY0FBVTtBQUN2QyxTQUFPLENBQUMsYUFBYSxPQUFPO0FBQ2hDO0FBUU8sU0FBUyxzQ0FDWixPQUNBLGNBQ007QUFDTixNQUFJLFNBQWlCO0FBQ3JCLFdBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDbkMsUUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUssY0FBYztBQUNqQyxlQUFTO0FBQ1Q7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUNBLFNBQU87QUFDWDtBQXVETyxTQUFTLDRCQUE0QixRQUEwQjtBQUNsRSxRQUFNLFNBQW1CLENBQUM7QUFDMUIsUUFBTSxhQUF1QixPQUFPLE1BQU0sR0FBRztBQUM3QyxhQUFXLE9BQU8sWUFBWTtBQUMxQixXQUFPLEtBQUssSUFBSSxXQUFXLEdBQUcsSUFBSSxNQUFNLE1BQU0sR0FBRztBQUFBLEVBQ3JEO0FBQ0EsU0FBTztBQUNYOzs7QUNqTkEsSUFBQUUsaUJBQW1CO0FBUVosSUFBTSxtQkFBTixNQUFnRDtBQUFBLEVBQ25ELElBQUksUUFBZ0I7QUFDaEIsZUFBTyxlQUFBQyxTQUFPLEVBQUUsUUFBUSxLQUFLO0FBQUEsRUFDakM7QUFDSjtBQWtCTyxJQUFNLFdBQU4sTUFBZTtBQUFBLEVBQ2xCLE9BQU8sZ0JBQWdCLEtBQXFCO0FBQ3hDLGVBQU8sZUFBQUMsU0FBTyxLQUFLLG9CQUFvQjtBQUFBLEVBQzNDO0FBQ0o7QUFFTyxJQUFJLHFCQUFvQyxJQUFJLGlCQUFpQjs7O0FDeEI3RCxJQUFNLG9CQUFOLE1BQU0sa0JBQWlCO0FBQUEsRUFlMUIsWUFBWSxTQUFpQixVQUFrQixNQUFjLHdCQUFnQztBQUN6RixTQUFLLFVBQVU7QUFDZixTQUFLLFdBQVc7QUFDaEIsU0FBSyxPQUFPO0FBQ1osU0FBSyx5QkFBeUI7QUFBQSxFQUNsQztBQUFBLEVBRUEsSUFBSSwyQkFBbUM7QUFDbkMsV0FBTyxLQUFLLEtBQUssS0FBSyx5QkFBeUIsYUFBYTtBQUFBLEVBQ2hFO0FBQUEsRUFFQSxRQUFpQjtBQUNiLFdBQU8sS0FBSyxRQUFRLGVBQWUsbUJBQW1CLEtBQUs7QUFBQSxFQUMvRDtBQUFBLEVBRUEsNEJBQXFDO0FBQ2pDLFdBQU8sS0FBSyxjQUFjLEtBQUssa0JBQWlCO0FBQUEsRUFDcEQ7QUFBQSxFQUVBLE9BQU8sMkJBQTJCLFVBQXdDO0FBQ3RFLFdBQU8sa0JBQWlCO0FBQUEsTUFDcEIsa0JBQWlCO0FBQUEsTUFDakIsa0JBQWlCO0FBQUEsTUFDakIsU0FBUztBQUFBLE1BQ1Q7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUFBLEVBRUEsT0FBTyxlQUNILFlBQ0EsVUFDQSxNQUNBLHdCQUNGO0FBQ0UsVUFBTSxlQUF1QixTQUFTLGdCQUFnQixVQUFVO0FBQ2hFLFdBQU8sSUFBSSxrQkFBaUIsY0FBYyxVQUFVLE1BQU0sc0JBQXNCO0FBQUEsRUFDcEY7QUFBQSxFQUVBLE9BQU8sa0JBQ0gsY0FDQSxVQUNBLE1BQ0Esd0JBQ0Y7QUFDRSxXQUFPLElBQUksa0JBQWlCLGNBQWMsVUFBVSxNQUFNLHNCQUFzQjtBQUFBLEVBQ3BGO0FBQUEsRUFFQSxXQUFXLGtCQUEwQjtBQUNqQyxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRUEsZ0JBQXdCO0FBQ3BCLFdBQU8sc0JBQXNCLEtBQUssT0FBTztBQUFBLEVBQzdDO0FBQUEsRUFFQSxpQkFBaUI7QUFDYixXQUFPLElBQUksS0FBSyxjQUFjLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUk7QUFBQSxFQUNqRTtBQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF6RWEsa0JBYU0seUJBQWlDO0FBYjdDLElBQU0sbUJBQU47QUFpRkEsSUFBTSx5QkFBTixNQUE2QjtBQUFBO0FBQUEsRUFLaEMsWUFBWSxVQUFzQixjQUE2QjtBQUYvRCw4QkFBNkMsQ0FBQztBQUcxQyxTQUFLLFdBQVc7QUFDaEIsU0FBSyxlQUFlO0FBQUEsRUFDeEI7QUFBQSxFQUVBLHVCQUF5QztBQUNyQyxVQUFNLFdBQVcsaUJBQWlCO0FBQ2xDLFVBQU0sT0FBTyxLQUFLLFNBQVM7QUFDM0IsVUFBTSxVQUFVLG1CQUFtQixNQUFNLElBQUksVUFBVSxHQUFHO0FBQzFELFVBQU0sb0JBQW9CO0FBQzFCLFdBQU8saUJBQWlCLGtCQUFrQixTQUFTLFVBQVUsTUFBTSxpQkFBaUI7QUFBQSxFQUN4RjtBQUFBLEVBRUEsbUJBQW1CLFVBQTBCLFVBQW9DO0FBQzdFLFFBQUksZUFBdUIsS0FBSyxTQUFTO0FBQ3pDLFFBQUksS0FBSyxhQUFhLGVBQWUsUUFBUSxHQUFHO0FBQzVDLHFCQUFlLEtBQUssTUFBTSxLQUFLLGFBQWEsY0FBYyxRQUFRLENBQUM7QUFBQSxJQUN2RTtBQUNBLFVBQU0sb0JBQW9CO0FBRTFCLFVBQU0sV0FBbUM7QUFBQSxNQUNyQztBQUFBLE1BQ0EsaUJBQWlCO0FBQUEsTUFDakI7QUFBQSxNQUNBO0FBQUEsTUFDQSxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFDVDtBQUVBLFVBQU0sV0FBVyxTQUFTO0FBQzFCLFVBQU0sT0FBTyxTQUFTO0FBQ3RCLFVBQU0sVUFBVSxtQkFBbUIsTUFBTSxJQUFJLFVBQVUsR0FBRztBQUMxRCxXQUFPLGlCQUFpQixrQkFBa0IsU0FBUyxVQUFVLE1BQU0saUJBQWlCO0FBQUEsRUFDeEY7QUFBQSxFQUVBLG9CQUNJLFVBQ0EsY0FDZ0I7QUFDaEIsVUFBTSxXQUFtQztBQUFBLE1BQ3JDO0FBQUEsTUFDQSxhQUFhO0FBQUEsTUFDYixhQUFhO0FBQUEsTUFDYixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsSUFDVDtBQUNBLFVBQU0sV0FBVyxTQUFTO0FBQzFCLFVBQU0sT0FBTyxTQUFTO0FBQ3RCLFVBQU0sVUFBVSxtQkFBbUIsTUFBTSxJQUFJLFVBQVUsR0FBRztBQUMxRCxVQUFNLG9CQUFvQjtBQUMxQixXQUFPLGlCQUFpQixrQkFBa0IsU0FBUyxVQUFVLE1BQU0saUJBQWlCO0FBQUEsRUFDeEY7QUFDSjtBQUVPLElBQU0seUJBQU4sTUFBNkI7QUFBQSxFQUNoQyxPQUFPLDJCQUEyQixjQUEwQztBQUN4RSxRQUFJLGFBQWlDLENBQUMsR0FBRyxhQUFhLFNBQVMsMEJBQTBCLENBQUM7QUFDMUYsUUFBSSxXQUFXLFdBQVc7QUFDdEIsbUJBQWEsQ0FBQyxHQUFHLGFBQWEsU0FBUywyQkFBMkIsQ0FBQztBQUV2RSxVQUFNLFNBQTZCLENBQUM7QUFDcEMsYUFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUN4QyxZQUFNLFFBQTBCLFdBQVcsQ0FBQztBQUM1QyxZQUFNLGFBQWEsTUFBTSxDQUFDO0FBQzFCLFlBQU0sV0FBVyxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLFlBQU0sT0FBTyxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLFlBQU0sVUFBa0IsU0FBUyxnQkFBZ0IsVUFBVTtBQUMzRCxZQUFNLHlCQUNGLFFBQVEsUUFBUSxJQUFJLG1CQUFtQixNQUFNLFFBQVE7QUFFekQsWUFBTSxPQUF5QixJQUFJO0FBQUEsUUFDL0I7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQ0EsYUFBTyxLQUFLLElBQUk7QUFBQSxJQUNwQjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxPQUFPLHVCQUF1QixjQUE4QjtBQUN4RCxXQUFPLGFBQWEsUUFBUSxrQkFBa0IsRUFBRTtBQUFBLEVBQ3BEO0FBQ0o7OztBQ3JMTyxJQUFNLHNCQUFOLE1BQU0scUJBQW9CO0FBQUEsRUFDN0IsT0FBTyxlQUNILFlBQ0EsWUFDQSxpQkFDYTtBQUNiLFFBQUksU0FBaUI7QUFDckIsUUFBSSxXQUFXLFNBQVMsVUFBVSxHQUFHO0FBQ2pDLGVBQVMscUJBQXFCLFlBQVksWUFBWSxlQUFlO0FBQUEsSUFDekUsT0FBTztBQUNILFlBQU0sa0JBQWtCLHVCQUF1QixVQUFVO0FBQ3pELFlBQU0sa0JBQWtCLHVCQUF1QixVQUFVO0FBQ3pELFlBQU0sU0FBd0IscUJBQW9CO0FBQUEsUUFDOUM7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUNBLFVBQUksV0FBVyxNQUFNO0FBQ2pCLGNBQU0sdUJBQXVCLHVCQUF1QixlQUFlO0FBQ25FLGNBQU0sZ0JBQXdCLGdCQUFnQjtBQUM5Qyx3QkFBZ0IsT0FBTyxRQUFRLGVBQWUsR0FBRyxvQkFBb0I7QUFDckUsaUJBQVMsZ0JBQWdCLEtBQUssSUFBSTtBQUFBLE1BQ3RDO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxPQUFPLEtBQUssWUFBc0IsWUFBcUM7QUFDbkUsUUFBSSxTQUFpQjtBQUNyQixRQUFJLFlBQW9CO0FBQ3hCLFVBQU0sZUFBdUIsV0FBVyxTQUFTO0FBQ2pELGFBQVMsWUFBWSxHQUFHLFlBQVksV0FBVyxRQUFRLGFBQWE7QUFDaEUsWUFBTSxhQUFxQixXQUFXLFNBQVMsRUFBRSxLQUFLO0FBQ3RELFlBQU0sYUFBcUIsV0FBVyxTQUFTLEVBQUUsS0FBSztBQUN0RCxVQUFJLGNBQWMsWUFBWTtBQUMxQixZQUFJLGFBQWEsY0FBYztBQUMzQixtQkFBUyxZQUFZO0FBQ3JCO0FBQUEsUUFDSjtBQUNBO0FBQUEsTUFDSixPQUFPO0FBQ0gsb0JBQVk7QUFBQSxNQUNoQjtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNKOzs7QUMrQk8sSUFBTSxlQUFOLE1BQU0sY0FBYTtBQUFBLEVBc0J0QixZQUNJLFVBQ0EsaUJBQ0EsZ0JBQ0EsU0FDRjtBQUNFLFNBQUssV0FBVztBQUNoQixTQUFLLGtCQUFrQjtBQUN2QixTQUFLLGlCQUFpQjtBQUN0QixTQUFLLGtCQUFrQjtBQUd2QixTQUFLLFdBQVcsT0FBTyxLQUFLLHVCQUF1QixDQUFDO0FBQUEsRUFDeEQ7QUFBQSxFQUVBLG9CQUE2QjtBQUN6QixXQUFPLEtBQUssZUFBZSxTQUFTLEtBQUs7QUFBQSxFQUM3QztBQUFBLEVBRUEsT0FBTyxPQUFPLFVBQWtCLFVBQW9DO0FBQ2hFLFVBQU0sQ0FBQyxpQkFBaUIsZ0JBQWdCLE9BQU8sSUFBSSxLQUFLLFVBQVUsVUFBVSxRQUFRO0FBRXBGLFdBQU8sSUFBSSxjQUFhLFVBQVUsaUJBQWlCLGdCQUFnQixPQUFPO0FBQUEsRUFDOUU7QUFBQSxFQUVBLE9BQU8sVUFBVSxVQUFrQixVQUF5RDtBQUN4RixVQUFNLG9CQUFvQix1QkFBdUIsdUJBQXVCLFFBQVE7QUFDaEYsUUFBSSxpQkFBeUIsa0JBQWtCLFFBQVE7QUFFdkQsUUFBSSxrQkFBbUM7QUFDdkMsUUFBSSxVQUFrQjtBQUd0QixVQUFNLFlBQVksVUFBVSx5QkFBeUIsaUJBQWlCO0FBQ3RFLFFBQUksdUNBQVcsU0FBUztBQUVwQixZQUFNLENBQUMsZ0JBQWdCLFNBQVMsSUFBSSxnQkFBZ0IsaUJBQWlCO0FBR3JFLFlBQU0sWUFBb0IsVUFBVSxXQUFXLG1DQUFtQyxFQUFFO0FBR3BGLFVBQUksa0JBQTBCO0FBQzlCLE9BQUMsaUJBQWlCLGNBQWMsSUFBSSxnQkFBZ0IsU0FBUztBQUM3RCxVQUFJLENBQUMsU0FBUyx1QkFBdUI7QUFDakMsMEJBQWtCLElBQUksZ0JBQWdCLFdBQVcsZ0JBQWdCLGVBQWU7QUFBQSxNQUNwRjtBQUFBLElBQ0o7QUFHQSxLQUFDLGdCQUFnQixPQUFPLElBQUksS0FBSyx1QkFBdUIsY0FBYztBQUV0RSxXQUFPLENBQUMsaUJBQWlCLGdCQUFnQixPQUFPO0FBQUEsRUFDcEQ7QUFBQSxFQUVBLE9BQU8sdUJBQXVCLE1BQWdDO0FBQzFELFFBQUksV0FBbUI7QUFDdkIsUUFBSSxVQUFrQjtBQUN0QixVQUFNLFFBQVEsS0FBSyxNQUFNLGlDQUFpQztBQUMxRCxRQUFJLE9BQU87QUFDUCxnQkFBVSxNQUFNLENBQUMsRUFBRSxLQUFLO0FBQ3hCLFlBQU0sWUFBWSxTQUFTLFNBQVMsUUFBUTtBQUM1QyxpQkFBVyxTQUFTLFVBQVUsR0FBRyxTQUFTLEVBQUUsUUFBUTtBQUFBLElBQ3hEO0FBQ0EsV0FBTyxDQUFDLFVBQVUsT0FBTztBQUFBLEVBQzdCO0FBQUEsRUFFQSx5QkFBaUM7QUFDN0IsUUFBSSxTQUFpQjtBQUNyQixRQUFJLEtBQUssaUJBQWlCO0FBQ3RCLGdCQUFVLEtBQUssZ0JBQWdCLGFBQWE7QUFBQSxJQUNoRDtBQUVBLGNBQVUsS0FBSztBQUNmLFdBQU87QUFBQSxFQUNYO0FBQ0o7QUFFTyxJQUFNLFdBQU4sTUFBTSxVQUFTO0FBQUEsRUFVbEIsSUFBSSxlQUF5QjtBQUN6QixXQUFPLEtBQUssbUJBQW1CO0FBQUEsRUFDbkM7QUFBQSxFQUNBLElBQUksU0FBaUI7QUFDakIsV0FBTyxLQUFLLG1CQUFtQjtBQUFBLEVBQ25DO0FBQUEsRUFFQSxZQUFZLE1BQTBCO0FBQ2xDLFdBQU8sT0FBTyxNQUFNLElBQUk7QUFBQSxFQUM1QjtBQUFBLEVBRUEsd0JBQXdCLFVBQThCO0FBQ2xELFVBQU0sTUFBYyxLQUFLLHlCQUF5QixRQUFRLElBQUksTUFBTTtBQUNwRSxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRUEseUJBQXlCLFVBQStCO0FBQ3BELFFBQUksU0FBa0IsU0FBUztBQUUvQixRQUFJLEtBQUssYUFBYSxrQkFBa0IsR0FBRztBQUN2QyxlQUFTO0FBQUEsSUFDYjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxZQUFZLE9BQXFCO0FBQzdCLFNBQUssUUFBUTtBQUNiLFNBQUssTUFBTSxRQUFRLENBQUMsU0FBVSxLQUFLLFdBQVcsSUFBSztBQUFBLEVBQ3ZEO0FBQUEsRUFFQSw0QkFBNEIsVUFBOEI7QUFDdEQsUUFBSSxTQUFpQjtBQUlyQixhQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDeEMsWUFBTSxPQUFhLEtBQUssTUFBTSxDQUFDO0FBQy9CLFlBQU1DLFlBQTZCLEtBQUssY0FDbEMsS0FBSyxlQUNMLGlCQUFpQiwyQkFBMkIsUUFBUTtBQUMxRCxnQkFBVUEsVUFBUyxlQUFlO0FBQUEsSUFDdEM7QUFDQSxjQUFVO0FBQ1YsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVBLGNBQWMsVUFBOEI7QUFDeEMsUUFBSSxTQUFpQixLQUFLLGFBQWEsdUJBQXVCO0FBQzlELFVBQU0sVUFBa0IsS0FBSyxhQUFhO0FBQzFDLFVBQU0sY0FBdUIsS0FBSyxNQUFNLEtBQUssQ0FBQyxTQUFTLEtBQUssV0FBVztBQUN2RSxRQUFJLGFBQWE7QUFDYixlQUFTLE9BQU8sUUFBUTtBQUN4QixZQUFNLGVBQWUsS0FBSyw0QkFBNEIsUUFBUTtBQUM5RCxVQUFJLFNBQVM7QUFDVCxZQUFJLEtBQUsseUJBQXlCLFFBQVE7QUFDdEMsb0JBQVUsSUFBSSxZQUFZLElBQUksT0FBTztBQUFBO0FBQ3BDLG9CQUFVLElBQUksT0FBTztBQUFBLEVBQUssWUFBWTtBQUFBLE1BQy9DLE9BQU87QUFDSCxrQkFBVSxLQUFLLHdCQUF3QixRQUFRLElBQUk7QUFBQSxNQUN2RDtBQUFBLElBQ0osT0FBTztBQUVILFVBQUk7QUFBUyxrQkFBVSxJQUFJLE9BQU87QUFBQSxJQUN0QztBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxtQkFBbUIsVUFBa0IsVUFBOEI7QUFDL0QsVUFBTSxlQUF1QixLQUFLLGFBQWE7QUFNL0MsVUFBTSxrQkFBa0IsS0FBSyxjQUFjLFFBQVE7QUFFbkQsUUFBSSxVQUFVLG9CQUFvQixlQUFlLFVBQVUsY0FBYyxlQUFlO0FBQ3hGLFFBQUksU0FBUztBQUNULFdBQUssZUFBZSxhQUFhLE9BQU8saUJBQWlCLFFBQVE7QUFBQSxJQUNyRSxPQUFPO0FBQ0gsY0FBUTtBQUFBLFFBQ0osdUNBQXVDLGFBQWE7QUFBQSxVQUNoRDtBQUFBLFVBQ0E7QUFBQSxRQUNKLENBQUMsYUFBYSxTQUFTLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFBQSxNQUM1QztBQUNBLGdCQUFVO0FBQUEsSUFDZDtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxNQUFNLGNBQWMsVUFBcUM7QUFDckQsVUFBTSxXQUFtQixNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUs7QUFFbkQsVUFBTSxVQUFrQixLQUFLLG1CQUFtQixVQUFVLFFBQVE7QUFDbEUsVUFBTSxLQUFLLEtBQUssS0FBSyxNQUFNLE9BQU87QUFDbEMsU0FBSyxhQUFhO0FBQUEsRUFDdEI7QUFBQSxFQUVBLHNCQUE4QjtBQUMxQixXQUFPLEtBQUssY0FBYyxPQUFPLEdBQUc7QUFBQSxFQUN4QztBQUFBLEVBRUEsT0FBTyxPQUNILFVBQ0Esb0JBQ0EsbUJBQ0EsU0FDUTtBQUNSLFVBQU0sa0JBQWtCLG1CQUFtQixLQUFLLFNBQVMsU0FBUyxZQUFZO0FBQzlFLFVBQU0sZUFBNkIsYUFBYSxPQUFPLG1CQUFtQixNQUFNLFFBQVE7QUFFeEYsUUFBSSxnQkFBK0I7QUFDbkMsUUFBSSxhQUFhLGlCQUFpQjtBQUM5QixzQkFBZ0IsSUFBSSxjQUFjLENBQUMsYUFBYSxnQkFBZ0IsU0FBUyxDQUFDO0FBQUEsSUFDOUU7QUFFQSxVQUFNLFNBQW1CLElBQUksVUFBUztBQUFBLE1BQ2xDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxpQkFBaUI7QUFBQSxNQUNqQixPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsSUFDaEIsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNYO0FBQ0o7OztBQzdUQSxJQUFBQyxtQkFBNkM7QUFTdEMsSUFBTSx3QkFBTixNQUE0QjtBQUFBLEVBSy9CLFlBQVksS0FBVSxRQUFrQixVQUFrQjtBQUN0RCxTQUFLLE1BQU07QUFDWCxTQUFLLFdBQVc7QUFDaEIsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUEsRUFJQSxNQUFNLHNCQUNGLGdCQUNBLGFBQ0EsaUJBQWlCLEdBQ0o7QUFDYixRQUFJLGlCQUFpQjtBQUFHO0FBRXhCLHNDQUFpQixlQUFlLGdCQUFnQixhQUFhLEtBQUssVUFBVSxLQUFLLE1BQU07QUFFdkYsZ0JBQVksUUFBUSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsT0FBTztBQUNuRCxZQUFNQyxRQUFPLEtBQUssVUFBVSxHQUFHLGFBQWEsS0FBSyxDQUFDO0FBR2xELFVBQUksQ0FBQ0EsTUFBSyxRQUFRO0FBQ2QsV0FBRyxZQUFZQSxNQUFLO0FBQUEsTUFDeEIsV0FBV0EsTUFBSyxrQkFBa0Isd0JBQU87QUFDckMsWUFBSUEsTUFBSyxPQUFPLGNBQWMsTUFBTTtBQUNoQyxlQUFLLGVBQWUsSUFBSUEsTUFBSyxNQUFNO0FBQUEsUUFDdkMsT0FBTztBQUNILGFBQUcsWUFBWTtBQUNmLGVBQUssaUJBQWlCLElBQUlBLE9BQU0sY0FBYztBQUFBLFFBQ2xEO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVRLFVBQVUsS0FBYTtBQUMzQixVQUFNLHNCQUNGO0FBQ0osVUFBTSxVQUFVLE9BQU8sUUFBUSxZQUFZLElBQUksTUFBTSxtQkFBbUI7QUFDeEUsVUFBTSxPQUFPLFFBQVEsT0FBTyxRQUFRLEtBQUs7QUFDekMsVUFBTSxTQUFTLEtBQUssT0FBTyxJQUFJLGNBQWMscUJBQXFCLE1BQU0sS0FBSyxRQUFRO0FBQ3JGLFdBQU87QUFBQSxNQUNILE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDZixNQUFNLFFBQVEsT0FBTztBQUFBLE1BQ3JCLFNBQVMsUUFBUSxPQUFPO0FBQUEsTUFDeEIsU0FBUyxRQUFRLE9BQU87QUFBQSxNQUN4QjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQUEsRUFFUSxlQUFlLElBQWlCLFFBQWU7QUFDbkQsT0FBRyxZQUFZO0FBQ2YsUUFBSSxjQUFjLFNBQVMsT0FBTyxTQUFTLEdBQUc7QUFDMUMsU0FBRztBQUFBLFFBQ0M7QUFBQSxRQUNBO0FBQUEsVUFDSSxNQUFNO0FBQUEsWUFDRixLQUFLLEtBQUssT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLE1BQU07QUFBQSxVQUNyRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLENBQUMsUUFBUTtBQUNMLGNBQUksR0FBRyxhQUFhLE9BQU87QUFDdkIsZ0JBQUksYUFBYSxTQUFTLEdBQUcsYUFBYSxPQUFPLENBQUM7QUFBQTtBQUNqRCxnQkFBSSxhQUFhLFNBQVMsTUFBTTtBQUNyQyxjQUFJLEdBQUcsYUFBYSxLQUFLO0FBQUcsZ0JBQUksYUFBYSxPQUFPLEdBQUcsYUFBYSxLQUFLLENBQUM7QUFDMUUsYUFBRztBQUFBLFlBQ0M7QUFBQSxZQUNBLENBQUMsT0FDSyxHQUFHLE9BQXVCLE1BQU0sV0FDN0IsR0FBRyxPQUF1QixNQUFNLGFBQWEsU0FDeEMsT0FDQTtBQUFBLFVBQ2xCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxTQUFHLFdBQVcsQ0FBQyxlQUFlLFdBQVcsQ0FBQztBQUFBLElBQzlDLFdBQ0ksY0FBYyxTQUFTLE9BQU8sU0FBUyxLQUN2QyxjQUFjLFNBQVMsT0FBTyxTQUFTLEdBQ3pDO0FBQ0UsU0FBRztBQUFBLFFBQ0MsY0FBYyxTQUFTLE9BQU8sU0FBUyxJQUFJLFVBQVU7QUFBQSxRQUNyRDtBQUFBLFVBQ0ksTUFBTTtBQUFBLFlBQ0YsVUFBVTtBQUFBLFlBQ1YsS0FBSyxLQUFLLE9BQU8sSUFBSSxNQUFNLGdCQUFnQixNQUFNO0FBQUEsVUFDckQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxDQUFDLFVBQVU7QUFDUCxjQUFJLEdBQUcsYUFBYSxLQUFLO0FBQUcsa0JBQU0sYUFBYSxPQUFPLEdBQUcsYUFBYSxLQUFLLENBQUM7QUFBQSxRQUNoRjtBQUFBLE1BQ0o7QUFDQSxTQUFHLFdBQVcsQ0FBQyxlQUFlLFdBQVcsQ0FBQztBQUFBLElBQzlDLE9BQU87QUFDSCxTQUFHLFlBQVksT0FBTztBQUFBLElBQzFCO0FBQUEsRUFDSjtBQUFBLEVBRUEsTUFBYyxpQkFDVixJQUNBQSxPQU9BLGdCQUNGO0FBekhOO0FBMEhRLFVBQU0sUUFBUSxLQUFLLElBQUksY0FBYyxTQUFTQSxNQUFLLE9BQU8sSUFBSTtBQUM5RCxVQUFNLE9BQU8sTUFBTSxLQUFLLElBQUksTUFBTSxXQUFXQSxNQUFLLE1BQU07QUFDeEQsUUFBSTtBQUNKLFFBQUlBLE1BQUssU0FBUztBQUNkLFlBQU0sUUFBUSxDQUFDLE1BQWMsRUFBRSxRQUFRLDBCQUEwQixFQUFFO0FBQ25FLFlBQU0sZ0JBQWUsV0FBTSxhQUFOLG1CQUFnQjtBQUFBLFFBQ2pDLENBQUNDLE9BQU0sTUFBTUEsR0FBRSxPQUFPLE1BQU0sTUFBTUQsTUFBSyxPQUFPO0FBQUE7QUFFbEQsWUFBTSxVQUFVLE1BQU0sU0FBUyxZQUFZO0FBRTNDLFlBQU0sVUFBVSxRQUFRLFNBQVMsTUFBTTtBQUN2QyxZQUFNLFVBQ0YsdUJBQU0sU0FBUyxNQUFNLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQ0MsT0FBTUEsR0FBRSxTQUFTLFFBQVEsS0FBSyxNQUEzRSxtQkFDTSxhQUROLG1CQUNnQixVQURoQixtQkFDdUIsV0FBVSxLQUFLO0FBRTFDLGtCQUFZLEtBQUssVUFBVSxTQUFTLEtBQUs7QUFBQSxJQUM3QyxXQUFXRCxNQUFLLFNBQVM7QUFDckIsWUFBTSxRQUFRLE1BQU0sT0FBT0EsTUFBSyxPQUFPO0FBQ3ZDLFlBQU0sVUFBVSxNQUFNLFNBQVMsTUFBTTtBQUNyQyxZQUFNLFFBQVEsTUFBTSxTQUFTLElBQUk7QUFDakMsa0JBQVksS0FBSyxVQUFVLFNBQVMsS0FBSztBQUFBLElBQzdDLE9BQU87QUFDSCxrQkFBWTtBQUFBLElBQ2hCO0FBRUEsU0FBSyxzQkFBc0IsV0FBVyxJQUFJLGlCQUFpQixDQUFDO0FBQUEsRUFDaEU7QUFDSjs7O0FUbElPLElBQU0sc0JBQU4sTUFBMEI7QUFBQSxFQWtDN0IsWUFDSSxLQUNBLFFBQ0EsVUFDQSxpQkFDQSxZQUNBLFdBQ0EsU0FDQSxrQkFDQSxrQkFDRjtBQWdIRjtBQUFBLFNBQVEsa0JBQWtCLENBQUMsTUFBcUI7QUFFNUMsVUFDSSxTQUFTLGNBQWMsYUFBYSxjQUNwQyxLQUFLLHlCQUNQO0FBQ0U7QUFBQSxNQUNKO0FBRUEsWUFBTSxrQkFBa0IsTUFBTTtBQUMxQixVQUFFLGVBQWU7QUFDakIsVUFBRSxnQkFBZ0I7QUFBQSxNQUN0QjtBQUVBLGNBQVEsRUFBRSxNQUFNO0FBQUEsUUFDWixLQUFLO0FBQ0QsZUFBSyxpQkFBaUI7QUFDdEIsMEJBQWdCO0FBQ2hCO0FBQUEsUUFDSixLQUFLO0FBQ0QsY0FBSSxLQUFLLHdCQUFtQztBQUN4QyxpQkFBSyxZQUFZO0FBQ2pCLDRCQUFnQjtBQUFBLFVBQ3BCLFdBQVcsS0FBSyx1QkFBa0M7QUFDOUMsaUJBQUssMkJBQWtDO0FBQ3ZDLDRCQUFnQjtBQUFBLFVBQ3BCO0FBQ0E7QUFBQSxRQUNKLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDRCxjQUFJLEtBQUssd0JBQW1DO0FBQ3hDO0FBQUEsVUFDSjtBQUNBLGVBQUssWUFBWTtBQUNqQiwwQkFBZ0I7QUFDaEI7QUFBQSxRQUNKLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDRCxjQUFJLEtBQUssdUJBQWtDO0FBQ3ZDO0FBQUEsVUFDSjtBQUNBLGVBQUssMkJBQWtDO0FBQ3ZDLDBCQUFnQjtBQUNoQjtBQUFBLFFBQ0osS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNELGNBQUksS0FBSyx1QkFBa0M7QUFDdkM7QUFBQSxVQUNKO0FBQ0EsZUFBSywyQkFBa0M7QUFDdkMsMEJBQWdCO0FBQ2hCO0FBQUEsUUFDSixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0QsY0FBSSxLQUFLLHVCQUFrQztBQUN2QztBQUFBLFVBQ0o7QUFDQSxlQUFLLDJCQUFrQztBQUN2QywwQkFBZ0I7QUFDaEI7QUFBQSxRQUNKLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDRCxjQUFJLEtBQUssdUJBQWtDO0FBQ3ZDO0FBQUEsVUFDSjtBQUNBLGVBQUssNEJBQW1DO0FBQ3hDLDBCQUFnQjtBQUNoQjtBQUFBLFFBQ0o7QUFDSTtBQUFBLE1BQ1I7QUFBQSxJQUNKO0FBckxJLFNBQUssTUFBTTtBQUNYLFNBQUssU0FBUztBQUNkLFNBQUssV0FBVztBQUNoQixTQUFLLGtCQUFrQjtBQUN2QixTQUFLLGFBQWE7QUFDbEIsU0FBSyxtQkFBbUI7QUFDeEIsU0FBSyxtQkFBbUI7QUFDeEIsU0FBSyxpQkFBaUI7QUFDdEIsU0FBSyxVQUFVO0FBR2YsU0FBSyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBTztBQUNILFNBQUssT0FBTyxLQUFLLGVBQWUsVUFBVTtBQUMxQyxTQUFLLEtBQUssV0FBVyxDQUFDLGdCQUFnQixjQUFjLENBQUM7QUFFckQsU0FBSyxTQUFTLEtBQUssS0FBSyxVQUFVO0FBQ2xDLFNBQUssT0FBTyxTQUFTLFdBQVc7QUFFaEMsU0FBSyxrQkFBa0I7QUFFdkIsU0FBSyxRQUFRLEtBQUssT0FBTyxVQUFVO0FBQ25DLFNBQUssTUFBTSxTQUFTLFVBQVU7QUFFOUIsU0FBSyxXQUFXLEtBQUssT0FBTyxVQUFVO0FBQ3RDLFNBQUssU0FBUyxTQUFTLGFBQWE7QUFFcEMsU0FBSyxvQkFBb0I7QUFFekIsUUFBSSxLQUFLLFNBQVMsb0JBQW9CO0FBQ2xDLFdBQUssVUFBVSxLQUFLLEtBQUssVUFBVTtBQUNuQyxXQUFLLFFBQVEsU0FBUyxZQUFZO0FBQUEsSUFDdEM7QUFFQSxTQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVU7QUFDbkMsU0FBSyxRQUFRLFNBQVMsWUFBWTtBQUVsQyxTQUFLLFdBQVcsS0FBSyxLQUFLLFVBQVU7QUFDcEMsU0FBSyxTQUFTLFNBQVMsYUFBYTtBQUVwQyxTQUFLLHVCQUF1QjtBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFNLE9BQU87QUFDVCxTQUFLO0FBQ0wsVUFBTSxPQUFhLEtBQUssZ0JBQWdCO0FBR3hDLFNBQUssVUFBVSxJQUFJO0FBQ25CLFNBQUssWUFBWSxXQUFXO0FBRzVCLFFBQUksS0FBSyxTQUFTLG9CQUFvQjtBQUNsQyxXQUFLLFFBQVE7QUFBQSxRQUNULEtBQUssMkJBQTJCLEtBQUssaUJBQWlCLGVBQWU7QUFBQSxNQUN6RTtBQUFBLElBQ0o7QUFHQSxTQUFLLFFBQVEsTUFBTTtBQUNuQixVQUFNLFVBQWlDLElBQUk7QUFBQSxNQUN2QyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLLGFBQWE7QUFBQSxJQUN0QjtBQUNBLFVBQU0sUUFBUSxzQkFBc0IsS0FBSyxhQUFhLE9BQU8sS0FBSyxPQUFPO0FBR3pFLFNBQUssc0JBQXNCO0FBRzNCLFFBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxjQUFjLEdBQUc7QUFDckM7QUFBQSxJQUNKO0FBQ0EsU0FBSyxLQUFLLFlBQVksY0FBYztBQUNwQyxTQUFLLFdBQVcsWUFBWSxjQUFjO0FBQzFDLGFBQVMsaUJBQWlCLFdBQVcsS0FBSyxlQUFlO0FBQUEsRUFDN0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQU87QUFFSCxRQUFJLEtBQUssS0FBSyxTQUFTLGNBQWMsR0FBRztBQUNwQztBQUFBLElBQ0o7QUFDQSxTQUFLLEtBQUssU0FBUyxjQUFjO0FBQ2pDLFNBQUssV0FBVyxTQUFTLGNBQWM7QUFDdkMsYUFBUyxvQkFBb0IsV0FBVyxLQUFLLGVBQWU7QUFBQSxFQUNoRTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsUUFBUTtBQUNKLGFBQVMsb0JBQW9CLFdBQVcsS0FBSyxlQUFlO0FBQzVELFNBQUssS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQTZFUSxnQ0FBZ0M7QUF4UDVDO0FBeVBRLFVBQU1FLFlBQVcsS0FBSyxhQUFhO0FBRW5DLFVBQU0saUJBQWlCLEVBQUUsd0JBQXdCLE1BQUssS0FBQUEsYUFBQSxnQkFBQUEsVUFBVSxTQUFWLFlBQWtCLEVBQUUsS0FBSztBQUMvRSxVQUFNLHFCQUNGLEVBQUUsNEJBQTRCLElBQUksYUFBYUEsYUFBQSxnQkFBQUEsVUFBVSxVQUFVLEtBQUs7QUFDNUUsVUFBTSxtQkFBbUIsRUFBRSx1QkFBdUI7QUFBQSxNQUM5QyxVQUFVLEtBQUssaUJBQWlCLEtBQUs7QUFBQSxJQUN6QyxDQUFDO0FBRUQsUUFBSSx3QkFBTyxpQkFBaUIsT0FBTyxxQkFBcUIsT0FBTyxnQkFBZ0I7QUFBQSxFQUNuRjtBQUFBLEVBRUEsSUFBWSxlQUFxQjtBQUM3QixXQUFPLEtBQUssZ0JBQWdCO0FBQUEsRUFDaEM7QUFBQSxFQUVBLElBQVksbUJBQTZCO0FBQ3JDLFdBQU8sS0FBSyxnQkFBZ0I7QUFBQSxFQUNoQztBQUFBLEVBRUEsSUFBWSxlQUFxQjtBQUM3QixXQUFPLEtBQUssZ0JBQWdCO0FBQUEsRUFDaEM7QUFBQSxFQUVRLGNBQW9CO0FBQ3hCLFNBQUs7QUFFTCxTQUFLLFlBQVksV0FBVztBQUc1QixRQUFJLEtBQUssaUJBQWlCLGdDQUFpQztBQUN2RCxZQUFNLEtBQWtCLFNBQVMsY0FBYyxJQUFJO0FBQ25ELFNBQUcsU0FBUyxnQkFBZ0I7QUFDNUIsV0FBSyxRQUFRLFlBQVksRUFBRTtBQUFBLElBQy9CLE9BQU87QUFDSCxXQUFLLFFBQVEsTUFBTTtBQUFBLElBQ3ZCO0FBRUEsVUFBTSxVQUFpQyxJQUFJO0FBQUEsTUFDdkMsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSyxhQUFhO0FBQUEsSUFDdEI7QUFDQSxZQUFRLHNCQUFzQixLQUFLLGFBQWEsTUFBTSxLQUFLLE9BQU87QUFHbEUsU0FBSyxhQUFhLFNBQVMsY0FBYztBQUN6QyxTQUFLLFdBQVcsWUFBWSxjQUFjO0FBQzFDLFNBQUssV0FBVyxZQUFZLGNBQWM7QUFFMUMsUUFBSSxLQUFLLDZCQUF5QztBQUM5QyxXQUFLLFNBQVMsU0FBUyxTQUFTO0FBQ2hDLFdBQUssV0FBVyxRQUFRLEdBQUcsS0FBSyxTQUFTLGlCQUFpQixFQUFFO0FBQzVELFdBQUssV0FBVyxRQUFRLEdBQUcsS0FBSyxTQUFTLGlCQUFpQixFQUFFO0FBQUEsSUFDaEUsT0FBTztBQUNILFdBQUssV0FBVyxZQUFZLGNBQWM7QUFDMUMsV0FBSztBQUFBLFFBQ0QsS0FBSztBQUFBLFFBQ0wsS0FBSyxTQUFTO0FBQUE7QUFBQSxNQUVsQjtBQUNBLFdBQUs7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMLEtBQUssU0FBUztBQUFBO0FBQUEsTUFFbEI7QUFDQSxXQUFLO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxLQUFLLFNBQVM7QUFBQTtBQUFBLE1BRWxCO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQSxFQUVBLE1BQWMsZUFBZSxVQUF5QztBQUNsRSxVQUFNLEtBQUssZ0JBQWdCLGNBQWMsUUFBUTtBQUNqRCxVQUFNLEtBQUssZ0JBQWdCO0FBQUEsRUFDL0I7QUFBQSxFQUVBLE1BQWMsbUJBQWtDO0FBQzVDLFNBQUssZ0JBQWdCLGdCQUFnQjtBQUNyQyxVQUFNLEtBQUssZ0JBQWdCO0FBQUEsRUFDL0I7QUFBQSxFQUVBLE1BQWMsa0JBQWlDO0FBQzNDLFFBQUksS0FBSyxnQkFBZ0I7QUFBTSxZQUFNLEtBQUssS0FBSztBQUFBO0FBQzFDLFdBQUssaUJBQWlCO0FBQUEsRUFDL0I7QUFBQSxFQUVRLDJCQUEyQixpQkFBbUM7QUFDbEUsVUFBTSxZQUFvQjtBQUMxQixRQUFJLFNBQVMsS0FBSyxhQUFhLEtBQUs7QUFDcEMsUUFBSSxnQkFBZ0IsU0FBUyxHQUFHO0FBQzVCLGdCQUFVLFlBQVksZ0JBQWdCLEtBQUssU0FBUztBQUFBLElBQ3hEO0FBQ0EsV0FBTyxTQUFTLFlBQVk7QUFBQSxFQUNoQztBQUFBO0FBQUEsRUFJUSxvQkFBb0I7QUFDeEIsU0FBSyxhQUFhLEtBQUssUUFBUSxVQUFVO0FBQ3pDLFNBQUssV0FBVyxXQUFXLENBQUMsa0JBQWtCLGNBQWMsQ0FBQztBQUM3RCxrQ0FBUSxLQUFLLFlBQVksWUFBWTtBQUNyQyxTQUFLLFdBQVcsYUFBYSxjQUFjLEVBQUUsTUFBTSxDQUFDO0FBQ3BELFNBQUssV0FBVyxpQkFBaUIsU0FBUyxNQUFNO0FBRTVDLFdBQUssaUJBQWlCO0FBQUEsSUFDMUIsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVRLFVBQVUsTUFBWTtBQUMxQixTQUFLLE1BQU0sUUFBUSxHQUFHLEtBQUssUUFBUSxLQUFLLEtBQUssMEJBQStCLElBQUksQ0FBQyxFQUFFO0FBQUEsRUFDdkY7QUFBQTtBQUFBLEVBSVEsc0JBQXNCO0FBQzFCLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssbUJBQW1CO0FBQ3hCLFNBQUssc0JBQXNCO0FBQzNCLFNBQUssa0JBQWtCO0FBQUEsRUFDM0I7QUFBQSxFQUVRLG9CQUFvQjtBQUN4QixTQUFLLGFBQWEsS0FBSyxTQUFTLFNBQVMsUUFBUTtBQUNqRCxTQUFLLFdBQVcsV0FBVyxDQUFDLGFBQWEsZ0JBQWdCLENBQUM7QUFDMUQsa0NBQVEsS0FBSyxZQUFZLE1BQU07QUFDL0IsU0FBSyxXQUFXLGFBQWEsY0FBYyxFQUFFLFdBQVcsQ0FBQztBQUN6RCxTQUFLLFdBQVcsaUJBQWlCLFNBQVMsWUFBWTtBQUNsRCxXQUFLLGlCQUFpQjtBQUFBLElBQzFCLENBQUM7QUFBQSxFQUNMO0FBQUEsRUFFUSxxQkFBcUI7QUFDekIsU0FBSyxjQUFjLEtBQUssU0FBUyxTQUFTLFFBQVE7QUFDbEQsU0FBSyxZQUFZLFdBQVcsQ0FBQyxhQUFhLGlCQUFpQixDQUFDO0FBQzVELGtDQUFRLEtBQUssYUFBYSxZQUFZO0FBQ3RDLFNBQUssWUFBWSxhQUFhLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQztBQUNwRSxTQUFLLFlBQVksaUJBQWlCLFNBQVMsTUFBTTtBQUM3QyxXQUFLLDRCQUFtQztBQUFBLElBQzVDLENBQUM7QUFBQSxFQUNMO0FBQUEsRUFFUSx3QkFBd0I7QUFDNUIsU0FBSyxhQUFhLEtBQUssU0FBUyxTQUFTLFFBQVE7QUFDakQsU0FBSyxXQUFXLFdBQVcsQ0FBQyxhQUFhLGdCQUFnQixDQUFDO0FBQzFELGtDQUFRLEtBQUssWUFBWSxNQUFNO0FBQy9CLFNBQUssV0FBVyxhQUFhLGNBQWMsZ0JBQWdCO0FBQzNELFNBQUssV0FBVyxpQkFBaUIsU0FBUyxZQUFZO0FBQ2xELFdBQUssOEJBQThCO0FBQUEsSUFDdkMsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVRLG9CQUFvQjtBQUN4QixTQUFLLGFBQWEsS0FBSyxTQUFTLFNBQVMsUUFBUTtBQUNqRCxTQUFLLFdBQVcsV0FBVyxDQUFDLGFBQWEsZ0JBQWdCLENBQUM7QUFDMUQsa0NBQVEsS0FBSyxZQUFZLGdCQUFnQjtBQUN6QyxTQUFLLFdBQVcsYUFBYSxjQUFjLEVBQUUsTUFBTSxDQUFDO0FBQ3BELFNBQUssV0FBVyxpQkFBaUIsU0FBUyxNQUFNO0FBQzVDLFdBQUssaUJBQWlCO0FBQUEsSUFDMUIsQ0FBQztBQUFBLEVBQ0w7QUFBQTtBQUFBLEVBSVEseUJBQXlCO0FBQzdCLFNBQUssd0JBQXdCO0FBQzdCLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssa0JBQWtCO0FBQUEsRUFDM0I7QUFBQSxFQUVRLHdCQUF3QjtBQUU1QixTQUFLLGFBQWEsWUFBWSxjQUFjO0FBQzVDLFNBQUssV0FBVyxTQUFTLGNBQWM7QUFDdkMsU0FBSyxXQUFXLFNBQVMsY0FBYztBQUN2QyxTQUFLLFdBQVcsU0FBUyxjQUFjO0FBQUEsRUFDM0M7QUFBQSxFQUVRLDBCQUEwQjtBQUM5QixTQUFLLGVBQWUsS0FBSyxTQUFTLFNBQVMsUUFBUTtBQUNuRCxTQUFLLGFBQWEsV0FBVyxDQUFDLHNCQUFzQix5QkFBeUIsWUFBWSxDQUFDO0FBQzFGLFNBQUssYUFBYSxRQUFRLEVBQUUsYUFBYSxDQUFDO0FBQzFDLFNBQUssYUFBYSxpQkFBaUIsU0FBUyxNQUFNO0FBQzlDLFdBQUssWUFBWTtBQUFBLElBQ3JCLENBQUM7QUFBQSxFQUNMO0FBQUEsRUFFUSxvQkFBb0I7QUFDeEIsU0FBSyxhQUFhLEtBQUssU0FBUyxTQUFTLFFBQVE7QUFDakQsU0FBSyxXQUFXLFdBQVc7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0osQ0FBQztBQUNELFNBQUssV0FBVyxRQUFRLEtBQUssU0FBUyxpQkFBaUI7QUFDdkQsU0FBSyxXQUFXLGlCQUFpQixTQUFTLE1BQU07QUFDNUMsV0FBSywyQkFBa0M7QUFBQSxJQUMzQyxDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRVEsb0JBQW9CO0FBQ3hCLFNBQUssYUFBYSxLQUFLLFNBQVMsU0FBUyxRQUFRO0FBQ2pELFNBQUssV0FBVyxXQUFXO0FBQUEsTUFDdkI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNKLENBQUM7QUFDRCxTQUFLLFdBQVcsUUFBUSxLQUFLLFNBQVMsaUJBQWlCO0FBQ3ZELFNBQUssV0FBVyxpQkFBaUIsU0FBUyxNQUFNO0FBQzVDLFdBQUssMkJBQWtDO0FBQUEsSUFDM0MsQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVRLG9CQUFvQjtBQUN4QixTQUFLLGFBQWEsS0FBSyxTQUFTLFNBQVMsUUFBUTtBQUNqRCxTQUFLLFdBQVcsV0FBVztBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSixDQUFDO0FBQ0QsU0FBSyxXQUFXLFFBQVEsS0FBSyxTQUFTLGlCQUFpQjtBQUN2RCxTQUFLLFdBQVcsaUJBQWlCLFNBQVMsTUFBTTtBQUM1QyxXQUFLLDJCQUFrQztBQUFBLElBQzNDLENBQUM7QUFBQSxFQUNMO0FBQUEsRUFFUSxpQkFDSixRQUNBLFlBQ0EsZ0JBQ0Y7QUFDRSxVQUFNQSxZQUE2QixLQUFLLGdCQUFnQjtBQUFBLE1BQ3BEO0FBQUEsTUFDQSxLQUFLO0FBQUEsSUFDVDtBQUNBLFVBQU0sV0FBbUJBLFVBQVM7QUFFbEMsUUFBSSwwQkFBUyxVQUFVO0FBQ25CLGFBQU8sUUFBUSxhQUFhLFVBQVUsSUFBSSxDQUFDO0FBQUEsSUFDL0MsT0FBTztBQUNILGFBQU8sUUFBUSxHQUFHLFVBQVUsTUFBTSxhQUFhLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFBQSxJQUNyRTtBQUFBLEVBQ0o7QUFDSjs7O0FMMWRPLElBQU0saUJBQU4sY0FBNkIsdUJBQU07QUFBQSxFQVN0QyxZQUNJLEtBQ0EsUUFDQSxVQUNBLGlCQUNBLFlBQ0Y7QUFDRSxVQUFNLEdBQUc7QUFHVCxTQUFLLFNBQVM7QUFDZCxTQUFLLFdBQVc7QUFDaEIsU0FBSyxrQkFBa0I7QUFDdkIsU0FBSyxhQUFhO0FBR2xCLFNBQUssUUFBUSxNQUFNLFNBQVMsS0FBSyxTQUFTLDRCQUE0QjtBQUN0RSxTQUFLLFFBQVEsTUFBTSxRQUFRLEtBQUssU0FBUywyQkFBMkI7QUFDcEUsU0FBSyxRQUFRLGFBQWEsTUFBTSxVQUFVO0FBRTFDLFNBQUssVUFBVSxTQUFTLGtCQUFrQjtBQUcxQyxTQUFLLFdBQVcsSUFBSTtBQUFBLE1BQ2hCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUssbUJBQW1CLEtBQUssSUFBSTtBQUFBLElBQ3JDO0FBRUEsU0FBSyxnQkFBZ0IsSUFBSTtBQUFBLE1BQ3JCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUssZUFBZSxLQUFLLElBQUk7QUFBQSxNQUM3QixLQUFLLG9CQUFvQixLQUFLLElBQUk7QUFBQSxJQUN0QztBQUFBLEVBQ0o7QUFBQSxFQUVBLFNBQWU7QUFDWCxTQUFLLGVBQWU7QUFBQSxFQUN4QjtBQUFBLEVBRUEsVUFBZ0I7QUFDWixTQUFLLFNBQVMsTUFBTTtBQUNwQixTQUFLLGNBQWMsTUFBTTtBQUN6QixTQUFLLE9BQU87QUFBQSxFQUNoQjtBQUFBLEVBRVEsaUJBQXVCO0FBQzNCLFNBQUssZUFBZTtBQUNwQixTQUFLLFNBQVMsS0FBSztBQUFBLEVBQ3ZCO0FBQUEsRUFFUSxpQkFBdUI7QUFDM0IsU0FBSyxTQUFTLEtBQUs7QUFBQSxFQUN2QjtBQUFBLEVBRVEsaUJBQXVCO0FBQzNCLFNBQUssZUFBZTtBQUNwQixTQUFLLGNBQWMsS0FBSztBQUFBLEVBQzVCO0FBQUEsRUFFUSxpQkFBdUI7QUFDM0IsU0FBSyxjQUFjLEtBQUs7QUFBQSxFQUM1QjtBQUFBLEVBRVEsbUJBQW1CLE1BQVk7QUFDbkMsU0FBSyxnQkFBZ0IsZUFBZSxLQUFLLGFBQWEsQ0FBQztBQUN2RCxRQUFJLEtBQUssZ0JBQWdCLGdCQUFnQjtBQUNyQyxXQUFLLGVBQWU7QUFBQSxJQUN4QixPQUFPO0FBQ0gsV0FBSyxlQUFlO0FBQUEsSUFDeEI7QUFBQSxFQUNKO0FBQUEsRUFFQSxNQUFjLHNCQUFxQztBQUMvQyxVQUFNLFdBQXFCLEtBQUssZ0JBQWdCO0FBR2hELFVBQU0sYUFBYSxTQUFTLGFBQWE7QUFFekMsVUFBTSxZQUFZLG1CQUFtQixPQUFPLEtBQUssS0FBSyxVQUFVO0FBQ2hFLGNBQ0ssS0FBSyxPQUFPLHFCQUFxQjtBQUM5QixXQUFLLGdCQUFnQiwwQkFBMEIsZ0JBQWdCO0FBQUEsSUFDbkUsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxXQUFXLFFBQVEsSUFBSSxNQUFNLENBQUM7QUFBQSxFQUM5QztBQUNKOzs7QWUvSEEsSUFBQUMsbUJBQXFDO0FBRXJDLElBQUFDLGdCQUFjOzs7QUNJZCxTQUFTLE1BQU0sR0FBRztBQUNoQixTQUFPLElBQUksTUFBTTtBQUNuQjtBQUNBLElBQU0sTUFBTSxDQUFDLEdBQUcsR0FBR0MsT0FBTSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUdBLEVBQUMsR0FBRyxDQUFDO0FBQ25ELFNBQVMsSUFBSSxHQUFHO0FBQ2QsU0FBTyxJQUFJLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHO0FBQ3BDO0FBSUEsU0FBUyxJQUFJLEdBQUc7QUFDZCxTQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbkM7QUFDQSxTQUFTLElBQUksR0FBRztBQUNkLFNBQU8sSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ3hDO0FBQ0EsU0FBUyxJQUFJLEdBQUc7QUFDZCxTQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbkM7QUFFQSxJQUFNLFFBQVEsRUFBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUU7QUFDN0osSUFBTSxNQUFNLENBQUMsR0FBRyxrQkFBa0I7QUFDbEMsSUFBTSxLQUFLLE9BQUssSUFBSSxJQUFJLEVBQUc7QUFDM0IsSUFBTSxLQUFLLE9BQUssS0FBSyxJQUFJLFFBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFHO0FBQ2xELElBQU0sS0FBSyxRQUFPLElBQUksUUFBUyxPQUFRLElBQUk7QUFDM0MsSUFBTSxVQUFVLE9BQUssR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDNUQsU0FBUyxTQUFTLEtBQUs7QUFDckIsTUFBSSxNQUFNLElBQUk7QUFDZCxNQUFJO0FBQ0osTUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLO0FBQ2xCLFFBQUksUUFBUSxLQUFLLFFBQVEsR0FBRztBQUMxQixZQUFNO0FBQUEsUUFDSixHQUFHLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJO0FBQUEsUUFDekIsR0FBRyxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSTtBQUFBLFFBQ3pCLEdBQUcsTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUk7QUFBQSxRQUN6QixHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSztBQUFBLE1BQ3RDO0FBQUEsSUFDRixXQUFXLFFBQVEsS0FBSyxRQUFRLEdBQUc7QUFDakMsWUFBTTtBQUFBLFFBQ0osR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDcEMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDcEMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDcEMsR0FBRyxRQUFRLElBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFLO0FBQUEsTUFDeEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUNBLElBQU0sUUFBUSxDQUFDLEdBQUcsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDLElBQUk7QUFDekMsU0FBUyxVQUFVLEdBQUc7QUFDcEIsTUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUs7QUFDMUIsU0FBTyxJQUNILE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUM3QztBQUNOO0FBRUEsSUFBTSxTQUFTO0FBQ2YsU0FBUyxTQUFTQyxJQUFHLEdBQUcsR0FBRztBQUN6QixRQUFNLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUM7QUFDL0IsUUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUlBLEtBQUksTUFBTSxPQUFPLElBQUksSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDdEYsU0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsU0FBUyxTQUFTQSxJQUFHLEdBQUcsR0FBRztBQUN6QixRQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSUEsS0FBSSxNQUFNLE1BQU0sSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNwRixTQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUI7QUFDQSxTQUFTLFNBQVNBLElBQUcsR0FBRyxHQUFHO0FBQ3pCLFFBQU0sTUFBTSxTQUFTQSxJQUFHLEdBQUcsR0FBRztBQUM5QixNQUFJO0FBQ0osTUFBSSxJQUFJLElBQUksR0FBRztBQUNiLFFBQUksS0FBSyxJQUFJO0FBQ2IsU0FBSztBQUNMLFNBQUs7QUFBQSxFQUNQO0FBQ0EsT0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDdEIsUUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJO0FBQ2xCLFFBQUksQ0FBQyxLQUFLO0FBQUEsRUFDWjtBQUNBLFNBQU87QUFDVDtBQUNBLFNBQVMsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUs7QUFDakMsTUFBSSxNQUFNLEtBQUs7QUFDYixZQUFTLElBQUksS0FBSyxLQUFNLElBQUksSUFBSSxJQUFJO0FBQUEsRUFDdEM7QUFDQSxNQUFJLE1BQU0sS0FBSztBQUNiLFlBQVEsSUFBSSxLQUFLLElBQUk7QUFBQSxFQUN2QjtBQUNBLFVBQVEsSUFBSSxLQUFLLElBQUk7QUFDdkI7QUFDQSxTQUFTLFFBQVEsR0FBRztBQUNsQixRQUFNLFFBQVE7QUFDZCxRQUFNLElBQUksRUFBRSxJQUFJO0FBQ2hCLFFBQU0sSUFBSSxFQUFFLElBQUk7QUFDaEIsUUFBTSxJQUFJLEVBQUUsSUFBSTtBQUNoQixRQUFNLE1BQU0sS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQzVCLFFBQU0sTUFBTSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUM7QUFDNUIsUUFBTSxLQUFLLE1BQU0sT0FBTztBQUN4QixNQUFJQSxJQUFHLEdBQUc7QUFDVixNQUFJLFFBQVEsS0FBSztBQUNmLFFBQUksTUFBTTtBQUNWLFFBQUksSUFBSSxNQUFNLEtBQUssSUFBSSxNQUFNLE9BQU8sS0FBSyxNQUFNO0FBQy9DLElBQUFBLEtBQUksU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDNUIsSUFBQUEsS0FBSUEsS0FBSSxLQUFLO0FBQUEsRUFDZjtBQUNBLFNBQU8sQ0FBQ0EsS0FBSSxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQzFCO0FBQ0EsU0FBUyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDekIsVUFDRSxNQUFNLFFBQVEsQ0FBQyxJQUNYLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFDbEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUNiLElBQUksR0FBRztBQUNYO0FBQ0EsU0FBUyxRQUFRQSxJQUFHLEdBQUcsR0FBRztBQUN4QixTQUFPLE1BQU0sVUFBVUEsSUFBRyxHQUFHLENBQUM7QUFDaEM7QUFDQSxTQUFTLFFBQVFBLElBQUcsR0FBRyxHQUFHO0FBQ3hCLFNBQU8sTUFBTSxVQUFVQSxJQUFHLEdBQUcsQ0FBQztBQUNoQztBQUNBLFNBQVMsUUFBUUEsSUFBRyxHQUFHLEdBQUc7QUFDeEIsU0FBTyxNQUFNLFVBQVVBLElBQUcsR0FBRyxDQUFDO0FBQ2hDO0FBQ0EsU0FBUyxJQUFJQSxJQUFHO0FBQ2QsVUFBUUEsS0FBSSxNQUFNLE9BQU87QUFDM0I7QUFDQSxTQUFTLFNBQVMsS0FBSztBQUNyQixRQUFNLElBQUksT0FBTyxLQUFLLEdBQUc7QUFDekIsTUFBSSxJQUFJO0FBQ1IsTUFBSTtBQUNKLE1BQUksQ0FBQyxHQUFHO0FBQ047QUFBQSxFQUNGO0FBQ0EsTUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHO0FBQ2QsUUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBQSxFQUNuQztBQUNBLFFBQU1BLEtBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFFBQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQ25CLFFBQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQ25CLE1BQUksRUFBRSxDQUFDLE1BQU0sT0FBTztBQUNsQixRQUFJLFFBQVFBLElBQUcsSUFBSSxFQUFFO0FBQUEsRUFDdkIsV0FBVyxFQUFFLENBQUMsTUFBTSxPQUFPO0FBQ3pCLFFBQUksUUFBUUEsSUFBRyxJQUFJLEVBQUU7QUFBQSxFQUN2QixPQUFPO0FBQ0wsUUFBSSxRQUFRQSxJQUFHLElBQUksRUFBRTtBQUFBLEVBQ3ZCO0FBQ0EsU0FBTztBQUFBLElBQ0wsR0FBRyxFQUFFLENBQUM7QUFBQSxJQUNOLEdBQUcsRUFBRSxDQUFDO0FBQUEsSUFDTixHQUFHLEVBQUUsQ0FBQztBQUFBLElBQ047QUFBQSxFQUNGO0FBQ0Y7QUFDQSxTQUFTLE9BQU8sR0FBRyxLQUFLO0FBQ3RCLE1BQUlBLEtBQUksUUFBUSxDQUFDO0FBQ2pCLEVBQUFBLEdBQUUsQ0FBQyxJQUFJLElBQUlBLEdBQUUsQ0FBQyxJQUFJLEdBQUc7QUFDckIsRUFBQUEsS0FBSSxRQUFRQSxFQUFDO0FBQ2IsSUFBRSxJQUFJQSxHQUFFLENBQUM7QUFDVCxJQUFFLElBQUlBLEdBQUUsQ0FBQztBQUNULElBQUUsSUFBSUEsR0FBRSxDQUFDO0FBQ1g7QUFDQSxTQUFTLFVBQVUsR0FBRztBQUNwQixNQUFJLENBQUMsR0FBRztBQUNOO0FBQUEsRUFDRjtBQUNBLFFBQU0sSUFBSSxRQUFRLENBQUM7QUFDbkIsUUFBTUEsS0FBSSxFQUFFLENBQUM7QUFDYixRQUFNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsQixRQUFNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsQixTQUFPLEVBQUUsSUFBSSxNQUNULFFBQVFBLEVBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFDcEMsT0FBT0EsRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzNCO0FBRUEsSUFBTSxNQUFNO0FBQUEsRUFDVixHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQUEsRUFDSCxHQUFHO0FBQ0w7QUFDQSxJQUFNLFVBQVU7QUFBQSxFQUNkLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLGNBQWM7QUFBQSxFQUNkLElBQUk7QUFBQSxFQUNKLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLFNBQVM7QUFBQSxFQUNULEtBQUs7QUFBQSxFQUNMLGFBQWE7QUFBQSxFQUNiLFNBQVM7QUFBQSxFQUNULFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULFdBQVc7QUFBQSxFQUNYLEtBQUs7QUFBQSxFQUNMLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFBQSxFQUNMLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLFNBQVM7QUFBQSxFQUNULFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULFlBQVk7QUFBQSxFQUNaLEtBQUs7QUFBQSxFQUNMLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULEtBQUs7QUFBQSxFQUNMLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFBQSxFQUNULEtBQUs7QUFBQSxFQUNMLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLFlBQVk7QUFBQSxFQUNaLEtBQUs7QUFBQSxFQUNMLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLEtBQUs7QUFBQSxFQUNMLFVBQVU7QUFBQSxFQUNWLFlBQVk7QUFBQSxFQUNaLFNBQVM7QUFBQSxFQUNULFVBQVU7QUFBQSxFQUNWLFNBQVM7QUFBQSxFQUNULFlBQVk7QUFBQSxFQUNaLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLFdBQVc7QUFBQSxFQUNYLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLGFBQWE7QUFBQSxFQUNiLElBQUk7QUFBQSxFQUNKLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFBQSxFQUNMLEtBQUs7QUFB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VUFBTSxTQUFTLEtBQUssSUFBSSxVQUFVLGdCQUFnQixJQUFJO0FBQ3RELFFBQUksT0FBTyxVQUFVLEdBQUc7QUFDcEIsYUFBTztBQUFBLElBQ1g7QUFFQSxXQUFPLE9BQU8sQ0FBQztBQUFBLEVBQ25CO0FBQUEsRUFFQSxNQUFjLHNCQUFzQjtBQUNoQyxTQUFLO0FBQUEsTUFDRDtBQUFBLE1BQ0EsQ0FBQyxTQUFVLEtBQUssa0JBQWtCLElBQUksb0JBQW9CLE1BQU0sSUFBSTtBQUFBLElBQ3hFO0FBRUEsUUFDSSxLQUFLLEtBQUssU0FBUyxpQ0FDbkIsS0FBSyxjQUFjLHNCQUFzQixLQUFLLE1BQ2hEO0FBQ0UsWUFBTSxLQUFLLDZCQUE2QjtBQUFBLElBQzVDO0FBQUEsRUFDSjtBQUFBLEVBRUEsTUFBYywrQkFBK0I7QUFDekMsVUFBTSxLQUFLLElBQUksVUFBVSxhQUFhLEtBQUssRUFBRSxhQUFhO0FBQUEsTUFDdEQsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLElBQ1osQ0FBQztBQUFBLEVBQ0w7QUFBQSxFQUVBLE1BQWMsc0JBQXNCO0FBQ2hDLFFBQUksa0JBQWtCLEtBQUssY0FBYyxzQkFBc0I7QUFDL0QsUUFBSSxtQkFBbUIsTUFBTTtBQUN6QixZQUFNLEtBQUssNkJBQTZCO0FBQ3hDLHdCQUFrQixLQUFLLGNBQWMsc0JBQXNCO0FBQUEsSUFDL0Q7QUFFQSxRQUFJLG9CQUFvQixNQUFNO0FBQzFCLFdBQUssSUFBSSxVQUFVLFdBQVcsZUFBZTtBQUM3QyxXQUFLLHNCQUFzQjtBQUFBLElBQy9CO0FBQUEsRUFDSjtBQUNKOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAiY2FsbGJhY2siLCAiYWxwaGEiLCAiZXNjIiwgIlN0cmluZyIsICJzdHIiLCAicmVwbGFjZSIsICJtYXAiLCAicyIsICJzZXRJbm5lckhUTUxBdHRyIiwgIkRPTUF0dHJpYnV0ZU5hbWVzIiwgInNhbml0aXplZCIsICJoIiwgIm5hbWUiLCAiYXR0cnMiLCAic3RhY2siLCAiaSIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgInB1c2giLCAiY2hpbGRyZW4iLCAicmV2ZXJzZSIsICJlbXB0eVRhZ3MiLCAiaW5kZXhPZiIsICJfX2h0bWwiLCAiY2hpbGQiLCAicG9wIiwgIm1vZHVsZSIsICJjYWxsYmFjayIsICJpc0FycmF5IiwgImlzT2JqZWN0IiwgImlzTnVtYmVyIiwgIm1hcCIsICJmb3JtYXQiLCAibG9jYWxlIiwgInQiLCAidG8iLCAiZnJvbSIsICJpc0Z1bmN0aW9uIiwgInNldCIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImkiLCAiZGlmZiIsICJsb2NhbGVEYXRhIiwgImgiLCAiaG91cnMiLCAibWludXRlcyIsICJuYW1lcyIsICJkZWZhdWx0cyIsICJ0b2tlbnMiLCAibWVyaWRpZW0iLCAieWVhcnMiLCAibW9udGhzIiwgIndlZWtzIiwgImRheXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiLCAib2Zmc2V0IiwgImNsb25lIiwgInJvdW5kIiwgInRocmVzaG9sZHMiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJuYW1lcyIsICJjYWxsYmFjayIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgInJlc29sdmUiLCAiY2FsbGJhY2siLCAiaCIsICJpbXBvcnRfb2JzaWRpYW4iLCAiRGVjayIsICJ0IiwgImgxIiwgImgyIiwgImltcG9ydF9tb21lbnQiLCAibW9tZW50IiwgIm1vbWVudCIsICJzY2hlZHVsZSIsICJpbXBvcnRfb2JzaWRpYW4iLCAibGluayIsICJoIiwgInNjaGVkdWxlIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfdmh0bWwiLCAiaCIsICJoIiwgImludGVycG9sYXRlIiwgInQiLCAiY29sb3IiLCAibm9vcCIsICJ1aWQiLCAiaWQiLCAiaXNOdWxsT3JVbmRlZiIsICJ2YWx1ZSIsICJpc0FycmF5IiwgIkFycmF5IiwgInR5cGUiLCAiT2JqZWN0IiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJjYWxsIiwgInNsaWNlIiwgImlzT2JqZWN0IiwgImlzTnVtYmVyRmluaXRlIiwgIk51bWJlciIsICJpc0Zpbml0ZSIsICJmaW5pdGVPckRlZmF1bHQiLCAiZGVmYXVsdFZhbHVlIiwgInZhbHVlT3JEZWZhdWx0IiwgInRvUGVyY2VudGFnZSIsICJkaW1lbnNpb24iLCAiZW5kc1dpdGgiLCAicGFyc2VGbG9hdCIsICJ0b0RpbWVuc2lvbiIsICJjYWxsYmFjayIsICJmbiIsICJhcmdzIiwgInRoaXNBcmciLCAiYXBwbHkiLCAiZWFjaCIsICJsb29wYWJsZSIsICJyZXZlcnNlIiwgImkiLCAibGVuIiwgImtleXMiLCAibGVuZ3RoIiwgIl9lbGVtZW50c0VxdWFsIiwgImEwIiwgImExIiwgImlsZW4iLCAidjAiLCAidjEiLCAiZGF0YXNldEluZGV4IiwgImluZGV4IiwgImNsb25lIiwgInNvdXJjZSIsICJtYXAiLCAidGFyZ2V0IiwgImNyZWF0ZSIsICJrbGVuIiwgImsiLCAiaXNWYWxpZEtleSIsICJrZXkiLCAiaW5kZXhPZiIsICJfbWVyZ2VyIiwgIm9wdGlvbnMiLCAidHZhbCIsICJzdmFsIiwgIm1lcmdlIiwgInNvdXJjZXMiLCAibWVyZ2VyIiwgImN1cnJlbnQiLCAibWVyZ2VJZiIsICJfbWVyZ2VySWYiLCAiaGFzT3duUHJvcGVydHkiLCAia2V5UmVzb2x2ZXJzIiwgInYiLCAieCIsICJvIiwgInkiLCAiX3NwbGl0S2V5IiwgImtleSIsICJwYXJ0cyIsICJzcGxpdCIsICJrZXlzIiwgInRtcCIsICJwYXJ0IiwgImVuZHNXaXRoIiwgInNsaWNlIiwgInB1c2giLCAiX2dldEtleVJlc29sdmVyIiwgIm9iaiIsICJrIiwgInJlc29sdmVPYmplY3RLZXkiLCAicmVzb2x2ZXIiLCAiX2NhcGl0YWxpemUiLCAic3RyIiwgImNoYXJBdCIsICJ0b1VwcGVyQ2FzZSIsICJkZWZpbmVkIiwgInZhbHVlIiwgImlzRnVuY3Rpb24iLCAic2V0c0VxdWFsIiwgImEiLCAiYiIsICJzaXplIiwgIml0ZW0iLCAiaGFzIiwgIl9pc0NsaWNrRXZlbnQiLCAiZSIsICJ0eXBlIiwgIlBJIiwgIk1hdGgiLCAiVEFVIiwgIlBJVEFVIiwgIklORklOSVRZIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJSQURfUEVSX0RFRyIsICJIQUxGX1BJIiwgIlFVQVJURVJfUEkiLCAiVFdPX1RISVJEU19QSSIsICJsb2cxMCIsICJzaWduIiwgImFsbW9zdEVxdWFscyIsICJlcHNpbG9uIiwgImFicyIsICJuaWNlTnVtIiwgInJhbmdlIiwgInJvdW5kZWRSYW5nZSIsICJyb3VuZCIsICJuaWNlUmFuZ2UiLCAicG93IiwgImZsb29yIiwgImZyYWN0aW9uIiwgIm5pY2VGcmFjdGlvbiIsICJfZmFjdG9yaXplIiwgInJlc3VsdCIsICJzcXJ0IiwgImkiLCAic29ydCIsICJwb3AiLCAiaXNOdW1iZXIiLCAibiIsICJpc05hTiIsICJwYXJzZUZsb2F0IiwgImlzRmluaXRlIiwgImFsbW9zdFdob2xlIiwgInJvdW5kZWQiLCAiX3NldE1pbkFuZE1heEJ5S2V5IiwgImFycmF5IiwgInRhcmdldCIsICJwcm9wZXJ0eSIsICJpbGVuIiwgImxlbmd0aCIsICJtaW4iLCAibWF4IiwgInRvUmFkaWFucyIsICJkZWdyZWVzIiwgInRvRGVncmVlcyIsICJyYWRpYW5zIiwgIl9kZWNpbWFsUGxhY2VzIiwgImlzRmluaXRlTnVtYmVyIiwgInAiLCAiZ2V0QW5nbGVGcm9tUG9pbnQiLCAiY2VudHJlUG9pbnQiLCAiYW5nbGVQb2ludCIsICJkaXN0YW5jZUZyb21YQ2VudGVyIiwgImRpc3RhbmNlRnJvbVlDZW50ZXIiLCAicmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyIiwgImFuZ2xlIiwgImF0YW4yIiwgImRpc3RhbmNlIiwgImRpc3RhbmNlQmV0d2VlblBvaW50cyIsICJwdDEiLCAicHQyIiwgIl9ub3JtYWxpemVBbmdsZSIsICJhIiwgIlRBVSIsICJfYW5nbGVCZXR3ZWVuIiwgImFuZ2xlIiwgInN0YXJ0IiwgImVuZCIsICJzYW1lQW5nbGVJc0Z1bGxDaXJjbGUiLCAicyIsICJlIiwgImFuZ2xlVG9TdGFydCIsICJhbmdsZVRvRW5kIiwgInN0YXJ0VG9BbmdsZSIsICJlbmRUb0FuZ2xlIiwgIl9saW1pdFZhbHVlIiwgInZhbHVlIiwgIm1pbiIsICJtYXgiLCAiTWF0aCIsICJfaW50MTZSYW5nZSIsICJfaXNCZXR3ZWVuIiwgImVwc2lsb24iLCAiX2xvb2t1cCIsICJ0YWJsZSIsICJjbXAiLCAiaW5kZXgiLCAiaGkiLCAibGVuZ3RoIiwgImxvIiwgIm1pZCIsICJfbG9va3VwQnlLZXkiLCAia2V5IiwgImxhc3QiLCAidGkiLCAiX3Jsb29rdXBCeUtleSIsICJfZmlsdGVyQmV0d2VlbiIsICJ2YWx1ZXMiLCAic2xpY2UiLCAiYXJyYXlFdmVudHMiLCAibGlzdGVuQXJyYXlFdmVudHMiLCAiYXJyYXkiLCAibGlzdGVuZXIiLCAiX2NoYXJ0anMiLCAibGlzdGVuZXJzIiwgInB1c2giLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImNvbmZpZ3VyYWJsZSIsICJlbnVtZXJhYmxlIiwgImZvckVhY2giLCAibWV0aG9kIiwgIl9jYXBpdGFsaXplIiwgImJhc2UiLCAiYXJncyIsICJyZXMiLCAiYXBwbHkiLCAib2JqZWN0IiwgInVubGlzdGVuQXJyYXlFdmVudHMiLCAic3R1YiIsICJpbmRleE9mIiwgInNwbGljZSIsICJfYXJyYXlVbmlxdWUiLCAiaXRlbXMiLCAic2V0IiwgIlNldCIsICJzaXplIiwgIkFycmF5IiwgImZyb20iLCAicmVxdWVzdEFuaW1GcmFtZSIsICJ3aW5kb3ciLCAiY2FsbGJhY2siLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInRocm90dGxlZCIsICJmbiIsICJ0aGlzQXJnIiwgImFyZ3NUb1VzZSIsICJ0aWNraW5nIiwgImFyZ3MiLCAiY2FsbCIsICJhcHBseSIsICJkZWJvdW5jZSIsICJkZWxheSIsICJ0aW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJzZXRUaW1lb3V0IiwgIl90b0xlZnRSaWdodENlbnRlciIsICJhbGlnbiIsICJfYWxpZ25TdGFydEVuZCIsICJzdGFydCIsICJlbmQiLCAiX3RleHRYIiwgImxlZnQiLCAicmlnaHQiLCAicnRsIiwgImNoZWNrIiwgImF0RWRnZSIsICJ0IiwgImVsYXN0aWNJbiIsICJzIiwgInAiLCAiTWF0aCIsICJwb3ciLCAic2luIiwgIlRBVSIsICJlbGFzdGljT3V0IiwgImVmZmVjdHMiLCAibGluZWFyIiwgImVhc2VJblF1YWQiLCAiZWFzZU91dFF1YWQiLCAiZWFzZUluT3V0UXVhZCIsICJlYXNlSW5DdWJpYyIsICJlYXNlT3V0Q3ViaWMiLCAiZWFzZUluT3V0Q3ViaWMiLCAiZWFzZUluUXVhcnQiLCAiZWFzZU91dFF1YXJ0IiwgImVhc2VJbk91dFF1YXJ0IiwgImVhc2VJblF1aW50IiwgImVhc2VPdXRRdWludCIsICJlYXNlSW5PdXRRdWludCIsICJlYXNlSW5TaW5lIiwgImNvcyIsICJIQUxGX1BJIiwgImVhc2VPdXRTaW5lIiwgImVhc2VJbk91dFNpbmUiLCAiUEkiLCAiZWFzZUluRXhwbyIsICJlYXNlT3V0RXhwbyIsICJlYXNlSW5PdXRFeHBvIiwgImVhc2VJbkNpcmMiLCAic3FydCIsICJlYXNlT3V0Q2lyYyIsICJlYXNlSW5PdXRDaXJjIiwgImVhc2VJbkVsYXN0aWMiLCAiZWFzZU91dEVsYXN0aWMiLCAiZWFzZUluT3V0RWxhc3RpYyIsICJlYXNlSW5CYWNrIiwgImVhc2VPdXRCYWNrIiwgImVhc2VJbk91dEJhY2siLCAiZWFzZUluQm91bmNlIiwgImVhc2VPdXRCb3VuY2UiLCAibSIsICJkIiwgImVhc2VJbk91dEJvdW5jZSIsICJpc1BhdHRlcm5PckdyYWRpZW50IiwgInZhbHVlIiwgInR5cGUiLCAidG9TdHJpbmciLCAiY29sb3IiLCAiQ29sb3IiLCAiZ2V0SG92ZXJDb2xvciIsICJzYXR1cmF0ZSIsICJkYXJrZW4iLCAiaGV4U3RyaW5nIiwgIm51bWJlcnMiLCAiY29sb3JzIiwgImFwcGx5QW5pbWF0aW9uc0RlZmF1bHRzIiwgImRlZmF1bHRzIiwgInNldCIsICJkZWxheSIsICJ1bmRlZmluZWQiLCAiZHVyYXRpb24iLCAiZWFzaW5nIiwgImZuIiwgImZyb20iLCAibG9vcCIsICJ0byIsICJkZXNjcmliZSIsICJfZmFsbGJhY2siLCAiX2luZGV4YWJsZSIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgInByb3BlcnRpZXMiLCAiYWN0aXZlIiwgImFuaW1hdGlvbiIsICJyZXNpemUiLCAic2hvdyIsICJhbmltYXRpb25zIiwgInZpc2libGUiLCAiaGlkZSIsICJ2IiwgImFwcGx5TGF5b3V0c0RlZmF1bHRzIiwgImF1dG9QYWRkaW5nIiwgInBhZGRpbmciLCAidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0IiwgImludGxDYWNoZSIsICJNYXAiLCAiZ2V0TnVtYmVyRm9ybWF0IiwgImxvY2FsZSIsICJvcHRpb25zIiwgImNhY2hlS2V5IiwgIkpTT04iLCAic3RyaW5naWZ5IiwgImZvcm1hdHRlciIsICJnZXQiLCAiSW50bCIsICJOdW1iZXJGb3JtYXQiLCAiZm9ybWF0TnVtYmVyIiwgIm51bSIsICJmb3JtYXQiLCAiZm9ybWF0dGVycyIsICJ2YWx1ZXMiLCAiaXNBcnJheSIsICJudW1lcmljIiwgInRpY2tWYWx1ZSIsICJpbmRleCIsICJ0aWNrcyIsICJjaGFydCIsICJub3RhdGlvbiIsICJkZWx0YSIsICJsZW5ndGgiLCAibWF4VGljayIsICJtYXgiLCAiYWJzIiwgImNhbGN1bGF0ZURlbHRhIiwgImxvZ0RlbHRhIiwgImxvZzEwIiwgIm51bURlY2ltYWwiLCAiaXNOYU4iLCAibWluIiwgImZsb29yIiwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIsICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJsb2dhcml0aG1pYyIsICJyZW1haW4iLCAic2lnbmlmaWNhbmQiLCAiaW5jbHVkZXMiLCAiY2FsbCIsICJhcHBseVNjYWxlRGVmYXVsdHMiLCAiZGlzcGxheSIsICJvZmZzZXQiLCAicmV2ZXJzZSIsICJiZWdpbkF0WmVybyIsICJib3VuZHMiLCAiY2xpcCIsICJncmFjZSIsICJncmlkIiwgImxpbmVXaWR0aCIsICJkcmF3T25DaGFydEFyZWEiLCAiZHJhd1RpY2tzIiwgInRpY2tMZW5ndGgiLCAidGlja1dpZHRoIiwgIl9jdHgiLCAidGlja0NvbG9yIiwgImJvcmRlciIsICJkYXNoIiwgImRhc2hPZmZzZXQiLCAid2lkdGgiLCAidGl0bGUiLCAidGV4dCIsICJtaW5Sb3RhdGlvbiIsICJtYXhSb3RhdGlvbiIsICJtaXJyb3IiLCAidGV4dFN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VDb2xvciIsICJhdXRvU2tpcCIsICJhdXRvU2tpcFBhZGRpbmciLCAibGFiZWxPZmZzZXQiLCAiY2FsbGJhY2siLCAiVGlja3MiLCAibWlub3IiLCAibWFqb3IiLCAiYWxpZ24iLCAiY3Jvc3NBbGlnbiIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJiYWNrZHJvcENvbG9yIiwgImJhY2tkcm9wUGFkZGluZyIsICJyb3V0ZSIsICJzdGFydHNXaXRoIiwgIm92ZXJyaWRlcyIsICJjcmVhdGUiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0U2NvcGUiLCAibm9kZSIsICJrZXkiLCAia2V5cyIsICJzcGxpdCIsICJpIiwgIm4iLCAiayIsICJyb290IiwgInNjb3BlIiwgIm1lcmdlIiwgIkRlZmF1bHRzIiwgImNvbnN0cnVjdG9yIiwgIl9kZXNjcmlwdG9ycyIsICJfYXBwbGllcnMiLCAiYmFja2dyb3VuZENvbG9yIiwgImJvcmRlckNvbG9yIiwgImRhdGFzZXRzIiwgImRldmljZVBpeGVsUmF0aW8iLCAiY29udGV4dCIsICJwbGF0Zm9ybSIsICJnZXREZXZpY2VQaXhlbFJhdGlvIiwgImVsZW1lbnRzIiwgImV2ZW50cyIsICJmb250IiwgImZhbWlseSIsICJzaXplIiwgInN0eWxlIiwgImxpbmVIZWlnaHQiLCAid2VpZ2h0IiwgImhvdmVyIiwgImhvdmVyQmFja2dyb3VuZENvbG9yIiwgImN0eCIsICJob3ZlckJvcmRlckNvbG9yIiwgImhvdmVyQ29sb3IiLCAiaW5kZXhBeGlzIiwgImludGVyYWN0aW9uIiwgIm1vZGUiLCAiaW50ZXJzZWN0IiwgImluY2x1ZGVJbnZpc2libGUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAicGFyc2luZyIsICJwbHVnaW5zIiwgInJlc3BvbnNpdmUiLCAic2NhbGUiLCAic2NhbGVzIiwgInNob3dMaW5lIiwgImRyYXdBY3RpdmVFbGVtZW50c09uVG9wIiwgImFwcGx5IiwgIm92ZXJyaWRlIiwgInRhcmdldFNjb3BlIiwgInRhcmdldE5hbWUiLCAic2NvcGVPYmplY3QiLCAidGFyZ2V0U2NvcGVPYmplY3QiLCAicHJpdmF0ZU5hbWUiLCAiZGVmaW5lUHJvcGVydGllcyIsICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwgImxvY2FsIiwgInRhcmdldCIsICJpc09iamVjdCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJhcHBsaWVycyIsICJmb3JFYWNoIiwgInRvRm9udFN0cmluZyIsICJpc051bGxPclVuZGVmIiwgIl9tZWFzdXJlVGV4dCIsICJkYXRhIiwgImdjIiwgImxvbmdlc3QiLCAic3RyaW5nIiwgInRleHRXaWR0aCIsICJtZWFzdXJlVGV4dCIsICJwdXNoIiwgIl9sb25nZXN0VGV4dCIsICJhcnJheU9mVGhpbmdzIiwgImNhY2hlIiwgImdhcmJhZ2VDb2xsZWN0IiwgInNhdmUiLCAiaWxlbiIsICJqIiwgImpsZW4iLCAidGhpbmciLCAibmVzdGVkVGhpbmciLCAicmVzdG9yZSIsICJnY0xlbiIsICJzcGxpY2UiLCAiX2FsaWduUGl4ZWwiLCAicGl4ZWwiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAiaGFsZldpZHRoIiwgInJvdW5kIiwgImNsZWFyQ2FudmFzIiwgImNhbnZhcyIsICJnZXRDb250ZXh0IiwgInJlc2V0VHJhbnNmb3JtIiwgImNsZWFyUmVjdCIsICJoZWlnaHQiLCAiZHJhd1BvaW50IiwgIngiLCAieSIsICJkcmF3UG9pbnRMZWdlbmQiLCAidyIsICJ4T2Zmc2V0IiwgInlPZmZzZXQiLCAiY29ybmVyUmFkaXVzIiwgInhPZmZzZXRXIiwgInlPZmZzZXRXIiwgInBvaW50U3R5bGUiLCAicm90YXRpb24iLCAicmFkaXVzIiwgInJhZCIsICJSQURfUEVSX0RFRyIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImRyYXdJbWFnZSIsICJiZWdpblBhdGgiLCAiZWxsaXBzZSIsICJhcmMiLCAiY2xvc2VQYXRoIiwgIm1vdmVUbyIsICJUV09fVEhJUkRTX1BJIiwgImxpbmVUbyIsICJRVUFSVEVSX1BJIiwgIlNRUlQxXzIiLCAicmVjdCIsICJmaWxsIiwgImJvcmRlcldpZHRoIiwgInN0cm9rZSIsICJfaXNQb2ludEluQXJlYSIsICJwb2ludCIsICJhcmVhIiwgIm1hcmdpbiIsICJjbGlwQXJlYSIsICJ1bmNsaXBBcmVhIiwgInNldFJlbmRlck9wdHMiLCAiY3R4IiwgIm9wdHMiLCAidHJhbnNsYXRpb24iLCAidHJhbnNsYXRlIiwgImlzTnVsbE9yVW5kZWYiLCAicm90YXRpb24iLCAicm90YXRlIiwgImNvbG9yIiwgImZpbGxTdHlsZSIsICJ0ZXh0QWxpZ24iLCAidGV4dEJhc2VsaW5lIiwgImRlY29yYXRlVGV4dCIsICJ4IiwgInkiLCAibGluZSIsICJzdHJpa2V0aHJvdWdoIiwgInVuZGVybGluZSIsICJtZXRyaWNzIiwgIm1lYXN1cmVUZXh0IiwgImxlZnQiLCAiYWN0dWFsQm91bmRpbmdCb3hMZWZ0IiwgInJpZ2h0IiwgImFjdHVhbEJvdW5kaW5nQm94UmlnaHQiLCAidG9wIiwgImFjdHVhbEJvdW5kaW5nQm94QXNjZW50IiwgImJvdHRvbSIsICJhY3R1YWxCb3VuZGluZ0JveERlc2NlbnQiLCAieURlY29yYXRpb24iLCAic3Ryb2tlU3R5bGUiLCAiYmVnaW5QYXRoIiwgImxpbmVXaWR0aCIsICJkZWNvcmF0aW9uV2lkdGgiLCAibW92ZVRvIiwgImxpbmVUbyIsICJzdHJva2UiLCAiZHJhd0JhY2tkcm9wIiwgIm9sZENvbG9yIiwgImZpbGxSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJyZW5kZXJUZXh0IiwgInRleHQiLCAiZm9udCIsICJsaW5lcyIsICJpc0FycmF5IiwgInN0cm9rZVdpZHRoIiwgInN0cm9rZUNvbG9yIiwgImkiLCAic2F2ZSIsICJzdHJpbmciLCAibGVuZ3RoIiwgImJhY2tkcm9wIiwgInN0cm9rZVRleHQiLCAibWF4V2lkdGgiLCAiZmlsbFRleHQiLCAiTnVtYmVyIiwgImxpbmVIZWlnaHQiLCAicmVzdG9yZSIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAicmVjdCIsICJ3IiwgImgiLCAicmFkaXVzIiwgImFyYyIsICJ0b3BMZWZ0IiwgIlBJIiwgImJvdHRvbUxlZnQiLCAiSEFMRl9QSSIsICJib3R0b21SaWdodCIsICJ0b3BSaWdodCIsICJMSU5FX0hFSUdIVCIsICJGT05UX1NUWUxFIiwgInRvTGluZUhlaWdodCIsICJ2YWx1ZSIsICJzaXplIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAibnVtYmVyT3JaZXJvIiwgInYiLCAiX3JlYWRWYWx1ZVRvUHJvcHMiLCAicHJvcHMiLCAicmV0IiwgIm9ialByb3BzIiwgImlzT2JqZWN0IiwgImtleXMiLCAiT2JqZWN0IiwgInJlYWQiLCAicHJvcCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ0b1RSQkwiLCAidG9UUkJMQ29ybmVycyIsICJ0b1BhZGRpbmciLCAib2JqIiwgInRvRm9udCIsICJvcHRpb25zIiwgImZhbGxiYWNrIiwgImRlZmF1bHRzIiwgInBhcnNlSW50IiwgInN0eWxlIiwgImNvbnNvbGUiLCAid2FybiIsICJ1bmRlZmluZWQiLCAiZmFtaWx5IiwgIndlaWdodCIsICJ0b0ZvbnRTdHJpbmciLCAicmVzb2x2ZSIsICJpbnB1dHMiLCAiY29udGV4dCIsICJpbmRleCIsICJpbmZvIiwgImNhY2hlYWJsZSIsICJpbGVuIiwgIl9hZGRHcmFjZSIsICJtaW5tYXgiLCAiZ3JhY2UiLCAiYmVnaW5BdFplcm8iLCAibWluIiwgIm1heCIsICJjaGFuZ2UiLCAidG9EaW1lbnNpb24iLCAia2VlcFplcm8iLCAiYWRkIiwgIk1hdGgiLCAiYWJzIiwgImNyZWF0ZUNvbnRleHQiLCAicGFyZW50Q29udGV4dCIsICJhc3NpZ24iLCAiY3JlYXRlIiwgIl9jcmVhdGVSZXNvbHZlciIsICJzY29wZXMiLCAicHJlZml4ZXMiLCAicm9vdFNjb3BlcyIsICJnZXRUYXJnZXQiLCAiZmluYWxSb290U2NvcGVzIiwgIl9yZXNvbHZlIiwgImNhY2hlIiwgIlN5bWJvbCIsICJ0b1N0cmluZ1RhZyIsICJfY2FjaGVhYmxlIiwgIl9zY29wZXMiLCAiX3Jvb3RTY29wZXMiLCAiX2ZhbGxiYWNrIiwgIl9nZXRUYXJnZXQiLCAib3ZlcnJpZGUiLCAic2NvcGUiLCAiUHJveHkiLCAiZGVsZXRlUHJvcGVydHkiLCAidGFyZ2V0IiwgIl9rZXlzIiwgImdldCIsICJfY2FjaGVkIiwgIl9yZXNvbHZlV2l0aFByZWZpeGVzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJSZWZsZWN0IiwgImdldFByb3RvdHlwZU9mIiwgImhhcyIsICJnZXRLZXlzRnJvbUFsbFNjb3BlcyIsICJpbmNsdWRlcyIsICJvd25LZXlzIiwgInNldCIsICJzdG9yYWdlIiwgIl9zdG9yYWdlIiwgIl9hdHRhY2hDb250ZXh0IiwgInByb3h5IiwgInN1YlByb3h5IiwgImRlc2NyaXB0b3JEZWZhdWx0cyIsICJfcHJveHkiLCAiX2NvbnRleHQiLCAiX3N1YlByb3h5IiwgIl9zdGFjayIsICJTZXQiLCAiX2Rlc2NyaXB0b3JzIiwgInNldENvbnRleHQiLCAicmVjZWl2ZXIiLCAiX3Jlc29sdmVXaXRoQ29udGV4dCIsICJhbGxLZXlzIiwgImVudW1lcmFibGUiLCAiY29uZmlndXJhYmxlIiwgInNjcmlwdGFibGUiLCAiaW5kZXhhYmxlIiwgIl9zY3JpcHRhYmxlIiwgIl9pbmRleGFibGUiLCAiX2FsbEtleXMiLCAiaXNTY3JpcHRhYmxlIiwgImlzRnVuY3Rpb24iLCAiaXNJbmRleGFibGUiLCAicmVhZEtleSIsICJwcmVmaXgiLCAibmFtZSIsICJfY2FwaXRhbGl6ZSIsICJuZWVkc1N1YlJlc29sdmVyIiwgImNvbnN0cnVjdG9yIiwgInByb3RvdHlwZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJjYWxsIiwgImRlc2NyaXB0b3JzIiwgIl9yZXNvbHZlU2NyaXB0YWJsZSIsICJfcmVzb2x2ZUFycmF5IiwgImdldFZhbHVlIiwgIkVycm9yIiwgIkFycmF5IiwgImZyb20iLCAiam9pbiIsICJkZWxldGUiLCAiY3JlYXRlU3ViUmVzb2x2ZXIiLCAiYXJyIiwgImZpbHRlciIsICJzIiwgIml0ZW0iLCAicmVzb2x2ZXIiLCAicHVzaCIsICJyZXNvbHZlRmFsbGJhY2siLCAiZ2V0U2NvcGUiLCAia2V5IiwgInBhcmVudCIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImFkZFNjb3BlcyIsICJwYXJlbnRTY29wZXMiLCAicGFyZW50RmFsbGJhY2siLCAiYWxsU2NvcGVzIiwgImFkZFNjb3Blc0Zyb21LZXkiLCAic3ViR2V0VGFyZ2V0IiwgInJlc29sdmVLZXlzRnJvbUFsbFNjb3BlcyIsICJrIiwgInN0YXJ0c1dpdGgiLCAiRVBTSUxPTiIsICJOdW1iZXIiLCAiX2lzRG9tU3VwcG9ydGVkIiwgIndpbmRvdyIsICJkb2N1bWVudCIsICJfZ2V0UGFyZW50Tm9kZSIsICJkb21Ob2RlIiwgInBhcmVudCIsICJwYXJlbnROb2RlIiwgInRvU3RyaW5nIiwgImhvc3QiLCAicGFyc2VNYXhTdHlsZSIsICJzdHlsZVZhbHVlIiwgIm5vZGUiLCAicGFyZW50UHJvcGVydHkiLCAidmFsdWVJblBpeGVscyIsICJwYXJzZUludCIsICJpbmRleE9mIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZWxlbWVudCIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgImdldFN0eWxlIiwgImVsIiwgInByb3BlcnR5IiwgImdldFByb3BlcnR5VmFsdWUiLCAicG9zaXRpb25zIiwgImdldFBvc2l0aW9uZWRTdHlsZSIsICJzdHlsZXMiLCAic3R5bGUiLCAic3VmZml4IiwgInJlc3VsdCIsICJpIiwgInBvcyIsICJwYXJzZUZsb2F0IiwgIndpZHRoIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgInRvcCIsICJib3R0b20iLCAidXNlT2Zmc2V0UG9zIiwgIngiLCAieSIsICJ0YXJnZXQiLCAic2hhZG93Um9vdCIsICJnZXRDYW52YXNQb3NpdGlvbiIsICJlIiwgImNhbnZhcyIsICJ0b3VjaGVzIiwgInNvdXJjZSIsICJsZW5ndGgiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgImJveCIsICJyZWN0IiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAiZ2V0UmVsYXRpdmVQb3NpdGlvbiIsICJldmVudCIsICJjaGFydCIsICJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsICJib3JkZXJCb3giLCAiYm94U2l6aW5nIiwgInBhZGRpbmdzIiwgImJvcmRlcnMiLCAieE9mZnNldCIsICJ5T2Zmc2V0IiwgIk1hdGgiLCAicm91bmQiLCAiZ2V0Q29udGFpbmVyU2l6ZSIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAidW5kZWZpbmVkIiwgImNvbnRhaW5lciIsICJjbGllbnRXaWR0aCIsICJjbGllbnRIZWlnaHQiLCAiY29udGFpbmVyU3R5bGUiLCAiY29udGFpbmVyQm9yZGVyIiwgImNvbnRhaW5lclBhZGRpbmciLCAiSU5GSU5JVFkiLCAicm91bmQxIiwgInYiLCAiZ2V0TWF4aW11bVNpemUiLCAiYmJXaWR0aCIsICJiYkhlaWdodCIsICJhc3BlY3RSYXRpbyIsICJtYXJnaW5zIiwgImNvbnRhaW5lclNpemUiLCAibWF4IiwgIm1pbiIsICJtYWludGFpbkhlaWdodCIsICJmbG9vciIsICJyZXRpbmFTY2FsZSIsICJmb3JjZVJhdGlvIiwgImZvcmNlU3R5bGUiLCAicGl4ZWxSYXRpbyIsICJkZXZpY2VIZWlnaHQiLCAiZGV2aWNlV2lkdGgiLCAiY3R4IiwgInNldFRyYW5zZm9ybSIsICJzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIiwgInBhc3NpdmVTdXBwb3J0ZWQiLCAib3B0aW9ucyIsICJwYXNzaXZlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJyZWFkVXNlZFNpemUiLCAidmFsdWUiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJnZXRSaWdodFRvTGVmdEFkYXB0ZXIiLCAicmVjdFgiLCAid2lkdGgiLCAieCIsICJzZXRXaWR0aCIsICJ3IiwgInRleHRBbGlnbiIsICJhbGlnbiIsICJ4UGx1cyIsICJ2YWx1ZSIsICJsZWZ0Rm9yTHRyIiwgIml0ZW1XaWR0aCIsICJnZXRMZWZ0VG9SaWdodEFkYXB0ZXIiLCAiX2l0ZW1XaWR0aCIsICJnZXRSdGxBZGFwdGVyIiwgInJ0bCIsICJvdmVycmlkZVRleHREaXJlY3Rpb24iLCAiY3R4IiwgImRpcmVjdGlvbiIsICJzdHlsZSIsICJvcmlnaW5hbCIsICJjYW52YXMiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJnZXRQcm9wZXJ0eVByaW9yaXR5IiwgInNldFByb3BlcnR5IiwgInByZXZUZXh0RGlyZWN0aW9uIiwgInJlc3RvcmVUZXh0RGlyZWN0aW9uIiwgInVuZGVmaW5lZCIsICJBbmltYXRvciIsICJjb25zdHJ1Y3RvciIsICJfcmVxdWVzdCIsICJfY2hhcnRzIiwgIk1hcCIsICJfcnVubmluZyIsICJfbGFzdERhdGUiLCAidW5kZWZpbmVkIiwgIl9ub3RpZnkiLCAiY2hhcnQiLCAiYW5pbXMiLCAiZGF0ZSIsICJ0eXBlIiwgImNhbGxiYWNrcyIsICJsaXN0ZW5lcnMiLCAibnVtU3RlcHMiLCAiZHVyYXRpb24iLCAiZm9yRWFjaCIsICJmbiIsICJpbml0aWFsIiwgImN1cnJlbnRTdGVwIiwgIk1hdGgiLCAibWluIiwgInN0YXJ0IiwgIl9yZWZyZXNoIiwgInJlcXVlc3RBbmltRnJhbWUiLCAiY2FsbCIsICJ3aW5kb3ciLCAiX3VwZGF0ZSIsICJEYXRlIiwgIm5vdyIsICJyZW1haW5pbmciLCAicnVubmluZyIsICJpdGVtcyIsICJsZW5ndGgiLCAiaSIsICJkcmF3IiwgIml0ZW0iLCAiX2FjdGl2ZSIsICJfdG90YWwiLCAidGljayIsICJwb3AiLCAiX2dldEFuaW1zIiwgImNoYXJ0cyIsICJnZXQiLCAiY29tcGxldGUiLCAicHJvZ3Jlc3MiLCAic2V0IiwgImxpc3RlbiIsICJldmVudCIsICJjYiIsICJwdXNoIiwgImFkZCIsICJoYXMiLCAicmVkdWNlIiwgImFjYyIsICJjdXIiLCAibWF4IiwgIl9kdXJhdGlvbiIsICJzdG9wIiwgImNhbmNlbCIsICJyZW1vdmUiLCAiZGVsZXRlIiwgInRyYW5zcGFyZW50IiwgImludGVycG9sYXRvcnMiLCAiYm9vbGVhbiIsICJmcm9tIiwgInRvIiwgImZhY3RvciIsICJjb2xvciIsICJjMCIsICJoZWxwZXJzQ29sb3IiLCAiYzEiLCAidmFsaWQiLCAibWl4IiwgImhleFN0cmluZyIsICJudW1iZXIiLCAiQW5pbWF0aW9uIiwgImNmZyIsICJ0YXJnZXQiLCAicHJvcCIsICJjdXJyZW50VmFsdWUiLCAicmVzb2x2ZSIsICJfZm4iLCAiX2Vhc2luZyIsICJlZmZlY3RzIiwgImVhc2luZyIsICJsaW5lYXIiLCAiX3N0YXJ0IiwgImZsb29yIiwgImRlbGF5IiwgIl9sb29wIiwgImxvb3AiLCAiX3RhcmdldCIsICJfcHJvcCIsICJfZnJvbSIsICJfdG8iLCAiX3Byb21pc2VzIiwgImFjdGl2ZSIsICJ1cGRhdGUiLCAiZWxhcHNlZCIsICJyZW1haW4iLCAid2FpdCIsICJwcm9taXNlcyIsICJQcm9taXNlIiwgInJlcyIsICJyZWoiLCAicmVzb2x2ZWQiLCAibWV0aG9kIiwgIkFuaW1hdGlvbnMiLCAiY29uZmlnIiwgIl9jaGFydCIsICJfcHJvcGVydGllcyIsICJjb25maWd1cmUiLCAiaXNPYmplY3QiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJPYmplY3QiLCAia2V5cyIsICJkZWZhdWx0cyIsICJhbmltYXRpb24iLCAiYW5pbWF0ZWRQcm9wcyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImtleSIsICJvcHRpb24iLCAiaXNBcnJheSIsICJwcm9wZXJ0aWVzIiwgIl9hbmltYXRlT3B0aW9ucyIsICJ2YWx1ZXMiLCAibmV3T3B0aW9ucyIsICJvcHRpb25zIiwgInJlc29sdmVUYXJnZXRPcHRpb25zIiwgImFuaW1hdGlvbnMiLCAiX2NyZWF0ZUFuaW1hdGlvbnMiLCAiJHNoYXJlZCIsICJhd2FpdEFsbCIsICIkYW5pbWF0aW9ucyIsICJ0aGVuIiwgInByb3BzIiwgImNoYXJBdCIsICJ2YWx1ZSIsICJzaXplIiwgImFzc2lnbiIsICJhbmltYXRvciIsICJhbmltIiwgImFsbCIsICJzY2FsZUNsaXAiLCAic2NhbGUiLCAiYWxsb3dlZE92ZXJmbG93IiwgIm9wdHMiLCAicmV2ZXJzZSIsICJlbmQiLCAiZGVmYXVsdENsaXAiLCAieFNjYWxlIiwgInlTY2FsZSIsICJ4IiwgInkiLCAidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0IiwgInRvQ2xpcCIsICJ0IiwgInIiLCAiYiIsICJsIiwgImRpc2FibGVkIiwgImdldFNvcnRlZERhdGFzZXRJbmRpY2VzIiwgImZpbHRlclZpc2libGUiLCAibWV0YXNldHMiLCAiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsICJpbGVuIiwgImluZGV4IiwgImFwcGx5U3RhY2siLCAic3RhY2siLCAiZHNJbmRleCIsICJzaW5nbGVNb2RlIiwgIm1vZGUiLCAiZGF0YXNldEluZGV4IiwgIm90aGVyVmFsdWUiLCAiaXNGaW5pdGUiLCAic2lnbiIsICJjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkiLCAiZGF0YSIsICJhZGF0YSIsICJBcnJheSIsICJpc1N0YWNrZWQiLCAibWV0YSIsICJzdGFja2VkIiwgImdldFN0YWNrS2V5IiwgImluZGV4U2NhbGUiLCAidmFsdWVTY2FsZSIsICJpZCIsICJnZXRVc2VyQm91bmRzIiwgIm1pbkRlZmluZWQiLCAibWF4RGVmaW5lZCIsICJOdW1iZXIiLCAiTkVHQVRJVkVfSU5GSU5JVFkiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAiZ2V0T3JDcmVhdGVTdGFjayIsICJzdGFja3MiLCAic3RhY2tLZXkiLCAiaW5kZXhWYWx1ZSIsICJzdWJTdGFjayIsICJnZXRMYXN0SW5kZXhJblN0YWNrIiwgInZTY2FsZSIsICJwb3NpdGl2ZSIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJ1cGRhdGVTdGFja3MiLCAiY29udHJvbGxlciIsICJwYXJzZWQiLCAiX2NhY2hlZE1ldGEiLCAiX3N0YWNrcyIsICJpU2NhbGUiLCAiaUF4aXMiLCAiYXhpcyIsICJ2QXhpcyIsICJpdGVtU3RhY2tzIiwgIl90b3AiLCAiX2JvdHRvbSIsICJ2aXN1YWxWYWx1ZXMiLCAiX3Zpc3VhbFZhbHVlcyIsICJnZXRGaXJzdFNjYWxlSWQiLCAic2NhbGVzIiwgImZpbHRlciIsICJzaGlmdCIsICJjcmVhdGVEYXRhc2V0Q29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJkYXRhc2V0IiwgImNyZWF0ZURhdGFDb250ZXh0IiwgImVsZW1lbnQiLCAiZGF0YUluZGV4IiwgInJhdyIsICJjbGVhclN0YWNrcyIsICJfcGFyc2VkIiwgImlzRGlyZWN0VXBkYXRlTW9kZSIsICJjbG9uZUlmTm90U2hhcmVkIiwgImNhY2hlZCIsICJzaGFyZWQiLCAiY3JlYXRlU3RhY2siLCAiY2FuU3RhY2siLCAiaGlkZGVuIiwgIl9zdGFja2VkIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgIl9jdHgiLCAiY3R4IiwgIl9jYWNoZWREYXRhT3B0cyIsICJnZXRNZXRhIiwgIl90eXBlIiwgIl9wYXJzaW5nIiwgIl9kYXRhIiwgIl9vYmplY3REYXRhIiwgIl9zaGFyZWRPcHRpb25zIiwgIl9kcmF3U3RhcnQiLCAiX2RyYXdDb3VudCIsICJlbmFibGVPcHRpb25TaGFyaW5nIiwgInN1cHBvcnRzRGVjaW1hdGlvbiIsICIkY29udGV4dCIsICJfc3luY0xpc3QiLCAiZGF0YXNldEVsZW1lbnRUeXBlIiwgImRhdGFFbGVtZW50VHlwZSIsICJpbml0aWFsaXplIiwgImxpbmtTY2FsZXMiLCAiYWRkRWxlbWVudHMiLCAiZmlsbCIsICJpc1BsdWdpbkVuYWJsZWQiLCAiY29uc29sZSIsICJ3YXJuIiwgInVwZGF0ZUluZGV4IiwgImdldERhdGFzZXQiLCAiY2hvb3NlSWQiLCAieGlkIiwgInhBeGlzSUQiLCAidmFsdWVPckRlZmF1bHQiLCAieWlkIiwgInlBeGlzSUQiLCAicmlkIiwgInJBeGlzSUQiLCAiaW5kZXhBeGlzIiwgImlpZCIsICJpQXhpc0lEIiwgInZpZCIsICJ2QXhpc0lEIiwgImdldFNjYWxlRm9ySWQiLCAiclNjYWxlIiwgImRhdGFzZXRzIiwgImdldERhdGFzZXRNZXRhIiwgInNjYWxlSUQiLCAiX2dldE90aGVyU2NhbGUiLCAicmVzZXQiLCAiX2Rlc3Ryb3kiLCAidW5saXN0ZW5BcnJheUV2ZW50cyIsICJfZGF0YUNoZWNrIiwgImlzRXh0ZW5zaWJsZSIsICJsaXN0ZW5BcnJheUV2ZW50cyIsICJidWlsZE9yVXBkYXRlRWxlbWVudHMiLCAicmVzZXROZXdFbGVtZW50cyIsICJzdGFja0NoYW5nZWQiLCAib2xkU3RhY2tlZCIsICJfcmVzeW5jRWxlbWVudHMiLCAic2NvcGVLZXlzIiwgImRhdGFzZXRTY29wZUtleXMiLCAic2NvcGVzIiwgImdldE9wdGlvblNjb3BlcyIsICJjcmVhdGVSZXNvbHZlciIsICJnZXRDb250ZXh0IiwgInBhcnNpbmciLCAicGFyc2UiLCAiY291bnQiLCAic29ydGVkIiwgIl9zb3J0ZWQiLCAicHJldiIsICJwYXJzZUFycmF5RGF0YSIsICJwYXJzZU9iamVjdERhdGEiLCAicGFyc2VQcmltaXRpdmVEYXRhIiwgImlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2IiwgImxhYmVscyIsICJnZXRMYWJlbHMiLCAic2luZ2xlU2NhbGUiLCAieEF4aXNLZXkiLCAieUF4aXNLZXkiLCAicmVzb2x2ZU9iamVjdEtleSIsICJnZXRQYXJzZWQiLCAiZ2V0RGF0YUVsZW1lbnQiLCAidXBkYXRlUmFuZ2VGcm9tUGFyc2VkIiwgInJhbmdlIiwgInBhcnNlZFZhbHVlIiwgIk5hTiIsICJnZXRNaW5NYXgiLCAib3RoZXJTY2FsZSIsICJvdGhlck1pbiIsICJvdGhlck1heCIsICJfc2tpcCIsICJnZXRBbGxQYXJzZWRWYWx1ZXMiLCAiZ2V0TWF4T3ZlcmZsb3ciLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJsYWJlbCIsICJnZXRMYWJlbEZvclZhbHVlIiwgIl9jbGlwIiwgImNsaXAiLCAiZWxlbWVudHMiLCAiYXJlYSIsICJjaGFydEFyZWEiLCAiZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AiLCAiZ2V0U3R5bGUiLCAicmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyIsICJyZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zIiwgImNvbnRleHQiLCAiX3Jlc29sdmVFbGVtZW50T3B0aW9ucyIsICJlbGVtZW50VHlwZSIsICJjYWNoZSIsICJjYWNoZUtleSIsICJzaGFyaW5nIiwgImRlZmluZWQiLCAiZGF0YXNldEVsZW1lbnRTY29wZUtleXMiLCAicHJlZml4ZXMiLCAibmFtZXMiLCAicmVzb2x2ZU5hbWVkT3B0aW9ucyIsICJmcmVlemUiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgInRyYW5zaXRpb24iLCAiZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyIsICJfY2FjaGVhYmxlIiwgImdldFNoYXJlZE9wdGlvbnMiLCAiaW5jbHVkZU9wdGlvbnMiLCAic2hhcmVkT3B0aW9ucyIsICJfYW5pbWF0aW9uc0Rpc2FibGVkIiwgIl9nZXRTaGFyZWRPcHRpb25zIiwgImZpcnN0T3B0cyIsICJwcmV2aW91c2x5U2hhcmVkT3B0aW9ucyIsICJ1cGRhdGVTaGFyZWRPcHRpb25zIiwgInVwZGF0ZUVsZW1lbnQiLCAiX3NldFN0eWxlIiwgInJlbW92ZUhvdmVyU3R5bGUiLCAic2V0SG92ZXJTdHlsZSIsICJfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUiLCAiX3NldERhdGFzZXRIb3ZlclN0eWxlIiwgImFyZzEiLCAiYXJnMiIsICJudW1NZXRhIiwgIm51bURhdGEiLCAiX2luc2VydEVsZW1lbnRzIiwgIl9yZW1vdmVFbGVtZW50cyIsICJtb3ZlIiwgImFyciIsICJ1cGRhdGVFbGVtZW50cyIsICJyZW1vdmVkIiwgInNwbGljZSIsICJfc3luYyIsICJhcmdzIiwgIl9kYXRhQ2hhbmdlcyIsICJfb25EYXRhUHVzaCIsICJhcmd1bWVudHMiLCAiX29uRGF0YVBvcCIsICJfb25EYXRhU2hpZnQiLCAiX29uRGF0YVNwbGljZSIsICJuZXdDb3VudCIsICJfb25EYXRhVW5zaGlmdCIsICJnZXRBbGxTY2FsZVZhbHVlcyIsICJfY2FjaGUiLCAiJGJhciIsICJ2aXNpYmxlTWV0YXMiLCAiY29uY2F0IiwgIl9hcnJheVVuaXF1ZSIsICJzb3J0IiwgImEiLCAiY29tcHV0ZU1pblNhbXBsZVNpemUiLCAiX2xlbmd0aCIsICJjdXJyIiwgInVwZGF0ZU1pbkFuZFByZXYiLCAiYWJzIiwgImdldFBpeGVsRm9yVmFsdWUiLCAidGlja3MiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyIsICJydWxlciIsICJzdGFja0NvdW50IiwgInRoaWNrbmVzcyIsICJiYXJUaGlja25lc3MiLCAicmF0aW8iLCAiaXNOdWxsT3JVbmRlZiIsICJjYXRlZ29yeVBlcmNlbnRhZ2UiLCAiYmFyUGVyY2VudGFnZSIsICJjaHVuayIsICJwaXhlbHMiLCAiY29tcHV0ZUZsZXhDYXRlZ29yeVRyYWl0cyIsICJuZXh0IiwgInBlcmNlbnQiLCAicGFyc2VGbG9hdEJhciIsICJlbnRyeSIsICJzdGFydFZhbHVlIiwgImVuZFZhbHVlIiwgImJhclN0YXJ0IiwgImJhckVuZCIsICJfY3VzdG9tIiwgInBhcnNlVmFsdWUiLCAicGFyc2VBcnJheU9yUHJpbWl0aXZlIiwgImlzRmxvYXRCYXIiLCAiY3VzdG9tIiwgImJhclNpZ24iLCAiYWN0dWFsQmFzZSIsICJpc0hvcml6b250YWwiLCAiYm9yZGVyUHJvcHMiLCAiaG9yaXpvbnRhbCIsICJiYXNlIiwgInNldEJvcmRlclNraXBwZWQiLCAiZWRnZSIsICJib3JkZXJTa2lwcGVkIiwgImVuYWJsZUJvcmRlclJhZGl1cyIsICJwYXJzZUVkZ2UiLCAic3dhcCIsICJzdGFydEVuZCIsICJvcmlnIiwgInYxIiwgInYyIiwgInYiLCAic2V0SW5mbGF0ZUFtb3VudCIsICJpbmZsYXRlQW1vdW50IiwgIkJhckNvbnRyb2xsZXIiLCAiaUF4aXNLZXkiLCAidkF4aXNLZXkiLCAib2JqIiwgImJhcnMiLCAiZ2V0QmFzZVBpeGVsIiwgIl9nZXRSdWxlciIsICJ2cGl4ZWxzIiwgImhlYWQiLCAiX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzIiwgImlwaXhlbHMiLCAiX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzIiwgImNlbnRlciIsICJoZWlnaHQiLCAid2lkdGgiLCAiX2dldFN0YWNrcyIsICJsYXN0IiwgImdyb3VwZWQiLCAic2tpcE51bGwiLCAidmFsIiwgImlzTmFOIiwgImluZGV4T2YiLCAiX2dldFN0YWNrQ291bnQiLCAiX2dldFN0YWNrSW5kZXgiLCAibmFtZSIsICJfc3RhcnRQaXhlbCIsICJfZW5kUGl4ZWwiLCAiYmFzZVZhbHVlIiwgIm1pbkJhckxlbmd0aCIsICJmbG9hdGluZyIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJzdGFydFBpeGVsIiwgImdldFBpeGVsRm9yRGVjaW1hbCIsICJlbmRQaXhlbCIsICJnZXRWYWx1ZUZvclBpeGVsIiwgImhhbGZHcmlkIiwgImdldExpbmVXaWR0aEZvclZhbHVlIiwgIm1heEJhclRoaWNrbmVzcyIsICJJbmZpbml0eSIsICJzdGFja0luZGV4IiwgInJlY3RzIiwgIm51bWJlcnMiLCAib3ZlcnJpZGVzIiwgIl9pbmRleF8iLCAib2Zmc2V0IiwgImdyaWQiLCAiX3ZhbHVlXyIsICJiZWdpbkF0WmVybyIsICJnZXRSYXRpb0FuZE9mZnNldCIsICJyb3RhdGlvbiIsICJjaXJjdW1mZXJlbmNlIiwgImN1dG91dCIsICJyYXRpb1giLCAicmF0aW9ZIiwgIm9mZnNldFgiLCAib2Zmc2V0WSIsICJUQVUiLCAic3RhcnRBbmdsZSIsICJlbmRBbmdsZSIsICJzdGFydFgiLCAiTWF0aCIsICJjb3MiLCAic3RhcnRZIiwgInNpbiIsICJlbmRYIiwgImVuZFkiLCAiY2FsY01heCIsICJhbmdsZSIsICJhIiwgImIiLCAiX2FuZ2xlQmV0d2VlbiIsICJtYXgiLCAiY2FsY01pbiIsICJtaW4iLCAibWF4WCIsICJtYXhZIiwgIkhBTEZfUEkiLCAibWluWCIsICJQSSIsICJtaW5ZIiwgIkRvdWdobnV0Q29udHJvbGxlciIsICJEYXRhc2V0Q29udHJvbGxlciIsICJjb25zdHJ1Y3RvciIsICJjaGFydCIsICJkYXRhc2V0SW5kZXgiLCAiZW5hYmxlT3B0aW9uU2hhcmluZyIsICJpbm5lclJhZGl1cyIsICJ1bmRlZmluZWQiLCAib3V0ZXJSYWRpdXMiLCAibGlua1NjYWxlcyIsICJwYXJzZSIsICJzdGFydCIsICJjb3VudCIsICJkYXRhIiwgImdldERhdGFzZXQiLCAibWV0YSIsICJfY2FjaGVkTWV0YSIsICJfcGFyc2luZyIsICJfcGFyc2VkIiwgImdldHRlciIsICJpIiwgImlzT2JqZWN0IiwgImtleSIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImlsZW4iLCAiX2dldFJvdGF0aW9uIiwgInRvUmFkaWFucyIsICJvcHRpb25zIiwgIl9nZXRDaXJjdW1mZXJlbmNlIiwgIl9nZXRSb3RhdGlvbkV4dGVudHMiLCAiZGF0YXNldHMiLCAibGVuZ3RoIiwgImlzRGF0YXNldFZpc2libGUiLCAiZ2V0RGF0YXNldE1ldGEiLCAidHlwZSIsICJfdHlwZSIsICJjb250cm9sbGVyIiwgInVwZGF0ZSIsICJtb2RlIiwgImNoYXJ0QXJlYSIsICJhcmNzIiwgInNwYWNpbmciLCAiZ2V0TWF4Qm9yZGVyV2lkdGgiLCAiZ2V0TWF4T2Zmc2V0IiwgIm1heFNpemUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInRvUGVyY2VudGFnZSIsICJjaGFydFdlaWdodCIsICJfZ2V0UmluZ1dlaWdodCIsICJpbmRleCIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAibWF4UmFkaXVzIiwgInRvRGltZW5zaW9uIiwgInJhZGl1cyIsICJyYWRpdXNMZW5ndGgiLCAiX2dldFZpc2libGVEYXRhc2V0V2VpZ2h0VG90YWwiLCAidG90YWwiLCAiY2FsY3VsYXRlVG90YWwiLCAiX2dldFJpbmdXZWlnaHRPZmZzZXQiLCAidXBkYXRlRWxlbWVudHMiLCAiX2NpcmN1bWZlcmVuY2UiLCAicmVzZXQiLCAib3B0cyIsICJhbmltYXRpb24iLCAiYW5pbWF0ZVJvdGF0ZSIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJoaWRkZW4iLCAiY2FsY3VsYXRlQ2lyY3VtZmVyZW5jZSIsICJhbmltYXRpb25PcHRzIiwgImNlbnRlclgiLCAibGVmdCIsICJyaWdodCIsICJjZW50ZXJZIiwgInRvcCIsICJib3R0b20iLCAiYW5pbWF0ZVNjYWxlIiwgInNoYXJlZE9wdGlvbnMiLCAiaW5jbHVkZU9wdGlvbnMiLCAiX2dldFNoYXJlZE9wdGlvbnMiLCAiYXJjIiwgInByb3BlcnRpZXMiLCAieCIsICJ5IiwgInJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMiLCAiYWN0aXZlIiwgInVwZGF0ZUVsZW1lbnQiLCAibWV0YURhdGEiLCAidmFsdWUiLCAiaXNOYU4iLCAiYWJzIiwgImdldExhYmVsQW5kVmFsdWUiLCAibGFiZWxzIiwgImZvcm1hdE51bWJlciIsICJsb2NhbGUiLCAibGFiZWwiLCAiYm9yZGVyQWxpZ24iLCAiYm9yZGVyV2lkdGgiLCAiaG92ZXJCb3JkZXJXaWR0aCIsICJvZmZzZXQiLCAiaG92ZXJPZmZzZXQiLCAicmluZ1dlaWdodE9mZnNldCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ3ZWlnaHQiLCAiaWQiLCAiZGVmYXVsdHMiLCAiZGF0YXNldEVsZW1lbnRUeXBlIiwgImRhdGFFbGVtZW50VHlwZSIsICJhbmltYXRpb25zIiwgIm51bWJlcnMiLCAiaW5kZXhBeGlzIiwgImRlc2NyaXB0b3JzIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAiX2luZGV4YWJsZSIsICJzdGFydHNXaXRoIiwgIm92ZXJyaWRlcyIsICJhc3BlY3RSYXRpbyIsICJwbHVnaW5zIiwgImxlZ2VuZCIsICJnZW5lcmF0ZUxhYmVscyIsICJwb2ludFN0eWxlIiwgImNvbG9yIiwgIm1hcCIsICJzdHlsZSIsICJnZXRTdHlsZSIsICJ0ZXh0IiwgImZpbGxTdHlsZSIsICJiYWNrZ3JvdW5kQ29sb3IiLCAic3Ryb2tlU3R5bGUiLCAiYm9yZGVyQ29sb3IiLCAiZm9udENvbG9yIiwgImxpbmVXaWR0aCIsICJvbkNsaWNrIiwgImUiLCAibGVnZW5kSXRlbSIsICJ0b2dnbGVEYXRhVmlzaWJpbGl0eSIsICJQaWVDb250cm9sbGVyIiwgIkRvdWdobnV0Q29udHJvbGxlciIsICJpZCIsICJkZWZhdWx0cyIsICJjdXRvdXQiLCAicm90YXRpb24iLCAiY2lyY3VtZmVyZW5jZSIsICJyYWRpdXMiLCAiYWJzdHJhY3QiLCAiRXJyb3IiLCAiRGF0ZUFkYXB0ZXJCYXNlIiwgImNvbnN0cnVjdG9yIiwgIm9wdGlvbnMiLCAib3ZlcnJpZGUiLCAibWVtYmVycyIsICJPYmplY3QiLCAiYXNzaWduIiwgInByb3RvdHlwZSIsICJpbml0IiwgImZvcm1hdHMiLCAicGFyc2UiLCAiZm9ybWF0IiwgImFkZCIsICJkaWZmIiwgInN0YXJ0T2YiLCAiZW5kT2YiLCAiX2RhdGUiLCAiYmluYXJ5U2VhcmNoIiwgIm1ldGFzZXQiLCAiYXhpcyIsICJ2YWx1ZSIsICJpbnRlcnNlY3QiLCAiY29udHJvbGxlciIsICJkYXRhIiwgIl9zb3J0ZWQiLCAiaVNjYWxlIiwgIl9jYWNoZWRNZXRhIiwgImxlbmd0aCIsICJsb29rdXBNZXRob2QiLCAiX3JldmVyc2VQaXhlbHMiLCAiX3Jsb29rdXBCeUtleSIsICJfbG9va3VwQnlLZXkiLCAiX3NoYXJlZE9wdGlvbnMiLCAiZWwiLCAicmFuZ2UiLCAiZ2V0UmFuZ2UiLCAic3RhcnQiLCAiZW5kIiwgImxvIiwgImhpIiwgImV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyIsICJjaGFydCIsICJwb3NpdGlvbiIsICJoYW5kbGVyIiwgIm1ldGFzZXRzIiwgImdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMiLCAiaSIsICJpbGVuIiwgImluZGV4IiwgImoiLCAiZWxlbWVudCIsICJza2lwIiwgImdldERpc3RhbmNlTWV0cmljRm9yQXhpcyIsICJ1c2VYIiwgImluZGV4T2YiLCAidXNlWSIsICJwdDEiLCAicHQyIiwgImRlbHRhWCIsICJNYXRoIiwgImFicyIsICJ4IiwgImRlbHRhWSIsICJ5IiwgInNxcnQiLCAicG93IiwgImdldEludGVyc2VjdEl0ZW1zIiwgInVzZUZpbmFsUG9zaXRpb24iLCAiaW5jbHVkZUludmlzaWJsZSIsICJpdGVtcyIsICJpc1BvaW50SW5BcmVhIiwgImV2YWx1YXRpb25GdW5jIiwgImRhdGFzZXRJbmRleCIsICJfaXNQb2ludEluQXJlYSIsICJjaGFydEFyZWEiLCAiaW5SYW5nZSIsICJwdXNoIiwgImdldE5lYXJlc3RSYWRpYWxJdGVtcyIsICJzdGFydEFuZ2xlIiwgImVuZEFuZ2xlIiwgImdldFByb3BzIiwgImFuZ2xlIiwgImdldEFuZ2xlRnJvbVBvaW50IiwgIl9hbmdsZUJldHdlZW4iLCAiZ2V0TmVhcmVzdENhcnRlc2lhbkl0ZW1zIiwgImRpc3RhbmNlTWV0cmljIiwgIm1pbkRpc3RhbmNlIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJjZW50ZXIiLCAiZ2V0Q2VudGVyUG9pbnQiLCAicG9pbnRJbkFyZWEiLCAiZGlzdGFuY2UiLCAiZ2V0TmVhcmVzdEl0ZW1zIiwgImdldEF4aXNJdGVtcyIsICJyYW5nZU1ldGhvZCIsICJpbnRlcnNlY3RzSXRlbSIsICJtb2RlcyIsICJlIiwgImdldFJlbGF0aXZlUG9zaXRpb24iLCAiZWxlbWVudHMiLCAiZm9yRWFjaCIsICJtZXRhIiwgImRhdGFzZXQiLCAiZ2V0RGF0YXNldE1ldGEiLCAicG9pbnQiLCAibmVhcmVzdCIsICJTVEFUSUNfUE9TSVRJT05TIiwgImZpbHRlckJ5UG9zaXRpb24iLCAiYXJyYXkiLCAiZmlsdGVyIiwgInYiLCAicG9zIiwgImZpbHRlckR5bmFtaWNQb3NpdGlvbkJ5QXhpcyIsICJib3giLCAic29ydEJ5V2VpZ2h0IiwgInJldmVyc2UiLCAic29ydCIsICJhIiwgImIiLCAidjAiLCAidjEiLCAid2VpZ2h0IiwgIndyYXBCb3hlcyIsICJib3hlcyIsICJsYXlvdXRCb3hlcyIsICJzdGFjayIsICJzdGFja1dlaWdodCIsICJob3Jpem9udGFsIiwgImlzSG9yaXpvbnRhbCIsICJidWlsZFN0YWNrcyIsICJsYXlvdXRzIiwgInN0YWNrcyIsICJ3cmFwIiwgImluY2x1ZGVzIiwgIl9zdGFjayIsICJjb3VudCIsICJwbGFjZWQiLCAic2l6ZSIsICJzZXRMYXlvdXREaW1zIiwgInBhcmFtcyIsICJ2Qm94TWF4V2lkdGgiLCAiaEJveE1heEhlaWdodCIsICJsYXlvdXQiLCAiZnVsbFNpemUiLCAiZmFjdG9yIiwgIndpZHRoIiwgImF2YWlsYWJsZVdpZHRoIiwgImhlaWdodCIsICJhdmFpbGFibGVIZWlnaHQiLCAiYnVpbGRMYXlvdXRCb3hlcyIsICJsZWZ0IiwgInJpZ2h0IiwgInRvcCIsICJib3R0b20iLCAiY2VudGVySG9yaXpvbnRhbCIsICJjZW50ZXJWZXJ0aWNhbCIsICJsZWZ0QW5kVG9wIiwgImNvbmNhdCIsICJyaWdodEFuZEJvdHRvbSIsICJ2ZXJ0aWNhbCIsICJnZXRDb21iaW5lZE1heCIsICJtYXhQYWRkaW5nIiwgIm1heCIsICJ1cGRhdGVNYXhQYWRkaW5nIiwgImJveFBhZGRpbmciLCAidXBkYXRlRGltcyIsICJpc09iamVjdCIsICJnZXRQYWRkaW5nIiwgIm5ld1dpZHRoIiwgIm91dGVyV2lkdGgiLCAibmV3SGVpZ2h0IiwgIm91dGVySGVpZ2h0IiwgIndpZHRoQ2hhbmdlZCIsICJ3IiwgImhlaWdodENoYW5nZWQiLCAiaCIsICJzYW1lIiwgIm90aGVyIiwgImhhbmRsZU1heFBhZGRpbmciLCAidXBkYXRlUG9zIiwgImNoYW5nZSIsICJnZXRNYXJnaW5zIiwgIm1hcmdpbkZvclBvc2l0aW9ucyIsICJwb3NpdGlvbnMiLCAibWFyZ2luIiwgImZpdEJveGVzIiwgInJlZml0Qm94ZXMiLCAicmVmaXQiLCAiY2hhbmdlZCIsICJ1cGRhdGUiLCAic2V0Qm94RGltcyIsICJwbGFjZUJveGVzIiwgInVzZXJQYWRkaW5nIiwgInBhZGRpbmciLCAiZGVmaW5lZCIsICJhZGRCb3giLCAiaXRlbSIsICJfbGF5ZXJzIiwgInoiLCAiZHJhdyIsICJyZW1vdmVCb3giLCAibGF5b3V0SXRlbSIsICJzcGxpY2UiLCAiY29uZmlndXJlIiwgIm1pblBhZGRpbmciLCAidG9QYWRkaW5nIiwgInZlcnRpY2FsQm94ZXMiLCAiaG9yaXpvbnRhbEJveGVzIiwgImVhY2giLCAiYmVmb3JlTGF5b3V0IiwgInZpc2libGVWZXJ0aWNhbEJveENvdW50IiwgInJlZHVjZSIsICJ0b3RhbCIsICJkaXNwbGF5IiwgImZyZWV6ZSIsICJCYXNlUGxhdGZvcm0iLCAiYWNxdWlyZUNvbnRleHQiLCAiY2FudmFzIiwgImFzcGVjdFJhdGlvIiwgInJlbGVhc2VDb250ZXh0IiwgImNvbnRleHQiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJ0eXBlIiwgImxpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsICJnZXRNYXhpbXVtU2l6ZSIsICJmbG9vciIsICJpc0F0dGFjaGVkIiwgInVwZGF0ZUNvbmZpZyIsICJjb25maWciLCAiQmFzaWNQbGF0Zm9ybSIsICJnZXRDb250ZXh0IiwgImFuaW1hdGlvbiIsICJFWFBBTkRPX0tFWSIsICJFVkVOVF9UWVBFUyIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJwb2ludGVyZW50ZXIiLCAicG9pbnRlcmRvd24iLCAicG9pbnRlcm1vdmUiLCAicG9pbnRlcnVwIiwgInBvaW50ZXJsZWF2ZSIsICJwb2ludGVyb3V0IiwgImlzTnVsbE9yRW1wdHkiLCAiaW5pdENhbnZhcyIsICJzdHlsZSIsICJyZW5kZXJIZWlnaHQiLCAiZ2V0QXR0cmlidXRlIiwgInJlbmRlcldpZHRoIiwgImluaXRpYWwiLCAiYm94U2l6aW5nIiwgImRpc3BsYXlXaWR0aCIsICJyZWFkVXNlZFNpemUiLCAidW5kZWZpbmVkIiwgImRpc3BsYXlIZWlnaHQiLCAiZXZlbnRMaXN0ZW5lck9wdGlvbnMiLCAic3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyIsICJwYXNzaXZlIiwgImFkZExpc3RlbmVyIiwgIm5vZGUiLCAicmVtb3ZlTGlzdGVuZXIiLCAiZnJvbU5hdGl2ZUV2ZW50IiwgImV2ZW50IiwgIm5hdGl2ZSIsICJub2RlTGlzdENvbnRhaW5zIiwgIm5vZGVMaXN0IiwgImNvbnRhaW5zIiwgImNyZWF0ZUF0dGFjaE9ic2VydmVyIiwgIm9ic2VydmVyIiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiZW50cmllcyIsICJ0cmlnZ2VyIiwgImVudHJ5IiwgImFkZGVkTm9kZXMiLCAicmVtb3ZlZE5vZGVzIiwgIm9ic2VydmUiLCAiZG9jdW1lbnQiLCAiY2hpbGRMaXN0IiwgInN1YnRyZWUiLCAiY3JlYXRlRGV0YWNoT2JzZXJ2ZXIiLCAiZHJwTGlzdGVuaW5nQ2hhcnRzIiwgIk1hcCIsICJvbGREZXZpY2VQaXhlbFJhdGlvIiwgIm9uV2luZG93UmVzaXplIiwgImRwciIsICJ3aW5kb3ciLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJyZXNpemUiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAibGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMiLCAic2V0IiwgInVubGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMiLCAiZGVsZXRlIiwgImNyZWF0ZVJlc2l6ZU9ic2VydmVyIiwgImNvbnRhaW5lciIsICJfZ2V0UGFyZW50Tm9kZSIsICJ0aHJvdHRsZWQiLCAiY2xpZW50V2lkdGgiLCAiUmVzaXplT2JzZXJ2ZXIiLCAiY29udGVudFJlY3QiLCAicmVsZWFzZU9ic2VydmVyIiwgImRpc2Nvbm5lY3QiLCAiY3JlYXRlUHJveHlBbmRMaXN0ZW4iLCAicHJveHkiLCAiY3R4IiwgIkRvbVBsYXRmb3JtIiwgInByb3AiLCAiaXNOdWxsT3JVbmRlZiIsICJyZW1vdmVBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgImtleXMiLCAia2V5IiwgInByb3hpZXMiLCAiJHByb3hpZXMiLCAiaGFuZGxlcnMiLCAiYXR0YWNoIiwgImRldGFjaCIsICJpc0Nvbm5lY3RlZCIsICJfZGV0ZWN0UGxhdGZvcm0iLCAiX2lzRG9tU3VwcG9ydGVkIiwgIk9mZnNjcmVlbkNhbnZhcyIsICJFbGVtZW50IiwgImFjdGl2ZSIsICIkYW5pbWF0aW9ucyIsICJ0b29sdGlwUG9zaXRpb24iLCAiaGFzVmFsdWUiLCAiaXNOdW1iZXIiLCAicHJvcHMiLCAiZmluYWwiLCAiYW5pbXMiLCAicmV0IiwgIl90byIsICJkZWZhdWx0cyIsICJkZWZhdWx0Um91dGVzIiwgImF1dG9Ta2lwIiwgInNjYWxlIiwgInRpY2tzIiwgInRpY2tPcHRzIiwgImRldGVybWluZWRNYXhUaWNrcyIsICJkZXRlcm1pbmVNYXhUaWNrcyIsICJ0aWNrc0xpbWl0IiwgIm1pbiIsICJtYXhUaWNrc0xpbWl0IiwgIm1ham9ySW5kaWNlcyIsICJtYWpvciIsICJlbmFibGVkIiwgImdldE1ham9ySW5kaWNlcyIsICJudW1NYWpvckluZGljZXMiLCAiZmlyc3QiLCAibGFzdCIsICJuZXdUaWNrcyIsICJza2lwTWFqb3JzIiwgInNwYWNpbmciLCAiY2FsY3VsYXRlU3BhY2luZyIsICJhdmdNYWpvclNwYWNpbmciLCAicm91bmQiLCAib2Zmc2V0IiwgInRpY2tMZW5ndGgiLCAiX3RpY2tTaXplIiwgIm1heFNjYWxlIiwgIl9sZW5ndGgiLCAibWF4Q2hhcnQiLCAiX21heExlbmd0aCIsICJldmVuTWFqb3JTcGFjaW5nIiwgImdldEV2ZW5TcGFjaW5nIiwgImZhY3RvcnMiLCAiX2ZhY3Rvcml6ZSIsICJyZXN1bHQiLCAibmV4dCIsICJjZWlsIiwgIm1ham9yU3RhcnQiLCAibWFqb3JFbmQiLCAidmFsdWVPckRlZmF1bHQiLCAiYXJyIiwgImxlbiIsICJyZXZlcnNlQWxpZ24iLCAiYWxpZ24iLCAib2Zmc2V0RnJvbUVkZ2UiLCAiZWRnZSIsICJnZXRUaWNrc0xpbWl0IiwgInRpY2tzTGVuZ3RoIiwgInNhbXBsZSIsICJudW1JdGVtcyIsICJpbmNyZW1lbnQiLCAiZ2V0UGl4ZWxGb3JHcmlkTGluZSIsICJvZmZzZXRHcmlkTGluZXMiLCAidmFsaWRJbmRleCIsICJfc3RhcnRQaXhlbCIsICJfZW5kUGl4ZWwiLCAiZXBzaWxvbiIsICJsaW5lVmFsdWUiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImdhcmJhZ2VDb2xsZWN0IiwgImNhY2hlcyIsICJjYWNoZSIsICJnYyIsICJnY0xlbiIsICJnZXRUaWNrTWFya0xlbmd0aCIsICJkcmF3VGlja3MiLCAiZ2V0VGl0bGVIZWlnaHQiLCAiZmFsbGJhY2siLCAiZm9udCIsICJ0b0ZvbnQiLCAibGluZXMiLCAiaXNBcnJheSIsICJ0ZXh0IiwgImxpbmVIZWlnaHQiLCAiY3JlYXRlU2NhbGVDb250ZXh0IiwgInBhcmVudCIsICJjcmVhdGVDb250ZXh0IiwgImNyZWF0ZVRpY2tDb250ZXh0IiwgInRpY2siLCAidGl0bGVBbGlnbiIsICJfdG9MZWZ0UmlnaHRDZW50ZXIiLCAidGl0bGVBcmdzIiwgInNjYWxlcyIsICJyb3RhdGlvbiIsICJtYXhXaWR0aCIsICJ0aXRsZVgiLCAidGl0bGVZIiwgIl9hbGlnblN0YXJ0RW5kIiwgInBvc2l0aW9uQXhpc0lEIiwgImdldFBpeGVsRm9yVmFsdWUiLCAiSEFMRl9QSSIsICJTY2FsZSIsICJjZmciLCAiaWQiLCAiX21hcmdpbnMiLCAibWF4SGVpZ2h0IiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSIsICJwYWRkaW5nTGVmdCIsICJwYWRkaW5nUmlnaHQiLCAibGFiZWxSb3RhdGlvbiIsICJfcmFuZ2UiLCAiX2dyaWRMaW5lSXRlbXMiLCAiX2xhYmVsSXRlbXMiLCAiX2xhYmVsU2l6ZXMiLCAiX2xvbmdlc3RUZXh0Q2FjaGUiLCAiX3VzZXJNYXgiLCAiX3VzZXJNaW4iLCAiX3N1Z2dlc3RlZE1heCIsICJfc3VnZ2VzdGVkTWluIiwgIl90aWNrc0xlbmd0aCIsICJfYm9yZGVyVmFsdWUiLCAiX2NhY2hlIiwgIl9kYXRhTGltaXRzQ2FjaGVkIiwgIiRjb250ZXh0IiwgInNldENvbnRleHQiLCAic3VnZ2VzdGVkTWluIiwgInN1Z2dlc3RlZE1heCIsICJyYXciLCAiZ2V0VXNlckJvdW5kcyIsICJmaW5pdGVPckRlZmF1bHQiLCAiTkVHQVRJVkVfSU5GSU5JVFkiLCAibWluRGVmaW5lZCIsICJpc0Zpbml0ZSIsICJtYXhEZWZpbmVkIiwgImdldE1pbk1heCIsICJjYW5TdGFjayIsICJtZXRhcyIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJnZXRUaWNrcyIsICJnZXRMYWJlbHMiLCAibGFiZWxzIiwgInhMYWJlbHMiLCAieUxhYmVscyIsICJnZXRMYWJlbEl0ZW1zIiwgIl9jb21wdXRlTGFiZWxJdGVtcyIsICJiZWZvcmVVcGRhdGUiLCAiY2FsbCIsICJtYXJnaW5zIiwgImJlZ2luQXRaZXJvIiwgImdyYWNlIiwgInNhbXBsZVNpemUiLCAiYmVmb3JlU2V0RGltZW5zaW9ucyIsICJzZXREaW1lbnNpb25zIiwgImFmdGVyU2V0RGltZW5zaW9ucyIsICJiZWZvcmVEYXRhTGltaXRzIiwgImRldGVybWluZURhdGFMaW1pdHMiLCAiYWZ0ZXJEYXRhTGltaXRzIiwgIl9hZGRHcmFjZSIsICJiZWZvcmVCdWlsZFRpY2tzIiwgImJ1aWxkVGlja3MiLCAiYWZ0ZXJCdWlsZFRpY2tzIiwgInNhbXBsaW5nRW5hYmxlZCIsICJfY29udmVydFRpY2tzVG9MYWJlbHMiLCAiYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsICJjYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwgImFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsICJzb3VyY2UiLCAiYWZ0ZXJBdXRvU2tpcCIsICJiZWZvcmVGaXQiLCAiZml0IiwgImFmdGVyRml0IiwgImFmdGVyVXBkYXRlIiwgInJldmVyc2VQaXhlbHMiLCAic3RhcnRQaXhlbCIsICJlbmRQaXhlbCIsICJfYWxpZ25Ub1BpeGVscyIsICJhbGlnblRvUGl4ZWxzIiwgIl9jYWxsSG9va3MiLCAibmFtZSIsICJub3RpZnlQbHVnaW5zIiwgImJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiIsICJnZW5lcmF0ZVRpY2tMYWJlbHMiLCAibGFiZWwiLCAiY2FsbGJhY2siLCAiYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24iLCAibnVtVGlja3MiLCAibWluUm90YXRpb24iLCAibWF4Um90YXRpb24iLCAidGlja1dpZHRoIiwgIm1heExhYmVsRGlhZ29uYWwiLCAiX2lzVmlzaWJsZSIsICJsYWJlbFNpemVzIiwgIl9nZXRMYWJlbFNpemVzIiwgIm1heExhYmVsV2lkdGgiLCAid2lkZXN0IiwgIm1heExhYmVsSGVpZ2h0IiwgImhpZ2hlc3QiLCAiX2xpbWl0VmFsdWUiLCAiZ3JpZCIsICJ0aXRsZSIsICJ0b0RlZ3JlZXMiLCAiYXNpbiIsICJtaW5TaXplIiwgInRpdGxlT3B0cyIsICJncmlkT3B0cyIsICJ0aXRsZUhlaWdodCIsICJ0aWNrUGFkZGluZyIsICJhbmdsZVJhZGlhbnMiLCAidG9SYWRpYW5zIiwgImNvcyIsICJzaW4iLCAibGFiZWxIZWlnaHQiLCAibWlycm9yIiwgImxhYmVsV2lkdGgiLCAiX2NhbGN1bGF0ZVBhZGRpbmciLCAiX2hhbmRsZU1hcmdpbnMiLCAiaXNSb3RhdGVkIiwgImxhYmVsc0JlbG93VGlja3MiLCAib2Zmc2V0TGVmdCIsICJvZmZzZXRSaWdodCIsICJpc0Z1bGxTaXplIiwgIl9jb21wdXRlTGFiZWxTaXplcyIsICJ3aWR0aHMiLCAiaGVpZ2h0cyIsICJ3aWRlc3RMYWJlbFNpemUiLCAiaGlnaGVzdExhYmVsU2l6ZSIsICJqbGVuIiwgInRpY2tGb250IiwgImZvbnRTdHJpbmciLCAibmVzdGVkTGFiZWwiLCAiX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMiLCAic3RyaW5nIiwgIl9tZWFzdXJlVGV4dCIsICJ2YWx1ZUF0IiwgImlkeCIsICJnZXRMYWJlbEZvclZhbHVlIiwgIk5hTiIsICJnZXRWYWx1ZUZvclBpeGVsIiwgInBpeGVsIiwgImdldFBpeGVsRm9yRGVjaW1hbCIsICJkZWNpbWFsIiwgIl9pbnQxNlJhbmdlIiwgIl9hbGlnblBpeGVsIiwgImdldERlY2ltYWxGb3JQaXhlbCIsICJnZXRCYXNlUGl4ZWwiLCAiZ2V0QmFzZVZhbHVlIiwgIm9wdGlvblRpY2tzIiwgInJvdCIsICJhdXRvU2tpcFBhZGRpbmciLCAiX2NvbXB1dGVHcmlkTGluZUl0ZW1zIiwgImJvcmRlciIsICJ0bCIsICJib3JkZXJPcHRzIiwgImF4aXNXaWR0aCIsICJheGlzSGFsZldpZHRoIiwgImFsaWduQm9yZGVyVmFsdWUiLCAiYm9yZGVyVmFsdWUiLCAiYWxpZ25lZExpbmVWYWx1ZSIsICJ0eDEiLCAidHkxIiwgInR4MiIsICJ0eTIiLCAieDEiLCAieTEiLCAieDIiLCAieTIiLCAibGltaXQiLCAic3RlcCIsICJvcHRzQXRJbmRleCIsICJvcHRzQXRJbmRleEJvcmRlciIsICJsaW5lV2lkdGgiLCAibGluZUNvbG9yIiwgImNvbG9yIiwgImJvcmRlckRhc2giLCAiZGFzaCIsICJib3JkZXJEYXNoT2Zmc2V0IiwgImRhc2hPZmZzZXQiLCAidGlja0NvbG9yIiwgInRpY2tCb3JkZXJEYXNoIiwgInRpY2tCb3JkZXJEYXNoT2Zmc2V0IiwgImNyb3NzQWxpZ24iLCAidGlja0FuZFBhZGRpbmciLCAiaFRpY2tBbmRQYWRkaW5nIiwgInRleHRBbGlnbiIsICJsaW5lQ291bnQiLCAidGV4dE9mZnNldCIsICJ0ZXh0QmFzZWxpbmUiLCAiX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQiLCAiX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQiLCAibGFiZWxPZmZzZXQiLCAiaGFsZkNvdW50IiwgInN0cm9rZUNvbG9yIiwgInRleHRTdHJva2VDb2xvciIsICJzdHJva2VXaWR0aCIsICJ0ZXh0U3Ryb2tlV2lkdGgiLCAidGlja1RleHRBbGlnbiIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJiYWNrZHJvcCIsICJsYWJlbFBhZGRpbmciLCAiYmFja2Ryb3BQYWRkaW5nIiwgImJhY2tkcm9wQ29sb3IiLCAidHJhbnNsYXRpb24iLCAiX2NvbXB1dGVMYWJlbEFyZWEiLCAiZHJhd0JhY2tncm91bmQiLCAiYmFja2dyb3VuZENvbG9yIiwgInNhdmUiLCAiZmlsbFN0eWxlIiwgImZpbGxSZWN0IiwgInJlc3RvcmUiLCAiZ2V0TGluZVdpZHRoRm9yVmFsdWUiLCAiZmluZEluZGV4IiwgInQiLCAib3B0cyIsICJkcmF3R3JpZCIsICJkcmF3TGluZSIsICJwMSIsICJwMiIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJsaW5lRGFzaE9mZnNldCIsICJiZWdpblBhdGgiLCAibW92ZVRvIiwgImxpbmVUbyIsICJzdHJva2UiLCAiZHJhd09uQ2hhcnRBcmVhIiwgImRyYXdCb3JkZXIiLCAibGFzdExpbmVXaWR0aCIsICJkcmF3TGFiZWxzIiwgImFyZWEiLCAiY2xpcEFyZWEiLCAicmVuZGVyVGV4dE9wdGlvbnMiLCAicmVuZGVyVGV4dCIsICJ1bmNsaXBBcmVhIiwgImRyYXdUaXRsZSIsICJ0eiIsICJneiIsICJieiIsICJheGlzSUQiLCAiX21heERpZ2l0cyIsICJmb250U2l6ZSIsICJUeXBlZFJlZ2lzdHJ5IiwgInNjb3BlIiwgImNyZWF0ZSIsICJpc0ZvclR5cGUiLCAiaXNQcm90b3R5cGVPZiIsICJyZWdpc3RlciIsICJwcm90byIsICJnZXRQcm90b3R5cGVPZiIsICJwYXJlbnRTY29wZSIsICJpc0lDaGFydENvbXBvbmVudCIsICJyZWdpc3RlckRlZmF1bHRzIiwgIm92ZXJyaWRlcyIsICJnZXQiLCAidW5yZWdpc3RlciIsICJpdGVtRGVmYXVsdHMiLCAibWVyZ2UiLCAicm91dGVEZWZhdWx0cyIsICJkZXNjcmlwdG9ycyIsICJkZXNjcmliZSIsICJyb3V0ZXMiLCAicHJvcGVydHkiLCAicHJvcGVydHlQYXJ0cyIsICJzcGxpdCIsICJzb3VyY2VOYW1lIiwgInBvcCIsICJzb3VyY2VTY29wZSIsICJqb2luIiwgInBhcnRzIiwgInRhcmdldE5hbWUiLCAidGFyZ2V0U2NvcGUiLCAicm91dGUiLCAiUmVnaXN0cnkiLCAiY29udHJvbGxlcnMiLCAiRGF0YXNldENvbnRyb2xsZXIiLCAicGx1Z2lucyIsICJfdHlwZWRSZWdpc3RyaWVzIiwgImFyZ3MiLCAiX2VhY2giLCAicmVtb3ZlIiwgImFkZENvbnRyb2xsZXJzIiwgImFkZEVsZW1lbnRzIiwgImFkZFBsdWdpbnMiLCAiYWRkU2NhbGVzIiwgImdldENvbnRyb2xsZXIiLCAiX2dldCIsICJnZXRFbGVtZW50IiwgImdldFBsdWdpbiIsICJnZXRTY2FsZSIsICJyZW1vdmVDb250cm9sbGVycyIsICJyZW1vdmVFbGVtZW50cyIsICJyZW1vdmVQbHVnaW5zIiwgInJlbW92ZVNjYWxlcyIsICJtZXRob2QiLCAidHlwZWRSZWdpc3RyeSIsICJhcmciLCAicmVnIiwgIl9nZXRSZWdpc3RyeUZvclR5cGUiLCAiX2V4ZWMiLCAiaXRlbVJlZyIsICJyZWdpc3RyeSIsICJjb21wb25lbnQiLCAiY2FtZWxNZXRob2QiLCAiX2NhcGl0YWxpemUiLCAiUGx1Z2luU2VydmljZSIsICJfaW5pdCIsICJub3RpZnkiLCAiaG9vayIsICJfY3JlYXRlRGVzY3JpcHRvcnMiLCAiX25vdGlmeSIsICJfZGVzY3JpcHRvcnMiLCAiZGVzY3JpcHRvciIsICJwbHVnaW4iLCAiY2FsbENhbGxiYWNrIiwgImNhbmNlbGFibGUiLCAiaW52YWxpZGF0ZSIsICJfb2xkQ2FjaGUiLCAiX25vdGlmeVN0YXRlQ2hhbmdlcyIsICJhbGwiLCAiYWxsUGx1Z2lucyIsICJjcmVhdGVEZXNjcmlwdG9ycyIsICJwcmV2aW91c0Rlc2NyaXB0b3JzIiwgInNvbWUiLCAibG9jYWxJZHMiLCAibG9jYWwiLCAiZ2V0T3B0cyIsICJwbHVnaW5PcHRzIiwgInBsdWdpblNjb3BlS2V5cyIsICJzY29wZXMiLCAiZ2V0T3B0aW9uU2NvcGVzIiwgImNyZWF0ZVJlc29sdmVyIiwgInNjcmlwdGFibGUiLCAiaW5kZXhhYmxlIiwgImFsbEtleXMiLCAiZ2V0SW5kZXhBeGlzIiwgImRhdGFzZXREZWZhdWx0cyIsICJkYXRhc2V0cyIsICJkYXRhc2V0T3B0aW9ucyIsICJpbmRleEF4aXMiLCAiZ2V0QXhpc0Zyb21EZWZhdWx0U2NhbGVJRCIsICJnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzIiwgImlkTWF0Y2hlc0F4aXMiLCAiYXhpc0Zyb21Qb3NpdGlvbiIsICJkZXRlcm1pbmVBeGlzIiwgInNjYWxlT3B0aW9ucyIsICJ0b0xvd2VyQ2FzZSIsICJnZXRBeGlzRnJvbURhdGFzZXQiLCAicmV0cmlldmVBeGlzRnJvbURhdGFzZXRzIiwgImJvdW5kRHMiLCAiZCIsICJ4QXhpc0lEIiwgInlBeGlzSUQiLCAibWVyZ2VTY2FsZUNvbmZpZyIsICJjaGFydERlZmF1bHRzIiwgImNvbmZpZ1NjYWxlcyIsICJjaGFydEluZGV4QXhpcyIsICJzY2FsZUNvbmYiLCAiY29uc29sZSIsICJlcnJvciIsICJfcHJveHkiLCAid2FybiIsICJkZWZhdWx0SWQiLCAiZGVmYXVsdFNjYWxlT3B0aW9ucyIsICJtZXJnZUlmIiwgImRlZmF1bHRJRCIsICJpbml0T3B0aW9ucyIsICJpbml0RGF0YSIsICJpbml0Q29uZmlnIiwgImtleUNhY2hlIiwgImtleXNDYWNoZWQiLCAiU2V0IiwgImNhY2hlZEtleXMiLCAiY2FjaGVLZXkiLCAiZ2VuZXJhdGUiLCAiYWRkSWZGb3VuZCIsICJvYmoiLCAicmVzb2x2ZU9iamVjdEtleSIsICJDb25maWciLCAiX2NvbmZpZyIsICJfc2NvcGVDYWNoZSIsICJfcmVzb2x2ZXJDYWNoZSIsICJwbGF0Zm9ybSIsICJjbGVhckNhY2hlIiwgImNsZWFyIiwgImRhdGFzZXRTY29wZUtleXMiLCAiZGF0YXNldFR5cGUiLCAiZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyIsICJ0cmFuc2l0aW9uIiwgImRhdGFzZXRFbGVtZW50U2NvcGVLZXlzIiwgImVsZW1lbnRUeXBlIiwgImFkZGl0aW9uYWxPcHRpb25TY29wZXMiLCAiX2NhY2hlZFNjb3BlcyIsICJtYWluU2NvcGUiLCAicmVzZXRDYWNoZSIsICJrZXlMaXN0cyIsICJjYWNoZWQiLCAiQXJyYXkiLCAiZnJvbSIsICJoYXMiLCAiY2hhcnRPcHRpb25TY29wZXMiLCAicmVzb2x2ZU5hbWVkT3B0aW9ucyIsICJuYW1lcyIsICJwcmVmaXhlcyIsICIkc2hhcmVkIiwgInJlc29sdmVyIiwgInN1YlByZWZpeGVzIiwgImdldFJlc29sdmVyIiwgIm5lZWRDb250ZXh0IiwgImlzRnVuY3Rpb24iLCAic3ViUmVzb2x2ZXIiLCAiX2F0dGFjaENvbnRleHQiLCAiZGVzY3JpcHRvckRlZmF1bHRzIiwgInJlc29sdmVyQ2FjaGUiLCAiX2NyZWF0ZVJlc29sdmVyIiwgInAiLCAiaGFzRnVuY3Rpb24iLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJpc1NjcmlwdGFibGUiLCAiaXNJbmRleGFibGUiLCAiS05PV05fUE9TSVRJT05TIiwgInBvc2l0aW9uSXNIb3Jpem9udGFsIiwgImNvbXBhcmUyTGV2ZWwiLCAibDEiLCAibDIiLCAib25BbmltYXRpb25zQ29tcGxldGUiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJvbkNvbXBsZXRlIiwgIm9uQW5pbWF0aW9uUHJvZ3Jlc3MiLCAib25Qcm9ncmVzcyIsICJnZXRDYW52YXMiLCAiZ2V0RWxlbWVudEJ5SWQiLCAiaW5zdGFuY2VzIiwgImdldENoYXJ0IiwgInZhbHVlcyIsICJjIiwgIm1vdmVOdW1lcmljS2V5cyIsICJtb3ZlIiwgImludEtleSIsICJkZXRlcm1pbmVMYXN0RXZlbnQiLCAibGFzdEV2ZW50IiwgImluQ2hhcnRBcmVhIiwgImlzQ2xpY2siLCAiZ2V0U2l6ZUZvckFyZWEiLCAiZmllbGQiLCAiY2xpcCIsICJnZXREYXRhc2V0QXJlYSIsICJ4U2NhbGUiLCAieVNjYWxlIiwgIkNoYXJ0IiwgImludmFsaWRhdGVQbHVnaW5zIiwgInVzZXJDb25maWciLCAiaW5pdGlhbENhbnZhcyIsICJleGlzdGluZ0NoYXJ0IiwgInVpZCIsICJfb3B0aW9ucyIsICJfYXNwZWN0UmF0aW8iLCAiX21ldGFzZXRzIiwgIl9zdGFja3MiLCAiX2FjdGl2ZSIsICJfbGFzdEV2ZW50IiwgIl9saXN0ZW5lcnMiLCAiX3Jlc3BvbnNpdmVMaXN0ZW5lcnMiLCAiX3NvcnRlZE1ldGFzZXRzIiwgIl9wbHVnaW5zIiwgIl9oaWRkZW5JbmRpY2VzIiwgImF0dGFjaGVkIiwgIl9hbmltYXRpb25zRGlzYWJsZWQiLCAiX2RvUmVzaXplIiwgImRlYm91bmNlIiwgIm1vZGUiLCAicmVzaXplRGVsYXkiLCAiX2RhdGFDaGFuZ2VzIiwgImFuaW1hdG9yIiwgImxpc3RlbiIsICJfaW5pdGlhbGl6ZSIsICJtYWludGFpbkFzcGVjdFJhdGlvIiwgInJlc3BvbnNpdmUiLCAicmV0aW5hU2NhbGUiLCAiYmluZEV2ZW50cyIsICJjbGVhckNhbnZhcyIsICJzdG9wIiwgInJ1bm5pbmciLCAiX3Jlc2l6ZSIsICJfcmVzaXplQmVmb3JlRHJhdyIsICJuZXdTaXplIiwgIm5ld1JhdGlvIiwgIm9uUmVzaXplIiwgInJlbmRlciIsICJlbnN1cmVTY2FsZXNIYXZlSURzIiwgInNjYWxlc09wdGlvbnMiLCAiYXhpc09wdGlvbnMiLCAiYnVpbGRPclVwZGF0ZVNjYWxlcyIsICJzY2FsZU9wdHMiLCAidXBkYXRlZCIsICJtYXAiLCAiaXNSYWRpYWwiLCAiZHBvc2l0aW9uIiwgImR0eXBlIiwgInNjYWxlVHlwZSIsICJzY2FsZUNsYXNzIiwgImhhc1VwZGF0ZWQiLCAiX3VwZGF0ZU1ldGFzZXRzIiwgIm51bURhdGEiLCAibnVtTWV0YSIsICJfZGVzdHJveURhdGFzZXRNZXRhIiwgInNsaWNlIiwgIl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cyIsICJfZGF0YXNldCIsICJidWlsZE9yVXBkYXRlQ29udHJvbGxlcnMiLCAibmV3Q29udHJvbGxlcnMiLCAib3JkZXIiLCAidmlzaWJsZSIsICJpc0RhdGFzZXRWaXNpYmxlIiwgInVwZGF0ZUluZGV4IiwgImxpbmtTY2FsZXMiLCAiQ29udHJvbGxlckNsYXNzIiwgImRhdGFzZXRFbGVtZW50VHlwZSIsICJkYXRhRWxlbWVudFR5cGUiLCAiX3Jlc2V0RWxlbWVudHMiLCAicmVzZXQiLCAiYW5pbXNEaXNhYmxlZCIsICJfdXBkYXRlU2NhbGVzIiwgIl9jaGVja0V2ZW50QmluZGluZ3MiLCAiX3VwZGF0ZUhpZGRlbkluZGljZXMiLCAiYnVpbGRPclVwZGF0ZUVsZW1lbnRzIiwgImdldE1heE92ZXJmbG93IiwgIl9taW5QYWRkaW5nIiwgImF1dG9QYWRkaW5nIiwgIl91cGRhdGVMYXlvdXQiLCAiX3VwZGF0ZURhdGFzZXRzIiwgIl9ldmVudEhhbmRsZXIiLCAiX3VwZGF0ZUhvdmVyU3R5bGVzIiwgImV4aXN0aW5nRXZlbnRzIiwgIm5ld0V2ZW50cyIsICJldmVudHMiLCAic2V0c0VxdWFsIiwgInVuYmluZEV2ZW50cyIsICJjaGFuZ2VzIiwgIl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMiLCAiZGF0YXNldENvdW50IiwgIm1ha2VTZXQiLCAiY2hhbmdlU2V0IiwgIm5vQXJlYSIsICJfaWR4IiwgIl91cGRhdGVEYXRhc2V0IiwgIl91cGRhdGUiLCAibGF5ZXJzIiwgIl9kcmF3RGF0YXNldHMiLCAiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsICJmaWx0ZXJWaXNpYmxlIiwgIl9kcmF3RGF0YXNldCIsICJfY2xpcCIsICJ1c2VDbGlwIiwgImRpc2FibGVkIiwgImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCAiSW50ZXJhY3Rpb24iLCAiaGlkZGVuIiwgIl9wYXJzZWQiLCAiZ2V0VmlzaWJsZURhdGFzZXRDb3VudCIsICJzZXREYXRhc2V0VmlzaWJpbGl0eSIsICJ0b2dnbGVEYXRhVmlzaWJpbGl0eSIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJfdXBkYXRlVmlzaWJpbGl0eSIsICJkYXRhSW5kZXgiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgImhpZGUiLCAic2hvdyIsICJfZGVzdHJveSIsICJfc3RvcCIsICJkZXN0cm95IiwgInRvQmFzZTY0SW1hZ2UiLCAidG9EYXRhVVJMIiwgImJpbmRVc2VyRXZlbnRzIiwgImJpbmRSZXNwb25zaXZlRXZlbnRzIiwgImxpc3RlbmVycyIsICJfYWRkIiwgIm9mZnNldFgiLCAib2Zmc2V0WSIsICJfcmVtb3ZlIiwgImRldGFjaGVkIiwgInVwZGF0ZUhvdmVyU3R5bGUiLCAicHJlZml4IiwgImdldEFjdGl2ZUVsZW1lbnRzIiwgInNldEFjdGl2ZUVsZW1lbnRzIiwgImFjdGl2ZUVsZW1lbnRzIiwgImxhc3RBY3RpdmUiLCAiX2VsZW1lbnRzRXF1YWwiLCAiaXNQbHVnaW5FbmFibGVkIiwgInBsdWdpbklkIiwgInJlcGxheSIsICJob3Zlck9wdGlvbnMiLCAiaG92ZXIiLCAiZGVhY3RpdmF0ZWQiLCAiYWN0aXZhdGVkIiwgImV2ZW50RmlsdGVyIiwgIl9oYW5kbGVFdmVudCIsICJfZ2V0QWN0aXZlRWxlbWVudHMiLCAiX2lzQ2xpY2tFdmVudCIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAidmVyc2lvbiIsICJjbGlwQXJjIiwgInBpeGVsTWFyZ2luIiwgIm91dGVyUmFkaXVzIiwgImlubmVyUmFkaXVzIiwgImFuZ2xlTWFyZ2luIiwgImFyYyIsICJjbG9zZVBhdGgiLCAidG9SYWRpdXNDb3JuZXJzIiwgIl9yZWFkVmFsdWVUb1Byb3BzIiwgInBhcnNlQm9yZGVyUmFkaXVzIiwgImFuZ2xlRGVsdGEiLCAibyIsICJib3JkZXJSYWRpdXMiLCAiaGFsZlRoaWNrbmVzcyIsICJpbm5lckxpbWl0IiwgImNvbXB1dGVPdXRlckxpbWl0IiwgInZhbCIsICJvdXRlckFyY0xpbWl0IiwgIm91dGVyU3RhcnQiLCAib3V0ZXJFbmQiLCAiaW5uZXJTdGFydCIsICJpbm5lckVuZCIsICJyVGhldGFUb1hZIiwgInIiLCAidGhldGEiLCAicGF0aEFyYyIsICJjaXJjdWxhciIsICJpbm5lclIiLCAic3BhY2luZ09mZnNldCIsICJhbHBoYSIsICJub1NwYWNpbmdJbm5lclJhZGl1cyIsICJub1NwYWNpbmdPdXRlclJhZGl1cyIsICJhdk5vZ1NwYWNpbmdSYWRpdXMiLCAiYWRqdXN0ZWRBbmdsZSIsICJiZXRhIiwgIlBJIiwgImFuZ2xlT2Zmc2V0IiwgIm91dGVyU3RhcnRBZGp1c3RlZFJhZGl1cyIsICJvdXRlckVuZEFkanVzdGVkUmFkaXVzIiwgIm91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlIiwgIm91dGVyRW5kQWRqdXN0ZWRBbmdsZSIsICJpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXMiLCAiaW5uZXJFbmRBZGp1c3RlZFJhZGl1cyIsICJpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSIsICJpbm5lckVuZEFkanVzdGVkQW5nbGUiLCAib3V0ZXJNaWRBZGp1c3RlZEFuZ2xlIiwgInBDZW50ZXIiLCAicDQiLCAiaW5uZXJNaWRBZGp1c3RlZEFuZ2xlIiwgInA4IiwgIm91dGVyU3RhcnRYIiwgIm91dGVyU3RhcnRZIiwgIm91dGVyRW5kWCIsICJvdXRlckVuZFkiLCAiZHJhd0FyYyIsICJmdWxsQ2lyY2xlcyIsICJjaXJjdW1mZXJlbmNlIiwgImZpbGwiLCAiaXNOYU4iLCAiVEFVIiwgImJvcmRlcldpZHRoIiwgImJvcmRlckpvaW5TdHlsZSIsICJpbm5lciIsICJib3JkZXJBbGlnbiIsICJsaW5lSm9pbiIsICJBcmNFbGVtZW50IiwgImNoYXJ0WCIsICJjaGFydFkiLCAickFkanVzdCIsICJfY2lyY3VtZmVyZW5jZSIsICJiZXR3ZWVuQW5nbGVzIiwgIndpdGhpblJhZGl1cyIsICJfaXNCZXR3ZWVuIiwgImhhbGZBbmdsZSIsICJoYWxmUmFkaXVzIiwgInRyYW5zbGF0ZSIsICJmaXgiLCAicmFkaXVzT2Zmc2V0IiwgImJvcmRlckNvbG9yIiwgIl9zY3JpcHRhYmxlIiwgIl9pbmRleGFibGUiLCAiZ2V0QmFyQm91bmRzIiwgImJhciIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgIngiLCAieSIsICJiYXNlIiwgIndpZHRoIiwgImhlaWdodCIsICJnZXRQcm9wcyIsICJsZWZ0IiwgInJpZ2h0IiwgInRvcCIsICJib3R0b20iLCAiaGFsZiIsICJob3Jpem9udGFsIiwgIk1hdGgiLCAibWluIiwgIm1heCIsICJza2lwT3JMaW1pdCIsICJza2lwIiwgInZhbHVlIiwgIl9saW1pdFZhbHVlIiwgInBhcnNlQm9yZGVyV2lkdGgiLCAibWF4VyIsICJtYXhIIiwgIm9wdGlvbnMiLCAiYm9yZGVyV2lkdGgiLCAiYm9yZGVyU2tpcHBlZCIsICJvIiwgInRvVFJCTCIsICJ0IiwgInIiLCAiYiIsICJsIiwgInBhcnNlQm9yZGVyUmFkaXVzIiwgImVuYWJsZUJvcmRlclJhZGl1cyIsICJib3JkZXJSYWRpdXMiLCAidG9UUkJMQ29ybmVycyIsICJtYXhSIiwgImVuYWJsZUJvcmRlciIsICJpc09iamVjdCIsICJ0b3BMZWZ0IiwgInRvcFJpZ2h0IiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAiYm91bmRpbmdSZWN0cyIsICJib3VuZHMiLCAiYm9yZGVyIiwgInJhZGl1cyIsICJvdXRlciIsICJ3IiwgImgiLCAiaW5uZXIiLCAiaW5SYW5nZSIsICJza2lwWCIsICJza2lwWSIsICJza2lwQm90aCIsICJfaXNCZXR3ZWVuIiwgImhhc1JhZGl1cyIsICJhZGROb3JtYWxSZWN0UGF0aCIsICJjdHgiLCAicmVjdCIsICJpbmZsYXRlUmVjdCIsICJhbW91bnQiLCAicmVmUmVjdCIsICJCYXJFbGVtZW50IiwgIkVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiY2ZnIiwgInVuZGVmaW5lZCIsICJpbmZsYXRlQW1vdW50IiwgIk9iamVjdCIsICJhc3NpZ24iLCAiZHJhdyIsICJib3JkZXJDb2xvciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYWRkUmVjdFBhdGgiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInNhdmUiLCAiYmVnaW5QYXRoIiwgImNsaXAiLCAiZmlsbFN0eWxlIiwgImZpbGwiLCAicmVzdG9yZSIsICJtb3VzZVgiLCAibW91c2VZIiwgImluWFJhbmdlIiwgImluWVJhbmdlIiwgImdldENlbnRlclBvaW50IiwgImdldFJhbmdlIiwgImF4aXMiLCAiaWQiLCAiZGVmYXVsdHMiLCAicG9pbnRTdHlsZSIsICJkZWZhdWx0Um91dGVzIiwgImdldEJveFNpemUiLCAibGFiZWxPcHRzIiwgImZvbnRTaXplIiwgImJveEhlaWdodCIsICJib3hXaWR0aCIsICJ1c2VQb2ludFN0eWxlIiwgIk1hdGgiLCAibWluIiwgInBvaW50U3R5bGVXaWR0aCIsICJpdGVtSGVpZ2h0IiwgIm1heCIsICJpdGVtc0VxdWFsIiwgImEiLCAiYiIsICJkYXRhc2V0SW5kZXgiLCAiaW5kZXgiLCAiTGVnZW5kIiwgIkVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiY29uZmlnIiwgIl9hZGRlZCIsICJsZWdlbmRIaXRCb3hlcyIsICJfaG92ZXJlZEl0ZW0iLCAiZG91Z2hudXRNb2RlIiwgImNoYXJ0IiwgIm9wdGlvbnMiLCAiY3R4IiwgImxlZ2VuZEl0ZW1zIiwgInVuZGVmaW5lZCIsICJjb2x1bW5TaXplcyIsICJsaW5lV2lkdGhzIiwgIm1heEhlaWdodCIsICJtYXhXaWR0aCIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl9tYXJnaW5zIiwgInBvc2l0aW9uIiwgIndlaWdodCIsICJmdWxsU2l6ZSIsICJ1cGRhdGUiLCAibWFyZ2lucyIsICJzZXREaW1lbnNpb25zIiwgImJ1aWxkTGFiZWxzIiwgImZpdCIsICJpc0hvcml6b250YWwiLCAibGFiZWxzIiwgImNhbGwiLCAiZ2VuZXJhdGVMYWJlbHMiLCAiZmlsdGVyIiwgIml0ZW0iLCAiZGF0YSIsICJzb3J0IiwgInJldmVyc2UiLCAiZGlzcGxheSIsICJsYWJlbEZvbnQiLCAidG9Gb250IiwgImZvbnQiLCAic2l6ZSIsICJ0aXRsZUhlaWdodCIsICJfY29tcHV0ZVRpdGxlSGVpZ2h0IiwgInN0cmluZyIsICJfZml0Um93cyIsICJfZml0Q29scyIsICJwYWRkaW5nIiwgImhpdGJveGVzIiwgImxpbmVIZWlnaHQiLCAidG90YWxIZWlnaHQiLCAidGV4dEFsaWduIiwgInRleHRCYXNlbGluZSIsICJyb3ciLCAiZm9yRWFjaCIsICJsZWdlbmRJdGVtIiwgImkiLCAiaXRlbVdpZHRoIiwgIm1lYXN1cmVUZXh0IiwgInRleHQiLCAibGVuZ3RoIiwgIl9pdGVtSGVpZ2h0IiwgImhlaWdodExpbWl0IiwgInRvdGFsV2lkdGgiLCAiY3VycmVudENvbFdpZHRoIiwgImN1cnJlbnRDb2xIZWlnaHQiLCAiY29sIiwgImNhbGN1bGF0ZUl0ZW1TaXplIiwgInB1c2giLCAiYWRqdXN0SGl0Qm94ZXMiLCAiYWxpZ24iLCAicnRsIiwgInJ0bEhlbHBlciIsICJnZXRSdGxBZGFwdGVyIiwgIl9hbGlnblN0YXJ0RW5kIiwgImhpdGJveCIsICJsZWZ0Rm9yTHRyIiwgIngiLCAiZHJhdyIsICJjbGlwQXJlYSIsICJfZHJhdyIsICJ1bmNsaXBBcmVhIiwgIm9wdHMiLCAiZGVmYXVsdENvbG9yIiwgImRlZmF1bHRzIiwgImNvbG9yIiwgImhhbGZGb250U2l6ZSIsICJjdXJzb3IiLCAiZHJhd1RpdGxlIiwgImxpbmVXaWR0aCIsICJkcmF3TGVnZW5kQm94IiwgInkiLCAiaXNOYU4iLCAic2F2ZSIsICJ2YWx1ZU9yRGVmYXVsdCIsICJmaWxsU3R5bGUiLCAibGluZUNhcCIsICJsaW5lRGFzaE9mZnNldCIsICJsaW5lSm9pbiIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJsaW5lRGFzaCIsICJkcmF3T3B0aW9ucyIsICJyYWRpdXMiLCAiU1FSVDIiLCAicG9pbnRTdHlsZSIsICJyb3RhdGlvbiIsICJib3JkZXJXaWR0aCIsICJjZW50ZXJYIiwgInhQbHVzIiwgImNlbnRlclkiLCAiZHJhd1BvaW50TGVnZW5kIiwgInlCb3hUb3AiLCAieEJveExlZnQiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAiYmVnaW5QYXRoIiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAic29tZSIsICJ2IiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJ3IiwgImgiLCAicmVjdCIsICJmaWxsIiwgInN0cm9rZSIsICJyZXN0b3JlIiwgImZpbGxUZXh0IiwgInJlbmRlclRleHQiLCAic3RyaWtldGhyb3VnaCIsICJoaWRkZW4iLCAibGluZSIsICJvdmVycmlkZVRleHREaXJlY3Rpb24iLCAidGV4dERpcmVjdGlvbiIsICJmb250Q29sb3IiLCAidGV4dFdpZHRoIiwgInNldFdpZHRoIiwgInJlYWxYIiwgIl90ZXh0WCIsICJmb250TGluZUhlaWdodCIsICJjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0IiwgInJlc3RvcmVUZXh0RGlyZWN0aW9uIiwgInRpdGxlT3B0cyIsICJ0aXRsZSIsICJ0aXRsZUZvbnQiLCAidGl0bGVQYWRkaW5nIiwgInRvUGFkZGluZyIsICJ0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSIsICJyZWR1Y2UiLCAiYWNjIiwgIl90b0xlZnRSaWdodENlbnRlciIsICJfZ2V0TGVnZW5kSXRlbUF0IiwgImhpdEJveCIsICJsaCIsICJfaXNCZXR3ZWVuIiwgImhhbmRsZUV2ZW50IiwgImUiLCAiaXNMaXN0ZW5lZCIsICJ0eXBlIiwgImhvdmVyZWRJdGVtIiwgInByZXZpb3VzIiwgInNhbWVJdGVtIiwgIm9uTGVhdmUiLCAib25Ib3ZlciIsICJvbkNsaWNrIiwgImNhbGN1bGF0ZUl0ZW1XaWR0aCIsICJjYWxjdWxhdGVJdGVtSGVpZ2h0IiwgImxlZ2VuZEl0ZW1UZXh0IiwgImxhYmVsSGVpZ2h0IiwgImlkIiwgIl9lbGVtZW50IiwgInN0YXJ0IiwgIl9hcmdzIiwgImxlZ2VuZCIsICJsYXlvdXRzIiwgImNvbmZpZ3VyZSIsICJhZGRCb3giLCAic3RvcCIsICJyZW1vdmVCb3giLCAiYmVmb3JlVXBkYXRlIiwgImFmdGVyVXBkYXRlIiwgImFmdGVyRXZlbnQiLCAiYXJncyIsICJyZXBsYXkiLCAiZXZlbnQiLCAiY2kiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJoaWRlIiwgInNob3ciLCAiZGF0YXNldHMiLCAidXNlQm9yZGVyUmFkaXVzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAibWFwIiwgIm1ldGEiLCAic3R5bGUiLCAiY29udHJvbGxlciIsICJnZXRTdHlsZSIsICJsYWJlbCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAidmlzaWJsZSIsICJib3JkZXJDYXBTdHlsZSIsICJib3JkZXJEYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiYm9yZGVySm9pblN0eWxlIiwgImJvcmRlckNvbG9yIiwgImRlc2NyaXB0b3JzIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAic3RhcnRzV2l0aCIsICJpbmNsdWRlcyIsICJUaXRsZSIsICJfcGFkZGluZyIsICJsaW5lQ291bnQiLCAiaXNBcnJheSIsICJ0ZXh0U2l6ZSIsICJwb3MiLCAiX2RyYXdBcmdzIiwgIm9mZnNldCIsICJ0aXRsZVgiLCAidGl0bGVZIiwgIlBJIiwgImZvbnRPcHRzIiwgInRyYW5zbGF0aW9uIiwgImNyZWF0ZVRpdGxlIiwgInRpdGxlQmxvY2siLCAiZGVmYXVsdFJvdXRlcyIsICJfaW5kZXhhYmxlIiwgIldlYWtNYXAiLCAic2V0IiwgImdldCIsICJkZWxldGUiLCAicG9zaXRpb25lcnMiLCAiYXZlcmFnZSIsICJpdGVtcyIsICJsZW4iLCAieFNldCIsICJTZXQiLCAiY291bnQiLCAiZWwiLCAiZWxlbWVudCIsICJoYXNWYWx1ZSIsICJ0b29sdGlwUG9zaXRpb24iLCAiYWRkIiwgInhBdmVyYWdlIiwgIm5lYXJlc3QiLCAiZXZlbnRQb3NpdGlvbiIsICJtaW5EaXN0YW5jZSIsICJOdW1iZXIiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAibmVhcmVzdEVsZW1lbnQiLCAiY2VudGVyIiwgImdldENlbnRlclBvaW50IiwgImQiLCAiZGlzdGFuY2VCZXR3ZWVuUG9pbnRzIiwgInRwIiwgInB1c2hPckNvbmNhdCIsICJiYXNlIiwgInRvUHVzaCIsICJBcnJheSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAic3BsaXROZXdsaW5lcyIsICJzdHIiLCAiU3RyaW5nIiwgImluZGV4T2YiLCAic3BsaXQiLCAiY3JlYXRlVG9vbHRpcEl0ZW0iLCAiZ2V0RGF0YXNldE1ldGEiLCAidmFsdWUiLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJwYXJzZWQiLCAiZ2V0UGFyc2VkIiwgInJhdyIsICJmb3JtYXR0ZWRWYWx1ZSIsICJkYXRhc2V0IiwgImdldERhdGFzZXQiLCAiZGF0YUluZGV4IiwgImdldFRvb2x0aXBTaXplIiwgInRvb2x0aXAiLCAiYm9keSIsICJmb290ZXIiLCAiYm9keUZvbnQiLCAiZm9vdGVyRm9udCIsICJ0aXRsZUxpbmVDb3VudCIsICJmb290ZXJMaW5lQ291bnQiLCAiYm9keUxpbmVJdGVtQ291bnQiLCAiY29tYmluZWRCb2R5TGVuZ3RoIiwgImJvZHlJdGVtIiwgImJlZm9yZSIsICJsaW5lcyIsICJhZnRlciIsICJiZWZvcmVCb2R5IiwgImFmdGVyQm9keSIsICJ0aXRsZVNwYWNpbmciLCAidGl0bGVNYXJnaW5Cb3R0b20iLCAiYm9keUxpbmVIZWlnaHQiLCAiZGlzcGxheUNvbG9ycyIsICJib2R5U3BhY2luZyIsICJmb290ZXJNYXJnaW5Ub3AiLCAiZm9vdGVyU3BhY2luZyIsICJ3aWR0aFBhZGRpbmciLCAibWF4TGluZVdpZHRoIiwgImVhY2giLCAiY29uY2F0IiwgImJveFBhZGRpbmciLCAiZGV0ZXJtaW5lWUFsaWduIiwgImRvZXNOb3RGaXRXaXRoQWxpZ24iLCAieEFsaWduIiwgImNhcmV0IiwgImNhcmV0U2l6ZSIsICJjYXJldFBhZGRpbmciLCAiZGV0ZXJtaW5lWEFsaWduIiwgInlBbGlnbiIsICJjaGFydFdpZHRoIiwgImNoYXJ0QXJlYSIsICJkZXRlcm1pbmVBbGlnbm1lbnQiLCAiYWxpZ25YIiwgImFsaWduWSIsICJwYWRkaW5nQW5kU2l6ZSIsICJnZXRCYWNrZ3JvdW5kUG9pbnQiLCAiYWxpZ25tZW50IiwgImNvcm5lclJhZGl1cyIsICJ0b3BMZWZ0IiwgInRvcFJpZ2h0IiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAiX2xpbWl0VmFsdWUiLCAiZ2V0QWxpZ25lZFgiLCAiZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMiLCAiY2FsbGJhY2siLCAiY3JlYXRlVG9vbHRpcENvbnRleHQiLCAicGFyZW50IiwgInRvb2x0aXBJdGVtcyIsICJjcmVhdGVDb250ZXh0IiwgIm92ZXJyaWRlQ2FsbGJhY2tzIiwgImNhbGxiYWNrcyIsICJjb250ZXh0IiwgIm92ZXJyaWRlIiwgImRlZmF1bHRDYWxsYmFja3MiLCAiYmVmb3JlVGl0bGUiLCAibm9vcCIsICJsYWJlbENvdW50IiwgIm1vZGUiLCAiYWZ0ZXJUaXRsZSIsICJiZWZvcmVMYWJlbCIsICJ0b29sdGlwSXRlbSIsICJpc051bGxPclVuZGVmIiwgImxhYmVsQ29sb3IiLCAibGFiZWxUZXh0Q29sb3IiLCAiYm9keUNvbG9yIiwgImxhYmVsUG9pbnRTdHlsZSIsICJhZnRlckxhYmVsIiwgImJlZm9yZUZvb3RlciIsICJhZnRlckZvb3RlciIsICJpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayIsICJhcmciLCAicmVzdWx0IiwgIlRvb2x0aXAiLCAib3BhY2l0eSIsICJfYWN0aXZlIiwgIl9ldmVudFBvc2l0aW9uIiwgIl9zaXplIiwgIl9jYWNoZWRBbmltYXRpb25zIiwgIl90b29sdGlwSXRlbXMiLCAiJGFuaW1hdGlvbnMiLCAiJGNvbnRleHQiLCAiZGF0YVBvaW50cyIsICJjYXJldFgiLCAiY2FyZXRZIiwgImxhYmVsQ29sb3JzIiwgImxhYmVsUG9pbnRTdHlsZXMiLCAibGFiZWxUZXh0Q29sb3JzIiwgImluaXRpYWxpemUiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgImNhY2hlZCIsICJzZXRDb250ZXh0IiwgImdldENvbnRleHQiLCAiZW5hYmxlZCIsICJhbmltYXRpb24iLCAiYW5pbWF0aW9ucyIsICJBbmltYXRpb25zIiwgIl9jYWNoZWFibGUiLCAiZnJlZXplIiwgImdldFRpdGxlIiwgImdldEJlZm9yZUJvZHkiLCAiZ2V0Qm9keSIsICJib2R5SXRlbXMiLCAic2NvcGVkIiwgImdldEFmdGVyQm9keSIsICJnZXRGb290ZXIiLCAiX2NyZWF0ZUl0ZW1zIiwgImFjdGl2ZSIsICJhcnJheSIsICJpdGVtU29ydCIsICJjaGFuZ2VkIiwgInByb3BlcnRpZXMiLCAicG9zaXRpb25BbmRTaXplIiwgImFzc2lnbiIsICJiYWNrZ3JvdW5kUG9pbnQiLCAiZXh0ZXJuYWwiLCAiZHJhd0NhcmV0IiwgInRvb2x0aXBQb2ludCIsICJjYXJldFBvc2l0aW9uIiwgImdldENhcmV0UG9zaXRpb24iLCAibGluZVRvIiwgIngxIiwgInkxIiwgIngyIiwgInkyIiwgIngzIiwgInkzIiwgInB0WCIsICJwdFkiLCAicHQiLCAidGl0bGVBbGlnbiIsICJ0aXRsZUNvbG9yIiwgIl9kcmF3Q29sb3JCb3giLCAiY29sb3JYIiwgInJ0bENvbG9yWCIsICJ5T2ZmU2V0IiwgImNvbG9yWSIsICJtdWx0aUtleUJhY2tncm91bmQiLCAiZHJhd1BvaW50IiwgImlzT2JqZWN0IiwgIm91dGVyWCIsICJpbm5lclgiLCAiZmlsbFJlY3QiLCAic3Ryb2tlUmVjdCIsICJkcmF3Qm9keSIsICJib2R5QWxpZ24iLCAieExpbmVQYWRkaW5nIiwgImZpbGxMaW5lT2ZUZXh0IiwgImJvZHlBbGlnbkZvckNhbGN1bGF0aW9uIiwgInRleHRDb2xvciIsICJqIiwgImlsZW4iLCAiamxlbiIsICJkcmF3Rm9vdGVyIiwgImZvb3RlckFsaWduIiwgImZvb3RlckNvbG9yIiwgImRyYXdCYWNrZ3JvdW5kIiwgInRvb2x0aXBTaXplIiwgIm1vdmVUbyIsICJxdWFkcmF0aWNDdXJ2ZVRvIiwgImNsb3NlUGF0aCIsICJfdXBkYXRlQW5pbWF0aW9uVGFyZ2V0IiwgImFuaW1zIiwgImFuaW1YIiwgImFuaW1ZIiwgInBvaW50IiwgIl90byIsICJfd2lsbFJlbmRlciIsICJhYnMiLCAiaGFzVG9vbHRpcENvbnRlbnQiLCAiZ2xvYmFsQWxwaGEiLCAiZ2V0QWN0aXZlRWxlbWVudHMiLCAic2V0QWN0aXZlRWxlbWVudHMiLCAiYWN0aXZlRWxlbWVudHMiLCAibGFzdEFjdGl2ZSIsICJFcnJvciIsICJfZWxlbWVudHNFcXVhbCIsICJwb3NpdGlvbkNoYW5nZWQiLCAiX3Bvc2l0aW9uQ2hhbmdlZCIsICJfaWdub3JlUmVwbGF5RXZlbnRzIiwgImluQ2hhcnRBcmVhIiwgIl9nZXRBY3RpdmVFbGVtZW50cyIsICJnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlIiwgImFmdGVySW5pdCIsICJyZXNldCIsICJhZnRlckRyYXciLCAibm90aWZ5UGx1Z2lucyIsICJjYW5jZWxhYmxlIiwgInVzZUZpbmFsUG9zaXRpb24iLCAiZHVyYXRpb24iLCAiZWFzaW5nIiwgIm51bWJlcnMiLCAiX2ZhbGxiYWNrIiwgImFkZGl0aW9uYWxPcHRpb25TY29wZXMiLCAiYWRkSWZTdHJpbmciLCAibGFiZWxzIiwgInJhdyIsICJpbmRleCIsICJhZGRlZExhYmVscyIsICJwdXNoIiwgInVuc2hpZnQiLCAibGFiZWwiLCAiaXNOYU4iLCAiZmluZE9yQWRkTGFiZWwiLCAiZmlyc3QiLCAiaW5kZXhPZiIsICJsYXN0IiwgImxhc3RJbmRleE9mIiwgInZhbGlkSW5kZXgiLCAibWF4IiwgIl9saW1pdFZhbHVlIiwgIk1hdGgiLCAicm91bmQiLCAiX2dldExhYmVsRm9yVmFsdWUiLCAidmFsdWUiLCAiZ2V0TGFiZWxzIiwgImxlbmd0aCIsICJDYXRlZ29yeVNjYWxlIiwgIlNjYWxlIiwgImNvbnN0cnVjdG9yIiwgImNmZyIsICJfc3RhcnRWYWx1ZSIsICJ1bmRlZmluZWQiLCAiX3ZhbHVlUmFuZ2UiLCAiX2FkZGVkTGFiZWxzIiwgImluaXQiLCAic2NhbGVPcHRpb25zIiwgImFkZGVkIiwgInNwbGljZSIsICJwYXJzZSIsICJpc051bGxPclVuZGVmIiwgImlzRmluaXRlIiwgInZhbHVlT3JEZWZhdWx0IiwgImRldGVybWluZURhdGFMaW1pdHMiLCAibWluRGVmaW5lZCIsICJtYXhEZWZpbmVkIiwgImdldFVzZXJCb3VuZHMiLCAibWluIiwgImdldE1pbk1heCIsICJvcHRpb25zIiwgImJvdW5kcyIsICJidWlsZFRpY2tzIiwgIm9mZnNldCIsICJ0aWNrcyIsICJzbGljZSIsICJnZXRMYWJlbEZvclZhbHVlIiwgImNhbGwiLCAiY29uZmlndXJlIiwgImlzSG9yaXpvbnRhbCIsICJfcmV2ZXJzZVBpeGVscyIsICJnZXRQaXhlbEZvclZhbHVlIiwgIk5hTiIsICJnZXRQaXhlbEZvckRlY2ltYWwiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImdldFZhbHVlRm9yUGl4ZWwiLCAicGl4ZWwiLCAiZ2V0RGVjaW1hbEZvclBpeGVsIiwgImdldEJhc2VQaXhlbCIsICJib3R0b20iLCAiaWQiLCAiZGVmYXVsdHMiLCAiY2FsbGJhY2siLCAiZ2VuZXJhdGVUaWNrcyIsICJnZW5lcmF0aW9uT3B0aW9ucyIsICJkYXRhUmFuZ2UiLCAiTUlOX1NQQUNJTkciLCAic3RlcCIsICJwcmVjaXNpb24iLCAiY291bnQiLCAibWF4VGlja3MiLCAibWF4RGlnaXRzIiwgImluY2x1ZGVCb3VuZHMiLCAidW5pdCIsICJtYXhTcGFjZXMiLCAicm1pbiIsICJybWF4IiwgImNvdW50RGVmaW5lZCIsICJtaW5TcGFjaW5nIiwgInNwYWNpbmciLCAibmljZU51bSIsICJmYWN0b3IiLCAibmljZU1pbiIsICJuaWNlTWF4IiwgIm51bVNwYWNlcyIsICJjZWlsIiwgImZsb29yIiwgInBvdyIsICJhbG1vc3RXaG9sZSIsICJhbG1vc3RFcXVhbHMiLCAiZGVjaW1hbFBsYWNlcyIsICJfZGVjaW1hbFBsYWNlcyIsICJqIiwgInJlbGF0aXZlTGFiZWxTaXplIiwgInRpY2tWYWx1ZSIsICJob3Jpem9udGFsIiwgIm1pblJvdGF0aW9uIiwgInJhZCIsICJ0b1JhZGlhbnMiLCAicmF0aW8iLCAic2luIiwgImNvcyIsICJMaW5lYXJTY2FsZUJhc2UiLCAic3RhcnQiLCAiZW5kIiwgIl9lbmRWYWx1ZSIsICJOdW1iZXIiLCAiaGFuZGxlVGlja1JhbmdlT3B0aW9ucyIsICJiZWdpbkF0WmVybyIsICJzZXRNaW4iLCAidiIsICJzZXRNYXgiLCAibWluU2lnbiIsICJzaWduIiwgIm1heFNpZ24iLCAiYWJzIiwgImdldFRpY2tMaW1pdCIsICJ0aWNrT3B0cyIsICJtYXhUaWNrc0xpbWl0IiwgInN0ZXBTaXplIiwgImNvbnNvbGUiLCAid2FybiIsICJjb21wdXRlVGlja0xpbWl0IiwgIlBPU0lUSVZFX0lORklOSVRZIiwgIm9wdHMiLCAibnVtZXJpY0dlbmVyYXRvck9wdGlvbnMiLCAiX21heERpZ2l0cyIsICJfcmFuZ2UiLCAiX3NldE1pbkFuZE1heEJ5S2V5IiwgInJldmVyc2UiLCAiZm9ybWF0TnVtYmVyIiwgImNoYXJ0IiwgImxvY2FsZSIsICJmb3JtYXQiLCAiTGluZWFyU2NhbGUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInRpY2tGb250IiwgIl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zIiwgImxpbmVIZWlnaHQiLCAiVGlja3MiLCAiZm9ybWF0dGVycyIsICJudW1lcmljIiwgImxvZzEwRmxvb3IiLCAibG9nMTAiLCAiY2hhbmdlRXhwb25lbnQiLCAibSIsICJpc01ham9yIiwgInRpY2tWYWwiLCAicmVtYWluIiwgInN0ZXBzIiwgInJhbmdlRXhwIiwgInJhbmdlU3RlcCIsICJzdGFydEV4cCIsICJyYW5nZSIsICJmaW5pdGVPckRlZmF1bHQiLCAibWluRXhwIiwgImV4cCIsICJiYXNlIiwgInNpZ25pZmljYW5kIiwgIm1ham9yIiwgImxhc3RUaWNrIiwgIkxvZ2FyaXRobWljU2NhbGUiLCAicHJvdG90eXBlIiwgImFwcGx5IiwgIl96ZXJvIiwgIl9zdWdnZXN0ZWRNaW4iLCAiX3VzZXJNaW4iLCAiX3VzZXJNYXgiLCAiZGVjaW1hbCIsICJsb2dhcml0aG1pYyIsICJlbmFibGVkIiwgImdldFRpY2tCYWNrZHJvcEhlaWdodCIsICJkaXNwbGF5IiwgInBhZGRpbmciLCAidG9QYWRkaW5nIiwgImJhY2tkcm9wUGFkZGluZyIsICJmb250IiwgInNpemUiLCAibWVhc3VyZUxhYmVsU2l6ZSIsICJjdHgiLCAiaXNBcnJheSIsICJ3IiwgIl9sb25nZXN0VGV4dCIsICJzdHJpbmciLCAiaCIsICJkZXRlcm1pbmVMaW1pdHMiLCAiYW5nbGUiLCAicG9zIiwgImZpdFdpdGhQb2ludExhYmVscyIsICJzY2FsZSIsICJvcmlnIiwgImwiLCAibGVmdCIsICJfcGFkZGluZyIsICJyIiwgInJpZ2h0IiwgInQiLCAidG9wIiwgImIiLCAibGltaXRzIiwgIk9iamVjdCIsICJhc3NpZ24iLCAibGFiZWxTaXplcyIsICJ2YWx1ZUNvdW50IiwgIl9wb2ludExhYmVscyIsICJwb2ludExhYmVsT3B0cyIsICJwb2ludExhYmVscyIsICJhZGRpdGlvbmFsQW5nbGUiLCAiY2VudGVyUG9pbnRMYWJlbHMiLCAiUEkiLCAiaSIsICJzZXRDb250ZXh0IiwgImdldFBvaW50TGFiZWxDb250ZXh0IiwgInBvaW50UG9zaXRpb24iLCAiZ2V0UG9pbnRQb3NpdGlvbiIsICJkcmF3aW5nQXJlYSIsICJwbEZvbnQiLCAidG9Gb250IiwgInRleHRTaXplIiwgImFuZ2xlUmFkaWFucyIsICJfbm9ybWFsaXplQW5nbGUiLCAiZ2V0SW5kZXhBbmdsZSIsICJ0b0RlZ3JlZXMiLCAiaExpbWl0cyIsICJ4IiwgInZMaW1pdHMiLCAieSIsICJ1cGRhdGVMaW1pdHMiLCAic2V0Q2VudGVyUG9pbnQiLCAiX3BvaW50TGFiZWxJdGVtcyIsICJidWlsZFBvaW50TGFiZWxJdGVtcyIsICJjcmVhdGVQb2ludExhYmVsSXRlbSIsICJpdGVtT3B0cyIsICJvdXRlckRpc3RhbmNlIiwgImV4dHJhIiwgInBvaW50TGFiZWxQb3NpdGlvbiIsICJIQUxGX1BJIiwgInlGb3JBbmdsZSIsICJ0ZXh0QWxpZ24iLCAiZ2V0VGV4dEFsaWduRm9yQW5nbGUiLCAibGVmdEZvclRleHRBbGlnbiIsICJ2aXNpYmxlIiwgImlzTm90T3ZlcmxhcHBlZCIsICJpdGVtIiwgImFyZWEiLCAiYXBleGVzSW5BcmVhIiwgIl9pc1BvaW50SW5BcmVhIiwgIml0ZW1zIiwgImFsaWduIiwgImRyYXdQb2ludExhYmVsQm94IiwgImJhY2tkcm9wQ29sb3IiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAiZmlsbFN0eWxlIiwgImJhY2tkcm9wTGVmdCIsICJiYWNrZHJvcFRvcCIsICJiYWNrZHJvcFdpZHRoIiwgImJhY2tkcm9wSGVpZ2h0IiwgInZhbHVlcyIsICJzb21lIiwgImJlZ2luUGF0aCIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAicmFkaXVzIiwgImZpbGwiLCAiZmlsbFJlY3QiLCAiZHJhd1BvaW50TGFiZWxzIiwgImxhYmVsQ291bnQiLCAib3B0c0F0SW5kZXgiLCAicmVuZGVyVGV4dCIsICJjb2xvciIsICJ0ZXh0QmFzZWxpbmUiLCAicGF0aFJhZGl1c0xpbmUiLCAiY2lyY3VsYXIiLCAiYXJjIiwgInhDZW50ZXIiLCAieUNlbnRlciIsICJUQVUiLCAibW92ZVRvIiwgImxpbmVUbyIsICJkcmF3UmFkaXVzTGluZSIsICJncmlkTGluZU9wdHMiLCAiYm9yZGVyT3B0cyIsICJsaW5lV2lkdGgiLCAic2F2ZSIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJkYXNoIiwgImxpbmVEYXNoT2Zmc2V0IiwgImRhc2hPZmZzZXQiLCAiY2xvc2VQYXRoIiwgInN0cm9rZSIsICJyZXN0b3JlIiwgImNyZWF0ZVBvaW50TGFiZWxDb250ZXh0IiwgInBhcmVudCIsICJjcmVhdGVDb250ZXh0IiwgInR5cGUiLCAiUmFkaWFsTGluZWFyU2NhbGUiLCAic2V0RGltZW5zaW9ucyIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAiZ2VuZXJhdGVUaWNrTGFiZWxzIiwgIm1hcCIsICJjYWxsQ2FsbGJhY2siLCAiZmlsdGVyIiwgImdldERhdGFWaXNpYmlsaXR5IiwgImZpdCIsICJsZWZ0TW92ZW1lbnQiLCAicmlnaHRNb3ZlbWVudCIsICJ0b3BNb3ZlbWVudCIsICJib3R0b21Nb3ZlbWVudCIsICJhbmdsZU11bHRpcGxpZXIiLCAic3RhcnRBbmdsZSIsICJnZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSIsICJzY2FsaW5nRmFjdG9yIiwgImdldFZhbHVlRm9yRGlzdGFuY2VGcm9tQ2VudGVyIiwgImRpc3RhbmNlIiwgInNjYWxlZERpc3RhbmNlIiwgInBvaW50TGFiZWwiLCAiZ2V0Q29udGV4dCIsICJkaXN0YW5jZUZyb21DZW50ZXIiLCAiZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlIiwgImdldEJhc2VQb3NpdGlvbiIsICJnZXRCYXNlVmFsdWUiLCAiZ2V0UG9pbnRMYWJlbFBvc2l0aW9uIiwgImRyYXdCYWNrZ3JvdW5kIiwgImJhY2tncm91bmRDb2xvciIsICJncmlkIiwgImRyYXdHcmlkIiwgImFuZ2xlTGluZXMiLCAiYm9yZGVyIiwgInBvc2l0aW9uIiwgImZvckVhY2giLCAidGljayIsICJjb250ZXh0IiwgIm9wdHNBdEluZGV4Qm9yZGVyIiwgImJvcmRlckRhc2giLCAiYm9yZGVyRGFzaE9mZnNldCIsICJkcmF3Qm9yZGVyIiwgImRyYXdMYWJlbHMiLCAidHJhbnNsYXRlIiwgInJvdGF0ZSIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJtZWFzdXJlVGV4dCIsICJzdHJva2VDb2xvciIsICJ0ZXh0U3Ryb2tlQ29sb3IiLCAic3Ryb2tlV2lkdGgiLCAidGV4dFN0cm9rZVdpZHRoIiwgImRyYXdUaXRsZSIsICJhbmltYXRlIiwgImRlZmF1bHRSb3V0ZXMiLCAiZGVzY3JpcHRvcnMiLCAiX2ZhbGxiYWNrIiwgIklOVEVSVkFMUyIsICJtaWxsaXNlY29uZCIsICJjb21tb24iLCAic2Vjb25kIiwgIm1pbnV0ZSIsICJob3VyIiwgImRheSIsICJ3ZWVrIiwgIm1vbnRoIiwgInF1YXJ0ZXIiLCAieWVhciIsICJVTklUUyIsICJrZXlzIiwgInNvcnRlciIsICJhIiwgImlucHV0IiwgImFkYXB0ZXIiLCAiX2FkYXB0ZXIiLCAicGFyc2VyIiwgImlzb1dlZWtkYXkiLCAiX3BhcnNlT3B0cyIsICJpc051bWJlciIsICJzdGFydE9mIiwgImRldGVybWluZVVuaXRGb3JBdXRvVGlja3MiLCAibWluVW5pdCIsICJjYXBhY2l0eSIsICJpbGVuIiwgImludGVydmFsIiwgIk1BWF9TQUZFX0lOVEVHRVIiLCAiZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmciLCAibnVtVGlja3MiLCAiZGlmZiIsICJkZXRlcm1pbmVNYWpvclVuaXQiLCAiYWRkVGljayIsICJ0aW1lIiwgInRpbWVzdGFtcHMiLCAibG8iLCAiaGkiLCAiX2xvb2t1cCIsICJ0aW1lc3RhbXAiLCAic2V0TWFqb3JUaWNrcyIsICJtYWpvclVuaXQiLCAiYWRkIiwgInRpY2tzRnJvbVRpbWVzdGFtcHMiLCAiVGltZVNjYWxlIiwgInByb3BzIiwgIl9jYWNoZSIsICJkYXRhIiwgImFsbCIsICJfdW5pdCIsICJfbWFqb3JVbml0IiwgIl9vZmZzZXRzIiwgIl9ub3JtYWxpemVkIiwgInNjYWxlT3B0cyIsICJhZGFwdGVycyIsICJfZGF0ZSIsICJkYXRlIiwgIm1lcmdlSWYiLCAiZGlzcGxheUZvcm1hdHMiLCAiZm9ybWF0cyIsICJub3JtYWxpemVkIiwgImJlZm9yZUxheW91dCIsICJfYXBwbHlCb3VuZHMiLCAiX2dldExhYmVsQm91bmRzIiwgInNvdXJjZSIsICJEYXRlIiwgIm5vdyIsICJlbmRPZiIsICJhcnIiLCAiZ2V0TGFiZWxUaW1lc3RhbXBzIiwgIk5FR0FUSVZFX0lORklOSVRZIiwgInRpbWVPcHRzIiwgIl9nZW5lcmF0ZSIsICJfZmlsdGVyQmV0d2VlbiIsICJhdXRvU2tpcCIsICJfZ2V0TGFiZWxDYXBhY2l0eSIsICJpbml0T2Zmc2V0cyIsICJhZnRlckF1dG9Ta2lwIiwgIm9mZnNldEFmdGVyQXV0b3NraXAiLCAiZ2V0RGVjaW1hbEZvclZhbHVlIiwgImxpbWl0IiwgIm1pbm9yIiwgIndlZWtkYXkiLCAiaGFzV2Vla2RheSIsICJFcnJvciIsICJnZXREYXRhVGltZXN0YW1wcyIsICJzb3J0IiwgInRvb2x0aXBGb3JtYXQiLCAiZGF0ZXRpbWUiLCAiZm10IiwgIl90aWNrRm9ybWF0RnVuY3Rpb24iLCAiZm9ybWF0dGVyIiwgIm1pbm9yRm9ybWF0IiwgIm1ham9yRm9ybWF0IiwgIm9mZnNldHMiLCAiX2dldExhYmVsU2l6ZSIsICJ0aWNrc09wdHMiLCAidGlja0xhYmVsV2lkdGgiLCAibWF4Um90YXRpb24iLCAiY29zUm90YXRpb24iLCAic2luUm90YXRpb24iLCAidGlja0ZvbnRTaXplIiwgImV4YW1wbGVUaW1lIiwgImV4YW1wbGVMYWJlbCIsICJtZXRhcyIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJjb250cm9sbGVyIiwgImdldEFsbFBhcnNlZFZhbHVlcyIsICJjb25jYXQiLCAibm9ybWFsaXplIiwgIl9hcnJheVVuaXF1ZSIsICJpbnRlcnBvbGF0ZSIsICJ0YWJsZSIsICJ2YWwiLCAicHJldlNvdXJjZSIsICJuZXh0U291cmNlIiwgInByZXZUYXJnZXQiLCAibmV4dFRhcmdldCIsICJfbG9va3VwQnlLZXkiLCAic3BhbiIsICJUaW1lU2VyaWVzU2NhbGUiLCAiX3RhYmxlIiwgIl9taW5Qb3MiLCAiX3RhYmxlUmFuZ2UiLCAiX2dldFRpbWVzdGFtcHNGb3JUYWJsZSIsICJidWlsZExvb2t1cFRhYmxlIiwgInByZXYiLCAiY3VyciIsICJuZXh0IiwgImluY2x1ZGVzIiwgImgiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiQ2FyZE9yZGVyIiwgIkRlY2tPcmRlciIsICJEZWNrIiwgInNjaGVkdWxlIiwgInQiLCAic2NoZWR1bGUiLCAiRGVjayIsICJyYW5rIiwgImVhc2UiXQp9Cg==