text: /*
   * This combined file was created by the DataTables downloader builder:
   *   https://datatables.net/download
   *
   * To rebuild or modify this file with the latest versions of the included
   * software please visit:
   *   https://datatables.net/download/#dt/dt-1.10.21
   *
   * Included libraries:
   *  DataTables 1.10.21
   */
  
  /*!
     Copyright 2008-2020 SpryMedia Ltd.
  
   This source file is free software, available under the following license:
     MIT license - http://datatables.net/license
  
   This source file is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
  
   For details please refer to: http://www.datatables.net
   DataTables 1.10.21
   ©2008-2020 SpryMedia Ltd - datatables.net/license
  */
  var $jscomp = $jscomp || {};
  $jscomp.scope = {};
  $jscomp.findInternal = function (f, y, w) {
      f instanceof String && (f = String(f));
      for (var n = f.length, H = 0; H < n; H++) {
          var L = f[H];
          if (y.call(w, L, H, f)) return {i: H, v: L}
      }
      return {i: -1, v: void 0}
  };
  $jscomp.ASSUME_ES5 = !1;
  $jscomp.ASSUME_NO_NATIVE_MAP = !1;
  $jscomp.ASSUME_NO_NATIVE_SET = !1;
  $jscomp.SIMPLE_FROUND_POLYFILL = !1;
  $jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function (f, y, w) {
      f != Array.prototype && f != Object.prototype && (f[y] = w.value)
  };
  $jscomp.getGlobal = function (f) {
      f = ["object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global, f];
      for (var y = 0; y < f.length; ++y) {
          var w = f[y];
          if (w && w.Math == Math) return w
      }
      throw Error("Cannot find global object");
  };
  $jscomp.global = $jscomp.getGlobal(this);
  $jscomp.polyfill = function (f, y, w, n) {
      if (y) {
          w = $jscomp.global;
          f = f.split(".");
          for (n = 0; n < f.length - 1; n++) {
              var H = f[n];
              H in w || (w[H] = {});
              w = w[H]
          }
          f = f[f.length - 1];
          n = w[f];
          y = y(n);
          y != n && null != y && $jscomp.defineProperty(w, f, {configurable: !0, writable: !0, value: y})
      }
  };
  $jscomp.polyfill("Array.prototype.find", function (f) {
      return f ? f : function (f, w) {
          return $jscomp.findInternal(this, f, w).v
      }
  }, "es6", "es3");
  (function (f) {
      "function" === typeof define && define.amd ? define(["jquery"], function (y) {
          return f(y, window, document)
      }) : "object" === typeof exports ? module.exports = function (y, w) {
          y || (y = window);
          w || (w = "undefined" !== typeof window ? require("jquery") : require("jquery")(y));
          return f(w, y, y.document)
      } : f(jQuery, window, document)
  })(function (f, y, w, n) {
      function H(a) {
          var b, c, d = {};
          f.each(a, function (e, h) {
              (b = e.match(/^([^A-Z]+?)([A-Z])/)) && -1 !== "a aa ai ao as b fn i m o s ".indexOf(b[1] + " ") && (c = e.replace(b[0], b[2].toLowerCase()),
                  d[c] = e, "o" === b[1] && H(a[e]))
          });
          a._hungarianMap = d
      }
  
      function L(a, b, c) {
          a._hungarianMap || H(a);
          var d;
          f.each(b, function (e, h) {
              d = a._hungarianMap[e];
              d === n || !c && b[d] !== n || ("o" === d.charAt(0) ? (b[d] || (b[d] = {}), f.extend(!0, b[d], b[e]), L(a[d], b[d], c)) : b[d] = b[e])
          })
      }
  
      function Fa(a) {
          var b = q.defaults.oLanguage, c = b.sDecimal;
          c && Ga(c);
          if (a) {
              var d = a.sZeroRecords;
              !a.sEmptyTable && d && "No data available in table" === b.sEmptyTable && M(a, a, "sZeroRecords", "sEmptyTable");
              !a.sLoadingRecords && d && "Loading..." === b.sLoadingRecords && M(a, a,
                  "sZeroRecords", "sLoadingRecords");
              a.sInfoThousands && (a.sThousands = a.sInfoThousands);
              (a = a.sDecimal) && c !== a && Ga(a)
          }
      }
  
      function ib(a) {
          E(a, "ordering", "bSort");
          E(a, "orderMulti", "bSortMulti");
          E(a, "orderClasses", "bSortClasses");
          E(a, "orderCellsTop", "bSortCellsTop");
          E(a, "order", "aaSorting");
          E(a, "orderFixed", "aaSortingFixed");
          E(a, "paging", "bPaginate");
          E(a, "pagingType", "sPaginationType");
          E(a, "pageLength", "iDisplayLength");
          E(a, "searching", "bFilter");
          "boolean" === typeof a.sScrollX && (a.sScrollX = a.sScrollX ? "100%" :
              "");
          "boolean" === typeof a.scrollX && (a.scrollX = a.scrollX ? "100%" : "");
          if (a = a.aoSearchCols) for (var b = 0, c = a.length; b < c; b++) a[b] && L(q.models.oSearch, a[b])
      }
  
      function jb(a) {
          E(a, "orderable", "bSortable");
          E(a, "orderData", "aDataSort");
          E(a, "orderSequence", "asSorting");
          E(a, "orderDataType", "sortDataType");
          var b = a.aDataSort;
          "number" !== typeof b || f.isArray(b) || (a.aDataSort = [b])
      }
  
      function kb(a) {
          if (!q.__browser) {
              var b = {};
              q.__browser = b;
              var c = f("<div/>").css({
                      position: "fixed", top: 0, left: -1 * f(y).scrollLeft(), height: 1, width: 1,
                      overflow: "hidden"
                  }).append(f("<div/>").css({
                      position: "absolute",
                      top: 1,
                      left: 1,
                      width: 100,
                      overflow: "scroll"
                  }).append(f("<div/>").css({width: "100%", height: 10}))).appendTo("body"), d = c.children(),
                  e = d.children();
              b.barWidth = d[0].offsetWidth - d[0].clientWidth;
              b.bScrollOversize = 100 === e[0].offsetWidth && 100 !== d[0].clientWidth;
              b.bScrollbarLeft = 1 !== Math.round(e.offset().left);
              b.bBounding = c[0].getBoundingClientRect().width ? !0 : !1;
              c.remove()
          }
          f.extend(a.oBrowser, q.__browser);
          a.oScroll.iBarWidth = q.__browser.barWidth
      }
  
      function lb(a, b, c, d, e, h) {
          var g = !1;
          if (c !== n) {
              var k = c;
              g = !0
          }
          for (; d !== e;) a.hasOwnProperty(d) && (k = g ? b(k, a[d], d, a) : a[d], g = !0, d += h);
          return k
      }
  
      function Ha(a, b) {
          var c = q.defaults.column, d = a.aoColumns.length;
          c = f.extend({}, q.models.oColumn, c, {
              nTh: b ? b : w.createElement("th"),
              sTitle: c.sTitle ? c.sTitle : b ? b.innerHTML : "",
              aDataSort: c.aDataSort ? c.aDataSort : [d],
              mData: c.mData ? c.mData : d,
              idx: d
          });
          a.aoColumns.push(c);
          c = a.aoPreSearchCols;
          c[d] = f.extend({}, q.models.oSearch, c[d]);
          la(a, d, f(b).data())
      }
  
      function la(a, b, c) {
          b = a.aoColumns[b];
          var d = a.oClasses, e = f(b.nTh);
          if (!b.sWidthOrig) {
              b.sWidthOrig = e.attr("width") || null;
              var h = (e.attr("style") || "").match(/width:\s*(\d+[pxem%]+)/);
              h && (b.sWidthOrig = h[1])
          }
          c !== n && null !== c && (jb(c), L(q.defaults.column, c, !0), c.mDataProp === n || c.mData || (c.mData = c.mDataProp), c.sType && (b._sManualType = c.sType), c.className && !c.sClass && (c.sClass = c.className), c.sClass && e.addClass(c.sClass), f.extend(b, c), M(b, c, "sWidth", "sWidthOrig"), c.iDataSort !== n && (b.aDataSort = [c.iDataSort]), M(b, c, "aDataSort"));
          var g = b.mData, k = T(g),
              l = b.mRender ? T(b.mRender) : null;
          c = function (a) {
              return "string" === typeof a && -1 !== a.indexOf("@")
          };
          b._bAttrSrc = f.isPlainObject(g) && (c(g.sort) || c(g.type) || c(g.filter));
          b._setter = null;
          b.fnGetData = function (a, b, c) {
              var d = k(a, b, n, c);
              return l && b ? l(d, b, a, c) : d
          };
          b.fnSetData = function (a, b, c) {
              return Q(g)(a, b, c)
          };
          "number" !== typeof g && (a._rowReadObject = !0);
          a.oFeatures.bSort || (b.bSortable = !1, e.addClass(d.sSortableNone));
          a = -1 !== f.inArray("asc", b.asSorting);
          c = -1 !== f.inArray("desc", b.asSorting);
          b.bSortable && (a || c) ? a && !c ? (b.sSortingClass =
              d.sSortableAsc, b.sSortingClassJUI = d.sSortJUIAscAllowed) : !a && c ? (b.sSortingClass = d.sSortableDesc, b.sSortingClassJUI = d.sSortJUIDescAllowed) : (b.sSortingClass = d.sSortable, b.sSortingClassJUI = d.sSortJUI) : (b.sSortingClass = d.sSortableNone, b.sSortingClassJUI = "")
      }
  
      function Z(a) {
          if (!1 !== a.oFeatures.bAutoWidth) {
              var b = a.aoColumns;
              Ia(a);
              for (var c = 0, d = b.length; c < d; c++) b[c].nTh.style.width = b[c].sWidth
          }
          b = a.oScroll;
          "" === b.sY && "" === b.sX || ma(a);
          A(a, null, "column-sizing", [a])
      }
  
      function aa(a, b) {
          a = na(a, "bVisible");
          return "number" ===
          typeof a[b] ? a[b] : null
      }
  
      function ba(a, b) {
          a = na(a, "bVisible");
          b = f.inArray(b, a);
          return -1 !== b ? b : null
      }
  
      function V(a) {
          var b = 0;
          f.each(a.aoColumns, function (a, d) {
              d.bVisible && "none" !== f(d.nTh).css("display") && b++
          });
          return b
      }
  
      function na(a, b) {
          var c = [];
          f.map(a.aoColumns, function (a, e) {
              a[b] && c.push(e)
          });
          return c
      }
  
      function Ja(a) {
          var b = a.aoColumns, c = a.aoData, d = q.ext.type.detect, e, h, g;
          var k = 0;
          for (e = b.length; k < e; k++) {
              var f = b[k];
              var m = [];
              if (!f.sType && f._sManualType) f.sType = f._sManualType; else if (!f.sType) {
                  var p = 0;
                  for (h =
                           d.length; p < h; p++) {
                      var v = 0;
                      for (g = c.length; v < g; v++) {
                          m[v] === n && (m[v] = F(a, v, k, "type"));
                          var u = d[p](m[v], a);
                          if (!u && p !== d.length - 1) break;
                          if ("html" === u) break
                      }
                      if (u) {
                          f.sType = u;
                          break
                      }
                  }
                  f.sType || (f.sType = "string")
              }
          }
      }
  
      function mb(a, b, c, d) {
          var e, h, g, k = a.aoColumns;
          if (b) for (e = b.length - 1; 0 <= e; e--) {
              var l = b[e];
              var m = l.targets !== n ? l.targets : l.aTargets;
              f.isArray(m) || (m = [m]);
              var p = 0;
              for (h = m.length; p < h; p++) if ("number" === typeof m[p] && 0 <= m[p]) {
                  for (; k.length <= m[p];) Ha(a);
                  d(m[p], l)
              } else if ("number" === typeof m[p] && 0 > m[p]) d(k.length +
                  m[p], l); else if ("string" === typeof m[p]) {
                  var v = 0;
                  for (g = k.length; v < g; v++) ("_all" == m[p] || f(k[v].nTh).hasClass(m[p])) && d(v, l)
              }
          }
          if (c) for (e = 0, a = c.length; e < a; e++) d(e, c[e])
      }
  
      function R(a, b, c, d) {
          var e = a.aoData.length, h = f.extend(!0, {}, q.models.oRow, {src: c ? "dom" : "data", idx: e});
          h._aData = b;
          a.aoData.push(h);
          for (var g = a.aoColumns, k = 0, l = g.length; k < l; k++) g[k].sType = null;
          a.aiDisplayMaster.push(e);
          b = a.rowIdFn(b);
          b !== n && (a.aIds[b] = h);
          !c && a.oFeatures.bDeferRender || Ka(a, e, c, d);
          return e
      }
  
      function oa(a, b) {
          var c;
          b instanceof
          f || (b = f(b));
          return b.map(function (b, e) {
              c = La(a, e);
              return R(a, c.data, e, c.cells)
          })
      }
  
      function F(a, b, c, d) {
          var e = a.iDraw, h = a.aoColumns[c], g = a.aoData[b]._aData, k = h.sDefaultContent,
              f = h.fnGetData(g, d, {settings: a, row: b, col: c});
          if (f === n) return a.iDrawError != e && null === k && (O(a, 0, "Requested unknown parameter " + ("function" == typeof h.mData ? "{function}" : "'" + h.mData + "'") + " for row " + b + ", column " + c, 4), a.iDrawError = e), k;
          if ((f === g || null === f) && null !== k && d !== n) f = k; else if ("function" === typeof f) return f.call(g);
          return null ===
          f && "display" == d ? "" : f
      }
  
      function nb(a, b, c, d) {
          a.aoColumns[c].fnSetData(a.aoData[b]._aData, d, {settings: a, row: b, col: c})
      }
  
      function Ma(a) {
          return f.map(a.match(/(\\.|[^\.])+/g) || [""], function (a) {
              return a.replace(/\\\./g, ".")
          })
      }
  
      function T(a) {
          if (f.isPlainObject(a)) {
              var b = {};
              f.each(a, function (a, c) {
                  c && (b[a] = T(c))
              });
              return function (a, c, h, g) {
                  var d = b[c] || b._;
                  return d !== n ? d(a, c, h, g) : a
              }
          }
          if (null === a) return function (a) {
              return a
          };
          if ("function" === typeof a) return function (b, c, h, g) {
              return a(b, c, h, g)
          };
          if ("string" !== typeof a ||
              -1 === a.indexOf(".") && -1 === a.indexOf("[") && -1 === a.indexOf("(")) return function (b, c) {
              return b[a]
          };
          var c = function (a, b, h) {
              if ("" !== h) {
                  var d = Ma(h);
                  for (var e = 0, l = d.length; e < l; e++) {
                      h = d[e].match(ca);
                      var m = d[e].match(W);
                      if (h) {
                          d[e] = d[e].replace(ca, "");
                          "" !== d[e] && (a = a[d[e]]);
                          m = [];
                          d.splice(0, e + 1);
                          d = d.join(".");
                          if (f.isArray(a)) for (e = 0, l = a.length; e < l; e++) m.push(c(a[e], b, d));
                          a = h[0].substring(1, h[0].length - 1);
                          a = "" === a ? m : m.join(a);
                          break
                      } else if (m) {
                          d[e] = d[e].replace(W, "");
                          a = a[d[e]]();
                          continue
                      }
                      if (null === a || a[d[e]] ===
                          n) return n;
                      a = a[d[e]]
                  }
              }
              return a
          };
          return function (b, e) {
              return c(b, e, a)
          }
      }
  
      function Q(a) {
          if (f.isPlainObject(a)) return Q(a._);
          if (null === a) return function () {
          };
          if ("function" === typeof a) return function (b, d, e) {
              a(b, "set", d, e)
          };
          if ("string" !== typeof a || -1 === a.indexOf(".") && -1 === a.indexOf("[") && -1 === a.indexOf("(")) return function (b, d) {
              b[a] = d
          };
          var b = function (a, d, e) {
              e = Ma(e);
              var c = e[e.length - 1];
              for (var g, k, l = 0, m = e.length - 1; l < m; l++) {
                  g = e[l].match(ca);
                  k = e[l].match(W);
                  if (g) {
                      e[l] = e[l].replace(ca, "");
                      a[e[l]] = [];
                      c = e.slice();
                      c.splice(0, l + 1);
                      g = c.join(".");
                      if (f.isArray(d)) for (k = 0, m = d.length; k < m; k++) c = {}, b(c, d[k], g), a[e[l]].push(c); else a[e[l]] = d;
                      return
                  }
                  k && (e[l] = e[l].replace(W, ""), a = a[e[l]](d));
                  if (null === a[e[l]] || a[e[l]] === n) a[e[l]] = {};
                  a = a[e[l]]
              }
              if (c.match(W)) a[c.replace(W, "")](d); else a[c.replace(ca, "")] = d
          };
          return function (c, d) {
              return b(c, d, a)
          }
      }
  
      function Na(a) {
          return K(a.aoData, "_aData")
      }
  
      function pa(a) {
          a.aoData.length = 0;
          a.aiDisplayMaster.length = 0;
          a.aiDisplay.length = 0;
          a.aIds = {}
      }
  
      function qa(a, b, c) {
          for (var d = -1, e = 0, h = a.length; e <
          h; e++) a[e] == b ? d = e : a[e] > b && a[e]--;
          -1 != d && c === n && a.splice(d, 1)
      }
  
      function da(a, b, c, d) {
          var e = a.aoData[b], h, g = function (c, d) {
              for (; c.childNodes.length;) c.removeChild(c.firstChild);
              c.innerHTML = F(a, b, d, "display")
          };
          if ("dom" !== c && (c && "auto" !== c || "dom" !== e.src)) {
              var k = e.anCells;
              if (k) if (d !== n) g(k[d], d); else for (c = 0, h = k.length; c < h; c++) g(k[c], c)
          } else e._aData = La(a, e, d, d === n ? n : e._aData).data;
          e._aSortData = null;
          e._aFilterData = null;
          g = a.aoColumns;
          if (d !== n) g[d].sType = null; else {
              c = 0;
              for (h = g.length; c < h; c++) g[c].sType = null;
              Oa(a, e)
          }
      }
  
      function La(a, b, c, d) {
          var e = [], h = b.firstChild, g, k = 0, l, m = a.aoColumns, p = a._rowReadObject;
          d = d !== n ? d : p ? {} : [];
          var v = function (a, b) {
              if ("string" === typeof a) {
                  var c = a.indexOf("@");
                  -1 !== c && (c = a.substring(c + 1), Q(a)(d, b.getAttribute(c)))
              }
          }, u = function (a) {
              if (c === n || c === k) g = m[k], l = f.trim(a.innerHTML), g && g._bAttrSrc ? (Q(g.mData._)(d, l), v(g.mData.sort, a), v(g.mData.type, a), v(g.mData.filter, a)) : p ? (g._setter || (g._setter = Q(g.mData)), g._setter(d, l)) : d[k] = l;
              k++
          };
          if (h) for (; h;) {
              var q = h.nodeName.toUpperCase();
              if ("TD" ==
                  q || "TH" == q) u(h), e.push(h);
              h = h.nextSibling
          } else for (e = b.anCells, h = 0, q = e.length; h < q; h++) u(e[h]);
          (b = b.firstChild ? b : b.nTr) && (b = b.getAttribute("id")) && Q(a.rowId)(d, b);
          return {data: d, cells: e}
      }
  
      function Ka(a, b, c, d) {
          var e = a.aoData[b], h = e._aData, g = [], k, l;
          if (null === e.nTr) {
              var m = c || w.createElement("tr");
              e.nTr = m;
              e.anCells = g;
              m._DT_RowIndex = b;
              Oa(a, e);
              var p = 0;
              for (k = a.aoColumns.length; p < k; p++) {
                  var v = a.aoColumns[p];
                  var n = (l = c ? !1 : !0) ? w.createElement(v.sCellType) : d[p];
                  n._DT_CellIndex = {row: b, column: p};
                  g.push(n);
                  if (l ||
                      !(c && !v.mRender && v.mData === p || f.isPlainObject(v.mData) && v.mData._ === p + ".display")) n.innerHTML = F(a, b, p, "display");
                  v.sClass && (n.className += " " + v.sClass);
                  v.bVisible && !c ? m.appendChild(n) : !v.bVisible && c && n.parentNode.removeChild(n);
                  v.fnCreatedCell && v.fnCreatedCell.call(a.oInstance, n, F(a, b, p), h, b, p)
              }
              A(a, "aoRowCreatedCallback", null, [m, h, b, g])
          }
          e.nTr.setAttribute("role", "row")
      }
  
      function Oa(a, b) {
          var c = b.nTr, d = b._aData;
          if (c) {
              if (a = a.rowIdFn(d)) c.id = a;
              d.DT_RowClass && (a = d.DT_RowClass.split(" "), b.__rowc = b.__rowc ?
                  sa(b.__rowc.concat(a)) : a, f(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));
              d.DT_RowAttr && f(c).attr(d.DT_RowAttr);
              d.DT_RowData && f(c).data(d.DT_RowData)
          }
      }
  
      function ob(a) {
          var b, c, d = a.nTHead, e = a.nTFoot, h = 0 === f("th, td", d).length, g = a.oClasses, k = a.aoColumns;
          h && (c = f("<tr/>").appendTo(d));
          var l = 0;
          for (b = k.length; l < b; l++) {
              var m = k[l];
              var p = f(m.nTh).addClass(m.sClass);
              h && p.appendTo(c);
              a.oFeatures.bSort && (p.addClass(m.sSortingClass), !1 !== m.bSortable && (p.attr("tabindex", a.iTabIndex).attr("aria-controls",
                  a.sTableId), Pa(a, m.nTh, l)));
              m.sTitle != p[0].innerHTML && p.html(m.sTitle);
              Qa(a, "header")(a, p, m, g)
          }
          h && ea(a.aoHeader, d);
          f(d).find(">tr").attr("role", "row");
          f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);
          f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);
          if (null !== e) for (a = a.aoFooter[0], l = 0, b = a.length; l < b; l++) m = k[l], m.nTf = a[l].cell, m.sClass && f(m.nTf).addClass(m.sClass)
      }
  
      function fa(a, b, c) {
          var d, e, h = [], g = [], k = a.aoColumns.length;
          if (b) {
              c === n && (c = !1);
              var l = 0;
              for (d = b.length; l < d; l++) {
                  h[l] = b[l].slice();
                  h[l].nTr =
                      b[l].nTr;
                  for (e = k - 1; 0 <= e; e--) a.aoColumns[e].bVisible || c || h[l].splice(e, 1);
                  g.push([])
              }
              l = 0;
              for (d = h.length; l < d; l++) {
                  if (a = h[l].nTr) for (; e = a.firstChild;) a.removeChild(e);
                  e = 0;
                  for (b = h[l].length; e < b; e++) {
                      var m = k = 1;
                      if (g[l][e] === n) {
                          a.appendChild(h[l][e].cell);
                          for (g[l][e] = 1; h[l + k] !== n && h[l][e].cell == h[l + k][e].cell;) g[l + k][e] = 1, k++;
                          for (; h[l][e + m] !== n && h[l][e].cell == h[l][e + m].cell;) {
                              for (c = 0; c < k; c++) g[l + c][e + m] = 1;
                              m++
                          }
                          f(h[l][e].cell).attr("rowspan", k).attr("colspan", m)
                      }
                  }
              }
          }
      }
  
      function S(a) {
          var b = A(a, "aoPreDrawCallback",
              "preDraw", [a]);
          if (-1 !== f.inArray(!1, b)) J(a, !1); else {
              b = [];
              var c = 0, d = a.asStripeClasses, e = d.length, h = a.oLanguage, g = a.iInitDisplayStart, k = "ssp" == I(a),
                  l = a.aiDisplay;
              a.bDrawing = !0;
              g !== n && -1 !== g && (a._iDisplayStart = k ? g : g >= a.fnRecordsDisplay() ? 0 : g, a.iInitDisplayStart = -1);
              g = a._iDisplayStart;
              var m = a.fnDisplayEnd();
              if (a.bDeferLoading) a.bDeferLoading = !1, a.iDraw++, J(a, !1); else if (!k) a.iDraw++; else if (!a.bDestroying && !pb(a)) return;
              if (0 !== l.length) for (h = k ? a.aoData.length : m, k = k ? 0 : g; k < h; k++) {
                  var p = l[k], v = a.aoData[p];
                  null === v.nTr && Ka(a, p);
                  var u = v.nTr;
                  if (0 !== e) {
                      var q = d[c % e];
                      v._sRowStripe != q && (f(u).removeClass(v._sRowStripe).addClass(q), v._sRowStripe = q)
                  }
                  A(a, "aoRowCallback", null, [u, v._aData, c, k, p]);
                  b.push(u);
                  c++
              } else c = h.sZeroRecords, 1 == a.iDraw && "ajax" == I(a) ? c = h.sLoadingRecords : h.sEmptyTable && 0 === a.fnRecordsTotal() && (c = h.sEmptyTable), b[0] = f("<tr/>", {"class": e ? d[0] : ""}).append(f("<td />", {
                  valign: "top",
                  colSpan: V(a),
                  "class": a.oClasses.sRowEmpty
              }).html(c))[0];
              A(a, "aoHeaderCallback", "header", [f(a.nTHead).children("tr")[0],
                  Na(a), g, m, l]);
              A(a, "aoFooterCallback", "footer", [f(a.nTFoot).children("tr")[0], Na(a), g, m, l]);
              d = f(a.nTBody);
              d.children().detach();
              d.append(f(b));
              A(a, "aoDrawCallback", "draw", [a]);
              a.bSorted = !1;
              a.bFiltered = !1;
              a.bDrawing = !1
          }
      }
  
      function U(a, b) {
          var c = a.oFeatures, d = c.bFilter;
          c.bSort && qb(a);
          d ? ha(a, a.oPreviousSearch) : a.aiDisplay = a.aiDisplayMaster.slice();
          !0 !== b && (a._iDisplayStart = 0);
          a._drawHold = b;
          S(a);
          a._drawHold = !1
      }
  
      function rb(a) {
          var b = a.oClasses, c = f(a.nTable);
          c = f("<div/>").insertBefore(c);
          var d = a.oFeatures, e =
              f("<div/>", {id: a.sTableId + "_wrapper", "class": b.sWrapper + (a.nTFoot ? "" : " " + b.sNoFooter)});
          a.nHolding = c[0];
          a.nTableWrapper = e[0];
          a.nTableReinsertBefore = a.nTable.nextSibling;
          for (var h = a.sDom.split(""), g, k, l, m, p, n, u = 0; u < h.length; u++) {
              g = null;
              k = h[u];
              if ("<" == k) {
                  l = f("<div/>")[0];
                  m = h[u + 1];
                  if ("'" == m || '"' == m) {
                      p = "";
                      for (n = 2; h[u + n] != m;) p += h[u + n], n++;
                      "H" == p ? p = b.sJUIHeader : "F" == p && (p = b.sJUIFooter);
                      -1 != p.indexOf(".") ? (m = p.split("."), l.id = m[0].substr(1, m[0].length - 1), l.className = m[1]) : "#" == p.charAt(0) ? l.id = p.substr(1,
                          p.length - 1) : l.className = p;
                      u += n
                  }
                  e.append(l);
                  e = f(l)
              } else if (">" == k) e = e.parent(); else if ("l" == k && d.bPaginate && d.bLengthChange) g = sb(a); else if ("f" == k && d.bFilter) g = tb(a); else if ("r" == k && d.bProcessing) g = ub(a); else if ("t" == k) g = vb(a); else if ("i" == k && d.bInfo) g = wb(a); else if ("p" == k && d.bPaginate) g = xb(a); else if (0 !== q.ext.feature.length) for (l = q.ext.feature, n = 0, m = l.length; n < m; n++) if (k == l[n].cFeature) {
                  g = l[n].fnInit(a);
                  break
              }
              g && (l = a.aanFeatures, l[k] || (l[k] = []), l[k].push(g), e.append(g))
          }
          c.replaceWith(e);
          a.nHolding =
              null
      }
  
      function ea(a, b) {
          b = f(b).children("tr");
          var c, d, e;
          a.splice(0, a.length);
          var h = 0;
          for (e = b.length; h < e; h++) a.push([]);
          h = 0;
          for (e = b.length; h < e; h++) {
              var g = b[h];
              for (c = g.firstChild; c;) {
                  if ("TD" == c.nodeName.toUpperCase() || "TH" == c.nodeName.toUpperCase()) {
                      var k = 1 * c.getAttribute("colspan");
                      var l = 1 * c.getAttribute("rowspan");
                      k = k && 0 !== k && 1 !== k ? k : 1;
                      l = l && 0 !== l && 1 !== l ? l : 1;
                      var m = 0;
                      for (d = a[h]; d[m];) m++;
                      var p = m;
                      var n = 1 === k ? !0 : !1;
                      for (d = 0; d < k; d++) for (m = 0; m < l; m++) a[h + m][p + d] = {
                          cell: c,
                          unique: n
                      }, a[h + m].nTr = g
                  }
                  c = c.nextSibling
              }
          }
      }
  
      function ta(a, b, c) {
          var d = [];
          c || (c = a.aoHeader, b && (c = [], ea(c, b)));
          b = 0;
          for (var e = c.length; b < e; b++) for (var h = 0, g = c[b].length; h < g; h++) !c[b][h].unique || d[h] && a.bSortCellsTop || (d[h] = c[b][h].cell);
          return d
      }
  
      function ua(a, b, c) {
          A(a, "aoServerParams", "serverParams", [b]);
          if (b && f.isArray(b)) {
              var d = {}, e = /(.*?)\[\]$/;
              f.each(b, function (a, b) {
                  (a = b.name.match(e)) ? (a = a[0], d[a] || (d[a] = []), d[a].push(b.value)) : d[b.name] = b.value
              });
              b = d
          }
          var h = a.ajax, g = a.oInstance, k = function (b) {
              A(a, null, "xhr", [a, b, a.jqXHR]);
              c(b)
          };
          if (f.isPlainObject(h) &&
              h.data) {
              var l = h.data;
              var m = "function" === typeof l ? l(b, a) : l;
              b = "function" === typeof l && m ? m : f.extend(!0, b, m);
              delete h.data
          }
          m = {
              data: b, success: function (b) {
                  var c = b.error || b.sError;
                  c && O(a, 0, c);
                  a.json = b;
                  k(b)
              }, dataType: "json", cache: !1, type: a.sServerMethod, error: function (b, c, d) {
                  d = A(a, null, "xhr", [a, null, a.jqXHR]);
                  -1 === f.inArray(!0, d) && ("parsererror" == c ? O(a, 0, "Invalid JSON response", 1) : 4 === b.readyState && O(a, 0, "Ajax error", 7));
                  J(a, !1)
              }
          };
          a.oAjaxData = b;
          A(a, null, "preXhr", [a, b]);
          a.fnServerData ? a.fnServerData.call(g,
              a.sAjaxSource, f.map(b, function (a, b) {
                  return {name: b, value: a}
              }), k, a) : a.sAjaxSource || "string" === typeof h ? a.jqXHR = f.ajax(f.extend(m, {url: h || a.sAjaxSource})) : "function" === typeof h ? a.jqXHR = h.call(g, b, k, a) : (a.jqXHR = f.ajax(f.extend(m, h)), h.data = l)
      }
  
      function pb(a) {
          return a.bAjaxDataGet ? (a.iDraw++, J(a, !0), ua(a, yb(a), function (b) {
              zb(a, b)
          }), !1) : !0
      }
  
      function yb(a) {
          var b = a.aoColumns, c = b.length, d = a.oFeatures, e = a.oPreviousSearch, h = a.aoPreSearchCols, g = [],
              k = X(a);
          var l = a._iDisplayStart;
          var m = !1 !== d.bPaginate ? a._iDisplayLength :
              -1;
          var p = function (a, b) {
              g.push({name: a, value: b})
          };
          p("sEcho", a.iDraw);
          p("iColumns", c);
          p("sColumns", K(b, "sName").join(","));
          p("iDisplayStart", l);
          p("iDisplayLength", m);
          var n = {
              draw: a.iDraw,
              columns: [],
              order: [],
              start: l,
              length: m,
              search: {value: e.sSearch, regex: e.bRegex}
          };
          for (l = 0; l < c; l++) {
              var u = b[l];
              var ra = h[l];
              m = "function" == typeof u.mData ? "function" : u.mData;
              n.columns.push({
                  data: m,
                  name: u.sName,
                  searchable: u.bSearchable,
                  orderable: u.bSortable,
                  search: {value: ra.sSearch, regex: ra.bRegex}
              });
              p("mDataProp_" + l, m);
              d.bFilter &&
              (p("sSearch_" + l, ra.sSearch), p("bRegex_" + l, ra.bRegex), p("bSearchable_" + l, u.bSearchable));
              d.bSort && p("bSortable_" + l, u.bSortable)
          }
          d.bFilter && (p("sSearch", e.sSearch), p("bRegex", e.bRegex));
          d.bSort && (f.each(k, function (a, b) {
              n.order.push({column: b.col, dir: b.dir});
              p("iSortCol_" + a, b.col);
              p("sSortDir_" + a, b.dir)
          }), p("iSortingCols", k.length));
          b = q.ext.legacy.ajax;
          return null === b ? a.sAjaxSource ? g : n : b ? g : n
      }
  
      function zb(a, b) {
          var c = function (a, c) {
              return b[a] !== n ? b[a] : b[c]
          }, d = va(a, b), e = c("sEcho", "draw"), h = c("iTotalRecords",
              "recordsTotal");
          c = c("iTotalDisplayRecords", "recordsFiltered");
          if (e !== n) {
              if (1 * e < a.iDraw) return;
              a.iDraw = 1 * e
          }
          pa(a);
          a._iRecordsTotal = parseInt(h, 10);
          a._iRecordsDisplay = parseInt(c, 10);
          e = 0;
          for (h = d.length; e < h; e++) R(a, d[e]);
          a.aiDisplay = a.aiDisplayMaster.slice();
          a.bAjaxDataGet = !1;
          S(a);
          a._bInitComplete || wa(a, b);
          a.bAjaxDataGet = !0;
          J(a, !1)
      }
  
      function va(a, b) {
          a = f.isPlainObject(a.ajax) && a.ajax.dataSrc !== n ? a.ajax.dataSrc : a.sAjaxDataProp;
          return "data" === a ? b.aaData || b[a] : "" !== a ? T(a)(b) : b
      }
  
      function tb(a) {
          var b = a.oClasses,
              c = a.sTableId, d = a.oLanguage, e = a.oPreviousSearch, h = a.aanFeatures,
              g = '<input type="search" class="' + b.sFilterInput + '"/>', k = d.sSearch;
          k = k.match(/_INPUT_/) ? k.replace("_INPUT_", g) : k + g;
          b = f("<div/>", {id: h.f ? null : c + "_filter", "class": b.sFilter}).append(f("<label/>").append(k));
          var l = function () {
              var b = this.value ? this.value : "";
              b != e.sSearch && (ha(a, {
                  sSearch: b,
                  bRegex: e.bRegex,
                  bSmart: e.bSmart,
                  bCaseInsensitive: e.bCaseInsensitive
              }), a._iDisplayStart = 0, S(a))
          };
          h = null !== a.searchDelay ? a.searchDelay : "ssp" === I(a) ? 400 : 0;
          var m =
              f("input", b).val(e.sSearch).attr("placeholder", d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT", h ? Ra(l, h) : l).on("mouseup", function (a) {
                  setTimeout(function () {
                      l.call(m[0])
                  }, 10)
              }).on("keypress.DT", function (a) {
                  if (13 == a.keyCode) return !1
              }).attr("aria-controls", c);
          f(a.nTable).on("search.dt.DT", function (b, c) {
              if (a === c) try {
                  m[0] !== w.activeElement && m.val(e.sSearch)
              } catch (u) {
              }
          });
          return b[0]
      }
  
      function ha(a, b, c) {
          var d = a.oPreviousSearch, e = a.aoPreSearchCols, h = function (a) {
              d.sSearch = a.sSearch;
              d.bRegex =
                  a.bRegex;
              d.bSmart = a.bSmart;
              d.bCaseInsensitive = a.bCaseInsensitive
          }, g = function (a) {
              return a.bEscapeRegex !== n ? !a.bEscapeRegex : a.bRegex
          };
          Ja(a);
          if ("ssp" != I(a)) {
              Ab(a, b.sSearch, c, g(b), b.bSmart, b.bCaseInsensitive);
              h(b);
              for (b = 0; b < e.length; b++) Bb(a, e[b].sSearch, b, g(e[b]), e[b].bSmart, e[b].bCaseInsensitive);
              Cb(a)
          } else h(b);
          a.bFiltered = !0;
          A(a, null, "search", [a])
      }
  
      function Cb(a) {
          for (var b = q.ext.search, c = a.aiDisplay, d, e, h = 0, g = b.length; h < g; h++) {
              for (var k = [], l = 0, m = c.length; l < m; l++) e = c[l], d = a.aoData[e], b[h](a, d._aFilterData,
                  e, d._aData, l) && k.push(e);
              c.length = 0;
              f.merge(c, k)
          }
      }
  
      function Bb(a, b, c, d, e, h) {
          if ("" !== b) {
              var g = [], k = a.aiDisplay;
              d = Sa(b, d, e, h);
              for (e = 0; e < k.length; e++) b = a.aoData[k[e]]._aFilterData[c], d.test(b) && g.push(k[e]);
              a.aiDisplay = g
          }
      }
  
      function Ab(a, b, c, d, e, h) {
          e = Sa(b, d, e, h);
          var g = a.oPreviousSearch.sSearch, k = a.aiDisplayMaster;
          h = [];
          0 !== q.ext.search.length && (c = !0);
          var f = Db(a);
          if (0 >= b.length) a.aiDisplay = k.slice(); else {
              if (f || c || d || g.length > b.length || 0 !== b.indexOf(g) || a.bSorted) a.aiDisplay = k.slice();
              b = a.aiDisplay;
              for (c =
                       0; c < b.length; c++) e.test(a.aoData[b[c]]._sFilterRow) && h.push(b[c]);
              a.aiDisplay = h
          }
      }
  
      function Sa(a, b, c, d) {
          a = b ? a : Ta(a);
          c && (a = "^(?=.*?" + f.map(a.match(/"[^"]+"|[^ ]+/g) || [""], function (a) {
              if ('"' === a.charAt(0)) {
                  var b = a.match(/^"(.*)"$/);
                  a = b ? b[1] : a
              }
              return a.replace('"', "")
          }).join(")(?=.*?") + ").*$");
          return new RegExp(a, d ? "i" : "")
      }
  
      function Db(a) {
          var b = a.aoColumns, c, d, e = q.ext.type.search;
          var h = !1;
          var g = 0;
          for (c = a.aoData.length; g < c; g++) {
              var k = a.aoData[g];
              if (!k._aFilterData) {
                  var f = [];
                  var m = 0;
                  for (d = b.length; m < d; m++) {
                      h =
                          b[m];
                      if (h.bSearchable) {
                          var p = F(a, g, m, "filter");
                          e[h.sType] && (p = e[h.sType](p));
                          null === p && (p = "");
                          "string" !== typeof p && p.toString && (p = p.toString())
                      } else p = "";
                      p.indexOf && -1 !== p.indexOf("&") && (xa.innerHTML = p, p = $b ? xa.textContent : xa.innerText);
                      p.replace && (p = p.replace(/[\r\n\u2028]/g, ""));
                      f.push(p)
                  }
                  k._aFilterData = f;
                  k._sFilterRow = f.join("  ");
                  h = !0
              }
          }
          return h
      }
  
      function Eb(a) {
          return {search: a.sSearch, smart: a.bSmart, regex: a.bRegex, caseInsensitive: a.bCaseInsensitive}
      }
  
      function Fb(a) {
          return {
              sSearch: a.search, bSmart: a.smart,
              bRegex: a.regex, bCaseInsensitive: a.caseInsensitive
          }
      }
  
      function wb(a) {
          var b = a.sTableId, c = a.aanFeatures.i,
              d = f("<div/>", {"class": a.oClasses.sInfo, id: c ? null : b + "_info"});
          c || (a.aoDrawCallback.push({
              fn: Gb,
              sName: "information"
          }), d.attr("role", "status").attr("aria-live", "polite"), f(a.nTable).attr("aria-describedby", b + "_info"));
          return d[0]
      }
  
      function Gb(a) {
          var b = a.aanFeatures.i;
          if (0 !== b.length) {
              var c = a.oLanguage, d = a._iDisplayStart + 1, e = a.fnDisplayEnd(), h = a.fnRecordsTotal(),
                  g = a.fnRecordsDisplay(), k = g ? c.sInfo : c.sInfoEmpty;
              g !== h && (k += " " + c.sInfoFiltered);
              k += c.sInfoPostFix;
              k = Hb(a, k);
              c = c.fnInfoCallback;
              null !== c && (k = c.call(a.oInstance, a, d, e, h, g, k));
              f(b).html(k)
          }
      }
  
      function Hb(a, b) {
          var c = a.fnFormatNumber, d = a._iDisplayStart + 1, e = a._iDisplayLength, h = a.fnRecordsDisplay(),
              g = -1 === e;
          return b.replace(/_START_/g, c.call(a, d)).replace(/_END_/g, c.call(a, a.fnDisplayEnd())).replace(/_MAX_/g, c.call(a, a.fnRecordsTotal())).replace(/_TOTAL_/g, c.call(a, h)).replace(/_PAGE_/g, c.call(a, g ? 1 : Math.ceil(d / e))).replace(/_PAGES_/g, c.call(a, g ? 1 : Math.ceil(h /
              e)))
      }
  
      function ia(a) {
          var b = a.iInitDisplayStart, c = a.aoColumns;
          var d = a.oFeatures;
          var e = a.bDeferLoading;
          if (a.bInitialised) {
              rb(a);
              ob(a);
              fa(a, a.aoHeader);
              fa(a, a.aoFooter);
              J(a, !0);
              d.bAutoWidth && Ia(a);
              var h = 0;
              for (d = c.length; h < d; h++) {
                  var g = c[h];
                  g.sWidth && (g.nTh.style.width = B(g.sWidth))
              }
              A(a, null, "preInit", [a]);
              U(a);
              c = I(a);
              if ("ssp" != c || e) "ajax" == c ? ua(a, [], function (c) {
                  var d = va(a, c);
                  for (h = 0; h < d.length; h++) R(a, d[h]);
                  a.iInitDisplayStart = b;
                  U(a);
                  J(a, !1);
                  wa(a, c)
              }, a) : (J(a, !1), wa(a))
          } else setTimeout(function () {
                  ia(a)
              },
              200)
      }
  
      function wa(a, b) {
          a._bInitComplete = !0;
          (b || a.oInit.aaData) && Z(a);
          A(a, null, "plugin-init", [a, b]);
          A(a, "aoInitComplete", "init", [a, b])
      }
  
      function Ua(a, b) {
          b = parseInt(b, 10);
          a._iDisplayLength = b;
          Va(a);
          A(a, null, "length", [a, b])
      }
  
      function sb(a) {
          var b = a.oClasses, c = a.sTableId, d = a.aLengthMenu, e = f.isArray(d[0]), h = e ? d[0] : d;
          d = e ? d[1] : d;
          e = f("<select/>", {name: c + "_length", "aria-controls": c, "class": b.sLengthSelect});
          for (var g = 0, k = h.length; g < k; g++) e[0][g] = new Option("number" === typeof d[g] ? a.fnFormatNumber(d[g]) : d[g], h[g]);
          var l = f("<div><label/></div>").addClass(b.sLength);
          a.aanFeatures.l || (l[0].id = c + "_length");
          l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_", e[0].outerHTML));
          f("select", l).val(a._iDisplayLength).on("change.DT", function (b) {
              Ua(a, f(this).val());
              S(a)
          });
          f(a.nTable).on("length.dt.DT", function (b, c, d) {
              a === c && f("select", l).val(d)
          });
          return l[0]
      }
  
      function xb(a) {
          var b = a.sPaginationType, c = q.ext.pager[b], d = "function" === typeof c, e = function (a) {
              S(a)
          };
          b = f("<div/>").addClass(a.oClasses.sPaging + b)[0];
          var h =
              a.aanFeatures;
          d || c.fnInit(a, b, e);
          h.p || (b.id = a.sTableId + "_paginate", a.aoDrawCallback.push({
              fn: function (a) {
                  if (d) {
                      var b = a._iDisplayStart, g = a._iDisplayLength, f = a.fnRecordsDisplay(), p = -1 === g;
                      b = p ? 0 : Math.ceil(b / g);
                      g = p ? 1 : Math.ceil(f / g);
                      f = c(b, g);
                      var n;
                      p = 0;
                      for (n = h.p.length; p < n; p++) Qa(a, "pageButton")(a, h.p[p], p, f, b, g)
                  } else c.fnUpdate(a, e)
              }, sName: "pagination"
          }));
          return b
      }
  
      function Wa(a, b, c) {
          var d = a._iDisplayStart, e = a._iDisplayLength, h = a.fnRecordsDisplay();
          0 === h || -1 === e ? d = 0 : "number" === typeof b ? (d = b * e, d > h && (d = 0)) :
              "first" == b ? d = 0 : "previous" == b ? (d = 0 <= e ? d - e : 0, 0 > d && (d = 0)) : "next" == b ? d + e < h && (d += e) : "last" == b ? d = Math.floor((h - 1) / e) * e : O(a, 0, "Unknown paging action: " + b, 5);
          b = a._iDisplayStart !== d;
          a._iDisplayStart = d;
          b && (A(a, null, "page", [a]), c && S(a));
          return b
      }
  
      function ub(a) {
          return f("<div/>", {
              id: a.aanFeatures.r ? null : a.sTableId + "_processing",
              "class": a.oClasses.sProcessing
          }).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]
      }
  
      function J(a, b) {
          a.oFeatures.bProcessing && f(a.aanFeatures.r).css("display", b ? "block" : "none");
          A(a,
              null, "processing", [a, b])
      }
  
      function vb(a) {
          var b = f(a.nTable);
          b.attr("role", "grid");
          var c = a.oScroll;
          if ("" === c.sX && "" === c.sY) return a.nTable;
          var d = c.sX, e = c.sY, h = a.oClasses, g = b.children("caption"), k = g.length ? g[0]._captionSide : null,
              l = f(b[0].cloneNode(!1)), m = f(b[0].cloneNode(!1)), p = b.children("tfoot");
          p.length || (p = null);
          l = f("<div/>", {"class": h.sScrollWrapper}).append(f("<div/>", {"class": h.sScrollHead}).css({
              overflow: "hidden",
              position: "relative",
              border: 0,
              width: d ? d ? B(d) : null : "100%"
          }).append(f("<div/>", {"class": h.sScrollHeadInner}).css({
              "box-sizing": "content-box",
              width: c.sXInner || "100%"
          }).append(l.removeAttr("id").css("margin-left", 0).append("top" === k ? g : null).append(b.children("thead"))))).append(f("<div/>", {"class": h.sScrollBody}).css({
              position: "relative",
              overflow: "auto",
              width: d ? B(d) : null
          }).append(b));
          p && l.append(f("<div/>", {"class": h.sScrollFoot}).css({
              overflow: "hidden",
              border: 0,
              width: d ? d ? B(d) : null : "100%"
          }).append(f("<div/>", {"class": h.sScrollFootInner}).append(m.removeAttr("id").css("margin-left", 0).append("bottom" === k ? g : null).append(b.children("tfoot")))));
          b = l.children();
          var n = b[0];
          h = b[1];
          var u = p ? b[2] : null;
          if (d) f(h).on("scroll.DT", function (a) {
              a = this.scrollLeft;
              n.scrollLeft = a;
              p && (u.scrollLeft = a)
          });
          f(h).css("max-height", e);
          c.bCollapse || f(h).css("height", e);
          a.nScrollHead = n;
          a.nScrollBody = h;
          a.nScrollFoot = u;
          a.aoDrawCallback.push({fn: ma, sName: "scrolling"});
          return l[0]
      }
  
      function ma(a) {
          var b = a.oScroll, c = b.sX, d = b.sXInner, e = b.sY;
          b = b.iBarWidth;
          var h = f(a.nScrollHead), g = h[0].style, k = h.children("div"), l = k[0].style, m = k.children("table");
          k = a.nScrollBody;
          var p = f(k), v =
                  k.style, u = f(a.nScrollFoot).children("div"), q = u.children("table"), t = f(a.nTHead), r = f(a.nTable),
              x = r[0], ya = x.style, w = a.nTFoot ? f(a.nTFoot) : null, y = a.oBrowser, A = y.bScrollOversize,
              ac = K(a.aoColumns, "nTh"), Xa = [], z = [], C = [], G = [], H, I = function (a) {
                  a = a.style;
                  a.paddingTop = "0";
                  a.paddingBottom = "0";
                  a.borderTopWidth = "0";
                  a.borderBottomWidth = "0";
                  a.height = 0
              };
          var D = k.scrollHeight > k.clientHeight;
          if (a.scrollBarVis !== D && a.scrollBarVis !== n) a.scrollBarVis = D, Z(a); else {
              a.scrollBarVis = D;
              r.children("thead, tfoot").remove();
              if (w) {
                  var E =
                      w.clone().prependTo(r);
                  var F = w.find("tr");
                  E = E.find("tr")
              }
              var J = t.clone().prependTo(r);
              t = t.find("tr");
              D = J.find("tr");
              J.find("th, td").removeAttr("tabindex");
              c || (v.width = "100%", h[0].style.width = "100%");
              f.each(ta(a, J), function (b, c) {
                  H = aa(a, b);
                  c.style.width = a.aoColumns[H].sWidth
              });
              w && N(function (a) {
                  a.style.width = ""
              }, E);
              h = r.outerWidth();
              "" === c ? (ya.width = "100%", A && (r.find("tbody").height() > k.offsetHeight || "scroll" == p.css("overflow-y")) && (ya.width = B(r.outerWidth() - b)), h = r.outerWidth()) : "" !== d && (ya.width = B(d),
                  h = r.outerWidth());
              N(I, D);
              N(function (a) {
                  C.push(a.innerHTML);
                  Xa.push(B(f(a).css("width")))
              }, D);
              N(function (a, b) {
                  -1 !== f.inArray(a, ac) && (a.style.width = Xa[b])
              }, t);
              f(D).height(0);
              w && (N(I, E), N(function (a) {
                  G.push(a.innerHTML);
                  z.push(B(f(a).css("width")))
              }, E), N(function (a, b) {
                  a.style.width = z[b]
              }, F), f(E).height(0));
              N(function (a, b) {
                  a.innerHTML = '<div class="dataTables_sizing">' + C[b] + "</div>";
                  a.childNodes[0].style.height = "0";
                  a.childNodes[0].style.overflow = "hidden";
                  a.style.width = Xa[b]
              }, D);
              w && N(function (a, b) {
                  a.innerHTML =
                      '<div class="dataTables_sizing">' + G[b] + "</div>";
                  a.childNodes[0].style.height = "0";
                  a.childNodes[0].style.overflow = "hidden";
                  a.style.width = z[b]
              }, E);
              r.outerWidth() < h ? (F = k.scrollHeight > k.offsetHeight || "scroll" == p.css("overflow-y") ? h + b : h, A && (k.scrollHeight > k.offsetHeight || "scroll" == p.css("overflow-y")) && (ya.width = B(F - b)), "" !== c && "" === d || O(a, 1, "Possible column misalignment", 6)) : F = "100%";
              v.width = B(F);
              g.width = B(F);
              w && (a.nScrollFoot.style.width = B(F));
              !e && A && (v.height = B(x.offsetHeight + b));
              c = r.outerWidth();
              m[0].style.width =
                  B(c);
              l.width = B(c);
              d = r.height() > k.clientHeight || "scroll" == p.css("overflow-y");
              e = "padding" + (y.bScrollbarLeft ? "Left" : "Right");
              l[e] = d ? b + "px" : "0px";
              w && (q[0].style.width = B(c), u[0].style.width = B(c), u[0].style[e] = d ? b + "px" : "0px");
              r.children("colgroup").insertBefore(r.children("thead"));
              p.trigger("scroll");
              !a.bSorted && !a.bFiltered || a._drawHold || (k.scrollTop = 0)
          }
      }
  
      function N(a, b, c) {
          for (var d = 0, e = 0, h = b.length, g, k; e < h;) {
              g = b[e].firstChild;
              for (k = c ? c[e].firstChild : null; g;) 1 === g.nodeType && (c ? a(g, k, d) : a(g, d), d++), g =
                  g.nextSibling, k = c ? k.nextSibling : null;
              e++
          }
      }
  
      function Ia(a) {
          var b = a.nTable, c = a.aoColumns, d = a.oScroll, e = d.sY, h = d.sX, g = d.sXInner, k = c.length,
              l = na(a, "bVisible"), m = f("th", a.nTHead), p = b.getAttribute("width"), n = b.parentNode, u = !1, q,
              t = a.oBrowser;
          d = t.bScrollOversize;
          (q = b.style.width) && -1 !== q.indexOf("%") && (p = q);
          for (q = 0; q < l.length; q++) {
              var r = c[l[q]];
              null !== r.sWidth && (r.sWidth = Ib(r.sWidthOrig, n), u = !0)
          }
          if (d || !u && !h && !e && k == V(a) && k == m.length) for (q = 0; q < k; q++) l = aa(a, q), null !== l && (c[l].sWidth = B(m.eq(q).width())); else {
              k =
                  f(b).clone().css("visibility", "hidden").removeAttr("id");
              k.find("tbody tr").remove();
              var w = f("<tr/>").appendTo(k.find("tbody"));
              k.find("thead, tfoot").remove();
              k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());
              k.find("tfoot th, tfoot td").css("width", "");
              m = ta(a, k.find("thead")[0]);
              for (q = 0; q < l.length; q++) r = c[l[q]], m[q].style.width = null !== r.sWidthOrig && "" !== r.sWidthOrig ? B(r.sWidthOrig) : "", r.sWidthOrig && h && f(m[q]).append(f("<div/>").css({
                  width: r.sWidthOrig,
                  margin: 0,
                  padding: 0,
                  border: 0,
                  height: 1
              }));
              if (a.aoData.length) for (q = 0; q < l.length; q++) u = l[q], r = c[u], f(Jb(a, u)).clone(!1).append(r.sContentPadding).appendTo(w);
              f("[name]", k).removeAttr("name");
              r = f("<div/>").css(h || e ? {
                  position: "absolute",
                  top: 0,
                  left: 0,
                  height: 1,
                  right: 0,
                  overflow: "hidden"
              } : {}).append(k).appendTo(n);
              h && g ? k.width(g) : h ? (k.css("width", "auto"), k.removeAttr("width"), k.width() < n.clientWidth && p && k.width(n.clientWidth)) : e ? k.width(n.clientWidth) : p && k.width(p);
              for (q = e = 0; q < l.length; q++) n = f(m[q]), g = n.outerWidth() - n.width(), n = t.bBounding ? Math.ceil(m[q].getBoundingClientRect().width) :
                  n.outerWidth(), e += n, c[l[q]].sWidth = B(n - g);
              b.style.width = B(e);
              r.remove()
          }
          p && (b.style.width = B(p));
          !p && !h || a._reszEvt || (b = function () {
              f(y).on("resize.DT-" + a.sInstance, Ra(function () {
                  Z(a)
              }))
          }, d ? setTimeout(b, 1E3) : b(), a._reszEvt = !0)
      }
  
      function Ib(a, b) {
          if (!a) return 0;
          a = f("<div/>").css("width", B(a)).appendTo(b || w.body);
          b = a[0].offsetWidth;
          a.remove();
          return b
      }
  
      function Jb(a, b) {
          var c = Kb(a, b);
          if (0 > c) return null;
          var d = a.aoData[c];
          return d.nTr ? d.anCells[b] : f("<td/>").html(F(a, c, b, "display"))[0]
      }
  
      function Kb(a, b) {
          for (var c,
                   d = -1, e = -1, h = 0, g = a.aoData.length; h < g; h++) c = F(a, h, b, "display") + "", c = c.replace(bc, ""), c = c.replace(/&nbsp;/g, " "), c.length > d && (d = c.length, e = h);
          return e
      }
  
      function B(a) {
          return null === a ? "0px" : "number" == typeof a ? 0 > a ? "0px" : a + "px" : a.match(/\d$/) ? a + "px" : a
      }
  
      function X(a) {
          var b = [], c = a.aoColumns;
          var d = a.aaSortingFixed;
          var e = f.isPlainObject(d);
          var h = [];
          var g = function (a) {
              a.length && !f.isArray(a[0]) ? h.push(a) : f.merge(h, a)
          };
          f.isArray(d) && g(d);
          e && d.pre && g(d.pre);
          g(a.aaSorting);
          e && d.post && g(d.post);
          for (a = 0; a < h.length; a++) {
              var k =
                  h[a][0];
              g = c[k].aDataSort;
              d = 0;
              for (e = g.length; d < e; d++) {
                  var l = g[d];
                  var m = c[l].sType || "string";
                  h[a]._idx === n && (h[a]._idx = f.inArray(h[a][1], c[l].asSorting));
                  b.push({
                      src: k,
                      col: l,
                      dir: h[a][1],
                      index: h[a]._idx,
                      type: m,
                      formatter: q.ext.type.order[m + "-pre"]
                  })
              }
          }
          return b
      }
  
      function qb(a) {
          var b, c = [], d = q.ext.type.order, e = a.aoData, h = 0, g = a.aiDisplayMaster;
          Ja(a);
          var k = X(a);
          var f = 0;
          for (b = k.length; f < b; f++) {
              var m = k[f];
              m.formatter && h++;
              Lb(a, m.col)
          }
          if ("ssp" != I(a) && 0 !== k.length) {
              f = 0;
              for (b = g.length; f < b; f++) c[g[f]] = f;
              h === k.length ?
                  g.sort(function (a, b) {
                      var d, h = k.length, g = e[a]._aSortData, f = e[b]._aSortData;
                      for (d = 0; d < h; d++) {
                          var l = k[d];
                          var m = g[l.col];
                          var p = f[l.col];
                          m = m < p ? -1 : m > p ? 1 : 0;
                          if (0 !== m) return "asc" === l.dir ? m : -m
                      }
                      m = c[a];
                      p = c[b];
                      return m < p ? -1 : m > p ? 1 : 0
                  }) : g.sort(function (a, b) {
                      var h, g = k.length, f = e[a]._aSortData, l = e[b]._aSortData;
                      for (h = 0; h < g; h++) {
                          var m = k[h];
                          var p = f[m.col];
                          var n = l[m.col];
                          m = d[m.type + "-" + m.dir] || d["string-" + m.dir];
                          p = m(p, n);
                          if (0 !== p) return p
                      }
                      p = c[a];
                      n = c[b];
                      return p < n ? -1 : p > n ? 1 : 0
                  })
          }
          a.bSorted = !0
      }
  
      function Mb(a) {
          var b = a.aoColumns,
              c = X(a);
          a = a.oLanguage.oAria;
          for (var d = 0, e = b.length; d < e; d++) {
              var h = b[d];
              var g = h.asSorting;
              var k = h.sTitle.replace(/<.*?>/g, "");
              var f = h.nTh;
              f.removeAttribute("aria-sort");
              h.bSortable && (0 < c.length && c[0].col == d ? (f.setAttribute("aria-sort", "asc" == c[0].dir ? "ascending" : "descending"), h = g[c[0].index + 1] || g[0]) : h = g[0], k += "asc" === h ? a.sSortAscending : a.sSortDescending);
              f.setAttribute("aria-label", k)
          }
      }
  
      function Ya(a, b, c, d) {
          var e = a.aaSorting, h = a.aoColumns[b].asSorting, g = function (a, b) {
              var c = a._idx;
              c === n && (c = f.inArray(a[1],
                  h));
              return c + 1 < h.length ? c + 1 : b ? null : 0
          };
          "number" === typeof e[0] && (e = a.aaSorting = [e]);
          c && a.oFeatures.bSortMulti ? (c = f.inArray(b, K(e, "0")), -1 !== c ? (b = g(e[c], !0), null === b && 1 === e.length && (b = 0), null === b ? e.splice(c, 1) : (e[c][1] = h[b], e[c]._idx = b)) : (e.push([b, h[0], 0]), e[e.length - 1]._idx = 0)) : e.length && e[0][0] == b ? (b = g(e[0]), e.length = 1, e[0][1] = h[b], e[0]._idx = b) : (e.length = 0, e.push([b, h[0]]), e[0]._idx = 0);
          U(a);
          "function" == typeof d && d(a)
      }
  
      function Pa(a, b, c, d) {
          var e = a.aoColumns[c];
          Za(b, {}, function (b) {
              !1 !== e.bSortable &&
              (a.oFeatures.bProcessing ? (J(a, !0), setTimeout(function () {
                  Ya(a, c, b.shiftKey, d);
                  "ssp" !== I(a) && J(a, !1)
              }, 0)) : Ya(a, c, b.shiftKey, d))
          })
      }
  
      function za(a) {
          var b = a.aLastSort, c = a.oClasses.sSortColumn, d = X(a), e = a.oFeatures, h;
          if (e.bSort && e.bSortClasses) {
              e = 0;
              for (h = b.length; e < h; e++) {
                  var g = b[e].src;
                  f(K(a.aoData, "anCells", g)).removeClass(c + (2 > e ? e + 1 : 3))
              }
              e = 0;
              for (h = d.length; e < h; e++) g = d[e].src, f(K(a.aoData, "anCells", g)).addClass(c + (2 > e ? e + 1 : 3))
          }
          a.aLastSort = d
      }
  
      function Lb(a, b) {
          var c = a.aoColumns[b], d = q.ext.order[c.sSortDataType],
              e;
          d && (e = d.call(a.oInstance, a, b, ba(a, b)));
          for (var h, g = q.ext.type.order[c.sType + "-pre"], f = 0, l = a.aoData.length; f < l; f++) if (c = a.aoData[f], c._aSortData || (c._aSortData = []), !c._aSortData[b] || d) h = d ? e[f] : F(a, f, b, "sort"), c._aSortData[b] = g ? g(h) : h
      }
  
      function Aa(a) {
          if (a.oFeatures.bStateSave && !a.bDestroying) {
              var b = {
                  time: +new Date,
                  start: a._iDisplayStart,
                  length: a._iDisplayLength,
                  order: f.extend(!0, [], a.aaSorting),
                  search: Eb(a.oPreviousSearch),
                  columns: f.map(a.aoColumns, function (b, d) {
                      return {visible: b.bVisible, search: Eb(a.aoPreSearchCols[d])}
                  })
              };
              A(a, "aoStateSaveParams", "stateSaveParams", [a, b]);
              a.oSavedState = b;
              a.fnStateSaveCallback.call(a.oInstance, a, b)
          }
      }
  
      function Nb(a, b, c) {
          var d, e, h = a.aoColumns;
          b = function (b) {
              if (b && b.time) {
                  var g = A(a, "aoStateLoadParams", "stateLoadParams", [a, b]);
                  if (-1 === f.inArray(!1, g) && (g = a.iStateDuration, !(0 < g && b.time < +new Date - 1E3 * g || b.columns && h.length !== b.columns.length))) {
                      a.oLoadedState = f.extend(!0, {}, b);
                      b.start !== n && (a._iDisplayStart = b.start, a.iInitDisplayStart = b.start);
                      b.length !== n && (a._iDisplayLength = b.length);
                      b.order !==
                      n && (a.aaSorting = [], f.each(b.order, function (b, c) {
                          a.aaSorting.push(c[0] >= h.length ? [0, c[1]] : c)
                      }));
                      b.search !== n && f.extend(a.oPreviousSearch, Fb(b.search));
                      if (b.columns) for (d = 0, e = b.columns.length; d < e; d++) g = b.columns[d], g.visible !== n && (h[d].bVisible = g.visible), g.search !== n && f.extend(a.aoPreSearchCols[d], Fb(g.search));
                      A(a, "aoStateLoaded", "stateLoaded", [a, b])
                  }
              }
              c()
          };
          if (a.oFeatures.bStateSave) {
              var g = a.fnStateLoadCallback.call(a.oInstance, a, b);
              g !== n && b(g)
          } else c()
      }
  
      function Ba(a) {
          var b = q.settings;
          a = f.inArray(a,
              K(b, "nTable"));
          return -1 !== a ? b[a] : null
      }
  
      function O(a, b, c, d) {
          c = "DataTables warning: " + (a ? "table id=" + a.sTableId + " - " : "") + c;
          d && (c += ". For more information about this error, please see http://datatables.net/tn/" + d);
          if (b) y.console && console.log && console.log(c); else if (b = q.ext, b = b.sErrMode || b.errMode, a && A(a, null, "error", [a, d, c]), "alert" == b) alert(c); else {
              if ("throw" == b) throw Error(c);
              "function" == typeof b && b(a, d, c)
          }
      }
  
      function M(a, b, c, d) {
          f.isArray(c) ? f.each(c, function (c, d) {
              f.isArray(d) ? M(a, b, d[0], d[1]) : M(a, b,
                  d)
          }) : (d === n && (d = c), b[c] !== n && (a[d] = b[c]))
      }
  
      function $a(a, b, c) {
          var d;
          for (d in b) if (b.hasOwnProperty(d)) {
              var e = b[d];
              f.isPlainObject(e) ? (f.isPlainObject(a[d]) || (a[d] = {}), f.extend(!0, a[d], e)) : c && "data" !== d && "aaData" !== d && f.isArray(e) ? a[d] = e.slice() : a[d] = e
          }
          return a
      }
  
      function Za(a, b, c) {
          f(a).on("click.DT", b, function (b) {
              f(a).trigger("blur");
              c(b)
          }).on("keypress.DT", b, function (a) {
              13 === a.which && (a.preventDefault(), c(a))
          }).on("selectstart.DT", function () {
              return !1
          })
      }
  
      function D(a, b, c, d) {
          c && a[b].push({fn: c, sName: d})
      }
  
      function A(a, b, c, d) {
          var e = [];
          b && (e = f.map(a[b].slice().reverse(), function (b, c) {
              return b.fn.apply(a.oInstance, d)
          }));
          null !== c && (b = f.Event(c + ".dt"), f(a.nTable).trigger(b, d), e.push(b.result));
          return e
      }
  
      function Va(a) {
          var b = a._iDisplayStart, c = a.fnDisplayEnd(), d = a._iDisplayLength;
          b >= c && (b = c - d);
          b -= b % d;
          if (-1 === d || 0 > b) b = 0;
          a._iDisplayStart = b
      }
  
      function Qa(a, b) {
          a = a.renderer;
          var c = q.ext.renderer[b];
          return f.isPlainObject(a) && a[b] ? c[a[b]] || c._ : "string" === typeof a ? c[a] || c._ : c._
      }
  
      function I(a) {
          return a.oFeatures.bServerSide ?
              "ssp" : a.ajax || a.sAjaxSource ? "ajax" : "dom"
      }
  
      function ja(a, b) {
          var c = Ob.numbers_length, d = Math.floor(c / 2);
          b <= c ? a = Y(0, b) : a <= d ? (a = Y(0, c - 2), a.push("ellipsis"), a.push(b - 1)) : (a >= b - 1 - d ? a = Y(b - (c - 2), b) : (a = Y(a - d + 2, a + d - 1), a.push("ellipsis"), a.push(b - 1)), a.splice(0, 0, "ellipsis"), a.splice(0, 0, 0));
          a.DT_el = "span";
          return a
      }
  
      function Ga(a) {
          f.each({
              num: function (b) {
                  return Ca(b, a)
              }, "num-fmt": function (b) {
                  return Ca(b, a, ab)
              }, "html-num": function (b) {
                  return Ca(b, a, Da)
              }, "html-num-fmt": function (b) {
                  return Ca(b, a, Da, ab)
              }
          }, function (b,
                       c) {
              C.type.order[b + a + "-pre"] = c;
              b.match(/^html\-/) && (C.type.search[b + a] = C.type.search.html)
          })
      }
  
      function Pb(a) {
          return function () {
              var b = [Ba(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));
              return q.ext.internal[a].apply(this, b)
          }
      }
  
      var q = function (a) {
              this.$ = function (a, b) {
                  return this.api(!0).$(a, b)
              };
              this._ = function (a, b) {
                  return this.api(!0).rows(a, b).data()
              };
              this.api = function (a) {
                  return a ? new x(Ba(this[C.iApiIndex])) : new x(this)
              };
              this.fnAddData = function (a, b) {
                  var c = this.api(!0);
                  a = f.isArray(a) &&
                  (f.isArray(a[0]) || f.isPlainObject(a[0])) ? c.rows.add(a) : c.row.add(a);
                  (b === n || b) && c.draw();
                  return a.flatten().toArray()
              };
              this.fnAdjustColumnSizing = function (a) {
                  var b = this.api(!0).columns.adjust(), c = b.settings()[0], d = c.oScroll;
                  a === n || a ? b.draw(!1) : ("" !== d.sX || "" !== d.sY) && ma(c)
              };
              this.fnClearTable = function (a) {
                  var b = this.api(!0).clear();
                  (a === n || a) && b.draw()
              };
              this.fnClose = function (a) {
                  this.api(!0).row(a).child.hide()
              };
              this.fnDeleteRow = function (a, b, c) {
                  var d = this.api(!0);
                  a = d.rows(a);
                  var e = a.settings()[0], h = e.aoData[a[0][0]];
                  a.remove();
                  b && b.call(this, e, h);
                  (c === n || c) && d.draw();
                  return h
              };
              this.fnDestroy = function (a) {
                  this.api(!0).destroy(a)
              };
              this.fnDraw = function (a) {
                  this.api(!0).draw(a)
              };
              this.fnFilter = function (a, b, c, d, e, f) {
                  e = this.api(!0);
                  null === b || b === n ? e.search(a, c, d, f) : e.column(b).search(a, c, d, f);
                  e.draw()
              };
              this.fnGetData = function (a, b) {
                  var c = this.api(!0);
                  if (a !== n) {
                      var d = a.nodeName ? a.nodeName.toLowerCase() : "";
                      return b !== n || "td" == d || "th" == d ? c.cell(a, b).data() : c.row(a).data() || null
                  }
                  return c.data().toArray()
              };
              this.fnGetNodes =
                  function (a) {
                      var b = this.api(!0);
                      return a !== n ? b.row(a).node() : b.rows().nodes().flatten().toArray()
                  };
              this.fnGetPosition = function (a) {
                  var b = this.api(!0), c = a.nodeName.toUpperCase();
                  return "TR" == c ? b.row(a).index() : "TD" == c || "TH" == c ? (a = b.cell(a).index(), [a.row, a.columnVisible, a.column]) : null
              };
              this.fnIsOpen = function (a) {
                  return this.api(!0).row(a).child.isShown()
              };
              this.fnOpen = function (a, b, c) {
                  return this.api(!0).row(a).child(b, c).show().child()[0]
              };
              this.fnPageChange = function (a, b) {
                  a = this.api(!0).page(a);
                  (b === n ||
                      b) && a.draw(!1)
              };
              this.fnSetColumnVis = function (a, b, c) {
                  a = this.api(!0).column(a).visible(b);
                  (c === n || c) && a.columns.adjust().draw()
              };
              this.fnSettings = function () {
                  return Ba(this[C.iApiIndex])
              };
              this.fnSort = function (a) {
                  this.api(!0).order(a).draw()
              };
              this.fnSortListener = function (a, b, c) {
                  this.api(!0).order.listener(a, b, c)
              };
              this.fnUpdate = function (a, b, c, d, e) {
                  var h = this.api(!0);
                  c === n || null === c ? h.row(b).data(a) : h.cell(b, c).data(a);
                  (e === n || e) && h.columns.adjust();
                  (d === n || d) && h.draw();
                  return 0
              };
              this.fnVersionCheck = C.fnVersionCheck;
              var b = this, c = a === n, d = this.length;
              c && (a = {});
              this.oApi = this.internal = C.internal;
              for (var e in q.ext.internal) e && (this[e] = Pb(e));
              this.each(function () {
                  var e = {}, g = 1 < d ? $a(e, a, !0) : a, k = 0, l;
                  e = this.getAttribute("id");
                  var m = !1, p = q.defaults, v = f(this);
                  if ("table" != this.nodeName.toLowerCase()) O(null, 0, "Non-table node initialisation (" + this.nodeName + ")", 2); else {
                      ib(p);
                      jb(p.column);
                      L(p, p, !0);
                      L(p.column, p.column, !0);
                      L(p, f.extend(g, v.data()), !0);
                      var u = q.settings;
                      k = 0;
                      for (l = u.length; k < l; k++) {
                          var t = u[k];
                          if (t.nTable == this ||
                              t.nTHead && t.nTHead.parentNode == this || t.nTFoot && t.nTFoot.parentNode == this) {
                              var w = g.bRetrieve !== n ? g.bRetrieve : p.bRetrieve;
                              if (c || w) return t.oInstance;
                              if (g.bDestroy !== n ? g.bDestroy : p.bDestroy) {
                                  t.oInstance.fnDestroy();
                                  break
                              } else {
                                  O(t, 0, "Cannot reinitialise DataTable", 3);
                                  return
                              }
                          }
                          if (t.sTableId == this.id) {
                              u.splice(k, 1);
                              break
                          }
                      }
                      if (null === e || "" === e) this.id = e = "DataTables_Table_" + q.ext._unique++;
                      var r = f.extend(!0, {}, q.models.oSettings, {
                          sDestroyWidth: v[0].style.width,
                          sInstance: e,
                          sTableId: e
                      });
                      r.nTable = this;
                      r.oApi =
                          b.internal;
                      r.oInit = g;
                      u.push(r);
                      r.oInstance = 1 === b.length ? b : v.dataTable();
                      ib(g);
                      Fa(g.oLanguage);
                      g.aLengthMenu && !g.iDisplayLength && (g.iDisplayLength = f.isArray(g.aLengthMenu[0]) ? g.aLengthMenu[0][0] : g.aLengthMenu[0]);
                      g = $a(f.extend(!0, {}, p), g);
                      M(r.oFeatures, g, "bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
                      M(r, g, ["asStripeClasses", "ajax", "fnServerData", "fnFormatNumber", "sServerMethod", "aaSorting", "aaSortingFixed", "aLengthMenu",
                          "sPaginationType", "sAjaxSource", "sAjaxDataProp", "iStateDuration", "sDom", "bSortCellsTop", "iTabIndex", "fnStateLoadCallback", "fnStateSaveCallback", "renderer", "searchDelay", "rowId", ["iCookieDuration", "iStateDuration"], ["oSearch", "oPreviousSearch"], ["aoSearchCols", "aoPreSearchCols"], ["iDisplayLength", "_iDisplayLength"]]);
                      M(r.oScroll, g, [["sScrollX", "sX"], ["sScrollXInner", "sXInner"], ["sScrollY", "sY"], ["bScrollCollapse", "bCollapse"]]);
                      M(r.oLanguage, g, "fnInfoCallback");
                      D(r, "aoDrawCallback", g.fnDrawCallback,
                          "user");
                      D(r, "aoServerParams", g.fnServerParams, "user");
                      D(r, "aoStateSaveParams", g.fnStateSaveParams, "user");
                      D(r, "aoStateLoadParams", g.fnStateLoadParams, "user");
                      D(r, "aoStateLoaded", g.fnStateLoaded, "user");
                      D(r, "aoRowCallback", g.fnRowCallback, "user");
                      D(r, "aoRowCreatedCallback", g.fnCreatedRow, "user");
                      D(r, "aoHeaderCallback", g.fnHeaderCallback, "user");
                      D(r, "aoFooterCallback", g.fnFooterCallback, "user");
                      D(r, "aoInitComplete", g.fnInitComplete, "user");
                      D(r, "aoPreDrawCallback", g.fnPreDrawCallback, "user");
                      r.rowIdFn =
                          T(g.rowId);
                      kb(r);
                      var x = r.oClasses;
                      f.extend(x, q.ext.classes, g.oClasses);
                      v.addClass(x.sTable);
                      r.iInitDisplayStart === n && (r.iInitDisplayStart = g.iDisplayStart, r._iDisplayStart = g.iDisplayStart);
                      null !== g.iDeferLoading && (r.bDeferLoading = !0, e = f.isArray(g.iDeferLoading), r._iRecordsDisplay = e ? g.iDeferLoading[0] : g.iDeferLoading, r._iRecordsTotal = e ? g.iDeferLoading[1] : g.iDeferLoading);
                      var y = r.oLanguage;
                      f.extend(!0, y, g.oLanguage);
                      y.sUrl && (f.ajax({
                          dataType: "json", url: y.sUrl, success: function (a) {
                              Fa(a);
                              L(p.oLanguage,
                                  a);
                              f.extend(!0, y, a);
                              ia(r)
                          }, error: function () {
                              ia(r)
                          }
                      }), m = !0);
                      null === g.asStripeClasses && (r.asStripeClasses = [x.sStripeOdd, x.sStripeEven]);
                      e = r.asStripeClasses;
                      var z = v.children("tbody").find("tr").eq(0);
                      -1 !== f.inArray(!0, f.map(e, function (a, b) {
                          return z.hasClass(a)
                      })) && (f("tbody tr", this).removeClass(e.join(" ")), r.asDestroyStripes = e.slice());
                      e = [];
                      u = this.getElementsByTagName("thead");
                      0 !== u.length && (ea(r.aoHeader, u[0]), e = ta(r));
                      if (null === g.aoColumns) for (u = [], k = 0, l = e.length; k < l; k++) u.push(null); else u = g.aoColumns;
                      k = 0;
                      for (l = u.length; k < l; k++) Ha(r, e ? e[k] : null);
                      mb(r, g.aoColumnDefs, u, function (a, b) {
                          la(r, a, b)
                      });
                      if (z.length) {
                          var B = function (a, b) {
                              return null !== a.getAttribute("data-" + b) ? b : null
                          };
                          f(z[0]).children("th, td").each(function (a, b) {
                              var c = r.aoColumns[a];
                              if (c.mData === a) {
                                  var d = B(b, "sort") || B(b, "order");
                                  b = B(b, "filter") || B(b, "search");
                                  if (null !== d || null !== b) c.mData = {
                                      _: a + ".display",
                                      sort: null !== d ? a + ".@data-" + d : n,
                                      type: null !== d ? a + ".@data-" + d : n,
                                      filter: null !== b ? a + ".@data-" + b : n
                                  }, la(r, a)
                              }
                          })
                      }
                      var C = r.oFeatures;
                      e = function () {
                          if (g.aaSorting ===
                              n) {
                              var a = r.aaSorting;
                              k = 0;
                              for (l = a.length; k < l; k++) a[k][1] = r.aoColumns[k].asSorting[0]
                          }
                          za(r);
                          C.bSort && D(r, "aoDrawCallback", function () {
                              if (r.bSorted) {
                                  var a = X(r), b = {};
                                  f.each(a, function (a, c) {
                                      b[c.src] = c.dir
                                  });
                                  A(r, null, "order", [r, a, b]);
                                  Mb(r)
                              }
                          });
                          D(r, "aoDrawCallback", function () {
                              (r.bSorted || "ssp" === I(r) || C.bDeferRender) && za(r)
                          }, "sc");
                          a = v.children("caption").each(function () {
                              this._captionSide = f(this).css("caption-side")
                          });
                          var b = v.children("thead");
                          0 === b.length && (b = f("<thead/>").appendTo(v));
                          r.nTHead = b[0];
                          b = v.children("tbody");
                          0 === b.length && (b = f("<tbody/>").appendTo(v));
                          r.nTBody = b[0];
                          b = v.children("tfoot");
                          0 === b.length && 0 < a.length && ("" !== r.oScroll.sX || "" !== r.oScroll.sY) && (b = f("<tfoot/>").appendTo(v));
                          0 === b.length || 0 === b.children().length ? v.addClass(x.sNoFooter) : 0 < b.length && (r.nTFoot = b[0], ea(r.aoFooter, r.nTFoot));
                          if (g.aaData) for (k = 0; k < g.aaData.length; k++) R(r, g.aaData[k]); else (r.bDeferLoading || "dom" == I(r)) && oa(r, f(r.nTBody).children("tr"));
                          r.aiDisplay = r.aiDisplayMaster.slice();
                          r.bInitialised = !0;
                          !1 === m && ia(r)
                      };
                      g.bStateSave ?
                          (C.bStateSave = !0, D(r, "aoDrawCallback", Aa, "state_save"), Nb(r, g, e)) : e()
                  }
              });
              b = null;
              return this
          }, C, t, z, bb = {}, Qb = /[\r\n\u2028]/g, Da = /<.*?>/g,
          cc = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,
          dc = /(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,
          ab = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi, P = function (a) {
              return a && !0 !== a && "-" !== a ? !1 : !0
          }, Rb = function (a) {
              var b = parseInt(a, 10);
              return !isNaN(b) && isFinite(a) ? b : null
          }, Sb = function (a, b) {
              bb[b] || (bb[b] = new RegExp(Ta(b), "g"));
              return "string" === typeof a && "." !== b ? a.replace(/\./g, "").replace(bb[b], ".") : a
          }, cb = function (a, b, c) {
              var d = "string" === typeof a;
              if (P(a)) return !0;
              b && d && (a = Sb(a, b));
              c && d && (a = a.replace(ab, ""));
              return !isNaN(parseFloat(a)) && isFinite(a)
          }, Tb = function (a, b, c) {
              return P(a) ? !0 : P(a) || "string" === typeof a ? cb(a.replace(Da, ""), b, c) ? !0 : null : null
          }, K = function (a, b, c) {
              var d = [], e = 0, h = a.length;
              if (c !== n) for (; e < h; e++) a[e] && a[e][b] && d.push(a[e][b][c]); else for (; e < h; e++) a[e] && d.push(a[e][b]);
              return d
          }, ka = function (a, b, c, d) {
              var e = [],
                  h = 0, g = b.length;
              if (d !== n) for (; h < g; h++) a[b[h]][c] && e.push(a[b[h]][c][d]); else for (; h < g; h++) e.push(a[b[h]][c]);
              return e
          }, Y = function (a, b) {
              var c = [];
              if (b === n) {
                  b = 0;
                  var d = a
              } else d = b, b = a;
              for (a = b; a < d; a++) c.push(a);
              return c
          }, Ub = function (a) {
              for (var b = [], c = 0, d = a.length; c < d; c++) a[c] && b.push(a[c]);
              return b
          }, sa = function (a) {
              a:{
                  if (!(2 > a.length)) {
                      var b = a.slice().sort();
                      for (var c = b[0], d = 1, e = b.length; d < e; d++) {
                          if (b[d] === c) {
                              b = !1;
                              break a
                          }
                          c = b[d]
                      }
                  }
                  b = !0
              }
              if (b) return a.slice();
              b = [];
              e = a.length;
              var h, g = 0;
              d = 0;
              a:for (; d < e; d++) {
                  c =
                      a[d];
                  for (h = 0; h < g; h++) if (b[h] === c) continue a;
                  b.push(c);
                  g++
              }
              return b
          };
      q.util = {
          throttle: function (a, b) {
              var c = b !== n ? b : 200, d, e;
              return function () {
                  var b = this, g = +new Date, f = arguments;
                  d && g < d + c ? (clearTimeout(e), e = setTimeout(function () {
                      d = n;
                      a.apply(b, f)
                  }, c)) : (d = g, a.apply(b, f))
              }
          }, escapeRegex: function (a) {
              return a.replace(dc, "\\$1")
          }
      };
      var E = function (a, b, c) {
              a[b] !== n && (a[c] = a[b])
          }, ca = /\[.*?\]$/, W = /\(\)$/, Ta = q.util.escapeRegex, xa = f("<div>")[0], $b = xa.textContent !== n,
          bc = /<.*?>/g, Ra = q.util.throttle, Vb = [], G = Array.prototype,
          ec = function (a) {
              var b, c = q.settings, d = f.map(c, function (a, b) {
                  return a.nTable
              });
              if (a) {
                  if (a.nTable && a.oApi) return [a];
                  if (a.nodeName && "table" === a.nodeName.toLowerCase()) {
                      var e = f.inArray(a, d);
                      return -1 !== e ? [c[e]] : null
                  }
                  if (a && "function" === typeof a.settings) return a.settings().toArray();
                  "string" === typeof a ? b = f(a) : a instanceof f && (b = a)
              } else return [];
              if (b) return b.map(function (a) {
                  e = f.inArray(this, d);
                  return -1 !== e ? c[e] : null
              }).toArray()
          };
      var x = function (a, b) {
          if (!(this instanceof x)) return new x(a, b);
          var c = [], d = function (a) {
              (a =
                  ec(a)) && c.push.apply(c, a)
          };
          if (f.isArray(a)) for (var e = 0, h = a.length; e < h; e++) d(a[e]); else d(a);
          this.context = sa(c);
          b && f.merge(this, b);
          this.selector = {rows: null, cols: null, opts: null};
          x.extend(this, this, Vb)
      };
      q.Api = x;
      f.extend(x.prototype, {
          any: function () {
              return 0 !== this.count()
          }, concat: G.concat, context: [], count: function () {
              return this.flatten().length
          }, each: function (a) {
              for (var b = 0, c = this.length; b < c; b++) a.call(this, this[b], b, this);
              return this
          }, eq: function (a) {
              var b = this.context;
              return b.length > a ? new x(b[a], this[a]) :
                  null
          }, filter: function (a) {
              var b = [];
              if (G.filter) b = G.filter.call(this, a, this); else for (var c = 0, d = this.length; c < d; c++) a.call(this, this[c], c, this) && b.push(this[c]);
              return new x(this.context, b)
          }, flatten: function () {
              var a = [];
              return new x(this.context, a.concat.apply(a, this.toArray()))
          }, join: G.join, indexOf: G.indexOf || function (a, b) {
              b = b || 0;
              for (var c = this.length; b < c; b++) if (this[b] === a) return b;
              return -1
          }, iterator: function (a, b, c, d) {
              var e = [], h, g, f = this.context, l, m = this.selector;
              "string" === typeof a && (d = c, c = b, b = a,
                  a = !1);
              var p = 0;
              for (h = f.length; p < h; p++) {
                  var q = new x(f[p]);
                  if ("table" === b) {
                      var u = c.call(q, f[p], p);
                      u !== n && e.push(u)
                  } else if ("columns" === b || "rows" === b) u = c.call(q, f[p], this[p], p), u !== n && e.push(u); else if ("column" === b || "column-rows" === b || "row" === b || "cell" === b) {
                      var t = this[p];
                      "column-rows" === b && (l = Ea(f[p], m.opts));
                      var w = 0;
                      for (g = t.length; w < g; w++) u = t[w], u = "cell" === b ? c.call(q, f[p], u.row, u.column, p, w) : c.call(q, f[p], u, p, w, l), u !== n && e.push(u)
                  }
              }
              return e.length || d ? (a = new x(f, a ? e.concat.apply([], e) : e), b = a.selector,
                  b.rows = m.rows, b.cols = m.cols, b.opts = m.opts, a) : this
          }, lastIndexOf: G.lastIndexOf || function (a, b) {
              return this.indexOf.apply(this.toArray.reverse(), arguments)
          }, length: 0, map: function (a) {
              var b = [];
              if (G.map) b = G.map.call(this, a, this); else for (var c = 0, d = this.length; c < d; c++) b.push(a.call(this, this[c], c));
              return new x(this.context, b)
          }, pluck: function (a) {
              return this.map(function (b) {
                  return b[a]
              })
          }, pop: G.pop, push: G.push, reduce: G.reduce || function (a, b) {
              return lb(this, a, b, 0, this.length, 1)
          }, reduceRight: G.reduceRight || function (a,
                                                     b) {
              return lb(this, a, b, this.length - 1, -1, -1)
          }, reverse: G.reverse, selector: null, shift: G.shift, slice: function () {
              return new x(this.context, this)
          }, sort: G.sort, splice: G.splice, toArray: function () {
              return G.slice.call(this)
          }, to$: function () {
              return f(this)
          }, toJQuery: function () {
              return f(this)
          }, unique: function () {
              return new x(this.context, sa(this))
          }, unshift: G.unshift
      });
      x.extend = function (a, b, c) {
          if (c.length && b && (b instanceof x || b.__dt_wrapper)) {
              var d, e = function (a, b, c) {
                  return function () {
                      var d = b.apply(a, arguments);
                      x.extend(d,
                          d, c.methodExt);
                      return d
                  }
              };
              var h = 0;
              for (d = c.length; h < d; h++) {
                  var f = c[h];
                  b[f.name] = "function" === f.type ? e(a, f.val, f) : "object" === f.type ? {} : f.val;
                  b[f.name].__dt_wrapper = !0;
                  x.extend(a, b[f.name], f.propExt)
              }
          }
      };
      x.register = t = function (a, b) {
          if (f.isArray(a)) for (var c = 0, d = a.length; c < d; c++) x.register(a[c], b); else {
              d = a.split(".");
              var e = Vb, h;
              a = 0;
              for (c = d.length; a < c; a++) {
                  var g = (h = -1 !== d[a].indexOf("()")) ? d[a].replace("()", "") : d[a];
                  a:{
                      var k = 0;
                      for (var l = e.length; k < l; k++) if (e[k].name === g) {
                          k = e[k];
                          break a
                      }
                      k = null
                  }
                  k || (k = {
                      name: g,
                      val: {}, methodExt: [], propExt: [], type: "object"
                  }, e.push(k));
                  a === c - 1 ? (k.val = b, k.type = "function" === typeof b ? "function" : f.isPlainObject(b) ? "object" : "other") : e = h ? k.methodExt : k.propExt
              }
          }
      };
      x.registerPlural = z = function (a, b, c) {
          x.register(a, c);
          x.register(b, function () {
              var a = c.apply(this, arguments);
              return a === this ? this : a instanceof x ? a.length ? f.isArray(a[0]) ? new x(a.context, a[0]) : a[0] : n : a
          })
      };
      var Wb = function (a, b) {
          if (f.isArray(a)) return f.map(a, function (a) {
              return Wb(a, b)
          });
          if ("number" === typeof a) return [b[a]];
          var c =
              f.map(b, function (a, b) {
                  return a.nTable
              });
          return f(c).filter(a).map(function (a) {
              a = f.inArray(this, c);
              return b[a]
          }).toArray()
      };
      t("tables()", function (a) {
          return a !== n && null !== a ? new x(Wb(a, this.context)) : this
      });
      t("table()", function (a) {
          a = this.tables(a);
          var b = a.context;
          return b.length ? new x(b[0]) : a
      });
      z("tables().nodes()", "table().node()", function () {
          return this.iterator("table", function (a) {
              return a.nTable
          }, 1)
      });
      z("tables().body()", "table().body()", function () {
          return this.iterator("table", function (a) {
                  return a.nTBody
              },
              1)
      });
      z("tables().header()", "table().header()", function () {
          return this.iterator("table", function (a) {
              return a.nTHead
          }, 1)
      });
      z("tables().footer()", "table().footer()", function () {
          return this.iterator("table", function (a) {
              return a.nTFoot
          }, 1)
      });
      z("tables().containers()", "table().container()", function () {
          return this.iterator("table", function (a) {
              return a.nTableWrapper
          }, 1)
      });
      t("draw()", function (a) {
          return this.iterator("table", function (b) {
              "page" === a ? S(b) : ("string" === typeof a && (a = "full-hold" === a ? !1 : !0), U(b, !1 ===
                  a))
          })
      });
      t("page()", function (a) {
          return a === n ? this.page.info().page : this.iterator("table", function (b) {
              Wa(b, a)
          })
      });
      t("page.info()", function (a) {
          if (0 === this.context.length) return n;
          a = this.context[0];
          var b = a._iDisplayStart, c = a.oFeatures.bPaginate ? a._iDisplayLength : -1, d = a.fnRecordsDisplay(),
              e = -1 === c;
          return {
              page: e ? 0 : Math.floor(b / c),
              pages: e ? 1 : Math.ceil(d / c),
              start: b,
              end: a.fnDisplayEnd(),
              length: c,
              recordsTotal: a.fnRecordsTotal(),
              recordsDisplay: d,
              serverSide: "ssp" === I(a)
          }
      });
      t("page.len()", function (a) {
          return a ===
          n ? 0 !== this.context.length ? this.context[0]._iDisplayLength : n : this.iterator("table", function (b) {
              Ua(b, a)
          })
      });
      var Xb = function (a, b, c) {
          if (c) {
              var d = new x(a);
              d.one("draw", function () {
                  c(d.ajax.json())
              })
          }
          if ("ssp" == I(a)) U(a, b); else {
              J(a, !0);
              var e = a.jqXHR;
              e && 4 !== e.readyState && e.abort();
              ua(a, [], function (c) {
                  pa(a);
                  c = va(a, c);
                  for (var d = 0, e = c.length; d < e; d++) R(a, c[d]);
                  U(a, b);
                  J(a, !1)
              })
          }
      };
      t("ajax.json()", function () {
          var a = this.context;
          if (0 < a.length) return a[0].json
      });
      t("ajax.params()", function () {
          var a = this.context;
          if (0 <
              a.length) return a[0].oAjaxData
      });
      t("ajax.reload()", function (a, b) {
          return this.iterator("table", function (c) {
              Xb(c, !1 === b, a)
          })
      });
      t("ajax.url()", function (a) {
          var b = this.context;
          if (a === n) {
              if (0 === b.length) return n;
              b = b[0];
              return b.ajax ? f.isPlainObject(b.ajax) ? b.ajax.url : b.ajax : b.sAjaxSource
          }
          return this.iterator("table", function (b) {
              f.isPlainObject(b.ajax) ? b.ajax.url = a : b.ajax = a
          })
      });
      t("ajax.url().load()", function (a, b) {
          return this.iterator("table", function (c) {
              Xb(c, !1 === b, a)
          })
      });
      var db = function (a, b, c, d, e) {
          var h =
              [], g, k, l;
          var m = typeof b;
          b && "string" !== m && "function" !== m && b.length !== n || (b = [b]);
          m = 0;
          for (k = b.length; m < k; m++) {
              var p = b[m] && b[m].split && !b[m].match(/[\[\(:]/) ? b[m].split(",") : [b[m]];
              var q = 0;
              for (l = p.length; q < l; q++) (g = c("string" === typeof p[q] ? f.trim(p[q]) : p[q])) && g.length && (h = h.concat(g))
          }
          a = C.selector[a];
          if (a.length) for (m = 0, k = a.length; m < k; m++) h = a[m](d, e, h);
          return sa(h)
      }, eb = function (a) {
          a || (a = {});
          a.filter && a.search === n && (a.search = a.filter);
          return f.extend({search: "none", order: "current", page: "all"}, a)
      }, fb =
          function (a) {
              for (var b = 0, c = a.length; b < c; b++) if (0 < a[b].length) return a[0] = a[b], a[0].length = 1, a.length = 1, a.context = [a.context[b]], a;
              a.length = 0;
              return a
          }, Ea = function (a, b) {
          var c = [], d = a.aiDisplay;
          var e = a.aiDisplayMaster;
          var h = b.search;
          var g = b.order;
          b = b.page;
          if ("ssp" == I(a)) return "removed" === h ? [] : Y(0, e.length);
          if ("current" == b) for (g = a._iDisplayStart, a = a.fnDisplayEnd(); g < a; g++) c.push(d[g]); else if ("current" == g || "applied" == g) if ("none" == h) c = e.slice(); else if ("applied" == h) c = d.slice(); else {
              if ("removed" == h) {
                  var k =
                      {};
                  g = 0;
                  for (a = d.length; g < a; g++) k[d[g]] = null;
                  c = f.map(e, function (a) {
                      return k.hasOwnProperty(a) ? null : a
                  })
              }
          } else if ("index" == g || "original" == g) for (g = 0, a = a.aoData.length; g < a; g++) "none" == h ? c.push(g) : (e = f.inArray(g, d), (-1 === e && "removed" == h || 0 <= e && "applied" == h) && c.push(g));
          return c
      }, fc = function (a, b, c) {
          var d;
          return db("row", b, function (b) {
              var e = Rb(b), g = a.aoData;
              if (null !== e && !c) return [e];
              d || (d = Ea(a, c));
              if (null !== e && -1 !== f.inArray(e, d)) return [e];
              if (null === b || b === n || "" === b) return d;
              if ("function" === typeof b) return f.map(d,
                  function (a) {
                      var c = g[a];
                      return b(a, c._aData, c.nTr) ? a : null
                  });
              if (b.nodeName) {
                  e = b._DT_RowIndex;
                  var k = b._DT_CellIndex;
                  if (e !== n) return g[e] && g[e].nTr === b ? [e] : [];
                  if (k) return g[k.row] && g[k.row].nTr === b.parentNode ? [k.row] : [];
                  e = f(b).closest("*[data-dt-row]");
                  return e.length ? [e.data("dt-row")] : []
              }
              if ("string" === typeof b && "#" === b.charAt(0) && (e = a.aIds[b.replace(/^#/, "")], e !== n)) return [e.idx];
              e = Ub(ka(a.aoData, d, "nTr"));
              return f(e).filter(b).map(function () {
                  return this._DT_RowIndex
              }).toArray()
          }, a, c)
      };
      t("rows()", function (a,
                            b) {
          a === n ? a = "" : f.isPlainObject(a) && (b = a, a = "");
          b = eb(b);
          var c = this.iterator("table", function (c) {
              return fc(c, a, b)
          }, 1);
          c.selector.rows = a;
          c.selector.opts = b;
          return c
      });
      t("rows().nodes()", function () {
          return this.iterator("row", function (a, b) {
              return a.aoData[b].nTr || n
          }, 1)
      });
      t("rows().data()", function () {
          return this.iterator(!0, "rows", function (a, b) {
              return ka(a.aoData, b, "_aData")
          }, 1)
      });
      z("rows().cache()", "row().cache()", function (a) {
          return this.iterator("row", function (b, c) {
              b = b.aoData[c];
              return "search" === a ? b._aFilterData :
                  b._aSortData
          }, 1)
      });
      z("rows().invalidate()", "row().invalidate()", function (a) {
          return this.iterator("row", function (b, c) {
              da(b, c, a)
          })
      });
      z("rows().indexes()", "row().index()", function () {
          return this.iterator("row", function (a, b) {
              return b
          }, 1)
      });
      z("rows().ids()", "row().id()", function (a) {
          for (var b = [], c = this.context, d = 0, e = c.length; d < e; d++) for (var f = 0, g = this[d].length; f < g; f++) {
              var k = c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);
              b.push((!0 === a ? "#" : "") + k)
          }
          return new x(c, b)
      });
      z("rows().remove()", "row().remove()", function () {
          var a =
              this;
          this.iterator("row", function (b, c, d) {
              var e = b.aoData, f = e[c], g, k;
              e.splice(c, 1);
              var l = 0;
              for (g = e.length; l < g; l++) {
                  var m = e[l];
                  var p = m.anCells;
                  null !== m.nTr && (m.nTr._DT_RowIndex = l);
                  if (null !== p) for (m = 0, k = p.length; m < k; m++) p[m]._DT_CellIndex.row = l
              }
              qa(b.aiDisplayMaster, c);
              qa(b.aiDisplay, c);
              qa(a[d], c, !1);
              0 < b._iRecordsDisplay && b._iRecordsDisplay--;
              Va(b);
              c = b.rowIdFn(f._aData);
              c !== n && delete b.aIds[c]
          });
          this.iterator("table", function (a) {
              for (var b = 0, d = a.aoData.length; b < d; b++) a.aoData[b].idx = b
          });
          return this
      });
      t("rows.add()",
          function (a) {
              var b = this.iterator("table", function (b) {
                  var c, d = [];
                  var f = 0;
                  for (c = a.length; f < c; f++) {
                      var k = a[f];
                      k.nodeName && "TR" === k.nodeName.toUpperCase() ? d.push(oa(b, k)[0]) : d.push(R(b, k))
                  }
                  return d
              }, 1), c = this.rows(-1);
              c.pop();
              f.merge(c, b);
              return c
          });
      t("row()", function (a, b) {
          return fb(this.rows(a, b))
      });
      t("row().data()", function (a) {
          var b = this.context;
          if (a === n) return b.length && this.length ? b[0].aoData[this[0]]._aData : n;
          var c = b[0].aoData[this[0]];
          c._aData = a;
          f.isArray(a) && c.nTr && c.nTr.id && Q(b[0].rowId)(a, c.nTr.id);
          da(b[0], this[0], "data");
          return this
      });
      t("row().node()", function () {
          var a = this.context;
          return a.length && this.length ? a[0].aoData[this[0]].nTr || null : null
      });
      t("row.add()", function (a) {
          a instanceof f && a.length && (a = a[0]);
          var b = this.iterator("table", function (b) {
              return a.nodeName && "TR" === a.nodeName.toUpperCase() ? oa(b, a)[0] : R(b, a)
          });
          return this.row(b[0])
      });
      var gc = function (a, b, c, d) {
          var e = [], h = function (b, c) {
              if (f.isArray(b) || b instanceof f) for (var d = 0, g = b.length; d < g; d++) h(b[d], c); else b.nodeName && "tr" === b.nodeName.toLowerCase() ?
                  e.push(b) : (d = f("<tr><td/></tr>").addClass(c), f("td", d).addClass(c).html(b)[0].colSpan = V(a), e.push(d[0]))
          };
          h(c, d);
          b._details && b._details.detach();
          b._details = f(e);
          b._detailsShow && b._details.insertAfter(b.nTr)
      }, gb = function (a, b) {
          var c = a.context;
          c.length && (a = c[0].aoData[b !== n ? b : a[0]]) && a._details && (a._details.remove(), a._detailsShow = n, a._details = n)
      }, Yb = function (a, b) {
          var c = a.context;
          c.length && a.length && (a = c[0].aoData[a[0]], a._details && ((a._detailsShow = b) ? a._details.insertAfter(a.nTr) : a._details.detach(),
              hc(c[0])))
      }, hc = function (a) {
          var b = new x(a), c = a.aoData;
          b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");
          0 < K(c, "_details").length && (b.on("draw.dt.DT_details", function (d, e) {
              a === e && b.rows({page: "current"}).eq(0).each(function (a) {
                  a = c[a];
                  a._detailsShow && a._details.insertAfter(a.nTr)
              })
          }), b.on("column-visibility.dt.DT_details", function (b, e, f, g) {
              if (a === e) for (e = V(e), f = 0, g = c.length; f < g; f++) b = c[f], b._details && b._details.children("td[colspan]").attr("colspan", e)
          }), b.on("destroy.dt.DT_details",
              function (d, e) {
                  if (a === e) for (d = 0, e = c.length; d < e; d++) c[d]._details && gb(b, d)
              }))
      };
      t("row().child()", function (a, b) {
          var c = this.context;
          if (a === n) return c.length && this.length ? c[0].aoData[this[0]]._details : n;
          !0 === a ? this.child.show() : !1 === a ? gb(this) : c.length && this.length && gc(c[0], c[0].aoData[this[0]], a, b);
          return this
      });
      t(["row().child.show()", "row().child().show()"], function (a) {
          Yb(this, !0);
          return this
      });
      t(["row().child.hide()", "row().child().hide()"], function () {
          Yb(this, !1);
          return this
      });
      t(["row().child.remove()",
          "row().child().remove()"], function () {
          gb(this);
          return this
      });
      t("row().child.isShown()", function () {
          var a = this.context;
          return a.length && this.length ? a[0].aoData[this[0]]._detailsShow || !1 : !1
      });
      var ic = /^([^:]+):(name|visIdx|visible)$/, Zb = function (a, b, c, d, e) {
          c = [];
          d = 0;
          for (var f = e.length; d < f; d++) c.push(F(a, e[d], b));
          return c
      }, jc = function (a, b, c) {
          var d = a.aoColumns, e = K(d, "sName"), h = K(d, "nTh");
          return db("column", b, function (b) {
              var g = Rb(b);
              if ("" === b) return Y(d.length);
              if (null !== g) return [0 <= g ? g : d.length + g];
              if ("function" ===
                  typeof b) {
                  var l = Ea(a, c);
                  return f.map(d, function (c, d) {
                      return b(d, Zb(a, d, 0, 0, l), h[d]) ? d : null
                  })
              }
              var m = "string" === typeof b ? b.match(ic) : "";
              if (m) switch (m[2]) {
                  case "visIdx":
                  case "visible":
                      g = parseInt(m[1], 10);
                      if (0 > g) {
                          var p = f.map(d, function (a, b) {
                              return a.bVisible ? b : null
                          });
                          return [p[p.length + g]]
                      }
                      return [aa(a, g)];
                  case "name":
                      return f.map(e, function (a, b) {
                          return a === m[1] ? b : null
                      });
                  default:
                      return []
              }
              if (b.nodeName && b._DT_CellIndex) return [b._DT_CellIndex.column];
              g = f(h).filter(b).map(function () {
                  return f.inArray(this,
                      h)
              }).toArray();
              if (g.length || !b.nodeName) return g;
              g = f(b).closest("*[data-dt-column]");
              return g.length ? [g.data("dt-column")] : []
          }, a, c)
      };
      t("columns()", function (a, b) {
          a === n ? a = "" : f.isPlainObject(a) && (b = a, a = "");
          b = eb(b);
          var c = this.iterator("table", function (c) {
              return jc(c, a, b)
          }, 1);
          c.selector.cols = a;
          c.selector.opts = b;
          return c
      });
      z("columns().header()", "column().header()", function (a, b) {
          return this.iterator("column", function (a, b) {
              return a.aoColumns[b].nTh
          }, 1)
      });
      z("columns().footer()", "column().footer()", function (a,
                                                             b) {
          return this.iterator("column", function (a, b) {
              return a.aoColumns[b].nTf
          }, 1)
      });
      z("columns().data()", "column().data()", function () {
          return this.iterator("column-rows", Zb, 1)
      });
      z("columns().dataSrc()", "column().dataSrc()", function () {
          return this.iterator("column", function (a, b) {
              return a.aoColumns[b].mData
          }, 1)
      });
      z("columns().cache()", "column().cache()", function (a) {
          return this.iterator("column-rows", function (b, c, d, e, f) {
              return ka(b.aoData, f, "search" === a ? "_aFilterData" : "_aSortData", c)
          }, 1)
      });
      z("columns().nodes()",
          "column().nodes()", function () {
              return this.iterator("column-rows", function (a, b, c, d, e) {
                  return ka(a.aoData, e, "anCells", b)
              }, 1)
          });
      z("columns().visible()", "column().visible()", function (a, b) {
          var c = this, d = this.iterator("column", function (b, c) {
              if (a === n) return b.aoColumns[c].bVisible;
              var d = b.aoColumns, e = d[c], h = b.aoData, m;
              if (a !== n && e.bVisible !== a) {
                  if (a) {
                      var p = f.inArray(!0, K(d, "bVisible"), c + 1);
                      d = 0;
                      for (m = h.length; d < m; d++) {
                          var q = h[d].nTr;
                          b = h[d].anCells;
                          q && q.insertBefore(b[c], b[p] || null)
                      }
                  } else f(K(b.aoData, "anCells",
                      c)).detach();
                  e.bVisible = a
              }
          });
          a !== n && this.iterator("table", function (d) {
              fa(d, d.aoHeader);
              fa(d, d.aoFooter);
              d.aiDisplay.length || f(d.nTBody).find("td[colspan]").attr("colspan", V(d));
              Aa(d);
              c.iterator("column", function (c, d) {
                  A(c, null, "column-visibility", [c, d, a, b])
              });
              (b === n || b) && c.columns.adjust()
          });
          return d
      });
      z("columns().indexes()", "column().index()", function (a) {
          return this.iterator("column", function (b, c) {
              return "visible" === a ? ba(b, c) : c
          }, 1)
      });
      t("columns.adjust()", function () {
          return this.iterator("table", function (a) {
                  Z(a)
              },
              1)
      });
      t("column.index()", function (a, b) {
          if (0 !== this.context.length) {
              var c = this.context[0];
              if ("fromVisible" === a || "toData" === a) return aa(c, b);
              if ("fromData" === a || "toVisible" === a) return ba(c, b)
          }
      });
      t("column()", function (a, b) {
          return fb(this.columns(a, b))
      });
      var kc = function (a, b, c) {
          var d = a.aoData, e = Ea(a, c), h = Ub(ka(d, e, "anCells")), g = f([].concat.apply([], h)), k,
              l = a.aoColumns.length, m, p, q, u, t, w;
          return db("cell", b, function (b) {
              var c = "function" === typeof b;
              if (null === b || b === n || c) {
                  m = [];
                  p = 0;
                  for (q = e.length; p < q; p++) for (k =
                                                          e[p], u = 0; u < l; u++) t = {
                      row: k,
                      column: u
                  }, c ? (w = d[k], b(t, F(a, k, u), w.anCells ? w.anCells[u] : null) && m.push(t)) : m.push(t);
                  return m
              }
              if (f.isPlainObject(b)) return b.column !== n && b.row !== n && -1 !== f.inArray(b.row, e) ? [b] : [];
              c = g.filter(b).map(function (a, b) {
                  return {row: b._DT_CellIndex.row, column: b._DT_CellIndex.column}
              }).toArray();
              if (c.length || !b.nodeName) return c;
              w = f(b).closest("*[data-dt-row]");
              return w.length ? [{row: w.data("dt-row"), column: w.data("dt-column")}] : []
          }, a, c)
      };
      t("cells()", function (a, b, c) {
          f.isPlainObject(a) &&
          (a.row === n ? (c = a, a = null) : (c = b, b = null));
          f.isPlainObject(b) && (c = b, b = null);
          if (null === b || b === n) return this.iterator("table", function (b) {
              return kc(b, a, eb(c))
          });
          var d = c ? {page: c.page, order: c.order, search: c.search} : {}, e = this.columns(b, d), h = this.rows(a, d),
              g, k, l, m;
          d = this.iterator("table", function (a, b) {
              a = [];
              g = 0;
              for (k = h[b].length; g < k; g++) for (l = 0, m = e[b].length; l < m; l++) a.push({
                  row: h[b][g],
                  column: e[b][l]
              });
              return a
          }, 1);
          d = c && c.selected ? this.cells(d, c) : d;
          f.extend(d.selector, {cols: b, rows: a, opts: c});
          return d
      });
      z("cells().nodes()",
          "cell().node()", function () {
              return this.iterator("cell", function (a, b, c) {
                  return (a = a.aoData[b]) && a.anCells ? a.anCells[c] : n
              }, 1)
          });
      t("cells().data()", function () {
          return this.iterator("cell", function (a, b, c) {
              return F(a, b, c)
          }, 1)
      });
      z("cells().cache()", "cell().cache()", function (a) {
          a = "search" === a ? "_aFilterData" : "_aSortData";
          return this.iterator("cell", function (b, c, d) {
              return b.aoData[c][a][d]
          }, 1)
      });
      z("cells().render()", "cell().render()", function (a) {
          return this.iterator("cell", function (b, c, d) {
                  return F(b, c, d, a)
              },
              1)
      });
      z("cells().indexes()", "cell().index()", function () {
          return this.iterator("cell", function (a, b, c) {
              return {row: b, column: c, columnVisible: ba(a, c)}
          }, 1)
      });
      z("cells().invalidate()", "cell().invalidate()", function (a) {
          return this.iterator("cell", function (b, c, d) {
              da(b, c, a, d)
          })
      });
      t("cell()", function (a, b, c) {
          return fb(this.cells(a, b, c))
      });
      t("cell().data()", function (a) {
          var b = this.context, c = this[0];
          if (a === n) return b.length && c.length ? F(b[0], c[0].row, c[0].column) : n;
          nb(b[0], c[0].row, c[0].column, a);
          da(b[0], c[0].row,
              "data", c[0].column);
          return this
      });
      t("order()", function (a, b) {
          var c = this.context;
          if (a === n) return 0 !== c.length ? c[0].aaSorting : n;
          "number" === typeof a ? a = [[a, b]] : a.length && !f.isArray(a[0]) && (a = Array.prototype.slice.call(arguments));
          return this.iterator("table", function (b) {
              b.aaSorting = a.slice()
          })
      });
      t("order.listener()", function (a, b, c) {
          return this.iterator("table", function (d) {
              Pa(d, a, b, c)
          })
      });
      t("order.fixed()", function (a) {
          if (!a) {
              var b = this.context;
              b = b.length ? b[0].aaSortingFixed : n;
              return f.isArray(b) ? {pre: b} :
                  b
          }
          return this.iterator("table", function (b) {
              b.aaSortingFixed = f.extend(!0, {}, a)
          })
      });
      t(["columns().order()", "column().order()"], function (a) {
          var b = this;
          return this.iterator("table", function (c, d) {
              var e = [];
              f.each(b[d], function (b, c) {
                  e.push([c, a])
              });
              c.aaSorting = e
          })
      });
      t("search()", function (a, b, c, d) {
          var e = this.context;
          return a === n ? 0 !== e.length ? e[0].oPreviousSearch.sSearch : n : this.iterator("table", function (e) {
              e.oFeatures.bFilter && ha(e, f.extend({}, e.oPreviousSearch, {
                  sSearch: a + "", bRegex: null === b ? !1 : b, bSmart: null ===
                  c ? !0 : c, bCaseInsensitive: null === d ? !0 : d
              }), 1)
          })
      });
      z("columns().search()", "column().search()", function (a, b, c, d) {
          return this.iterator("column", function (e, h) {
              var g = e.aoPreSearchCols;
              if (a === n) return g[h].sSearch;
              e.oFeatures.bFilter && (f.extend(g[h], {
                  sSearch: a + "",
                  bRegex: null === b ? !1 : b,
                  bSmart: null === c ? !0 : c,
                  bCaseInsensitive: null === d ? !0 : d
              }), ha(e, e.oPreviousSearch, 1))
          })
      });
      t("state()", function () {
          return this.context.length ? this.context[0].oSavedState : null
      });
      t("state.clear()", function () {
          return this.iterator("table",
              function (a) {
                  a.fnStateSaveCallback.call(a.oInstance, a, {})
              })
      });
      t("state.loaded()", function () {
          return this.context.length ? this.context[0].oLoadedState : null
      });
      t("state.save()", function () {
          return this.iterator("table", function (a) {
              Aa(a)
          })
      });
      q.versionCheck = q.fnVersionCheck = function (a) {
          var b = q.version.split(".");
          a = a.split(".");
          for (var c, d, e = 0, f = a.length; e < f; e++) if (c = parseInt(b[e], 10) || 0, d = parseInt(a[e], 10) || 0, c !== d) return c > d;
          return !0
      };
      q.isDataTable = q.fnIsDataTable = function (a) {
          var b = f(a).get(0), c = !1;
          if (a instanceof
              q.Api) return !0;
          f.each(q.settings, function (a, e) {
              a = e.nScrollHead ? f("table", e.nScrollHead)[0] : null;
              var d = e.nScrollFoot ? f("table", e.nScrollFoot)[0] : null;
              if (e.nTable === b || a === b || d === b) c = !0
          });
          return c
      };
      q.tables = q.fnTables = function (a) {
          var b = !1;
          f.isPlainObject(a) && (b = a.api, a = a.visible);
          var c = f.map(q.settings, function (b) {
              if (!a || a && f(b.nTable).is(":visible")) return b.nTable
          });
          return b ? new x(c) : c
      };
      q.camelToHungarian = L;
      t("$()", function (a, b) {
          b = this.rows(b).nodes();
          b = f(b);
          return f([].concat(b.filter(a).toArray(),
              b.find(a).toArray()))
      });
      f.each(["on", "one", "off"], function (a, b) {
          t(b + "()", function () {
              var a = Array.prototype.slice.call(arguments);
              a[0] = f.map(a[0].split(/\s/), function (a) {
                  return a.match(/\.dt\b/) ? a : a + ".dt"
              }).join(" ");
              var d = f(this.tables().nodes());
              d[b].apply(d, a);
              return this
          })
      });
      t("clear()", function () {
          return this.iterator("table", function (a) {
              pa(a)
          })
      });
      t("settings()", function () {
          return new x(this.context, this.context)
      });
      t("init()", function () {
          var a = this.context;
          return a.length ? a[0].oInit : null
      });
      t("data()",
          function () {
              return this.iterator("table", function (a) {
                  return K(a.aoData, "_aData")
              }).flatten()
          });
      t("destroy()", function (a) {
          a = a || !1;
          return this.iterator("table", function (b) {
              var c = b.nTableWrapper.parentNode, d = b.oClasses, e = b.nTable, h = b.nTBody, g = b.nTHead, k = b.nTFoot,
                  l = f(e);
              h = f(h);
              var m = f(b.nTableWrapper), p = f.map(b.aoData, function (a) {
                  return a.nTr
              }), n;
              b.bDestroying = !0;
              A(b, "aoDestroyCallback", "destroy", [b]);
              a || (new x(b)).columns().visible(!0);
              m.off(".DT").find(":not(tbody *)").off(".DT");
              f(y).off(".DT-" + b.sInstance);
              e != g.parentNode && (l.children("thead").detach(), l.append(g));
              k && e != k.parentNode && (l.children("tfoot").detach(), l.append(k));
              b.aaSorting = [];
              b.aaSortingFixed = [];
              za(b);
              f(p).removeClass(b.asStripeClasses.join(" "));
              f("th, td", g).removeClass(d.sSortable + " " + d.sSortableAsc + " " + d.sSortableDesc + " " + d.sSortableNone);
              h.children().detach();
              h.append(p);
              g = a ? "remove" : "detach";
              l[g]();
              m[g]();
              !a && c && (c.insertBefore(e, b.nTableReinsertBefore), l.css("width", b.sDestroyWidth).removeClass(d.sTable), (n = b.asDestroyStripes.length) &&
              h.children().each(function (a) {
                  f(this).addClass(b.asDestroyStripes[a % n])
              }));
              c = f.inArray(b, q.settings);
              -1 !== c && q.settings.splice(c, 1)
          })
      });
      f.each(["column", "row", "cell"], function (a, b) {
          t(b + "s().every()", function (a) {
              var c = this.selector.opts, e = this;
              return this.iterator(b, function (d, f, k, l, m) {
                  a.call(e[b](f, "cell" === b ? k : c, "cell" === b ? c : n), f, k, l, m)
              })
          })
      });
      t("i18n()", function (a, b, c) {
          var d = this.context[0];
          a = T(a)(d.oLanguage);
          a === n && (a = b);
          c !== n && f.isPlainObject(a) && (a = a[c] !== n ? a[c] : a._);
          return a.replace("%d", c)
      });
      q.version = "1.10.21";
      q.settings = [];
      q.models = {};
      q.models.oSearch = {bCaseInsensitive: !0, sSearch: "", bRegex: !1, bSmart: !0};
      q.models.oRow = {
          nTr: null,
          anCells: null,
          _aData: [],
          _aSortData: null,
          _aFilterData: null,
          _sFilterRow: null,
          _sRowStripe: "",
          src: null,
          idx: -1
      };
      q.models.oColumn = {
          idx: null,
          aDataSort: null,
          asSorting: null,
          bSearchable: null,
          bSortable: null,
          bVisible: null,
          _sManualType: null,
          _bAttrSrc: !1,
          fnCreatedCell: null,
          fnGetData: null,
          fnSetData: null,
          mData: null,
          mRender: null,
          nTh: null,
          nTf: null,
          sClass: null,
          sContentPadding: null,
          sDefaultContent: null,
          sName: null,
          sSortDataType: "std",
          sSortingClass: null,
          sSortingClassJUI: null,
          sTitle: null,
          sType: null,
          sWidth: null,
          sWidthOrig: null
      };
      q.defaults = {
          aaData: null,
          aaSorting: [[0, "asc"]],
          aaSortingFixed: [],
          ajax: null,
          aLengthMenu: [10, 25, 50, 100],
          aoColumns: null,
          aoColumnDefs: null,
          aoSearchCols: [],
          asStripeClasses: null,
          bAutoWidth: !0,
          bDeferRender: !1,
          bDestroy: !1,
          bFilter: !0,
          bInfo: !0,
          bLengthChange: !0,
          bPaginate: !0,
          bProcessing: !1,
          bRetrieve: !1,
          bScrollCollapse: !1,
          bServerSide: !1,
          bSort: !0,
          bSortMulti: !0,
          bSortCellsTop: !1,
          bSortClasses: !0,
          bStateSave: !1,
          fnCreatedRow: null,
          fnDrawCallback: null,
          fnFooterCallback: null,
          fnFormatNumber: function (a) {
              return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.oLanguage.sThousands)
          },
          fnHeaderCallback: null,
          fnInfoCallback: null,
          fnInitComplete: null,
          fnPreDrawCallback: null,
          fnRowCallback: null,
          fnServerData: null,
          fnServerParams: null,
          fnStateLoadCallback: function (a) {
              try {
                  return JSON.parse((-1 === a.iStateDuration ? sessionStorage : localStorage).getItem("DataTables_" + a.sInstance + "_" + location.pathname))
              } catch (b) {
                  return {}
              }
          },
          fnStateLoadParams: null,
          fnStateLoaded: null,
          fnStateSaveCallback: function (a, b) {
              try {
                  (-1 === a.iStateDuration ? sessionStorage : localStorage).setItem("DataTables_" + a.sInstance + "_" + location.pathname, JSON.stringify(b))
              } catch (c) {
              }
          },
          fnStateSaveParams: null,
          iStateDuration: 7200,
          iDeferLoading: null,
          iDisplayLength: 10,
          iDisplayStart: 0,
          iTabIndex: 0,
          oClasses: {},
          oLanguage: {
              oAria: {
                  sSortAscending: ": activate to sort column ascending",
                  sSortDescending: ": activate to sort column descending"
              },
              oPaginate: {
                  sFirst: "First", sLast: "Last",
                  sNext: "Next", sPrevious: "Previous"
              },
              sEmptyTable: "No data available in table",
              sInfo: "Showing _START_ to _END_ of _TOTAL_ entries",
              sInfoEmpty: "Showing 0 to 0 of 0 entries",
              sInfoFiltered: "(filtered from _MAX_ total entries)",
              sInfoPostFix: "",
              sDecimal: "",
              sThousands: ",",
              sLengthMenu: "Show _MENU_ entries",
              sLoadingRecords: "Loading...",
              sProcessing: "Processing...",
              sSearch: "Search:",
              sSearchPlaceholder: "",
              sUrl: "",
              sZeroRecords: "No matching records found"
          },
          oSearch: f.extend({}, q.models.oSearch),
          sAjaxDataProp: "data",
          sAjaxSource: null,
          sDom: "lfrtip",
          searchDelay: null,
          sPaginationType: "simple_numbers",
          sScrollX: "",
          sScrollXInner: "",
          sScrollY: "",
          sServerMethod: "GET",
          renderer: null,
          rowId: "DT_RowId"
      };
      H(q.defaults);
      q.defaults.column = {
          aDataSort: null,
          iDataSort: -1,
          asSorting: ["asc", "desc"],
          bSearchable: !0,
          bSortable: !0,
          bVisible: !0,
          fnCreatedCell: null,
          mData: null,
          mRender: null,
          sCellType: "td",
          sClass: "",
          sContentPadding: "",
          sDefaultContent: null,
          sName: "",
          sSortDataType: "std",
          sTitle: null,
          sType: null,
          sWidth: null
      };
      H(q.defaults.column);
      q.models.oSettings =
          {
              oFeatures: {
                  bAutoWidth: null,
                  bDeferRender: null,
                  bFilter: null,
                  bInfo: null,
                  bLengthChange: null,
                  bPaginate: null,
                  bProcessing: null,
                  bServerSide: null,
                  bSort: null,
                  bSortMulti: null,
                  bSortClasses: null,
                  bStateSave: null
              },
              oScroll: {bCollapse: null, iBarWidth: 0, sX: null, sXInner: null, sY: null},
              oLanguage: {fnInfoCallback: null},
              oBrowser: {bScrollOversize: !1, bScrollbarLeft: !1, bBounding: !1, barWidth: 0},
              ajax: null,
              aanFeatures: [],
              aoData: [],
              aiDisplay: [],
              aiDisplayMaster: [],
              aIds: {},
              aoColumns: [],
              aoHeader: [],
              aoFooter: [],
              oPreviousSearch: {},
              aoPreSearchCols: [],
              aaSorting: null,
              aaSortingFixed: [],
              asStripeClasses: null,
              asDestroyStripes: [],
              sDestroyWidth: 0,
              aoRowCallback: [],
              aoHeaderCallback: [],
              aoFooterCallback: [],
              aoDrawCallback: [],
              aoRowCreatedCallback: [],
              aoPreDrawCallback: [],
              aoInitComplete: [],
              aoStateSaveParams: [],
              aoStateLoadParams: [],
              aoStateLoaded: [],
              sTableId: "",
              nTable: null,
              nTHead: null,
              nTFoot: null,
              nTBody: null,
              nTableWrapper: null,
              bDeferLoading: !1,
              bInitialised: !1,
              aoOpenRows: [],
              sDom: null,
              searchDelay: null,
              sPaginationType: "two_button",
              iStateDuration: 0,
              aoStateSave: [],
              aoStateLoad: [],
              oSavedState: null,
              oLoadedState: null,
              sAjaxSource: null,
              sAjaxDataProp: null,
              bAjaxDataGet: !0,
              jqXHR: null,
              json: n,
              oAjaxData: n,
              fnServerData: null,
              aoServerParams: [],
              sServerMethod: null,
              fnFormatNumber: null,
              aLengthMenu: null,
              iDraw: 0,
              bDrawing: !1,
              iDrawError: -1,
              _iDisplayLength: 10,
              _iDisplayStart: 0,
              _iRecordsTotal: 0,
              _iRecordsDisplay: 0,
              oClasses: {},
              bFiltered: !1,
              bSorted: !1,
              bSortCellsTop: null,
              oInit: null,
              aoDestroyCallback: [],
              fnRecordsTotal: function () {
                  return "ssp" == I(this) ? 1 * this._iRecordsTotal :
                      this.aiDisplayMaster.length
              },
              fnRecordsDisplay: function () {
                  return "ssp" == I(this) ? 1 * this._iRecordsDisplay : this.aiDisplay.length
              },
              fnDisplayEnd: function () {
                  var a = this._iDisplayLength, b = this._iDisplayStart, c = b + a, d = this.aiDisplay.length,
                      e = this.oFeatures, f = e.bPaginate;
                  return e.bServerSide ? !1 === f || -1 === a ? b + d : Math.min(b + a, this._iRecordsDisplay) : !f || c > d || -1 === a ? d : c
              },
              oInstance: null,
              sInstance: null,
              iTabIndex: 0,
              nScrollHead: null,
              nScrollFoot: null,
              aLastSort: [],
              oPlugins: {},
              rowIdFn: null,
              rowId: null
          };
      q.ext = C = {
          buttons: {},
          classes: {},
          builder: "dt/dt-1.10.21",
          errMode: "alert",
          feature: [],
          search: [],
          selector: {cell: [], column: [], row: []},
          internal: {},
          legacy: {ajax: null},
          pager: {},
          renderer: {pageButton: {}, header: {}},
          order: {},
          type: {detect: [], search: {}, order: {}},
          _unique: 0,
          fnVersionCheck: q.fnVersionCheck,
          iApiIndex: 0,
          oJUIClasses: {},
          sVersion: q.version
      };
      f.extend(C, {
          afnFiltering: C.search,
          aTypes: C.type.detect,
          ofnSearch: C.type.search,
          oSort: C.type.order,
          afnSortData: C.order,
          aoFeatures: C.feature,
          oApi: C.internal,
          oStdClasses: C.classes,
          oPagination: C.pager
      });
      f.extend(q.ext.classes, {
          sTable: "dataTable",
          sNoFooter: "no-footer",
          sPageButton: "paginate_button",
          sPageButtonActive: "current",
          sPageButtonDisabled: "disabled",
          sStripeOdd: "odd",
          sStripeEven: "even",
          sRowEmpty: "dataTables_empty",
          sWrapper: "dataTables_wrapper",
          sFilter: "dataTables_filter",
          sInfo: "dataTables_info",
          sPaging: "dataTables_paginate paging_",
          sLength: "dataTables_length",
          sProcessing: "dataTables_processing",
          sSortAsc: "sorting_asc",
          sSortDesc: "sorting_desc",
          sSortable: "sorting",
          sSortableAsc: "sorting_asc_disabled",
          sSortableDesc: "sorting_desc_disabled",
          sSortableNone: "sorting_disabled",
          sSortColumn: "sorting_",
          sFilterInput: "",
          sLengthSelect: "",
          sScrollWrapper: "dataTables_scroll",
          sScrollHead: "dataTables_scrollHead",
          sScrollHeadInner: "dataTables_scrollHeadInner",
          sScrollBody: "dataTables_scrollBody",
          sScrollFoot: "dataTables_scrollFoot",
          sScrollFootInner: "dataTables_scrollFootInner",
          sHeaderTH: "",
          sFooterTH: "",
          sSortJUIAsc: "",
          sSortJUIDesc: "",
          sSortJUI: "",
          sSortJUIAscAllowed: "",
          sSortJUIDescAllowed: "",
          sSortJUIWrapper: "",
          sSortIcon: "",
          sJUIHeader: "",
          sJUIFooter: ""
      });
      var Ob = q.ext.pager;
      f.extend(Ob, {
          simple: function (a, b) {
              return ["previous", "next"]
          }, full: function (a, b) {
              return ["first", "previous", "next", "last"]
          }, numbers: function (a, b) {
              return [ja(a, b)]
          }, simple_numbers: function (a, b) {
              return ["previous", ja(a, b), "next"]
          }, full_numbers: function (a, b) {
              return ["first", "previous", ja(a, b), "next", "last"]
          }, first_last_numbers: function (a, b) {
              return ["first", ja(a, b), "last"]
          }, _numbers: ja, numbers_length: 7
      });
      f.extend(!0, q.ext.renderer, {
          pageButton: {
              _: function (a, b,
                           c, d, e, h) {
                  var g = a.oClasses, k = a.oLanguage.oPaginate, l = a.oLanguage.oAria.paginate || {}, m, p, q = 0,
                      t = function (b, d) {
                          var n, r = g.sPageButtonDisabled, u = function (b) {
                              Wa(a, b.data.action, !0)
                          };
                          var w = 0;
                          for (n = d.length; w < n; w++) {
                              var v = d[w];
                              if (f.isArray(v)) {
                                  var x = f("<" + (v.DT_el || "div") + "/>").appendTo(b);
                                  t(x, v)
                              } else {
                                  m = null;
                                  p = v;
                                  x = a.iTabIndex;
                                  switch (v) {
                                      case "ellipsis":
                                          b.append('<span class="ellipsis">&#x2026;</span>');
                                          break;
                                      case "first":
                                          m = k.sFirst;
                                          0 === e && (x = -1, p += " " + r);
                                          break;
                                      case "previous":
                                          m = k.sPrevious;
                                          0 === e && (x = -1, p +=
                                              " " + r);
                                          break;
                                      case "next":
                                          m = k.sNext;
                                          if (0 === h || e === h - 1) x = -1, p += " " + r;
                                          break;
                                      case "last":
                                          m = k.sLast;
                                          e === h - 1 && (x = -1, p += " " + r);
                                          break;
                                      default:
                                          m = v + 1, p = e === v ? g.sPageButtonActive : ""
                                  }
                                  null !== m && (x = f("<a>", {
                                      "class": g.sPageButton + " " + p,
                                      "aria-controls": a.sTableId,
                                      "aria-label": l[v],
                                      "data-dt-idx": q,
                                      tabindex: x,
                                      id: 0 === c && "string" === typeof v ? a.sTableId + "_" + v : null
                                  }).html(m).appendTo(b), Za(x, {action: v}, u), q++)
                              }
                          }
                      };
                  try {
                      var x = f(b).find(w.activeElement).data("dt-idx")
                  } catch (lc) {
                  }
                  t(f(b).empty(), d);
                  x !== n && f(b).find("[data-dt-idx=" +
                      x + "]").trigger("focus")
              }
          }
      });
      f.extend(q.ext.type.detect, [function (a, b) {
          b = b.oLanguage.sDecimal;
          return cb(a, b) ? "num" + b : null
      }, function (a, b) {
          if (a && !(a instanceof Date) && !cc.test(a)) return null;
          b = Date.parse(a);
          return null !== b && !isNaN(b) || P(a) ? "date" : null
      }, function (a, b) {
          b = b.oLanguage.sDecimal;
          return cb(a, b, !0) ? "num-fmt" + b : null
      }, function (a, b) {
          b = b.oLanguage.sDecimal;
          return Tb(a, b) ? "html-num" + b : null
      }, function (a, b) {
          b = b.oLanguage.sDecimal;
          return Tb(a, b, !0) ? "html-num-fmt" + b : null
      }, function (a, b) {
          return P(a) || "string" ===
          typeof a && -1 !== a.indexOf("<") ? "html" : null
      }]);
      f.extend(q.ext.type.search, {
          html: function (a) {
              return P(a) ? a : "string" === typeof a ? a.replace(Qb, " ").replace(Da, "") : ""
          }, string: function (a) {
              return P(a) ? a : "string" === typeof a ? a.replace(Qb, " ") : a
          }
      });
      var Ca = function (a, b, c, d) {
          if (0 !== a && (!a || "-" === a)) return -Infinity;
          b && (a = Sb(a, b));
          a.replace && (c && (a = a.replace(c, "")), d && (a = a.replace(d, "")));
          return 1 * a
      };
      f.extend(C.type.order, {
          "date-pre": function (a) {
              a = Date.parse(a);
              return isNaN(a) ? -Infinity : a
          }, "html-pre": function (a) {
              return P(a) ?
                  "" : a.replace ? a.replace(/<.*?>/g, "").toLowerCase() : a + ""
          }, "string-pre": function (a) {
              return P(a) ? "" : "string" === typeof a ? a.toLowerCase() : a.toString ? a.toString() : ""
          }, "string-asc": function (a, b) {
              return a < b ? -1 : a > b ? 1 : 0
          }, "string-desc": function (a, b) {
              return a < b ? 1 : a > b ? -1 : 0
          }
      });
      Ga("");
      f.extend(!0, q.ext.renderer, {
          header: {
              _: function (a, b, c, d) {
                  f(a.nTable).on("order.dt.DT", function (e, f, g, k) {
                      a === f && (e = c.idx, b.removeClass(c.sSortingClass + " " + d.sSortAsc + " " + d.sSortDesc).addClass("asc" == k[e] ? d.sSortAsc : "desc" == k[e] ? d.sSortDesc :
                          c.sSortingClass))
                  })
              }, jqueryui: function (a, b, c, d) {
                  f("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("<span/>").addClass(d.sSortIcon + " " + c.sSortingClassJUI)).appendTo(b);
                  f(a.nTable).on("order.dt.DT", function (e, f, g, k) {
                      a === f && (e = c.idx, b.removeClass(d.sSortAsc + " " + d.sSortDesc).addClass("asc" == k[e] ? d.sSortAsc : "desc" == k[e] ? d.sSortDesc : c.sSortingClass), b.find("span." + d.sSortIcon).removeClass(d.sSortJUIAsc + " " + d.sSortJUIDesc + " " + d.sSortJUI + " " + d.sSortJUIAscAllowed + " " + d.sSortJUIDescAllowed).addClass("asc" ==
                      k[e] ? d.sSortJUIAsc : "desc" == k[e] ? d.sSortJUIDesc : c.sSortingClassJUI))
                  })
              }
          }
      });
      var hb = function (a) {
          return "string" === typeof a ? a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;") : a
      };
      q.render = {
          number: function (a, b, c, d, e) {
              return {
                  display: function (f) {
                      if ("number" !== typeof f && "string" !== typeof f) return f;
                      var g = 0 > f ? "-" : "", h = parseFloat(f);
                      if (isNaN(h)) return hb(f);
                      h = h.toFixed(c);
                      f = Math.abs(h);
                      h = parseInt(f, 10);
                      f = c ? b + (f - h).toFixed(c).substring(2) : "";
                      return g + (d || "") + h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
                          a) + f + (e || "")
                  }
              }
          }, text: function () {
              return {display: hb, filter: hb}
          }
      };
      f.extend(q.ext.internal, {
          _fnExternApiFunc: Pb,
          _fnBuildAjax: ua,
          _fnAjaxUpdate: pb,
          _fnAjaxParameters: yb,
          _fnAjaxUpdateDraw: zb,
          _fnAjaxDataSrc: va,
          _fnAddColumn: Ha,
          _fnColumnOptions: la,
          _fnAdjustColumnSizing: Z,
          _fnVisibleToColumnIndex: aa,
          _fnColumnIndexToVisible: ba,
          _fnVisbleColumns: V,
          _fnGetColumns: na,
          _fnColumnTypes: Ja,
          _fnApplyColumnDefs: mb,
          _fnHungarianMap: H,
          _fnCamelToHungarian: L,
          _fnLanguageCompat: Fa,
          _fnBrowserDetect: kb,
          _fnAddData: R,
          _fnAddTr: oa,
          _fnNodeToDataIndex: function (a,
                                        b) {
              return b._DT_RowIndex !== n ? b._DT_RowIndex : null
          },
          _fnNodeToColumnIndex: function (a, b, c) {
              return f.inArray(c, a.aoData[b].anCells)
          },
          _fnGetCellData: F,
          _fnSetCellData: nb,
          _fnSplitObjNotation: Ma,
          _fnGetObjectDataFn: T,
          _fnSetObjectDataFn: Q,
          _fnGetDataMaster: Na,
          _fnClearTable: pa,
          _fnDeleteIndex: qa,
          _fnInvalidate: da,
          _fnGetRowElements: La,
          _fnCreateTr: Ka,
          _fnBuildHead: ob,
          _fnDrawHead: fa,
          _fnDraw: S,
          _fnReDraw: U,
          _fnAddOptionsHtml: rb,
          _fnDetectHeader: ea,
          _fnGetUniqueThs: ta,
          _fnFeatureHtmlFilter: tb,
          _fnFilterComplete: ha,
          _fnFilterCustom: Cb,
          _fnFilterColumn: Bb,
          _fnFilter: Ab,
          _fnFilterCreateSearch: Sa,
          _fnEscapeRegex: Ta,
          _fnFilterData: Db,
          _fnFeatureHtmlInfo: wb,
          _fnUpdateInfo: Gb,
          _fnInfoMacros: Hb,
          _fnInitialise: ia,
          _fnInitComplete: wa,
          _fnLengthChange: Ua,
          _fnFeatureHtmlLength: sb,
          _fnFeatureHtmlPaginate: xb,
          _fnPageChange: Wa,
          _fnFeatureHtmlProcessing: ub,
          _fnProcessingDisplay: J,
          _fnFeatureHtmlTable: vb,
          _fnScrollDraw: ma,
          _fnApplyToChildren: N,
          _fnCalculateColumnWidths: Ia,
          _fnThrottle: Ra,
          _fnConvertToWidth: Ib,
          _fnGetWidestNode: Jb,
          _fnGetMaxLenString: Kb,
          _fnStringToCss: B,
          _fnSortFlatten: X,
          _fnSort: qb,
          _fnSortAria: Mb,
          _fnSortListener: Ya,
          _fnSortAttachListener: Pa,
          _fnSortingClasses: za,
          _fnSortData: Lb,
          _fnSaveState: Aa,
          _fnLoadState: Nb,
          _fnSettingsFromNode: Ba,
          _fnLog: O,
          _fnMap: M,
          _fnBindAction: Za,
          _fnCallbackReg: D,
          _fnCallbackFire: A,
          _fnLengthOverflow: Va,
          _fnRenderer: Qa,
          _fnDataSource: I,
          _fnRowAttributes: Oa,
          _fnExtend: $a,
          _fnCalculateEnd: function () {
          }
      });
      f.fn.dataTable = q;
      q.$ = f;
      f.fn.dataTableSettings = q.settings;
      f.fn.dataTableExt = q.ext;
      f.fn.DataTable = function (a) {
          return f(this).dataTable(a).api()
      };
      f.each(q, function (a, b) {
          f.fn.DataTable[a] = b
      });
      return f.fn.dataTable
  });
  
  
  /*!
   DataTables styling integration
   ©2018 SpryMedia Ltd - datatables.net/license
  */
  (function (c) {
      "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (a) {
          return c(a, window, document)
      }) : "object" === typeof exports ? module.exports = function (a, b) {
          a || (a = window);
          b && b.fn.dataTable || (b = require("datatables.net")(a, b).$);
          return c(b, a, a.document)
      } : c(jQuery, window, document)
  })(function (c, a, b, d) {
      return c.fn.dataTable
  });
  
  