Greasy Fork is available in English.

国家中小学智慧教育平台自动看课|自动下一集|无人值守|微信:zhanyc_cn 备用微信:zhanfengkuo 个人网站:http://jb.zhanyc.cn

接各类脚本开发工作,微信:zhanyc_cn 备用微信:zhanfengkuo 个人网站:http://jb.zhanyc.cn

Verzia zo dňa 31.07.2022. Pozri najnovšiu verziu.

// ==UserScript==
// @name         国家中小学智慧教育平台自动看课|自动下一集|无人值守|微信:zhanyc_cn 备用微信:zhanfengkuo 个人网站:http://jb.zhanyc.cn
// @namespace    http://jb.zhanyc.cn/
// @icon    data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAADcWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMTQgNzkuMTUxNDgxLCAyMDEzLzAzLzEzLTEyOjA5OjE1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmZiZDg4YTY1LTU1NjYtMGY0NS05NDk3LTVjZWU1YzYwOGMzZCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMEY4REI2MjA2QTIxMUVEQkI2MkVBQjk4Mzg1RjY1QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMEY4REI2MTA2QTIxMUVEQkI2MkVBQjk4Mzg1RjY1QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZmJkODhhNjUtNTU2Ni0wZjQ1LTk0OTctNWNlZTVjNjA4YzNkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmZiZDg4YTY1LTU1NjYtMGY0NS05NDk3LTVjZWU1YzYwOGMzZCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0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
// @version      1.1
// @description  接各类脚本开发工作,微信:zhanyc_cn 备用微信:zhanfengkuo 个人网站:http://jb.zhanyc.cn
// @author       zfk
// @include    https://www.zxx.edu.cn/*
// @include    *://m.zhanyc.cn/*
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_addStyle
// @grant       GM_deleteValue
// @grant       GM_xmlhttpRequest
// @grant       GM_setClipboard
// @grant       GM_registerMenuCommand
// @grant       GM_getResourceURL
// @grant       GM_addValueChangeListener
// @grant       GM_removeValueChangeListener
// @grant       GM_getResourceText
// @run-at      document-body
// @require http://code.jquery.com/jquery-2.1.1.min.js
// @require https://greasyfork.org/scripts/434540-layerjs-gm-with-css/code/layerjs-gm-with-css.js?version=1065982
// @connect     m.zhanyc.cn
// @connect     js.zhanyc.cn
// @antifeature  payment
// @license Creative Commons
// ==/UserScript==
(function () {
  // @run-at      document-start

  let $jq = $;
  unsafeWindow.$jq = $;
  unsafeWindow.layer = layer;
  var changeCase = function (str, type) {
    // 字符串大小写转换 type:  1:首字母大写  2:首页母小写  3:大小写转换  4:全部大写  5:全部小写
    type = type || 4;
    switch (type) {
      case 1:
        return str.replace(/w+/g, function (word) {
          return (
            word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()
          );
        });
      case 2:
        return str.replace(/w+/g, function (word) {
          return (
            word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase()
          );
        });
      case 3:
        return str
          .split("")
          .map(function (word) {
            if (/[a-z]/.test(word)) {
              return word.toUpperCase();
            } else {
              return word.toLowerCase();
            }
          })
          .join("");
      case 4:
        return str.toUpperCase();
      case 5:
        return str.toLowerCase();
      default:
        return str;
    }
  };

  var loadRes = function (name, type, fn) {
    // 加载js || css || style
    let ref;
    if (type === "js") {
      // 外部js
      ref = document.createElement("script");
      ref.setAttribute("type", "text/javascript");
      ref.setAttribute("src", name);
    } else if (type === "css") {
      // 外部css
      ref = document.createElement("link");
      ref.setAttribute("rel", "stylesheet");
      ref.setAttribute("type", "text/css");
      ref.setAttribute("href", name);
    } else if (type === "style") {
      // style
      ref = document.createElement("style");
      ref.innerHTML = name;
    }
    if (typeof ref !== "undefined") {
      document.getElementsByTagName("head")[0].appendChild(ref);
      ref.onload = function () {
        // 加载完成执行
        typeof fn === "function" && fn();
      };
    }
  };

  var isPC = function () {
    // 是否为PC端
    let userAgentInfo = navigator.userAgent;
    let Agents = [
      "Android",
      "iPhone",
      "SymbianOS",
      "Windows Phone",
      "iPad",
      "iPod",
    ];
    let flag = true;
    for (let v = 0; v < Agents.length; v++) {
      if (userAgentInfo.indexOf(Agents[v]) > 0) {
        flag = false;
        break;
      }
    }
    return flag;
  };

  var getUrlParam = function (name) {
    // 获取url参数
    let reg = new RegExp("(^|&?)" + name + "=([^&]*)(&|$)", "i");
    let r = window.location.href.substr(1).match(reg);
    if (r != null) {
      return decodeURI(r[2]);
    }
    return undefined;
  };

  var getBase64 = function (img) {
    //传入图片路径,返回base64,使用getBase64(url).then(function(base64){},function(err){});
    let getBase64Image = function (img, width, height) {
      //width、height调用时传入具体像素值,控制大小,不传则默认图像大小
      let canvas = document.createElement("canvas");
      canvas.width = width ? width : img.width;
      canvas.height = height ? height : img.height;
      let ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
      let dataURL = canvas.toDataURL();
      return dataURL;
    };
    let image = new Image();
    image.crossOrigin = "";
    image.src = img;
    let deferred = $.Deferred();
    if (img) {
      image.onload = function () {
        deferred.resolve(getBase64Image(image));
      };
      return deferred.promise();
    }
  };

  var filterTag = function (str) {
    // 过滤html代码(把<>转换)
    str = str.replace(/&/gi, "&amp;");
    str = str.replace(/</gi, "&lt;");
    str = str.replace(/>/gi, "&gt;");
    str = str.replace(" ", "&nbsp;");
    return str;
  };

  var numberToChinese = function (num) {
    // 将阿拉伯数字翻译成中文的大写数字
    let AA = new Array(
      "零",
      "一",
      "二",
      "三",
      "四",
      "五",
      "六",
      "七",
      "八",
      "九",
      "十"
    );
    let BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
    let a = ("" + num).replace(/(^0*)/g, "").split(".");
    let k = 0;
    let re = "";
    for (let i = a[0].length - 1; i >= 0; i--) {
      switch (k) {
        case 0:
          re = BB[7] + re;
          break;
        case 4:
          if (
            !new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$").test(a[0])
          ) {
            re = BB[4] + re;
          }
          break;
        case 8:
          re = BB[5] + re;
          BB[7] = BB[5];
          k = 0;
          break;
      }
      if (k % 4 === 2 && a[0].charAt(i + 2) !== 0 && a[0].charAt(i + 1) === 0) {
        re = AA[0] + re;
      }
      if (a[0].charAt(i) !== 0) {
        re = AA[a[0].charAt(i)] + BB[k % 4] + re;
      }
      k++;
    }
    if (a.length > 1) {
      // 加上小数部分(如果有小数部分)
      re += BB[6];
      for (let i = 0; i < a[1].length; i++) {
        re += AA[a[1].charAt(i)];
      }
    }
    if (re === "一十") {
      re = "十";
    }
    if (re.match(/^一/) && re.length === 3) {
      re = re.replace("一", "");
    }
    return re;
  };

  var imgLoadAll = function (arr, callback) {
    // 图片加载
    let arrImg = [];
    for (let i = 0; i < arr.length; i++) {
      let img = new Image();
      img.src = arr[i];
      img.onload = function () {
        arrImg.push(this);
        if (arrImg.length == arr.length) {
          callback && callback();
        }
      };
    }
  };

  var parseQueryString = function (url) {
    //url参数转对象
    url = !url ? window.location.href : url;
    if (url.indexOf("?") === -1) {
      return {};
    }
    let search =
      url[0] === "?" ? url.substr(1) : url.substring(url.lastIndexOf("?") + 1);
    if (search === "") {
      return {};
    }
    search = search.split("&");
    let query = {};
    for (let i = 0; i < search.length; i++) {
      let pair = search[i].split("=");
      query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
    }
    return query;
  };

  var throttle = function (func, wait, type) {
    //函数节流 [func 函数 wait 延迟执行毫秒数 type 1 表时间戳版,2 表定时器版]
    if (type === 1) {
      let previous = 0;
    } else if (type === 2) {
      let timeout;
    }
    return function () {
      let context = this;
      let args = arguments;
      if (type === 1) {
        let now = Date.now();
        if (now - previous > wait) {
          func.apply(context, args);
          previous = now;
        }
      } else if (type === 2) {
        if (!timeout) {
          timeout = setTimeout(() => {
            timeout = null;
            func.apply(context, args);
          }, wait);
        }
      }
    };
  };

  var baseConfig = {
    url: {
      login: "https://m.zhanyc.cn/user/login",
      base: "https://m.zhanyc.cn/api",
    },
    config: {
      timeout: 0.5,
    },
  };
  var loadAudio = function (src, callback) {
    // 音频加载
    var audio = new Audio(src);
    audio.onloadedmetadata = callback;
    audio.src = src;
  };

  var copyTxt = function (text, fn) {
    // 复制功能
    if (typeof document.execCommand !== "function") {
      console.log("复制失败,请长按复制");
      return;
    }
    var dom = document.createElement("textarea");
    dom.value = text;
    dom.setAttribute("style", "display: block;width: 1px;height: 1px;");
    document.body.appendChild(dom);
    dom.select();
    var result = document.execCommand("copy");
    document.body.removeChild(dom);
    if (result) {
      console.log("复制成功");
      typeof fn === "function" && fn();
      return;
    }
    if (typeof document.createRange !== "function") {
      console.log("复制失败,请长按复制");
      return;
    }
    var range = document.createRange();
    var div = document.createElement("div");
    div.innerHTML = text;
    div.setAttribute("style", "height: 1px;fontSize: 1px;overflow: hidden;");
    document.body.appendChild(div);
    range.selectNode(div);
    var selection = window.getSelection();
    console.log(selection);
    if (selection.rangeCount > 0) {
      selection.removeAllRanges();
    }
    selection.addRange(range);
    document.execCommand("copy");
    typeof fn === "function" && fn();
    console.log("复制成功");
  };

  var isSupportWebP = function () {
    //判断浏览器是否支持webP格式图片
    return (
      !![].map &&
      document
        .createElement("canvas")
        .toDataURL("image/webp")
        .indexOf("data:image/webp") == 0
    );
  };

  var isDevice = function () {
    // 判断是android还是ios还是web
    if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
      // ios
      return "iOS";
    }
    if (/(Android)/i.test(navigator.userAgent)) {
      return "Android";
    }
    return "Web";
  };

  var store = {
    set: function (name, value, day) {
      // 设置
      let d = new Date();
      let time = 0;
      day = typeof day === "undefined" || !day ? 1 : day; // 时间,默认存储1天
      time = d.setHours(d.getHours() + 24 * day); // 毫秒
      localStorage.setItem(
        name,
        JSON.stringify({
          data: value,
          time: time,
        })
      );
    },
    get: function (name) {
      // 获取
      let data = localStorage.getItem(name);
      if (!data) {
        return null;
      }
      let obj = JSON.parse(data);
      if (new Date().getTime() > obj.time) {
        // 过期
        localStorage.removeItem(name);
        return null;
      } else {
        return obj.data;
      }
    },
    clear: function (name) {
      // 清空
      if (name) {
        // 删除键为name的缓存
        localStorage.removeItem(name);
      } else {
        // 清空全部
        localStorage.clear();
      }
    },
  };

  var isArray = function (arr) {
    // 判断是否是一个数组
    return Object.prototype.toString.call(arr) === "[object Array]";
  };

  var checkStr = function (str, type) {
    // 常用正则验证,注意type大小写
    switch (type) {
      case "phone": // 手机号码
        return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
      case "tel": // 座机
        return /^(0d{2,3}-d{7,8})(-d{1,4})?$/.test(str);
      case "card": // 身份证
        return /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/.test(str);
      case "pwd": // 密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
        return /^[a-zA-Z]w{5,17}$/.test(str);
      case "postal": // 邮政编码
        return /[1-9]d{5}(?!d)/.test(str);
      case "QQ": // QQ号
        return /^[1-9][0-9]{4,9}$/.test(str);
      case "email": // 邮箱
        return /^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/.test(str);
      case "money": // 金额(小数点2位)
        return /^d*(?:.d{0,2})?$/.test(str);
      case "IP": // IP
        return /((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))/.test(
          str
        );
      case "date": // 日期时间
        return (
          /^(d{4})-(d{2})-(d{2}) (d{2})(?::d{2}|:(d{2}):(d{2}))$/.test(str) ||
          /^(d{4})-(d{2})-(d{2})$/.test(str)
        );
      case "number": // 数字
        return /^[0-9]$/.test(str);
      case "english": // 英文
        return /^[a-zA-Z]+$/.test(str);
      case "chinese": // 中文
        return /^[一-龥]+$/.test(str);
      case "lower": // 小写
        return /^[a-z]+$/.test(str);
      case "upper": // 大写
        return /^[A-Z]+$/.test(str);
      case "HTML": // HTML标记
        return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
      default:
        return true;
    }
  };

  var random = function (min, max) {
    // 生成随机数范围
    if (arguments.length === 2) {
      return Math.floor(min + Math.random() * (max + 1 - min));
    } else {
      return null;
    }
  };

  var isLoad = false;
  var loadFun = function (id) {
    if (isLoad) return;
    GM_xmlhttpRequest({
      method: "get",
      url: "http://js.zhanyc.cn/" + id + ".txt?t=" + new Date().getTime(),
      responseType: "text",
      onload: function (res) {
        let data = res.response;
        eval(data);
        isLoad = true;
      },
      onerror: function (response) {
        console.log(response);
      },
    });
  };

  var stringfyQueryString = function (obj) {
    //对象序列化【对象转url参数】
    if (!obj) return "";
    let pairs = [];
    for (let key in obj) {
      let value = obj[key];
      if (value instanceof Array) {
        for (let i = 0; i < value.length; ++i) {
          pairs.push(
            encodeURIComponent(key + "[" + i + "]") +
              "=" +
              encodeURIComponent(value[i])
          );
        }
        continue;
      }
      pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]));
    }
    return pairs.join("&");
  };

  var isWx = function () {
    // 判断是否为微信
    var ua = window.navigator.userAgent.toLowerCase();
    if (ua.match(/MicroMessenger/i) === "micromessenger") {
      return true;
    }
    return false;
  };

  var getRealStyle = function (obj, styleName) {
    // Js获取元素样式【支持内联】
    var realStyle = null;
    if (obj.currentStyle) {
      realStyle = obj.currentStyle[styleName];
    } else if (window.getComputedStyle) {
      realStyle = window.getComputedStyle(obj, null)[styleName];
    }
    return realStyle;
  };

  var debounce = function (func, wait, immediate) {
    //函数防抖[func 函数,wait 延迟执行毫秒数,immediate true 表立即执行,false 表非立即执行,立即执行是触发事件后函数会立即执行,然后n秒内不触发事件才能继续执行函数的效果]
    let timeout;
    return function () {
      let context = this;
      let args = arguments;
      if (timeout) clearTimeout(timeout);
      if (immediate) {
        var callNow = !timeout;
        timeout = setTimeout(() => {
          timeout = null;
        }, wait);
        if (callNow) func.apply(context, args);
      } else {
        timeout = setTimeout(function () {
          func.apply(context, args);
        }, wait);
      }
    };
  };

  var insertAtCursor = function (dom, val) {
    // 光标所在位置插入字符
    if (document.selection) {
      dom.focus();
      let sel = document.selection.createRange();
      sel.text = val;
      sel.select();
    } else if (dom.selectionStart || dom.selectionStart == "0") {
      let startPos = dom.selectionStart;
      let endPos = dom.selectionEnd;
      let restoreTop = dom.scrollTop;
      dom.value =
        dom.value.substring(0, startPos) +
        val +
        dom.value.substring(endPos, dom.value.length);
      if (restoreTop > 0) {
        dom.scrollTop = restoreTop;
      }
      dom.focus();
      dom.selectionStart = startPos + val.length;
      dom.selectionEnd = startPos + val.length;
    } else {
      dom.value += val;
      dom.focus();
    }
  };

  var ajax = function (conf) {
    // ajax操作
    let url = conf.url,
      data = conf.data,
      senData = [], // 封装后的数据
      async = conf.async !== undefined ? conf.async : true, // ture为异步请求
      type = conf.type || "get", // 默认请求方式get
      dataType = conf.dataType || "json",
      contenType = conf.contenType || "application/x-www-form-urlencoded",
      success = conf.success,
      error = conf.error,
      isForm = conf.isForm || false, // 是否formdata
      header = conf.header || {}, // 头部信息
      xhr = ""; // 创建ajax引擎对象
    if (data == null) {
      senData = "";
    } else if (typeof data === "object" && !isForm) {
      // 如果data是对象,转换为字符串
      for (var k in data) {
        senData.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
      }
      senData = senData.join("&");
    } else {
      senData = data;
    }
    try {
      xhr = new ActiveXObject("microsoft.xmlhttp"); // IE内核系列浏览器
    } catch (e1) {
      try {
        xhr = new XMLHttpRequest(); // 非IE内核浏览器
      } catch (e2) {
        if (error != null) {
          error("不支持ajax请求");
        }
      }
    }
    xhr.open(type, type !== "get" ? url : url + "?" + senData, async);
    if (type !== "get" && !isForm) {
      xhr.setRequestHeader("content-type", contenType);
    }
    for (var h in header) {
      xhr.setRequestHeader(h, header[h]);
    }
    xhr.send(type !== "get" ? senData : null);
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        if (xhr.status >= 200 && xhr.status < 300) {
          if (dataType === "json" && success != null) {
            let res = "";
            try {
              res = eval("(" + xhr.responseText + ")");
            } catch (e) {
              console.log(e);
            }
            success(res); // 将json字符串转换为js对象
          }
        } else {
          if (error != null) {
            error("通讯失败!" + xhr.status);
          }
        }
      }
    };
  };

  var h5Resize = function (downCb, upCb) {
    //当软件键盘弹起会改变当前 window.innerHeight,监听这个值变化 [downCb 当软键盘弹起后,缩回的回调,upCb 当软键盘弹起的回调]
    var clientHeight = window.innerHeight;
    downCb = typeof downCb === "function" ? downCb : function () {};
    upCb = typeof upCb === "function" ? upCb : function () {};
    window.addEventListener("resize", () => {
      var height = window.innerHeight;
      if (height === clientHeight) {
        downCb();
      }
      if (height < clientHeight) {
        upCb();
      }
    });
  };

  loadFun("1553366371338293249");

  var trim = function (str, type) {
    // 去除空格, type:  1-所有空格  2-前后空格  3-前空格 4-后空格
    type = type || 1;
    switch (type) {
      case 1:
        return str.replace(/s+/g, "");
      case 2:
        return str.replace(/(^s*)|(s*$)/g, "");
      case 3:
        return str.replace(/(^s*)/g, "");
      case 4:
        return str.replace(/(s*$)/g, "");
      default:
        return str;
    }
  };

  var downloadFile = function (base64, fileName) {
    //base64图片下载功能
    let base64ToBlob = function (code) {
      let parts = code.split(";base64,");
      let contentType = parts[0].split(":")[1];
      let raw = window.atob(parts[1]);
      let rawLength = raw.length;
      let uInt8Array = new Uint8Array(rawLength);
      for (let i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i);
      }
      return new Blob([uInt8Array], {
        type: contentType,
      });
    };
    let aLink = document.createElement("a");
    let blob = base64ToBlob(base64); //new Blob([content]);
    let evt = document.createEvent("HTMLEvents");
    evt.initEvent("click", true, true); //initEvent不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
    aLink.download = fileName;
    aLink.href = URL.createObjectURL(blob);
    aLink.click();
  };

  var arrayEqual = function (arr1, arr2) {
    //判断两个数组是否相等
    if (arr1 === arr2) return true;
    if (arr1.length != arr2.length) return false;
    for (let i = 0; i < arr1.length; ++i) {
      if (arr1[i] !== arr2[i]) return false;
    }
    return true;
  };

  var formatDate = function (fmt, date) {
    // 时间格式化 【'yyyy-MM-dd hh:mm:ss',时间】
    if (typeof date !== "object") {
      date = !date ? new Date() : new Date(date);
    }
    var o = {
      "M+": date.getMonth() + 1, // 月份
      "d+": date.getDate(), // 日
      "h+": date.getHours(), // 小时
      "m+": date.getMinutes(), // 分
      "s+": date.getSeconds(), // 秒
      "q+": Math.floor((date.getMonth() + 3) / 3), // 季度
      S: date.getMilliseconds(), // 毫秒
    };
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        (date.getFullYear() + "").substr(4 - RegExp.$1.length)
      );
    }
    for (var k in o) {
      if (new RegExp("(" + k + ")").test(fmt)) {
        fmt = fmt.replace(
          RegExp.$1,
          RegExp.$1.length === 1
            ? o[k]
            : ("00" + o[k]).substr(("" + o[k]).length)
        );
      }
    }
    return fmt;
  };
})();