Ver código fonte

1、修改配置文件css,js地址指引
2、修改ftl文件标签配置

fuwb 4 meses atrás
pai
commit
516ee23fcd
23 arquivos alterados com 16 adições e 10295 exclusões
  1. 4 4
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/application-dev.yaml
  2. 11 7
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/ProcurementApplication/index.ftl
  3. 1 1
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/ProcurementApplication/js/index.js
  4. 0 41
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/OwCommon/OwCommon.css
  5. 0 26
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/OwCommon/OwCommon.js
  6. 0 334
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/flow/css/formCommon.css
  7. 0 163
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/flow/js/formCommon.js
  8. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/addIcon.png
  9. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/down_disabled_icon.png
  10. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/down_icon.png
  11. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/form-wrap-title-icon.png
  12. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/titleIcon.png
  13. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/up_disabled_icon.png
  14. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/up_icon.png
  15. 0 111
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/index.html
  16. 0 3618
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/js/district.js
  17. 0 0
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/js/eruda.js
  18. 0 5685
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/js/moment.js
  19. 0 82
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/login.html
  20. 0 64
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/TimeSelector.css
  21. 0 82
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/TimeSelector.js
  22. 0 77
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/demo.html
  23. BIN
      zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/time-icon.png

+ 4 - 4
zjugis-module-business/zjugis-module-business-biz/src/main/resources/application-dev.yaml

@@ -127,7 +127,7 @@ mybatis-plus:
     log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
 
 serviceUrl:
-  sysUrl: http://localhost:48083
-  UI: http://localhost:6090
-  ui_version: http://60.191.110.205:48080/UI
-  z_workflow: http://60.191.110.205:6090
+  sysUrl: http://60.191.110.205:28080/business
+  UI: http://60.191.110.205:28080/workflow
+  ui_version: http://60.191.110.205:28080/UI
+  z_workflow: http://60.191.110.205:28080/workflow

+ 11 - 7
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/ProcurementApplication/index.ftl

@@ -54,6 +54,8 @@ styles=[ '/flow/css/formCommon.css','/OwCommon/OwCommon.css' ]>
                                     </div>
                                 </div>
                             </td>
+                        </tr>
+                        <tr>
                             <td class="th">
                                 <div class="form-label">申报人:</div>
                             </td>
@@ -86,19 +88,21 @@ styles=[ '/flow/css/formCommon.css','/OwCommon/OwCommon.css' ]>
                             <td colspan="3">
                                 <div class="form-group">
                                     <div class="form-item">
-                                        <div class="z-comp-date z-readonly" name="createReqVO$projectName">
-                                            <input type="text" value="${(formEntity.projectName)!}">
+                                        <div class="z-comp-date" name="createReqVO$projectName">
+                                            <input type="text" value="${formEntity.projectName!}">
                                         </div>
                                     </div>
                                 </div>
                             </td>
+                        </tr>
+                        <tr>
                             <td class="th">
                                 <div class="form-label">项目情况:</div>
                             </td>
                             <td colspan="3">
                                 <div class="form-group">
                                     <div class="form-item">
-                                        <div class="z-comp-input  z-readonly" name="createReqVO$projectSituation">
+                                        <div class="z-comp-input" name="createReqVO$projectSituation">
                                             <input type="text" value="${formEntity.projectSituation!}">
                                         </div>
                                     </div>
@@ -118,20 +122,20 @@ styles=[ '/flow/css/formCommon.css','/OwCommon/OwCommon.css' ]>
                                     </div>
                                 </div>
                             </td>
-                        </tr>
-                        <tr>
                             <td class="th">
                                 <div class="form-label">项目周期:</div>
                             </td>
                             <td>
                                 <div class="form-group">
                                     <div class="form-item">
-                                        <div class="z-comp-input" name="createReqVO$projectCycle"
-                                            <input type="text" value="${formEntity.projectCycle!}" />
+                                        <div class="z-comp-input" name="createReqVO$projectCycle">
+                                            <input type="text" value="${formEntity.projectCycle!}">
                                         </div>
                                     </div>
                                 </div>
                             </td>
+                        </tr>
+                        <tr>
                             <td class="th">
                                 <div class="form-label">拟采购方式:</div>
                             </td>

+ 1 - 1
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/ProcurementApplication/js/index.js

@@ -29,7 +29,7 @@
         console.log(JSON.stringify(postData.createReqVO))
         z.ui.ajax({
             type: "post",
-            url: "/procurement-application/update",
+            url: "/procurementApplication/update",
             data: JSON.stringify(postData.createReqVO),
 
             contentType: "application/json",

+ 0 - 41
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/OwCommon/OwCommon.css

@@ -1,41 +0,0 @@
-/**
-** Tab控件CSS样式
-**/
-.ow-tabs {
-    display: flex;
-    flex-direction: column;
-}
-.ow-tabs>.ow-tab-nav {
-    position: relative;
-}
-.ow-tabs>.ow-tab-nav::after {
-    content: "";
-    display: block;
-    position: absolute;
-    left: 0px;
-    right: 0px;
-    bottom: 0px;
-    border-bottom: 2px solid #E1E9F5;
-}
-.ow-tabs>.ow-tab-nav>.ow-tab-item {
-    display: inline-block;
-    padding: 8px 15px !important;
-    cursor: pointer;
-    position: relative;
-    z-index: 999;
-    border-bottom: 2px solid transparent;
-}
-.ow-tabs>.ow-tab-nav>.ow-tab-item:hover,
-.ow-tabs>.ow-tab-nav>.ow-tab-item.on {
-    border-bottom: 2px solid #2E77E6;
-    color: #2E77E6;
-}
-.ow-tabs>.ow-tab-scroll {
-    height: 0px;
-    flex-grow: 1;
-    /*overflow-y: auto;*/
-    margin-top: 15px;
-}
-.ow-tabs>.ow-tab-scroll.z-tab-content {
-    position: static;
-}

+ 0 - 26
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/OwCommon/OwCommon.js

@@ -1,26 +0,0 @@
-/**
- * TabScroll控件JS交互效果
- * **/
-;(function(_g){
-    function TabScroll(){
-        if(!$) throw new Error("$未定义,请先引入jQuery库!");
-        $(".ow-tab-content").hide(0);
-        var dataName = $(".ow-tab-item").removeClass('on').eq(0).addClass("on").attr("data-name")
-        $("[name='"+dataName+"']").show();
-        return this;
-    }
-    TabScroll.prototype = {
-        init: function(handle){
-            $(".ow-tab-item").click(function(){
-                $(".ow-tab-item").removeClass('on')
-                var dataName = $(this).addClass("on").attr('data-name');
-                $(".ow-tab-content").hide(0);
-                $("[name='"+dataName+"']").show();
-                if(handle){
-                    handle($(this))
-                }
-            })
-        }
-    }
-    new TabScroll().init()
-})(window);

+ 0 - 334
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/flow/css/formCommon.css

@@ -1,334 +0,0 @@
-* {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-}
-.form-wrap-title {
-  font-size: 18px;
-  color: #2d333c;
-  font-weight: bold;
-  display: flex;
-  align-items: center;
-  padding: 10px;
-}
-.form-wrap-title > i {
-  width: 18px;
-  height: 18px;
-  margin-right: 5px;
-  background: url("./imgs/form-wrap-title-icon.png") no-repeat;
-  background-size: 100% 100%;
-}
-.form-group {
-}
-.form-label {
-  color: #404956;
-  font-size: 16px;
-  white-space: nowrap;
-}
-.form-item {
-  width: 100%;
-}
-.form-group .form-label {
-  margin-bottom: 10px;
-}
-.form-item input[type="text"],
-.form-item input[type="number"],
-.form-item textarea,
-.form-item .z-comp-input,
-.form-item .z-radio-item,
-.form-item .z-comp-inputsearch,
-.form-item .z-comp-inputselect,
-.form-item .z-comp-select,
-.form-item .z-comp-select .z-inputselect-bar > span,
-.form-item .z-comp-selectsearch,
-.form-item .z-comp-selecttree,
-.form-item .z-checkbox-item,
-.form-item .z-comp-textarea,
-.form-item .z-selecttree {
-  font-size: 16px;
-  color: #121518;
-}
-.form-item .z-readonly input,
-.form-item .z-readonly textarea {
-  background: #ebedf0;
-}
-
-.z-comp-date{
-  border: 1px solid #DEE0E3;
-}
-.z-readonly{
-  background: #ebedf0;
-}
-.z-readonly input{
-  background: #ebedf0;
-}
-/** 表格样式 **/
-.table-wrap table {
-  margin-top: 10px;
-  width: 100%;
-  border-collapse: collapse;
-}
-.table-wrap thead {
-  background: #f2f4f8;
-}
-.table-wrap tr {
-  border: 1px solid #e8ebf1;
-}
-.table-wrap th {
-  font-weight: 500;
-  font-size: 16px;
-  color: #505a69;
-}
-.table-wrap table th,
-.table-wrap table td {
-  padding: 5px 10px;
-  font-size: 16px;
-}
-
-.table-wrap table td input {
-  font-size: 16px;
-}
-
-.form-boss {
-  padding: 20px 30px;
-}
-
-.form-title {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  margin: 20px 0px 10px 0;
-}
-
-.form-title .form-icon {
-  display: flex;
-  align-items: center;
-}
-
-.form-title .form-icon span {
-  font-weight: 600;
-  font-size: 17px;
-}
-.btns-form-box .z-comp-input {
-  display: flex;
-  align-items: center;
-}
-.btns-form-box .z-comp-input input {
-  width: calc(100% - 50px);
-}
-.form-title .form-btn {
-  display: flex;
-  align-items: center;
-}
-.z-comp-date{
-  background-color: #fff;
-}
-.form-title .form-btn button,
-.form-title .form-btn div {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 28px;
-  border-radius: 4px 4px 4px 4px;
-  padding: 0 10px;
-  border: 1px solid #2e77e6;
-  cursor: pointer;
-  background: none;
-}
-
-.form-title .form-btn button[disabled]{
-  border-color: #cbd1d6;
-}
-.form-title .form-btn button[disabled] span {
-  color: #cbd1d6;
-}
-.form-title .form-btn button[disabled] img {
-  filter: grayscale(100%);
-  opacity: 40%;
-}
-.form-title .form-btn button span,
-.form-title .form-btn div span {
-  font-size: 16px;
-  color: #2e77e6;
-}
-
-.form-title img {
-  margin-right: 10px;
-}
-.form-table-disable .z-comp-input,
-.form-table-disable .z-comp-inputsearch,
-.form-table-disable .z-comp-inputselect,
-.form-table-disable .z-comp-select,
-.form-table-disable .z-comp-selectsearch,
-.form-table-disable .z-comp-selecttree,
-.form-table-disable .z-comp-textarea,
-.form-table-disable .z-selecttree,
-.form-table-disable .z-comp-input,
-.form-table-disable .z-comp-date,
-.form-table-disable .z-comp-laydate,
-.form-table-disable .z-comp-dateTime,
-.form-table-disable input {
-  border: 0px;
-  background: none !important;
-}
-.form-table-disable .z-inputselect-bar i,
-.form-table-disable .z-comp-dateTime span,
-.form-table-disable .z-select-closebtn {
-  display: none !important;
-}
-.jbxx-box {
-  background-color: #f7f8fb;
-  padding: 20px 60px;
-}
-.jbxx-table-info {
-  width: calc(100%);
-  border-collapse: collapse;
-  border: none;
-  table-layout: fixed; /* 将表格布局设置为固定布局 */
-}
-.attendance-type-show {
-  display: none !important;
-}
-
-.jbxx-table-info tr {
-  height: 60px;
-}
-
-.jbxx-table-info tr td {
-  padding: 0 15px;
-  box-sizing: border-box;
-}
-
-/* .jbxx-table-info tr td:nth-child(2n-1) {
-  width: 170px;
-  text-align: right;
-} */
-
-/* .jbxx-table-info tr td:nth-child(2n) {
-  text-align: left;
-  width: calc(50% - 170px);
-} */
-.jbxx-box-flex .th {
-  width: 160px !important;
-  text-align: right;
-}
-.jbxx-box-flex>table>tbody>tr {
-  display: flex;
-  height: auto !important;
-}
-.jbxx-box-flex>table>tbody>tr>td {
-  padding: 10px 10px;
-}
-.jbxx-box-flex>table>tbody>tr>td:not(.th) {
-  flex: 1;
-}
-.form-td-table table {
-  width: 100%;
-  border-collapse: collapse;
-  border: none;
-  table-layout: fixed; /* 将表格布局设置为固定布局 */
-  border: 1px solid #d4dae3;
-  border-radius: 4px;
-  background: #fff;
-}
-.form-td-table table tr {
-  height: 40px;
-}
-.form-td-table table tr td {
-  text-align: left !important;
-  height: 40px;
-}
-.form-td-table table tr:nth-child(1) {
-  background-color: #e6e9ef;
-}
-.form-td-table table tr:nth-child(2) td:nth-child(3) {
-  border: 1px solid #d4dae3;
-}
-.form-td-table table tr:nth-child(2) td:nth-child(4) {
-  border: 1px solid #d4dae3;
-}
-.form-td-table table tr:nth-child(2) td:nth-child(5) {
-  border: 1px solid #d4dae3;
-}
-.form-td-table-two table {
-  width: 100%;
-  border-collapse: collapse;
-  border: none;
-  table-layout: fixed; /* 将表格布局设置为固定布局 */
-  border: 1px solid #d4dae3;
-  border-radius: 4px;
-  margin-top: 20px;
-  margin-bottom: 12px;
-  background: #fff;
-  
-}
-.form-td-table-two table tr {
-  height: 40px;
-}
-.form-td-table-two table tr td {
-  text-align: left !important;
-  height: 40px;
-}
-.form-td-table-two table tr td{
-  border: 1px solid #D4DAE3;
-}
-.form-td-table-two table tr td:nth-child(2n-1) {
-  background-color: #e6e9ef;
-}
-.qjsjxx-box {
-  width: 100%;
-}
-
-.qjsjxx-box .form-table-info {
-  width: 100%;
-  border-collapse: collapse;
-  border: none;
-}
-
-.qjsjxx-box .form-table-info tr {
-  height: 63px;
-  background-color: #fff;
-  border: 1px solid #e8ebf1;
-}
-
-.qjsjxx-box .form-table-info tr td {
-  padding: 0 15px;
-}
-
-.qjsjxx-box .form-table-info tr td .form-flex {
-  display: flex;
-  align-items: center;
-}
-
-.qjsjxx-box .form-table-info tr td .form-flex .nbsp {
-  margin-left: 33px;
-  line-height: 63px;
-}
-
-.qjsjxx-box .form-table-info tr:nth-child(1) {
-  background-color: #f2f4f8;
-  height: 37px;
-}
-
-.qjsjxx-box .form-table-info tr:nth-child(1) td {
-  text-align: left;
-  color: #505a69;
-}
-
-.form-table-info .table-btn {
-  padding: 0 15px;
-  height: 32px;
-  background: #f7f8fa;
-  border-radius: 4px 4px 4px 4px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  cursor: pointer;
-}
-
-.form-table-info .table-btn span {
-  color: #2e77e6;
-}
-.z-hide {
-  display: none !important;
-}

+ 0 - 163
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/flow/js/formCommon.js

@@ -1,163 +0,0 @@
-function allowUserClick(even, treeNode, clickFlag) {
-    if(treeNode.type !== 3){
-        return false;
-    }
-}
-
-function allowChildClick(even, treeNode, clickFlag) {
-    if(treeNode.isParent){
-        return false;
-    }
-}
-
-function removeElementByIndex(arr, index) {
-    if (index > -1 && index < arr.length) {
-        return arr.slice(0, index).concat(arr.slice(index + 1));
-    }
-    return arr; // 如果索引无效,返回原始数组
-}
-
-function selecttree(selector,data,callback,beforeClick,onCloseBtn,loadSuccess){
-    var wid = $(selector).width();
-    z.ui.selecttree(selector).init({
-        panelwidth: wid,
-        panelheight: 400,
-        view:
-            {
-                defaultOpen: true,
-                iconCls:
-                    function (val) {
-                        if (val.type === 1) {
-                            return "z-tree-icon-dep";
-                        } else if (val.type === 2) {
-                            return "z-tree-icon-person";
-                        } else if (val.type === 3) {
-                            return "z-tree-icon-worker";
-                        }
-                    }
-            }
-        ,
-        search: {
-            enable: true
-        },
-        check: {
-            enable: false
-        },
-        treedata: data,
-        onCloseBtnClick: onCloseBtn,
-        callback: {
-            beforeClick: beforeClick,
-            onClick: callback,
-            onLoadSuccess: loadSuccess
-        }
-    });
-}
-
-function selectMutiTree(selector,data,onCloseBtn,callback,loadSuccess,beforeCheck,type){
-    var wid = $(selector).width();
-    z.ui.selecttree(selector).init({
-        panelwidth: wid,
-        panelheight: 500,
-        checkchildstate: 3,
-        view:
-            {
-                defaultOpen: false,
-                iconCls:
-                    function (val) {
-                        if (val.type === 1) {
-                            return "z-tree-icon-dep";
-                        } else if (val.type === 2) {
-                            return "z-tree-icon-person";
-                        } else if (val.type === 3) {
-                            return "z-tree-icon-worker";
-                        }
-                    }
-            }
-        ,
-        search: {
-            enable: true
-        },
-        check: {
-            enable: true,
-            chkboxType: type
-        },
-        treedata: data,
-        onCloseBtnClick: onCloseBtn,
-        callback: {
-            onLoadSuccess: loadSuccess,
-            onCheck: callback,
-            beforeCheck: beforeCheck
-        }
-    });
-}
-
-function selectProject(flowInstanceId,callback) {
-    z.ui.modal("ProjectModal").init({
-        type: 'get',
-        url: z.ui.comm.getEntranceUrl("/flow/project/list"),
-        data: {},
-        title: "选择项目",
-        width:$(window).width()-100,
-        height:$(window).height()-100,
-        onAfterClose:function(res){
-            if(res){
-                if(typeof callback === 'function'){
-                    callback(res);
-                }
-            }
-        }
-    });
-}
-function selectProjectAll(flowInstanceId,callback) {
-    z.ui.modal("ProjectModal").init({
-        type: 'get',
-        url: z.ui.comm.getEntranceUrl("/flow/project/listAll"),
-        data: {},
-        title: "选择项目",
-        width:$(window).width()-100,
-        height:$(window).height()-100,
-        onAfterClose:function(res){
-            if(res){
-                if(typeof callback === 'function'){
-                    callback(res);
-                }
-            }
-        }
-    });
-}
-function selectContract(projectId,callback) {
-    z.ui.modal("ContractModal").init({
-        type: 'get',
-        url: z.ui.comm.getEntranceUrl("/flow/contract/list"),
-        data: {"projectId":projectId},
-        title: "选择合同",
-        width:$(window).width()-100,
-        height:$(window).height()-100,
-        onAfterClose:function(res){
-            if(res){
-                if(typeof callback === 'function'){
-                    callback(res);
-                }
-            }
-        }
-    });
-}
-
-
-function selectMilestone(contractId,callback) {
-    z.ui.modal("MilestoneModal").init({
-        type: 'get',
-        url: z.ui.comm.getEntranceUrl("/flow/contract/milestone/list"),
-        data: {"contractId": contractId},
-        title: "选择合同里程碑",
-        width:$(window).width()-100,
-        height:$(window).height()-100,
-        onAfterClose:function(res){
-            if(res){
-                if(typeof callback === 'function'){
-                    callback(res);
-                }
-            }
-        }
-    });
-}

BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/addIcon.png


BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/down_disabled_icon.png


BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/down_icon.png


BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/form-wrap-title-icon.png


BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/titleIcon.png


BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/up_disabled_icon.png


BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/imgs/up_icon.png


+ 0 - 111
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/index.html

@@ -1,111 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="UTF-8">
-	<title>首页</title>
-	<!-- jQuery:操作 dom、发起请求等 -->
-	<script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.1.2/jquery.min.js" type="application/javascript"></script>
-
-	<script type="application/javascript">
-
-    /**
-     * 跳转单点登录
-     */
-    function passwordLogin() {
-      window.location.href = '/login.html'
-    }
-
-    /**
-     * 刷新令牌
-     */
-    function refreshToken() {
-      const refreshToken = localStorage.getItem('REFRESH-TOKEN');
-      if (!refreshToken) {
-        alert("获取不到刷新令牌");
-        return;
-      }
-      $.ajax({
-        url: "http://60.191.110.205:28080/admin-api/system/oauth2/refresh-token?refreshToken=" + refreshToken,
-        method: 'POST',
-        success: function (result) {
-          if (result.code !== 0) {
-            alert('刷新访问令牌失败,原因:' + result.msg)
-            return;
-          }
-          alert('更新访问令牌成功!');
-          $('#accessTokenSpan').html(result.data.access_token);
-
-          // 设置到 localStorage 中
-          localStorage.setItem('ACCESS-TOKEN', result.data.access_token);
-          localStorage.setItem('REFRESH-TOKEN', result.data.refresh_token);
-        }
-      });
-    }
-
-    /**
-     * 登出,删除访问令牌
-     */
-    function logout() {
-      const accessToken = localStorage.getItem('ACCESS-TOKEN');
-      if (!accessToken) {
-        location.reload();
-        return;
-      }
-      $.ajax({
-        url: "http://127.0.0.1:48080/admin-api/system/oauth2/logout",
-        method: 'POST',
-        headers: {
-          'Authorization': 'Bearer ' + accessToken
-        },
-        success: function (result) {
-          if (result.code !== 0) {
-            alert('退出登录失败,原因:' + result.msg)
-            return;
-          }
-          alert('退出登录成功!');
-          // 删除 localStorage 中
-          localStorage.removeItem('ACCESS-TOKEN');
-          localStorage.removeItem('REFRESH-TOKEN');
-
-          location.reload();
-        }
-      });
-    }
-
-    $(function () {
-      const accessToken = localStorage.getItem('ACCESS-TOKEN');
-      // 情况一:未登录
-      if (!accessToken) {
-        $('#noLoginDiv').css("display", "block");
-        return;
-      }
-
-      // 情况二:已登录
-      $('#yesLoginDiv').css("display", "block");
-      $('#accessTokenSpan').html(accessToken);
-    })
-	</script>
-</head>
-<body>
-<!-- 情况一:未登录:1)跳转 ruoyi-vue-pro 的 SSO 登录页 -->
-<div id="noLoginDiv" style="display: none">
-	您未登录,点击 <a href="#" onclick="passwordLogin()">跳转 </a> 账号密码登录
-</div>
-
-<!-- 情况二:已登录:1)展示用户信息;2)刷新访问令牌;3)退出登录 -->
-<div id="yesLoginDiv" style="display: none">
-	您已登录!<button onclick="logout()">退出登录</button> <br />
-	访问令牌:<span id="accessTokenSpan"> 加载中... </span> <button onclick="refreshToken()">刷新令牌</button> <br />
-</div>
-</body>
-<style>
-    body { /** 页面居中 */
-        border-radius: 20px;
-        height: 350px;
-        position: absolute;
-        left: 50%;
-        top: 50%;
-        transform: translate(-50%,-50%);
-    }
-</style>
-</html>

+ 0 - 3618
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/js/district.js

@@ -1,3618 +0,0 @@
-var districtMap = {
-  '1': '中国',
-  '2': '蒙古',
-  '3': '朝鲜',
-  '4': '韩国',
-  '5': '日本',
-  '6': '菲律宾',
-  '7': '越南',
-  '8': '老挝',
-  '9': '柬埔寨',
-  '10': '缅甸',
-  '11': '泰国',
-  '12': '马来西亚',
-  '13': '文莱',
-  '14': '新加坡',
-  '15': '印度尼西亚',
-  '16': '东帝汶',
-  '17': '尼泊尔',
-  '18': '不丹',
-  '19': '孟加拉国',
-  '20': '印度',
-  '21': '巴基斯坦',
-  '22': '斯里兰卡',
-  '23': '马尔代夫',
-  '24': '哈萨克斯坦',
-  '25': '吉尔吉斯斯坦',
-  '26': '塔吉克斯坦',
-  '27': '乌兹别克斯坦',
-  '28': '土库曼斯坦',
-  '29': '阿富汗',
-  '30': '伊拉克',
-  '31': '伊朗',
-  '32': '叙利亚',
-  '33': '约旦',
-  '34': '黎巴嫩',
-  '35': '以色列',
-  '36': '巴勒斯坦',
-  '37': '沙特阿拉伯',
-  '38': '巴林',
-  '39': '卡塔尔',
-  '40': '科威特',
-  '41': '阿拉伯联合酋长国',
-  '42': '阿曼',
-  '43': '也门',
-  '44': '格鲁吉亚',
-  '45': '亚美尼亚',
-  '46': '阿塞拜疆',
-  '47': '土耳其',
-  '48': '塞浦路斯',
-  '49': '芬兰',
-  '50': '瑞典',
-  '51': '挪威',
-  '52': '冰岛',
-  '53': '丹麦',
-  '54': '爱沙尼亚',
-  '55': '拉脱维亚',
-  '56': '立陶宛',
-  '57': '白俄罗斯',
-  '58': '俄罗斯',
-  '59': '乌克兰',
-  '60': '摩尔多瓦',
-  '61': '波兰',
-  '62': '捷克',
-  '63': '斯洛伐克',
-  '64': '匈牙利',
-  '65': '德国',
-  '66': '奥地利',
-  '67': '瑞士',
-  '68': '列支敦士登',
-  '69': '英国',
-  '70': '爱尔兰',
-  '71': '荷兰',
-  '72': '比利时',
-  '73': '卢森堡',
-  '74': '法国',
-  '75': '摩纳哥',
-  '76': '罗马尼亚',
-  '77': '保加利亚',
-  '78': '塞尔维亚',
-  '79': '马其顿',
-  '80': '阿尔巴尼亚',
-  '81': '希腊',
-  '82': '斯洛文尼亚',
-  '83': '克罗地亚',
-  '84': '波斯尼亚和墨塞哥维那',
-  '85': '意大利',
-  '86': '梵蒂冈',
-  '87': '圣马力诺',
-  '88': '马耳他',
-  '89': '西班牙',
-  '90': '葡萄牙',
-  '91': '安道尔共和国',
-  '92': '埃及',
-  '93': '利比亚',
-  '94': '苏丹',
-  '95': '突尼斯',
-  '96': '阿尔及利亚',
-  '97': '摩洛哥',
-  '98': '亚速尔群岛',
-  '99': '马德拉群岛',
-  '100': '埃塞俄比亚',
-  '101': '厄立特里亚',
-  '102': '索马里',
-  '103': '吉布提',
-  '104': '肯尼亚',
-  '105': '坦桑尼亚',
-  '106': '乌干达',
-  '107': '卢旺达',
-  '108': '布隆迪',
-  '109': '塞舌尔',
-  '110': '圣多美及普林西比',
-  '111': '塞内加尔',
-  '112': '冈比亚',
-  '113': '马里',
-  '114': '布基纳法索',
-  '115': '几内亚',
-  '116': '几内亚比绍',
-  '117': '佛得角',
-  '118': '塞拉利昂',
-  '119': '利比里亚',
-  '120': '科特迪瓦',
-  '121': '加纳',
-  '122': '多哥',
-  '123': '贝宁',
-  '124': '尼日尔',
-  '125': '加那利群岛',
-  '126': '赞比亚',
-  '127': '安哥拉',
-  '128': '津巴布韦',
-  '129': '马拉维',
-  '130': '莫桑比克',
-  '131': '博茨瓦纳',
-  '132': '纳米比亚',
-  '133': '南非',
-  '134': '斯威士兰',
-  '135': '莱索托',
-  '136': '马达加斯加',
-  '137': '科摩罗',
-  '138': '毛里求斯',
-  '139': '留尼旺',
-  '140': '圣赫勒拿',
-  '141': '澳大利亚',
-  '142': '新西兰',
-  '143': '巴布亚新几内亚',
-  '144': '所罗门群岛',
-  '145': '瓦努阿图共和国',
-  '146': '密克罗尼西亚',
-  '147': '马绍尔群岛',
-  '148': '帕劳',
-  '149': '瑙鲁',
-  '150': '基里巴斯',
-  '151': '图瓦卢',
-  '152': '萨摩亚',
-  '153': '斐济',
-  '154': '汤加',
-  '155': '库克群岛',
-  '156': '关岛',
-  '157': '新喀里多尼亚',
-  '158': '法属波利尼西亚',
-  '159': '皮特凯恩岛',
-  '160': '瓦利斯与富图纳',
-  '161': '纽埃',
-  '162': '托克劳',
-  '163': '美属萨摩亚',
-  '164': '北马里亚纳',
-  '165': '加拿大',
-  '166': '美国',
-  '167': '墨西哥',
-  '168': '格陵兰',
-  '169': '危地马拉',
-  '170': '伯利兹',
-  '171': '萨尔瓦多',
-  '172': '洪都拉斯',
-  '173': '尼加拉瓜',
-  '174': '哥斯达黎加',
-  '175': '巴拿马',
-  '176': '巴哈马',
-  '177': '古巴',
-  '178': '牙买加',
-  '179': '海地',
-  '180': '多米尼加共和国',
-  '181': '安提瓜和巴布达',
-  '182': '圣基茨和尼维斯',
-  '183': '多米尼克',
-  '184': '圣卢西亚',
-  '185': '圣文森特和格林纳丁斯',
-  '186': '格林纳达',
-  '187': '巴巴多斯',
-  '188': '特立尼达和多巴哥',
-  '189': '波多黎各',
-  '190': '英属维尔京群岛',
-  '191': '美属维尔京群岛',
-  '192': '安圭拉',
-  '193': '蒙特塞拉特岛',
-  '194': '瓜德罗普',
-  '195': '马提尼克',
-  '196': '荷属安的列斯',
-  '197': '阿鲁巴',
-  '198': '特克斯和凯科斯群岛',
-  '199': '开曼群岛',
-  '200': '百慕大',
-  '201': '哥伦比亚',
-  '202': '委内瑞拉',
-  '203': '圭亚那',
-  '204': '法属圭亚那',
-  '205': '苏里南',
-  '206': '厄瓜多尔',
-  '207': '秘鲁',
-  '208': '玻利维亚',
-  '209': '巴西',
-  '210': '智利',
-  '211': '阿根廷',
-  '212': '乌拉圭',
-  '213': '巴拉圭',
-  '214': '波黑',
-  '215': '直布罗陀',
-  '216': '新喀里多尼亚群岛',
-  '217': '瓦利斯和富图纳群岛',
-  '218': '泽西岛',
-  '219': '黑山',
-  '220': '英属马恩岛',
-  '221': '尼日利亚',
-  '222': '喀麦隆',
-  '223': '加蓬',
-  '224': '乍得',
-  '225': '刚果共和国',
-  '226': '中非共和国',
-  '227': '南苏丹',
-  '228': '赤道几内亚',
-  '229': '毛里塔尼亚',
-  '230': '刚果民主共和国',
-  '231': '留尼汪岛',
-  '232': '格陵兰岛',
-  '233': '法罗群岛',
-  '234': '根西岛',
-  '235': '百慕大群岛',
-  '236': '圣皮埃尔和密克隆群岛',
-  '237': '法属圣马丁',
-  '238': '奥兰群岛',
-  '239': '北马里亚纳群岛',
-  '240': '库拉索',
-  '241': '博内尔岛',
-  '242': '圣马丁岛',
-  '243': '圣巴泰勒米岛',
-  '244': '福克兰群岛',
-  '245': '圣多美和普林西比',
-  '246': '英属印度洋领地',
-  '247': '东萨摩亚',
-  '248': '诺福克岛',
-  '110000': '北京',
-  '120000': '天津',
-  '130000': '河北省',
-  '140000': '山西省',
-  '150000': '内蒙古自治区',
-  '210000': '辽宁省',
-  '220000': '吉林省',
-  '230000': '黑龙江省',
-  '310000': '上海',
-  '320000': '江苏省',
-  '330000': '浙江省',
-  '340000': '安徽省',
-  '350000': '福建省',
-  '360000': '江西省',
-  '370000': '山东省',
-  '410000': '河南省',
-  '420000': '湖北省',
-  '430000': '湖南省',
-  '440000': '广东省',
-  '450000': '广西壮族自治区',
-  '460000': '海南省',
-  '500000': '重庆',
-  '510000': '四川省',
-  '520000': '贵州省',
-  '530000': '云南省',
-  '540000': '西藏自治区',
-  '610000': '陕西省',
-  '620000': '甘肃省',
-  '630000': '青海省',
-  '640000': '宁夏回族自治区',
-  '650000': '新疆维吾尔自治区',
-  '110100': '北京市',
-  '120100': '天津市',
-  '130100': '石家庄市',
-  '130200': '唐山市',
-  '130300': '秦皇岛市',
-  '130400': '邯郸市',
-  '130500': '邢台市',
-  '130600': '保定市',
-  '130700': '张家口市',
-  '130800': '承德市',
-  '130900': '沧州市',
-  '131000': '廊坊市',
-  '131100': '衡水市',
-  '140100': '太原市',
-  '140200': '大同市',
-  '140300': '阳泉市',
-  '140400': '长治市',
-  '140500': '晋城市',
-  '140600': '朔州市',
-  '140700': '晋中市',
-  '140800': '运城市',
-  '140900': '忻州市',
-  '141000': '临汾市',
-  '141100': '吕梁市',
-  '150100': '呼和浩特市',
-  '150200': '包头市',
-  '150300': '乌海市',
-  '150400': '赤峰市',
-  '150500': '通辽市',
-  '150600': '鄂尔多斯市',
-  '150700': '呼伦贝尔市',
-  '150800': '巴彦淖尔市',
-  '150900': '乌兰察布市',
-  '152200': '兴安盟',
-  '152500': '锡林郭勒盟',
-  '152900': '阿拉善盟',
-  '210100': '沈阳市',
-  '210200': '大连市',
-  '210300': '鞍山市',
-  '210400': '抚顺市',
-  '210500': '本溪市',
-  '210600': '丹东市',
-  '210700': '锦州市',
-  '210800': '营口市',
-  '210900': '阜新市',
-  '211000': '辽阳市',
-  '211100': '盘锦市',
-  '211200': '铁岭市',
-  '211300': '朝阳市',
-  '211400': '葫芦岛市',
-  '220100': '长春市',
-  '220200': '吉林市',
-  '220300': '四平市',
-  '220400': '辽源市',
-  '220500': '通化市',
-  '220600': '白山市',
-  '220700': '松原市',
-  '220800': '白城市',
-  '222400': '延边朝鲜族自治州',
-  '230100': '哈尔滨市',
-  '230200': '齐齐哈尔市',
-  '230300': '鸡西市',
-  '230400': '鹤岗市',
-  '230500': '双鸭山市',
-  '230600': '大庆市',
-  '230700': '伊春市',
-  '230800': '佳木斯市',
-  '230900': '七台河市',
-  '231000': '牡丹江市',
-  '231100': '黑河市',
-  '231200': '绥化市',
-  '232700': '大兴安岭地区',
-  '310100': '上海市',
-  '320100': '南京市',
-  '320200': '无锡市',
-  '320300': '徐州市',
-  '320400': '常州市',
-  '320500': '苏州市',
-  '320600': '南通市',
-  '320700': '连云港市',
-  '320800': '淮安市',
-  '320900': '盐城市',
-  '321000': '扬州市',
-  '321100': '镇江市',
-  '321200': '泰州市',
-  '321300': '宿迁市',
-  '330100': '杭州市',
-  '330200': '宁波市',
-  '330300': '温州市',
-  '330400': '嘉兴市',
-  '330500': '湖州市',
-  '330600': '绍兴市',
-  '330700': '金华市',
-  '330800': '衢州市',
-  '330900': '舟山市',
-  '331000': '台州市',
-  '331100': '丽水市',
-  '340100': '合肥市',
-  '340200': '芜湖市',
-  '340300': '蚌埠市',
-  '340400': '淮南市',
-  '340500': '马鞍山市',
-  '340600': '淮北市',
-  '340700': '铜陵市',
-  '340800': '安庆市',
-  '341000': '黄山市',
-  '341100': '滁州市',
-  '341200': '阜阳市',
-  '341300': '宿州市',
-  '341500': '六安市',
-  '341600': '亳州市',
-  '341700': '池州市',
-  '341800': '宣城市',
-  '350100': '福州市',
-  '350200': '厦门市',
-  '350300': '莆田市',
-  '350400': '三明市',
-  '350500': '泉州市',
-  '350600': '漳州市',
-  '350700': '南平市',
-  '350800': '龙岩市',
-  '350900': '宁德市',
-  '360100': '南昌市',
-  '360200': '景德镇市',
-  '360300': '萍乡市',
-  '360400': '九江市',
-  '360500': '新余市',
-  '360600': '鹰潭市',
-  '360700': '赣州市',
-  '360800': '吉安市',
-  '360900': '宜春市',
-  '361000': '抚州市',
-  '361100': '上饶市',
-  '370100': '济南市',
-  '370200': '青岛市',
-  '370300': '淄博市',
-  '370400': '枣庄市',
-  '370500': '东营市',
-  '370600': '烟台市',
-  '370700': '潍坊市',
-  '370800': '济宁市',
-  '370900': '泰安市',
-  '371000': '威海市',
-  '371100': '日照市',
-  '371300': '临沂市',
-  '371400': '德州市',
-  '371500': '聊城市',
-  '371600': '滨州市',
-  '371700': '菏泽市',
-  '410100': '郑州市',
-  '410200': '开封市',
-  '410300': '洛阳市',
-  '410400': '平顶山市',
-  '410500': '安阳市',
-  '410600': '鹤壁市',
-  '410700': '新乡市',
-  '410800': '焦作市',
-  '410900': '濮阳市',
-  '411000': '许昌市',
-  '411100': '漯河市',
-  '411200': '三门峡市',
-  '411300': '南阳市',
-  '411400': '商丘市',
-  '411500': '信阳市',
-  '411600': '周口市',
-  '411700': '驻马店市',
-  '419000': '省直辖县级行政区划',
-  '420100': '武汉市',
-  '420200': '黄石市',
-  '420300': '十堰市',
-  '420500': '宜昌市',
-  '420600': '襄阳市',
-  '420700': '鄂州市',
-  '420800': '荆门市',
-  '420900': '孝感市',
-  '421000': '荆州市',
-  '421100': '黄冈市',
-  '421200': '咸宁市',
-  '421300': '随州市',
-  '422800': '恩施土家族苗族自治州',
-  '429000': '省直辖县级行政区划',
-  '430100': '长沙市',
-  '430200': '株洲市',
-  '430300': '湘潭市',
-  '430400': '衡阳市',
-  '430500': '邵阳市',
-  '430600': '岳阳市',
-  '430700': '常德市',
-  '430800': '张家界市',
-  '430900': '益阳市',
-  '431000': '郴州市',
-  '431100': '永州市',
-  '431200': '怀化市',
-  '431300': '娄底市',
-  '433100': '湘西土家族苗族自治州',
-  '440100': '广州市',
-  '440200': '韶关市',
-  '440300': '深圳市',
-  '440400': '珠海市',
-  '440500': '汕头市',
-  '440600': '佛山市',
-  '440700': '江门市',
-  '440800': '湛江市',
-  '440900': '茂名市',
-  '441200': '肇庆市',
-  '441300': '惠州市',
-  '441400': '梅州市',
-  '441500': '汕尾市',
-  '441600': '河源市',
-  '441700': '阳江市',
-  '441800': '清远市',
-  '441900': '东莞市',
-  '442000': '中山市',
-  '445100': '潮州市',
-  '445200': '揭阳市',
-  '445300': '云浮市',
-  '450100': '南宁市',
-  '450200': '柳州市',
-  '450300': '桂林市',
-  '450400': '梧州市',
-  '450500': '北海市',
-  '450600': '防城港市',
-  '450700': '钦州市',
-  '450800': '贵港市',
-  '450900': '玉林市',
-  '451000': '百色市',
-  '451100': '贺州市',
-  '451200': '河池市',
-  '451300': '来宾市',
-  '451400': '崇左市',
-  '460100': '海口市',
-  '460200': '三亚市',
-  '460300': '三沙市',
-  '460400': '儋州市',
-  '469000': '省直辖县级行政区划',
-  '500100': '重庆市',
-  '510100': '成都市',
-  '510300': '自贡市',
-  '510400': '攀枝花市',
-  '510500': '泸州市',
-  '510600': '德阳市',
-  '510700': '绵阳市',
-  '510800': '广元市',
-  '510900': '遂宁市',
-  '511000': '内江市',
-  '511100': '乐山市',
-  '511300': '南充市',
-  '511400': '眉山市',
-  '511500': '宜宾市',
-  '511600': '广安市',
-  '511700': '达州市',
-  '511800': '雅安市',
-  '511900': '巴中市',
-  '512000': '资阳市',
-  '513200': '阿坝藏族羌族自治州',
-  '513300': '甘孜藏族自治州',
-  '513400': '凉山彝族自治州',
-  '520100': '贵阳市',
-  '520200': '六盘水市',
-  '520300': '遵义市',
-  '520400': '安顺市',
-  '520500': '毕节市',
-  '520600': '铜仁市',
-  '522300': '黔西南布依族苗族自治州',
-  '522600': '黔东南苗族侗族自治州',
-  '522700': '黔南布依族苗族自治州',
-  '530100': '昆明市',
-  '530300': '曲靖市',
-  '530400': '玉溪市',
-  '530500': '保山市',
-  '530600': '昭通市',
-  '530700': '丽江市',
-  '530800': '普洱市',
-  '530900': '临沧市',
-  '532300': '楚雄彝族自治州',
-  '532500': '红河哈尼族彝族自治州',
-  '532600': '文山壮族苗族自治州',
-  '532800': '西双版纳傣族自治州',
-  '532900': '大理白族自治州',
-  '533100': '德宏傣族景颇族自治州',
-  '533300': '怒江傈僳族自治州',
-  '533400': '迪庆藏族自治州',
-  '540100': '拉萨市',
-  '540200': '日喀则市',
-  '540300': '昌都市',
-  '540400': '林芝市',
-  '540500': '山南市',
-  '540600': '那曲市',
-  '542500': '阿里地区',
-  '610100': '西安市',
-  '610200': '铜川市',
-  '610300': '宝鸡市',
-  '610400': '咸阳市',
-  '610500': '渭南市',
-  '610600': '延安市',
-  '610700': '汉中市',
-  '610800': '榆林市',
-  '610900': '安康市',
-  '611000': '商洛市',
-  '620100': '兰州市',
-  '620200': '嘉峪关市',
-  '620300': '金昌市',
-  '620400': '白银市',
-  '620500': '天水市',
-  '620600': '武威市',
-  '620700': '张掖市',
-  '620800': '平凉市',
-  '620900': '酒泉市',
-  '621000': '庆阳市',
-  '621100': '定西市',
-  '621200': '陇南市',
-  '622900': '临夏回族自治州',
-  '623000': '甘南藏族自治州',
-  '630100': '西宁市',
-  '630200': '海东市',
-  '632200': '海北藏族自治州',
-  '632300': '黄南藏族自治州',
-  '632500': '海南藏族自治州',
-  '632600': '果洛藏族自治州',
-  '632700': '玉树藏族自治州',
-  '632800': '海西蒙古族藏族自治州',
-  '640100': '银川市',
-  '640200': '石嘴山市',
-  '640300': '吴忠市',
-  '640400': '固原市',
-  '640500': '中卫市',
-  '650100': '乌鲁木齐市',
-  '650200': '克拉玛依市',
-  '650400': '吐鲁番市',
-  '650500': '哈密市',
-  '652300': '昌吉回族自治州',
-  '652700': '博尔塔拉蒙古自治州',
-  '652800': '巴音郭楞蒙古自治州',
-  '652900': '阿克苏地区',
-  '653000': '克孜勒苏柯尔克孜自治州',
-  '653100': '喀什地区',
-  '653200': '和田地区',
-  '654000': '伊犁哈萨克自治州',
-  '654200': '塔城地区',
-  '654300': '阿勒泰地区',
-  '659000': '自治区直辖县级行政区划',
-  '110101': '东城区',
-  '110102': '西城区',
-  '110105': '朝阳区',
-  '110106': '丰台区',
-  '110107': '石景山区',
-  '110108': '海淀区',
-  '110109': '门头沟区',
-  '110111': '房山区',
-  '110112': '通州区',
-  '110113': '顺义区',
-  '110114': '昌平区',
-  '110115': '大兴区',
-  '110116': '怀柔区',
-  '110117': '平谷区',
-  '110118': '密云区',
-  '110119': '延庆区',
-  '120101': '和平区',
-  '120102': '河东区',
-  '120103': '河西区',
-  '120104': '南开区',
-  '120105': '河北区',
-  '120106': '红桥区',
-  '120110': '东丽区',
-  '120111': '西青区',
-  '120112': '津南区',
-  '120113': '北辰区',
-  '120114': '武清区',
-  '120115': '宝坻区',
-  '120116': '滨海新区',
-  '120117': '宁河区',
-  '120118': '静海区',
-  '120119': '蓟州区',
-  '130102': '长安区',
-  '130104': '桥西区',
-  '130105': '新华区',
-  '130107': '井陉矿区',
-  '130108': '裕华区',
-  '130109': '藁城区',
-  '130110': '鹿泉区',
-  '130111': '栾城区',
-  '130121': '井陉县',
-  '130123': '正定县',
-  '130125': '行唐县',
-  '130126': '灵寿县',
-  '130127': '高邑县',
-  '130128': '深泽县',
-  '130129': '赞皇县',
-  '130130': '无极县',
-  '130131': '平山县',
-  '130132': '元氏县',
-  '130133': '赵县',
-  '130171': '石家庄高新技术产业开发区',
-  '130172': '石家庄循环化工园区',
-  '130181': '辛集市',
-  '130183': '晋州市',
-  '130184': '新乐市',
-  '130202': '路南区',
-  '130203': '路北区',
-  '130204': '古冶区',
-  '130205': '开平区',
-  '130207': '丰南区',
-  '130208': '丰润区',
-  '130209': '曹妃甸区',
-  '130224': '滦南县',
-  '130225': '乐亭县',
-  '130227': '迁西县',
-  '130229': '玉田县',
-  '130271': '河北唐山芦台经济开发区',
-  '130272': '唐山市汉沽管理区',
-  '130273': '唐山高新技术产业开发区',
-  '130274': '河北唐山海港经济开发区',
-  '130281': '遵化市',
-  '130283': '迁安市',
-  '130284': '滦州市',
-  '130302': '海港区',
-  '130303': '山海关区',
-  '130304': '北戴河区',
-  '130306': '抚宁区',
-  '130321': '青龙满族自治县',
-  '130322': '昌黎县',
-  '130324': '卢龙县',
-  '130371': '秦皇岛市经济技术开发区',
-  '130372': '北戴河新区',
-  '130402': '邯山区',
-  '130403': '丛台区',
-  '130404': '复兴区',
-  '130406': '峰峰矿区',
-  '130407': '肥乡区',
-  '130408': '永年区',
-  '130423': '临漳县',
-  '130424': '成安县',
-  '130425': '大名县',
-  '130426': '涉县',
-  '130427': '磁县',
-  '130430': '邱县',
-  '130431': '鸡泽县',
-  '130432': '广平县',
-  '130433': '馆陶县',
-  '130434': '魏县',
-  '130435': '曲周县',
-  '130471': '邯郸经济技术开发区',
-  '130473': '邯郸冀南新区',
-  '130481': '武安市',
-  '130502': '襄都区',
-  '130503': '信都区',
-  '130505': '任泽区',
-  '130506': '南和区',
-  '130522': '临城县',
-  '130523': '内丘县',
-  '130524': '柏乡县',
-  '130525': '隆尧县',
-  '130528': '宁晋县',
-  '130529': '巨鹿县',
-  '130530': '新河县',
-  '130531': '广宗县',
-  '130532': '平乡县',
-  '130533': '威县',
-  '130534': '清河县',
-  '130535': '临西县',
-  '130571': '河北邢台经济开发区',
-  '130581': '南宫市',
-  '130582': '沙河市',
-  '130602': '竞秀区',
-  '130606': '莲池区',
-  '130607': '满城区',
-  '130608': '清苑区',
-  '130609': '徐水区',
-  '130623': '涞水县',
-  '130624': '阜平县',
-  '130626': '定兴县',
-  '130627': '唐县',
-  '130628': '高阳县',
-  '130629': '容城县',
-  '130630': '涞源县',
-  '130631': '望都县',
-  '130632': '安新县',
-  '130633': '易县',
-  '130634': '曲阳县',
-  '130635': '蠡县',
-  '130636': '顺平县',
-  '130637': '博野县',
-  '130638': '雄县',
-  '130671': '保定高新技术产业开发区',
-  '130672': '保定白沟新城',
-  '130681': '涿州市',
-  '130682': '定州市',
-  '130683': '安国市',
-  '130684': '高碑店市',
-  '130702': '桥东区',
-  '130703': '桥西区',
-  '130705': '宣化区',
-  '130706': '下花园区',
-  '130708': '万全区',
-  '130709': '崇礼区',
-  '130722': '张北县',
-  '130723': '康保县',
-  '130724': '沽源县',
-  '130725': '尚义县',
-  '130726': '蔚县',
-  '130727': '阳原县',
-  '130728': '怀安县',
-  '130730': '怀来县',
-  '130731': '涿鹿县',
-  '130732': '赤城县',
-  '130771': '张家口经济开发区',
-  '130772': '张家口市察北管理区',
-  '130773': '张家口市塞北管理区',
-  '130802': '双桥区',
-  '130803': '双滦区',
-  '130804': '鹰手营子矿区',
-  '130821': '承德县',
-  '130822': '兴隆县',
-  '130824': '滦平县',
-  '130825': '隆化县',
-  '130826': '丰宁满族自治县',
-  '130827': '宽城满族自治县',
-  '130828': '围场满族蒙古族自治县',
-  '130871': '承德高新技术产业开发区',
-  '130881': '平泉市',
-  '130902': '新华区',
-  '130903': '运河区',
-  '130921': '沧县',
-  '130922': '青县',
-  '130923': '东光县',
-  '130924': '海兴县',
-  '130925': '盐山县',
-  '130926': '肃宁县',
-  '130927': '南皮县',
-  '130928': '吴桥县',
-  '130929': '献县',
-  '130930': '孟村回族自治县',
-  '130971': '河北沧州经济开发区',
-  '130972': '沧州高新技术产业开发区',
-  '130973': '沧州渤海新区',
-  '130981': '泊头市',
-  '130982': '任丘市',
-  '130983': '黄骅市',
-  '130984': '河间市',
-  '131002': '安次区',
-  '131003': '广阳区',
-  '131022': '固安县',
-  '131023': '永清县',
-  '131024': '香河县',
-  '131025': '大城县',
-  '131026': '文安县',
-  '131028': '大厂回族自治县',
-  '131071': '廊坊经济技术开发区',
-  '131081': '霸州市',
-  '131082': '三河市',
-  '131102': '桃城区',
-  '131103': '冀州区',
-  '131121': '枣强县',
-  '131122': '武邑县',
-  '131123': '武强县',
-  '131124': '饶阳县',
-  '131125': '安平县',
-  '131126': '故城县',
-  '131127': '景县',
-  '131128': '阜城县',
-  '131171': '河北衡水高新技术产业开发区',
-  '131172': '衡水滨湖新区',
-  '131182': '深州市',
-  '140105': '小店区',
-  '140106': '迎泽区',
-  '140107': '杏花岭区',
-  '140108': '尖草坪区',
-  '140109': '万柏林区',
-  '140110': '晋源区',
-  '140121': '清徐县',
-  '140122': '阳曲县',
-  '140123': '娄烦县',
-  '140171': '山西转型综合改革示范区',
-  '140181': '古交市',
-  '140212': '新荣区',
-  '140213': '平城区',
-  '140214': '云冈区',
-  '140215': '云州区',
-  '140221': '阳高县',
-  '140222': '天镇县',
-  '140223': '广灵县',
-  '140224': '灵丘县',
-  '140225': '浑源县',
-  '140226': '左云县',
-  '140271': '山西大同经济开发区',
-  '140302': '城区',
-  '140303': '矿区',
-  '140311': '郊区',
-  '140321': '平定县',
-  '140322': '盂县',
-  '140403': '潞州区',
-  '140404': '上党区',
-  '140405': '屯留区',
-  '140406': '潞城区',
-  '140423': '襄垣县',
-  '140425': '平顺县',
-  '140426': '黎城县',
-  '140427': '壶关县',
-  '140428': '长子县',
-  '140429': '武乡县',
-  '140430': '沁县',
-  '140431': '沁源县',
-  '140471': '山西长治高新技术产业园区',
-  '140502': '城区',
-  '140521': '沁水县',
-  '140522': '阳城县',
-  '140524': '陵川县',
-  '140525': '泽州县',
-  '140581': '高平市',
-  '140602': '朔城区',
-  '140603': '平鲁区',
-  '140621': '山阴县',
-  '140622': '应县',
-  '140623': '右玉县',
-  '140671': '山西朔州经济开发区',
-  '140681': '怀仁市',
-  '140702': '榆次区',
-  '140703': '太谷区',
-  '140721': '榆社县',
-  '140722': '左权县',
-  '140723': '和顺县',
-  '140724': '昔阳县',
-  '140725': '寿阳县',
-  '140727': '祁县',
-  '140728': '平遥县',
-  '140729': '灵石县',
-  '140781': '介休市',
-  '140802': '盐湖区',
-  '140821': '临猗县',
-  '140822': '万荣县',
-  '140823': '闻喜县',
-  '140824': '稷山县',
-  '140825': '新绛县',
-  '140826': '绛县',
-  '140827': '垣曲县',
-  '140828': '夏县',
-  '140829': '平陆县',
-  '140830': '芮城县',
-  '140881': '永济市',
-  '140882': '河津市',
-  '140902': '忻府区',
-  '140921': '定襄县',
-  '140922': '五台县',
-  '140923': '代县',
-  '140924': '繁峙县',
-  '140925': '宁武县',
-  '140926': '静乐县',
-  '140927': '神池县',
-  '140928': '五寨县',
-  '140929': '岢岚县',
-  '140930': '河曲县',
-  '140931': '保德县',
-  '140932': '偏关县',
-  '140971': '五台山风景名胜区',
-  '140981': '原平市',
-  '141002': '尧都区',
-  '141021': '曲沃县',
-  '141022': '翼城县',
-  '141023': '襄汾县',
-  '141024': '洪洞县',
-  '141025': '古县',
-  '141026': '安泽县',
-  '141027': '浮山县',
-  '141028': '吉县',
-  '141029': '乡宁县',
-  '141030': '大宁县',
-  '141031': '隰县',
-  '141032': '永和县',
-  '141033': '蒲县',
-  '141034': '汾西县',
-  '141081': '侯马市',
-  '141082': '霍州市',
-  '141102': '离石区',
-  '141121': '文水县',
-  '141122': '交城县',
-  '141123': '兴县',
-  '141124': '临县',
-  '141125': '柳林县',
-  '141126': '石楼县',
-  '141127': '岚县',
-  '141128': '方山县',
-  '141129': '中阳县',
-  '141130': '交口县',
-  '141181': '孝义市',
-  '141182': '汾阳市',
-  '150102': '新城区',
-  '150103': '回民区',
-  '150104': '玉泉区',
-  '150105': '赛罕区',
-  '150121': '土默特左旗',
-  '150122': '托克托县',
-  '150123': '和林格尔县',
-  '150124': '清水河县',
-  '150125': '武川县',
-  '150172': '呼和浩特经济技术开发区',
-  '150202': '东河区',
-  '150203': '昆都仑区',
-  '150204': '青山区',
-  '150205': '石拐区',
-  '150206': '白云鄂博矿区',
-  '150207': '九原区',
-  '150221': '土默特右旗',
-  '150222': '固阳县',
-  '150223': '达尔罕茂明安联合旗',
-  '150271': '包头稀土高新技术产业开发区',
-  '150302': '海勃湾区',
-  '150303': '海南区',
-  '150304': '乌达区',
-  '150402': '红山区',
-  '150403': '元宝山区',
-  '150404': '松山区',
-  '150421': '阿鲁科尔沁旗',
-  '150422': '巴林左旗',
-  '150423': '巴林右旗',
-  '150424': '林西县',
-  '150425': '克什克腾旗',
-  '150426': '翁牛特旗',
-  '150428': '喀喇沁旗',
-  '150429': '宁城县',
-  '150430': '敖汉旗',
-  '150502': '科尔沁区',
-  '150521': '科尔沁左翼中旗',
-  '150522': '科尔沁左翼后旗',
-  '150523': '开鲁县',
-  '150524': '库伦旗',
-  '150525': '奈曼旗',
-  '150526': '扎鲁特旗',
-  '150571': '通辽经济技术开发区',
-  '150581': '霍林郭勒市',
-  '150602': '东胜区',
-  '150603': '康巴什区',
-  '150621': '达拉特旗',
-  '150622': '准格尔旗',
-  '150623': '鄂托克前旗',
-  '150624': '鄂托克旗',
-  '150625': '杭锦旗',
-  '150626': '乌审旗',
-  '150627': '伊金霍洛旗',
-  '150702': '海拉尔区',
-  '150703': '扎赉诺尔区',
-  '150721': '阿荣旗',
-  '150722': '莫力达瓦达斡尔族自治旗',
-  '150723': '鄂伦春自治旗',
-  '150724': '鄂温克族自治旗',
-  '150725': '陈巴尔虎旗',
-  '150726': '新巴尔虎左旗',
-  '150727': '新巴尔虎右旗',
-  '150781': '满洲里市',
-  '150782': '牙克石市',
-  '150783': '扎兰屯市',
-  '150784': '额尔古纳市',
-  '150785': '根河市',
-  '150802': '临河区',
-  '150821': '五原县',
-  '150822': '磴口县',
-  '150823': '乌拉特前旗',
-  '150824': '乌拉特中旗',
-  '150825': '乌拉特后旗',
-  '150826': '杭锦后旗',
-  '150902': '集宁区',
-  '150921': '卓资县',
-  '150922': '化德县',
-  '150923': '商都县',
-  '150924': '兴和县',
-  '150925': '凉城县',
-  '150926': '察哈尔右翼前旗',
-  '150927': '察哈尔右翼中旗',
-  '150928': '察哈尔右翼后旗',
-  '150929': '四子王旗',
-  '150981': '丰镇市',
-  '152201': '乌兰浩特市',
-  '152202': '阿尔山市',
-  '152221': '科尔沁右翼前旗',
-  '152222': '科尔沁右翼中旗',
-  '152223': '扎赉特旗',
-  '152224': '突泉县',
-  '152501': '二连浩特市',
-  '152502': '锡林浩特市',
-  '152522': '阿巴嘎旗',
-  '152523': '苏尼特左旗',
-  '152524': '苏尼特右旗',
-  '152525': '东乌珠穆沁旗',
-  '152526': '西乌珠穆沁旗',
-  '152527': '太仆寺旗',
-  '152528': '镶黄旗',
-  '152529': '正镶白旗',
-  '152530': '正蓝旗',
-  '152531': '多伦县',
-  '152571': '乌拉盖管委会',
-  '152921': '阿拉善左旗',
-  '152922': '阿拉善右旗',
-  '152923': '额济纳旗',
-  '152971': '内蒙古阿拉善高新技术产业开发区',
-  '210102': '和平区',
-  '210103': '沈河区',
-  '210104': '大东区',
-  '210105': '皇姑区',
-  '210106': '铁西区',
-  '210111': '苏家屯区',
-  '210112': '浑南区',
-  '210113': '沈北新区',
-  '210114': '于洪区',
-  '210115': '辽中区',
-  '210123': '康平县',
-  '210124': '法库县',
-  '210181': '新民市',
-  '210202': '中山区',
-  '210203': '西岗区',
-  '210204': '沙河口区',
-  '210211': '甘井子区',
-  '210212': '旅顺口区',
-  '210213': '金州区',
-  '210214': '普兰店区',
-  '210224': '长海县',
-  '210281': '瓦房店市',
-  '210283': '庄河市',
-  '210302': '铁东区',
-  '210303': '铁西区',
-  '210304': '立山区',
-  '210311': '千山区',
-  '210321': '台安县',
-  '210323': '岫岩满族自治县',
-  '210381': '海城市',
-  '210402': '新抚区',
-  '210403': '东洲区',
-  '210404': '望花区',
-  '210411': '顺城区',
-  '210421': '抚顺县',
-  '210422': '新宾满族自治县',
-  '210423': '清原满族自治县',
-  '210502': '平山区',
-  '210503': '溪湖区',
-  '210504': '明山区',
-  '210505': '南芬区',
-  '210521': '本溪满族自治县',
-  '210522': '桓仁满族自治县',
-  '210602': '元宝区',
-  '210603': '振兴区',
-  '210604': '振安区',
-  '210624': '宽甸满族自治县',
-  '210681': '东港市',
-  '210682': '凤城市',
-  '210702': '古塔区',
-  '210703': '凌河区',
-  '210711': '太和区',
-  '210726': '黑山县',
-  '210727': '义县',
-  '210781': '凌海市',
-  '210782': '北镇市',
-  '210802': '站前区',
-  '210803': '西市区',
-  '210804': '鲅鱼圈区',
-  '210811': '老边区',
-  '210881': '盖州市',
-  '210882': '大石桥市',
-  '210902': '海州区',
-  '210903': '新邱区',
-  '210904': '太平区',
-  '210905': '清河门区',
-  '210911': '细河区',
-  '210921': '阜新蒙古族自治县',
-  '210922': '彰武县',
-  '211002': '白塔区',
-  '211003': '文圣区',
-  '211004': '宏伟区',
-  '211005': '弓长岭区',
-  '211011': '太子河区',
-  '211021': '辽阳县',
-  '211081': '灯塔市',
-  '211102': '双台子区',
-  '211103': '兴隆台区',
-  '211104': '大洼区',
-  '211122': '盘山县',
-  '211202': '银州区',
-  '211204': '清河区',
-  '211221': '铁岭县',
-  '211223': '西丰县',
-  '211224': '昌图县',
-  '211281': '调兵山市',
-  '211282': '开原市',
-  '211302': '双塔区',
-  '211303': '龙城区',
-  '211321': '朝阳县',
-  '211322': '建平县',
-  '211324': '喀喇沁左翼蒙古族自治县',
-  '211381': '北票市',
-  '211382': '凌源市',
-  '211402': '连山区',
-  '211403': '龙港区',
-  '211404': '南票区',
-  '211421': '绥中县',
-  '211422': '建昌县',
-  '211481': '兴城市',
-  '220102': '南关区',
-  '220103': '宽城区',
-  '220104': '朝阳区',
-  '220105': '二道区',
-  '220106': '绿园区',
-  '220112': '双阳区',
-  '220113': '九台区',
-  '220122': '农安县',
-  '220171': '长春经济技术开发区',
-  '220172': '长春净月高新技术产业开发区',
-  '220173': '长春高新技术产业开发区',
-  '220174': '长春汽车经济技术开发区',
-  '220182': '榆树市',
-  '220183': '德惠市',
-  '220184': '公主岭市',
-  '220202': '昌邑区',
-  '220203': '龙潭区',
-  '220204': '船营区',
-  '220211': '丰满区',
-  '220221': '永吉县',
-  '220271': '吉林经济开发区',
-  '220272': '吉林高新技术产业开发区',
-  '220273': '吉林中国新加坡食品区',
-  '220281': '蛟河市',
-  '220282': '桦甸市',
-  '220283': '舒兰市',
-  '220284': '磐石市',
-  '220302': '铁西区',
-  '220303': '铁东区',
-  '220322': '梨树县',
-  '220323': '伊通满族自治县',
-  '220382': '双辽市',
-  '220402': '龙山区',
-  '220403': '西安区',
-  '220421': '东丰县',
-  '220422': '东辽县',
-  '220502': '东昌区',
-  '220503': '二道江区',
-  '220521': '通化县',
-  '220523': '辉南县',
-  '220524': '柳河县',
-  '220581': '梅河口市',
-  '220582': '集安市',
-  '220602': '浑江区',
-  '220605': '江源区',
-  '220621': '抚松县',
-  '220622': '靖宇县',
-  '220623': '长白朝鲜族自治县',
-  '220681': '临江市',
-  '220702': '宁江区',
-  '220721': '前郭尔罗斯蒙古族自治县',
-  '220722': '长岭县',
-  '220723': '乾安县',
-  '220771': '吉林松原经济开发区',
-  '220781': '扶余市',
-  '220802': '洮北区',
-  '220821': '镇赉县',
-  '220822': '通榆县',
-  '220871': '吉林白城经济开发区',
-  '220881': '洮南市',
-  '220882': '大安市',
-  '222401': '延吉市',
-  '222402': '图们市',
-  '222403': '敦化市',
-  '222404': '珲春市',
-  '222405': '龙井市',
-  '222406': '和龙市',
-  '222424': '汪清县',
-  '222426': '安图县',
-  '230102': '道里区',
-  '230103': '南岗区',
-  '230104': '道外区',
-  '230108': '平房区',
-  '230109': '松北区',
-  '230110': '香坊区',
-  '230111': '呼兰区',
-  '230112': '阿城区',
-  '230113': '双城区',
-  '230123': '依兰县',
-  '230124': '方正县',
-  '230125': '宾县',
-  '230126': '巴彦县',
-  '230127': '木兰县',
-  '230128': '通河县',
-  '230129': '延寿县',
-  '230183': '尚志市',
-  '230184': '五常市',
-  '230202': '龙沙区',
-  '230203': '建华区',
-  '230204': '铁锋区',
-  '230205': '昂昂溪区',
-  '230206': '富拉尔基区',
-  '230207': '碾子山区',
-  '230208': '梅里斯达斡尔族区',
-  '230221': '龙江县',
-  '230223': '依安县',
-  '230224': '泰来县',
-  '230225': '甘南县',
-  '230227': '富裕县',
-  '230229': '克山县',
-  '230230': '克东县',
-  '230231': '拜泉县',
-  '230281': '讷河市',
-  '230302': '鸡冠区',
-  '230303': '恒山区',
-  '230304': '滴道区',
-  '230305': '梨树区',
-  '230306': '城子河区',
-  '230307': '麻山区',
-  '230321': '鸡东县',
-  '230381': '虎林市',
-  '230382': '密山市',
-  '230402': '向阳区',
-  '230403': '工农区',
-  '230404': '南山区',
-  '230405': '兴安区',
-  '230406': '东山区',
-  '230407': '兴山区',
-  '230421': '萝北县',
-  '230422': '绥滨县',
-  '230502': '尖山区',
-  '230503': '岭东区',
-  '230505': '四方台区',
-  '230506': '宝山区',
-  '230521': '集贤县',
-  '230522': '友谊县',
-  '230523': '宝清县',
-  '230524': '饶河县',
-  '230602': '萨尔图区',
-  '230603': '龙凤区',
-  '230604': '让胡路区',
-  '230605': '红岗区',
-  '230606': '大同区',
-  '230621': '肇州县',
-  '230622': '肇源县',
-  '230623': '林甸县',
-  '230624': '杜尔伯特蒙古族自治县',
-  '230671': '大庆高新技术产业开发区',
-  '230717': '伊美区',
-  '230718': '乌翠区',
-  '230719': '友好区',
-  '230722': '嘉荫县',
-  '230723': '汤旺县',
-  '230724': '丰林县',
-  '230725': '大箐山县',
-  '230726': '南岔县',
-  '230751': '金林区',
-  '230781': '铁力市',
-  '230803': '向阳区',
-  '230804': '前进区',
-  '230805': '东风区',
-  '230811': '郊区',
-  '230822': '桦南县',
-  '230826': '桦川县',
-  '230828': '汤原县',
-  '230881': '同江市',
-  '230882': '富锦市',
-  '230883': '抚远市',
-  '230902': '新兴区',
-  '230903': '桃山区',
-  '230904': '茄子河区',
-  '230921': '勃利县',
-  '231002': '东安区',
-  '231003': '阳明区',
-  '231004': '爱民区',
-  '231005': '西安区',
-  '231025': '林口县',
-  '231071': '牡丹江经济技术开发区',
-  '231081': '绥芬河市',
-  '231083': '海林市',
-  '231084': '宁安市',
-  '231085': '穆棱市',
-  '231086': '东宁市',
-  '231102': '爱辉区',
-  '231123': '逊克县',
-  '231124': '孙吴县',
-  '231181': '北安市',
-  '231182': '五大连池市',
-  '231183': '嫩江市',
-  '231202': '北林区',
-  '231221': '望奎县',
-  '231222': '兰西县',
-  '231223': '青冈县',
-  '231224': '庆安县',
-  '231225': '明水县',
-  '231226': '绥棱县',
-  '231281': '安达市',
-  '231282': '肇东市',
-  '231283': '海伦市',
-  '232701': '漠河市',
-  '232721': '呼玛县',
-  '232722': '塔河县',
-  '232761': '加格达奇区',
-  '232762': '松岭区',
-  '232763': '新林区',
-  '232764': '呼中区',
-  '310101': '黄浦区',
-  '310104': '徐汇区',
-  '310105': '长宁区',
-  '310106': '静安区',
-  '310107': '普陀区',
-  '310109': '虹口区',
-  '310110': '杨浦区',
-  '310112': '闵行区',
-  '310113': '宝山区',
-  '310114': '嘉定区',
-  '310115': '浦东新区',
-  '310116': '金山区',
-  '310117': '松江区',
-  '310118': '青浦区',
-  '310120': '奉贤区',
-  '310151': '崇明区',
-  '320102': '玄武区',
-  '320104': '秦淮区',
-  '320105': '建邺区',
-  '320106': '鼓楼区',
-  '320111': '浦口区',
-  '320113': '栖霞区',
-  '320114': '雨花台区',
-  '320115': '江宁区',
-  '320116': '六合区',
-  '320117': '溧水区',
-  '320118': '高淳区',
-  '320205': '锡山区',
-  '320206': '惠山区',
-  '320211': '滨湖区',
-  '320213': '梁溪区',
-  '320214': '新吴区',
-  '320281': '江阴市',
-  '320282': '宜兴市',
-  '320302': '鼓楼区',
-  '320303': '云龙区',
-  '320305': '贾汪区',
-  '320311': '泉山区',
-  '320312': '铜山区',
-  '320321': '丰县',
-  '320322': '沛县',
-  '320324': '睢宁县',
-  '320371': '徐州经济技术开发区',
-  '320381': '新沂市',
-  '320382': '邳州市',
-  '320402': '天宁区',
-  '320404': '钟楼区',
-  '320411': '新北区',
-  '320412': '武进区',
-  '320413': '金坛区',
-  '320481': '溧阳市',
-  '320505': '虎丘区',
-  '320506': '吴中区',
-  '320507': '相城区',
-  '320508': '姑苏区',
-  '320509': '吴江区',
-  '320571': '苏州工业园区',
-  '320581': '常熟市',
-  '320582': '张家港市',
-  '320583': '昆山市',
-  '320585': '太仓市',
-  '320612': '通州区',
-  '320613': '崇川区',
-  '320614': '海门区',
-  '320623': '如东县',
-  '320671': '南通经济技术开发区',
-  '320681': '启东市',
-  '320682': '如皋市',
-  '320685': '海安市',
-  '320703': '连云区',
-  '320706': '海州区',
-  '320707': '赣榆区',
-  '320722': '东海县',
-  '320723': '灌云县',
-  '320724': '灌南县',
-  '320771': '连云港经济技术开发区',
-  '320772': '连云港高新技术产业开发区',
-  '320803': '淮安区',
-  '320804': '淮阴区',
-  '320812': '清江浦区',
-  '320813': '洪泽区',
-  '320826': '涟水县',
-  '320830': '盱眙县',
-  '320831': '金湖县',
-  '320871': '淮安经济技术开发区',
-  '320902': '亭湖区',
-  '320903': '盐都区',
-  '320904': '大丰区',
-  '320921': '响水县',
-  '320922': '滨海县',
-  '320923': '阜宁县',
-  '320924': '射阳县',
-  '320925': '建湖县',
-  '320971': '盐城经济技术开发区',
-  '320981': '东台市',
-  '321002': '广陵区',
-  '321003': '邗江区',
-  '321012': '江都区',
-  '321023': '宝应县',
-  '321071': '扬州经济技术开发区',
-  '321081': '仪征市',
-  '321084': '高邮市',
-  '321102': '京口区',
-  '321111': '润州区',
-  '321112': '丹徒区',
-  '321171': '镇江新区',
-  '321181': '丹阳市',
-  '321182': '扬中市',
-  '321183': '句容市',
-  '321202': '海陵区',
-  '321203': '高港区',
-  '321204': '姜堰区',
-  '321271': '泰州医药高新技术产业开发区',
-  '321281': '兴化市',
-  '321282': '靖江市',
-  '321283': '泰兴市',
-  '321302': '宿城区',
-  '321311': '宿豫区',
-  '321322': '沭阳县',
-  '321323': '泗阳县',
-  '321324': '泗洪县',
-  '321371': '宿迁经济技术开发区',
-  '330102': '上城区',
-  '330105': '拱墅区',
-  '330106': '西湖区',
-  '330108': '滨江区',
-  '330109': '萧山区',
-  '330110': '余杭区',
-  '330111': '富阳区',
-  '330112': '临安区',
-  '330113': '临平区',
-  '330114': '钱塘区',
-  '330122': '桐庐县',
-  '330127': '淳安县',
-  '330182': '建德市',
-  '330203': '海曙区',
-  '330205': '江北区',
-  '330206': '北仑区',
-  '330211': '镇海区',
-  '330212': '鄞州区',
-  '330213': '奉化区',
-  '330225': '象山县',
-  '330226': '宁海县',
-  '330281': '余姚市',
-  '330282': '慈溪市',
-  '330302': '鹿城区',
-  '330303': '龙湾区',
-  '330304': '瓯海区',
-  '330305': '洞头区',
-  '330324': '永嘉县',
-  '330326': '平阳县',
-  '330327': '苍南县',
-  '330328': '文成县',
-  '330329': '泰顺县',
-  '330371': '温州经济技术开发区',
-  '330381': '瑞安市',
-  '330382': '乐清市',
-  '330383': '龙港市',
-  '330402': '南湖区',
-  '330411': '秀洲区',
-  '330421': '嘉善县',
-  '330424': '海盐县',
-  '330481': '海宁市',
-  '330482': '平湖市',
-  '330483': '桐乡市',
-  '330502': '吴兴区',
-  '330503': '南浔区',
-  '330521': '德清县',
-  '330522': '长兴县',
-  '330523': '安吉县',
-  '330602': '越城区',
-  '330603': '柯桥区',
-  '330604': '上虞区',
-  '330624': '新昌县',
-  '330681': '诸暨市',
-  '330683': '嵊州市',
-  '330702': '婺城区',
-  '330703': '金东区',
-  '330723': '武义县',
-  '330726': '浦江县',
-  '330727': '磐安县',
-  '330781': '兰溪市',
-  '330782': '义乌市',
-  '330783': '东阳市',
-  '330784': '永康市',
-  '330802': '柯城区',
-  '330803': '衢江区',
-  '330822': '常山县',
-  '330824': '开化县',
-  '330825': '龙游县',
-  '330881': '江山市',
-  '330902': '定海区',
-  '330903': '普陀区',
-  '330921': '岱山县',
-  '330922': '嵊泗县',
-  '331002': '椒江区',
-  '331003': '黄岩区',
-  '331004': '路桥区',
-  '331022': '三门县',
-  '331023': '天台县',
-  '331024': '仙居县',
-  '331081': '温岭市',
-  '331082': '临海市',
-  '331083': '玉环市',
-  '331102': '莲都区',
-  '331121': '青田县',
-  '331122': '缙云县',
-  '331123': '遂昌县',
-  '331124': '松阳县',
-  '331125': '云和县',
-  '331126': '庆元县',
-  '331127': '景宁畲族自治县',
-  '331181': '龙泉市',
-  '340102': '瑶海区',
-  '340103': '庐阳区',
-  '340104': '蜀山区',
-  '340111': '包河区',
-  '340121': '长丰县',
-  '340122': '肥东县',
-  '340123': '肥西县',
-  '340124': '庐江县',
-  '340171': '合肥高新技术产业开发区',
-  '340172': '合肥经济技术开发区',
-  '340173': '合肥新站高新技术产业开发区',
-  '340181': '巢湖市',
-  '340202': '镜湖区',
-  '340207': '鸠江区',
-  '340209': '弋江区',
-  '340210': '湾沚区',
-  '340212': '繁昌区',
-  '340223': '南陵县',
-  '340271': '芜湖经济技术开发区',
-  '340272': '安徽芜湖三山经济开发区',
-  '340281': '无为市',
-  '340302': '龙子湖区',
-  '340303': '蚌山区',
-  '340304': '禹会区',
-  '340311': '淮上区',
-  '340321': '怀远县',
-  '340322': '五河县',
-  '340323': '固镇县',
-  '340371': '蚌埠市高新技术开发区',
-  '340372': '蚌埠市经济开发区',
-  '340402': '大通区',
-  '340403': '田家庵区',
-  '340404': '谢家集区',
-  '340405': '八公山区',
-  '340406': '潘集区',
-  '340421': '凤台县',
-  '340422': '寿县',
-  '340503': '花山区',
-  '340504': '雨山区',
-  '340506': '博望区',
-  '340521': '当涂县',
-  '340522': '含山县',
-  '340523': '和县',
-  '340602': '杜集区',
-  '340603': '相山区',
-  '340604': '烈山区',
-  '340621': '濉溪县',
-  '340705': '铜官区',
-  '340706': '义安区',
-  '340711': '郊区',
-  '340722': '枞阳县',
-  '340802': '迎江区',
-  '340803': '大观区',
-  '340811': '宜秀区',
-  '340822': '怀宁县',
-  '340825': '太湖县',
-  '340826': '宿松县',
-  '340827': '望江县',
-  '340828': '岳西县',
-  '340871': '安徽安庆经济开发区',
-  '340881': '桐城市',
-  '340882': '潜山市',
-  '341002': '屯溪区',
-  '341003': '黄山区',
-  '341004': '徽州区',
-  '341021': '歙县',
-  '341022': '休宁县',
-  '341023': '黟县',
-  '341024': '祁门县',
-  '341102': '琅琊区',
-  '341103': '南谯区',
-  '341122': '来安县',
-  '341124': '全椒县',
-  '341125': '定远县',
-  '341126': '凤阳县',
-  '341171': '中新苏滁高新技术产业开发区',
-  '341172': '滁州经济技术开发区',
-  '341181': '天长市',
-  '341182': '明光市',
-  '341202': '颍州区',
-  '341203': '颍东区',
-  '341204': '颍泉区',
-  '341221': '临泉县',
-  '341222': '太和县',
-  '341225': '阜南县',
-  '341226': '颍上县',
-  '341271': '阜阳合肥现代产业园区',
-  '341272': '阜阳经济技术开发区',
-  '341282': '界首市',
-  '341302': '埇桥区',
-  '341321': '砀山县',
-  '341322': '萧县',
-  '341323': '灵璧县',
-  '341324': '泗县',
-  '341371': '宿州马鞍山现代产业园区',
-  '341372': '宿州经济技术开发区',
-  '341502': '金安区',
-  '341503': '裕安区',
-  '341504': '叶集区',
-  '341522': '霍邱县',
-  '341523': '舒城县',
-  '341524': '金寨县',
-  '341525': '霍山县',
-  '341602': '谯城区',
-  '341621': '涡阳县',
-  '341622': '蒙城县',
-  '341623': '利辛县',
-  '341702': '贵池区',
-  '341721': '东至县',
-  '341722': '石台县',
-  '341723': '青阳县',
-  '341802': '宣州区',
-  '341821': '郎溪县',
-  '341823': '泾县',
-  '341824': '绩溪县',
-  '341825': '旌德县',
-  '341871': '宣城市经济开发区',
-  '341881': '宁国市',
-  '341882': '广德市',
-  '350102': '鼓楼区',
-  '350103': '台江区',
-  '350104': '仓山区',
-  '350105': '马尾区',
-  '350111': '晋安区',
-  '350112': '长乐区',
-  '350121': '闽侯县',
-  '350122': '连江县',
-  '350123': '罗源县',
-  '350124': '闽清县',
-  '350125': '永泰县',
-  '350128': '平潭县',
-  '350181': '福清市',
-  '350203': '思明区',
-  '350205': '海沧区',
-  '350206': '湖里区',
-  '350211': '集美区',
-  '350212': '同安区',
-  '350213': '翔安区',
-  '350302': '城厢区',
-  '350303': '涵江区',
-  '350304': '荔城区',
-  '350305': '秀屿区',
-  '350322': '仙游县',
-  '350404': '三元区',
-  '350405': '沙县区',
-  '350421': '明溪县',
-  '350423': '清流县',
-  '350424': '宁化县',
-  '350425': '大田县',
-  '350426': '尤溪县',
-  '350428': '将乐县',
-  '350429': '泰宁县',
-  '350430': '建宁县',
-  '350481': '永安市',
-  '350502': '鲤城区',
-  '350503': '丰泽区',
-  '350504': '洛江区',
-  '350505': '泉港区',
-  '350521': '惠安县',
-  '350524': '安溪县',
-  '350525': '永春县',
-  '350526': '德化县',
-  '350527': '金门县',
-  '350581': '石狮市',
-  '350582': '晋江市',
-  '350583': '南安市',
-  '350602': '芗城区',
-  '350603': '龙文区',
-  '350604': '龙海区',
-  '350605': '长泰区',
-  '350622': '云霄县',
-  '350623': '漳浦县',
-  '350624': '诏安县',
-  '350626': '东山县',
-  '350627': '南靖县',
-  '350628': '平和县',
-  '350629': '华安县',
-  '350702': '延平区',
-  '350703': '建阳区',
-  '350721': '顺昌县',
-  '350722': '浦城县',
-  '350723': '光泽县',
-  '350724': '松溪县',
-  '350725': '政和县',
-  '350781': '邵武市',
-  '350782': '武夷山市',
-  '350783': '建瓯市',
-  '350802': '新罗区',
-  '350803': '永定区',
-  '350821': '长汀县',
-  '350823': '上杭县',
-  '350824': '武平县',
-  '350825': '连城县',
-  '350881': '漳平市',
-  '350902': '蕉城区',
-  '350921': '霞浦县',
-  '350922': '古田县',
-  '350923': '屏南县',
-  '350924': '寿宁县',
-  '350925': '周宁县',
-  '350926': '柘荣县',
-  '350981': '福安市',
-  '350982': '福鼎市',
-  '360102': '东湖区',
-  '360103': '西湖区',
-  '360104': '青云谱区',
-  '360111': '青山湖区',
-  '360112': '新建区',
-  '360113': '红谷滩区',
-  '360121': '南昌县',
-  '360123': '安义县',
-  '360124': '进贤县',
-  '360202': '昌江区',
-  '360203': '珠山区',
-  '360222': '浮梁县',
-  '360281': '乐平市',
-  '360302': '安源区',
-  '360313': '湘东区',
-  '360321': '莲花县',
-  '360322': '上栗县',
-  '360323': '芦溪县',
-  '360402': '濂溪区',
-  '360403': '浔阳区',
-  '360404': '柴桑区',
-  '360423': '武宁县',
-  '360424': '修水县',
-  '360425': '永修县',
-  '360426': '德安县',
-  '360428': '都昌县',
-  '360429': '湖口县',
-  '360430': '彭泽县',
-  '360481': '瑞昌市',
-  '360482': '共青城市',
-  '360483': '庐山市',
-  '360502': '渝水区',
-  '360521': '分宜县',
-  '360602': '月湖区',
-  '360603': '余江区',
-  '360681': '贵溪市',
-  '360702': '章贡区',
-  '360703': '南康区',
-  '360704': '赣县区',
-  '360722': '信丰县',
-  '360723': '大余县',
-  '360724': '上犹县',
-  '360725': '崇义县',
-  '360726': '安远县',
-  '360728': '定南县',
-  '360729': '全南县',
-  '360730': '宁都县',
-  '360731': '于都县',
-  '360732': '兴国县',
-  '360733': '会昌县',
-  '360734': '寻乌县',
-  '360735': '石城县',
-  '360781': '瑞金市',
-  '360783': '龙南市',
-  '360802': '吉州区',
-  '360803': '青原区',
-  '360821': '吉安县',
-  '360822': '吉水县',
-  '360823': '峡江县',
-  '360824': '新干县',
-  '360825': '永丰县',
-  '360826': '泰和县',
-  '360827': '遂川县',
-  '360828': '万安县',
-  '360829': '安福县',
-  '360830': '永新县',
-  '360881': '井冈山市',
-  '360902': '袁州区',
-  '360921': '奉新县',
-  '360922': '万载县',
-  '360923': '上高县',
-  '360924': '宜丰县',
-  '360925': '靖安县',
-  '360926': '铜鼓县',
-  '360981': '丰城市',
-  '360982': '樟树市',
-  '360983': '高安市',
-  '361002': '临川区',
-  '361003': '东乡区',
-  '361021': '南城县',
-  '361022': '黎川县',
-  '361023': '南丰县',
-  '361024': '崇仁县',
-  '361025': '乐安县',
-  '361026': '宜黄县',
-  '361027': '金溪县',
-  '361028': '资溪县',
-  '361030': '广昌县',
-  '361102': '信州区',
-  '361103': '广丰区',
-  '361104': '广信区',
-  '361123': '玉山县',
-  '361124': '铅山县',
-  '361125': '横峰县',
-  '361126': '弋阳县',
-  '361127': '余干县',
-  '361128': '鄱阳县',
-  '361129': '万年县',
-  '361130': '婺源县',
-  '361181': '德兴市',
-  '370102': '历下区',
-  '370103': '市中区',
-  '370104': '槐荫区',
-  '370105': '天桥区',
-  '370112': '历城区',
-  '370113': '长清区',
-  '370114': '章丘区',
-  '370115': '济阳区',
-  '370116': '莱芜区',
-  '370117': '钢城区',
-  '370124': '平阴县',
-  '370126': '商河县',
-  '370171': '济南高新技术产业开发区',
-  '370202': '市南区',
-  '370203': '市北区',
-  '370211': '黄岛区',
-  '370212': '崂山区',
-  '370213': '李沧区',
-  '370214': '城阳区',
-  '370215': '即墨区',
-  '370271': '青岛高新技术产业开发区',
-  '370281': '胶州市',
-  '370283': '平度市',
-  '370285': '莱西市',
-  '370302': '淄川区',
-  '370303': '张店区',
-  '370304': '博山区',
-  '370305': '临淄区',
-  '370306': '周村区',
-  '370321': '桓台县',
-  '370322': '高青县',
-  '370323': '沂源县',
-  '370402': '市中区',
-  '370403': '薛城区',
-  '370404': '峄城区',
-  '370405': '台儿庄区',
-  '370406': '山亭区',
-  '370481': '滕州市',
-  '370502': '东营区',
-  '370503': '河口区',
-  '370505': '垦利区',
-  '370522': '利津县',
-  '370523': '广饶县',
-  '370571': '东营经济技术开发区',
-  '370572': '东营港经济开发区',
-  '370602': '芝罘区',
-  '370611': '福山区',
-  '370612': '牟平区',
-  '370613': '莱山区',
-  '370614': '蓬莱区',
-  '370671': '烟台高新技术产业开发区',
-  '370672': '烟台经济技术开发区',
-  '370681': '龙口市',
-  '370682': '莱阳市',
-  '370683': '莱州市',
-  '370685': '招远市',
-  '370686': '栖霞市',
-  '370687': '海阳市',
-  '370702': '潍城区',
-  '370703': '寒亭区',
-  '370704': '坊子区',
-  '370705': '奎文区',
-  '370724': '临朐县',
-  '370725': '昌乐县',
-  '370772': '潍坊滨海经济技术开发区',
-  '370781': '青州市',
-  '370782': '诸城市',
-  '370783': '寿光市',
-  '370784': '安丘市',
-  '370785': '高密市',
-  '370786': '昌邑市',
-  '370811': '任城区',
-  '370812': '兖州区',
-  '370826': '微山县',
-  '370827': '鱼台县',
-  '370828': '金乡县',
-  '370829': '嘉祥县',
-  '370830': '汶上县',
-  '370831': '泗水县',
-  '370832': '梁山县',
-  '370871': '济宁高新技术产业开发区',
-  '370881': '曲阜市',
-  '370883': '邹城市',
-  '370902': '泰山区',
-  '370911': '岱岳区',
-  '370921': '宁阳县',
-  '370923': '东平县',
-  '370982': '新泰市',
-  '370983': '肥城市',
-  '371002': '环翠区',
-  '371003': '文登区',
-  '371071': '威海火炬高技术产业开发区',
-  '371072': '威海经济技术开发区',
-  '371073': '威海临港经济技术开发区',
-  '371082': '荣成市',
-  '371083': '乳山市',
-  '371102': '东港区',
-  '371103': '岚山区',
-  '371121': '五莲县',
-  '371122': '莒县',
-  '371171': '日照经济技术开发区',
-  '371302': '兰山区',
-  '371311': '罗庄区',
-  '371312': '河东区',
-  '371321': '沂南县',
-  '371322': '郯城县',
-  '371323': '沂水县',
-  '371324': '兰陵县',
-  '371325': '费县',
-  '371326': '平邑县',
-  '371327': '莒南县',
-  '371328': '蒙阴县',
-  '371329': '临沭县',
-  '371371': '临沂高新技术产业开发区',
-  '371402': '德城区',
-  '371403': '陵城区',
-  '371422': '宁津县',
-  '371423': '庆云县',
-  '371424': '临邑县',
-  '371425': '齐河县',
-  '371426': '平原县',
-  '371427': '夏津县',
-  '371428': '武城县',
-  '371471': '德州经济技术开发区',
-  '371472': '德州运河经济开发区',
-  '371481': '乐陵市',
-  '371482': '禹城市',
-  '371502': '东昌府区',
-  '371503': '茌平区',
-  '371521': '阳谷县',
-  '371522': '莘县',
-  '371524': '东阿县',
-  '371525': '冠县',
-  '371526': '高唐县',
-  '371581': '临清市',
-  '371602': '滨城区',
-  '371603': '沾化区',
-  '371621': '惠民县',
-  '371622': '阳信县',
-  '371623': '无棣县',
-  '371625': '博兴县',
-  '371681': '邹平市',
-  '371702': '牡丹区',
-  '371703': '定陶区',
-  '371721': '曹县',
-  '371722': '单县',
-  '371723': '成武县',
-  '371724': '巨野县',
-  '371725': '郓城县',
-  '371726': '鄄城县',
-  '371728': '东明县',
-  '371771': '菏泽经济技术开发区',
-  '371772': '菏泽高新技术开发区',
-  '410102': '中原区',
-  '410103': '二七区',
-  '410104': '管城回族区',
-  '410105': '金水区',
-  '410106': '上街区',
-  '410108': '惠济区',
-  '410122': '中牟县',
-  '410171': '郑州经济技术开发区',
-  '410172': '郑州高新技术产业开发区',
-  '410173': '郑州航空港经济综合实验区',
-  '410181': '巩义市',
-  '410182': '荥阳市',
-  '410183': '新密市',
-  '410184': '新郑市',
-  '410185': '登封市',
-  '410202': '龙亭区',
-  '410203': '顺河回族区',
-  '410204': '鼓楼区',
-  '410205': '禹王台区',
-  '410212': '祥符区',
-  '410221': '杞县',
-  '410222': '通许县',
-  '410223': '尉氏县',
-  '410225': '兰考县',
-  '410302': '老城区',
-  '410303': '西工区',
-  '410304': '瀍河回族区',
-  '410305': '涧西区',
-  '410307': '偃师区',
-  '410308': '孟津区',
-  '410311': '洛龙区',
-  '410323': '新安县',
-  '410324': '栾川县',
-  '410325': '嵩县',
-  '410326': '汝阳县',
-  '410327': '宜阳县',
-  '410328': '洛宁县',
-  '410329': '伊川县',
-  '410371': '洛阳高新技术产业开发区',
-  '410402': '新华区',
-  '410403': '卫东区',
-  '410404': '石龙区',
-  '410411': '湛河区',
-  '410421': '宝丰县',
-  '410422': '叶县',
-  '410423': '鲁山县',
-  '410425': '郏县',
-  '410471': '平顶山高新技术产业开发区',
-  '410472': '平顶山市城乡一体化示范区',
-  '410481': '舞钢市',
-  '410482': '汝州市',
-  '410502': '文峰区',
-  '410503': '北关区',
-  '410505': '殷都区',
-  '410506': '龙安区',
-  '410522': '安阳县',
-  '410523': '汤阴县',
-  '410526': '滑县',
-  '410527': '内黄县',
-  '410571': '安阳高新技术产业开发区',
-  '410581': '林州市',
-  '410602': '鹤山区',
-  '410603': '山城区',
-  '410611': '淇滨区',
-  '410621': '浚县',
-  '410622': '淇县',
-  '410671': '鹤壁经济技术开发区',
-  '410702': '红旗区',
-  '410703': '卫滨区',
-  '410704': '凤泉区',
-  '410711': '牧野区',
-  '410721': '新乡县',
-  '410724': '获嘉县',
-  '410725': '原阳县',
-  '410726': '延津县',
-  '410727': '封丘县',
-  '410771': '新乡高新技术产业开发区',
-  '410772': '新乡经济技术开发区',
-  '410773': '新乡市平原城乡一体化示范区',
-  '410781': '卫辉市',
-  '410782': '辉县市',
-  '410783': '长垣市',
-  '410802': '解放区',
-  '410803': '中站区',
-  '410804': '马村区',
-  '410811': '山阳区',
-  '410821': '修武县',
-  '410822': '博爱县',
-  '410823': '武陟县',
-  '410825': '温县',
-  '410871': '焦作城乡一体化示范区',
-  '410882': '沁阳市',
-  '410883': '孟州市',
-  '410902': '华龙区',
-  '410922': '清丰县',
-  '410923': '南乐县',
-  '410926': '范县',
-  '410927': '台前县',
-  '410928': '濮阳县',
-  '410971': '河南濮阳工业园区',
-  '410972': '濮阳经济技术开发区',
-  '411002': '魏都区',
-  '411003': '建安区',
-  '411024': '鄢陵县',
-  '411025': '襄城县',
-  '411071': '许昌经济技术开发区',
-  '411081': '禹州市',
-  '411082': '长葛市',
-  '411102': '源汇区',
-  '411103': '郾城区',
-  '411104': '召陵区',
-  '411121': '舞阳县',
-  '411122': '临颍县',
-  '411171': '漯河经济技术开发区',
-  '411202': '湖滨区',
-  '411203': '陕州区',
-  '411221': '渑池县',
-  '411224': '卢氏县',
-  '411271': '河南三门峡经济开发区',
-  '411281': '义马市',
-  '411282': '灵宝市',
-  '411302': '宛城区',
-  '411303': '卧龙区',
-  '411321': '南召县',
-  '411322': '方城县',
-  '411323': '西峡县',
-  '411324': '镇平县',
-  '411325': '内乡县',
-  '411326': '淅川县',
-  '411327': '社旗县',
-  '411328': '唐河县',
-  '411329': '新野县',
-  '411330': '桐柏县',
-  '411371': '南阳高新技术产业开发区',
-  '411372': '南阳市城乡一体化示范区',
-  '411381': '邓州市',
-  '411402': '梁园区',
-  '411403': '睢阳区',
-  '411421': '民权县',
-  '411422': '睢县',
-  '411423': '宁陵县',
-  '411424': '柘城县',
-  '411425': '虞城县',
-  '411426': '夏邑县',
-  '411471': '豫东综合物流产业聚集区',
-  '411472': '河南商丘经济开发区',
-  '411481': '永城市',
-  '411502': '浉河区',
-  '411503': '平桥区',
-  '411521': '罗山县',
-  '411522': '光山县',
-  '411523': '新县',
-  '411524': '商城县',
-  '411525': '固始县',
-  '411526': '潢川县',
-  '411527': '淮滨县',
-  '411528': '息县',
-  '411571': '信阳高新技术产业开发区',
-  '411602': '川汇区',
-  '411603': '淮阳区',
-  '411621': '扶沟县',
-  '411622': '西华县',
-  '411623': '商水县',
-  '411624': '沈丘县',
-  '411625': '郸城县',
-  '411627': '太康县',
-  '411628': '鹿邑县',
-  '411671': '河南周口经济开发区',
-  '411681': '项城市',
-  '411702': '驿城区',
-  '411721': '西平县',
-  '411722': '上蔡县',
-  '411723': '平舆县',
-  '411724': '正阳县',
-  '411725': '确山县',
-  '411726': '泌阳县',
-  '411727': '汝南县',
-  '411728': '遂平县',
-  '411729': '新蔡县',
-  '411771': '河南驻马店经济开发区',
-  '419001': '济源市',
-  '420102': '江岸区',
-  '420103': '江汉区',
-  '420104': '硚口区',
-  '420105': '汉阳区',
-  '420106': '武昌区',
-  '420107': '青山区',
-  '420111': '洪山区',
-  '420112': '东西湖区',
-  '420113': '汉南区',
-  '420114': '蔡甸区',
-  '420115': '江夏区',
-  '420116': '黄陂区',
-  '420117': '新洲区',
-  '420202': '黄石港区',
-  '420203': '西塞山区',
-  '420204': '下陆区',
-  '420205': '铁山区',
-  '420222': '阳新县',
-  '420281': '大冶市',
-  '420302': '茅箭区',
-  '420303': '张湾区',
-  '420304': '郧阳区',
-  '420322': '郧西县',
-  '420323': '竹山县',
-  '420324': '竹溪县',
-  '420325': '房县',
-  '420381': '丹江口市',
-  '420502': '西陵区',
-  '420503': '伍家岗区',
-  '420504': '点军区',
-  '420505': '猇亭区',
-  '420506': '夷陵区',
-  '420525': '远安县',
-  '420526': '兴山县',
-  '420527': '秭归县',
-  '420528': '长阳土家族自治县',
-  '420529': '五峰土家族自治县',
-  '420581': '宜都市',
-  '420582': '当阳市',
-  '420583': '枝江市',
-  '420602': '襄城区',
-  '420606': '樊城区',
-  '420607': '襄州区',
-  '420624': '南漳县',
-  '420625': '谷城县',
-  '420626': '保康县',
-  '420682': '老河口市',
-  '420683': '枣阳市',
-  '420684': '宜城市',
-  '420702': '梁子湖区',
-  '420703': '华容区',
-  '420704': '鄂城区',
-  '420802': '东宝区',
-  '420804': '掇刀区',
-  '420822': '沙洋县',
-  '420881': '钟祥市',
-  '420882': '京山市',
-  '420902': '孝南区',
-  '420921': '孝昌县',
-  '420922': '大悟县',
-  '420923': '云梦县',
-  '420981': '应城市',
-  '420982': '安陆市',
-  '420984': '汉川市',
-  '421002': '沙市区',
-  '421003': '荆州区',
-  '421022': '公安县',
-  '421024': '江陵县',
-  '421071': '荆州经济技术开发区',
-  '421081': '石首市',
-  '421083': '洪湖市',
-  '421087': '松滋市',
-  '421088': '监利市',
-  '421102': '黄州区',
-  '421121': '团风县',
-  '421122': '红安县',
-  '421123': '罗田县',
-  '421124': '英山县',
-  '421125': '浠水县',
-  '421126': '蕲春县',
-  '421127': '黄梅县',
-  '421171': '龙感湖管理区',
-  '421181': '麻城市',
-  '421182': '武穴市',
-  '421202': '咸安区',
-  '421221': '嘉鱼县',
-  '421222': '通城县',
-  '421223': '崇阳县',
-  '421224': '通山县',
-  '421281': '赤壁市',
-  '421303': '曾都区',
-  '421321': '随县',
-  '421381': '广水市',
-  '422801': '恩施市',
-  '422802': '利川市',
-  '422822': '建始县',
-  '422823': '巴东县',
-  '422825': '宣恩县',
-  '422826': '咸丰县',
-  '422827': '来凤县',
-  '422828': '鹤峰县',
-  '429004': '仙桃市',
-  '429005': '潜江市',
-  '429006': '天门市',
-  '429021': '神农架林区',
-  '430102': '芙蓉区',
-  '430103': '天心区',
-  '430104': '岳麓区',
-  '430105': '开福区',
-  '430111': '雨花区',
-  '430112': '望城区',
-  '430121': '长沙县',
-  '430181': '浏阳市',
-  '430182': '宁乡市',
-  '430202': '荷塘区',
-  '430203': '芦淞区',
-  '430204': '石峰区',
-  '430211': '天元区',
-  '430212': '渌口区',
-  '430223': '攸县',
-  '430224': '茶陵县',
-  '430225': '炎陵县',
-  '430271': '云龙示范区',
-  '430281': '醴陵市',
-  '430302': '雨湖区',
-  '430304': '岳塘区',
-  '430321': '湘潭县',
-  '430371': '湖南湘潭高新技术产业园区',
-  '430372': '湘潭昭山示范区',
-  '430373': '湘潭九华示范区',
-  '430381': '湘乡市',
-  '430382': '韶山市',
-  '430405': '珠晖区',
-  '430406': '雁峰区',
-  '430407': '石鼓区',
-  '430408': '蒸湘区',
-  '430412': '南岳区',
-  '430421': '衡阳县',
-  '430422': '衡南县',
-  '430423': '衡山县',
-  '430424': '衡东县',
-  '430426': '祁东县',
-  '430471': '衡阳综合保税区',
-  '430472': '湖南衡阳高新技术产业园区',
-  '430473': '湖南衡阳松木经济开发区',
-  '430481': '耒阳市',
-  '430482': '常宁市',
-  '430502': '双清区',
-  '430503': '大祥区',
-  '430511': '北塔区',
-  '430522': '新邵县',
-  '430523': '邵阳县',
-  '430524': '隆回县',
-  '430525': '洞口县',
-  '430527': '绥宁县',
-  '430528': '新宁县',
-  '430529': '城步苗族自治县',
-  '430581': '武冈市',
-  '430582': '邵东市',
-  '430602': '岳阳楼区',
-  '430603': '云溪区',
-  '430611': '君山区',
-  '430621': '岳阳县',
-  '430623': '华容县',
-  '430624': '湘阴县',
-  '430626': '平江县',
-  '430671': '岳阳市屈原管理区',
-  '430681': '汨罗市',
-  '430682': '临湘市',
-  '430702': '武陵区',
-  '430703': '鼎城区',
-  '430721': '安乡县',
-  '430722': '汉寿县',
-  '430723': '澧县',
-  '430724': '临澧县',
-  '430725': '桃源县',
-  '430726': '石门县',
-  '430771': '常德市西洞庭管理区',
-  '430781': '津市市',
-  '430802': '永定区',
-  '430811': '武陵源区',
-  '430821': '慈利县',
-  '430822': '桑植县',
-  '430902': '资阳区',
-  '430903': '赫山区',
-  '430921': '南县',
-  '430922': '桃江县',
-  '430923': '安化县',
-  '430971': '益阳市大通湖管理区',
-  '430972': '湖南益阳高新技术产业园区',
-  '430981': '沅江市',
-  '431002': '北湖区',
-  '431003': '苏仙区',
-  '431021': '桂阳县',
-  '431022': '宜章县',
-  '431023': '永兴县',
-  '431024': '嘉禾县',
-  '431025': '临武县',
-  '431026': '汝城县',
-  '431027': '桂东县',
-  '431028': '安仁县',
-  '431081': '资兴市',
-  '431102': '零陵区',
-  '431103': '冷水滩区',
-  '431122': '东安县',
-  '431123': '双牌县',
-  '431124': '道县',
-  '431125': '江永县',
-  '431126': '宁远县',
-  '431127': '蓝山县',
-  '431128': '新田县',
-  '431129': '江华瑶族自治县',
-  '431171': '永州经济技术开发区',
-  '431173': '永州市回龙圩管理区',
-  '431181': '祁阳市',
-  '431202': '鹤城区',
-  '431221': '中方县',
-  '431222': '沅陵县',
-  '431223': '辰溪县',
-  '431224': '溆浦县',
-  '431225': '会同县',
-  '431226': '麻阳苗族自治县',
-  '431227': '新晃侗族自治县',
-  '431228': '芷江侗族自治县',
-  '431229': '靖州苗族侗族自治县',
-  '431230': '通道侗族自治县',
-  '431271': '怀化市洪江管理区',
-  '431281': '洪江市',
-  '431302': '娄星区',
-  '431321': '双峰县',
-  '431322': '新化县',
-  '431381': '冷水江市',
-  '431382': '涟源市',
-  '433101': '吉首市',
-  '433122': '泸溪县',
-  '433123': '凤凰县',
-  '433124': '花垣县',
-  '433125': '保靖县',
-  '433126': '古丈县',
-  '433127': '永顺县',
-  '433130': '龙山县',
-  '440103': '荔湾区',
-  '440104': '越秀区',
-  '440105': '海珠区',
-  '440106': '天河区',
-  '440111': '白云区',
-  '440112': '黄埔区',
-  '440113': '番禺区',
-  '440114': '花都区',
-  '440115': '南沙区',
-  '440117': '从化区',
-  '440118': '增城区',
-  '440203': '武江区',
-  '440204': '浈江区',
-  '440205': '曲江区',
-  '440222': '始兴县',
-  '440224': '仁化县',
-  '440229': '翁源县',
-  '440232': '乳源瑶族自治县',
-  '440233': '新丰县',
-  '440281': '乐昌市',
-  '440282': '南雄市',
-  '440303': '罗湖区',
-  '440304': '福田区',
-  '440305': '南山区',
-  '440306': '宝安区',
-  '440307': '龙岗区',
-  '440308': '盐田区',
-  '440309': '龙华区',
-  '440310': '坪山区',
-  '440311': '光明区',
-  '440402': '香洲区',
-  '440403': '斗门区',
-  '440404': '金湾区',
-  '440507': '龙湖区',
-  '440511': '金平区',
-  '440512': '濠江区',
-  '440513': '潮阳区',
-  '440514': '潮南区',
-  '440515': '澄海区',
-  '440523': '南澳县',
-  '440604': '禅城区',
-  '440605': '南海区',
-  '440606': '顺德区',
-  '440607': '三水区',
-  '440608': '高明区',
-  '440703': '蓬江区',
-  '440704': '江海区',
-  '440705': '新会区',
-  '440781': '台山市',
-  '440783': '开平市',
-  '440784': '鹤山市',
-  '440785': '恩平市',
-  '440802': '赤坎区',
-  '440803': '霞山区',
-  '440804': '坡头区',
-  '440811': '麻章区',
-  '440823': '遂溪县',
-  '440825': '徐闻县',
-  '440881': '廉江市',
-  '440882': '雷州市',
-  '440883': '吴川市',
-  '440902': '茂南区',
-  '440904': '电白区',
-  '440981': '高州市',
-  '440982': '化州市',
-  '440983': '信宜市',
-  '441202': '端州区',
-  '441203': '鼎湖区',
-  '441204': '高要区',
-  '441223': '广宁县',
-  '441224': '怀集县',
-  '441225': '封开县',
-  '441226': '德庆县',
-  '441284': '四会市',
-  '441302': '惠城区',
-  '441303': '惠阳区',
-  '441322': '博罗县',
-  '441323': '惠东县',
-  '441324': '龙门县',
-  '441402': '梅江区',
-  '441403': '梅县区',
-  '441422': '大埔县',
-  '441423': '丰顺县',
-  '441424': '五华县',
-  '441426': '平远县',
-  '441427': '蕉岭县',
-  '441481': '兴宁市',
-  '441502': '城区',
-  '441521': '海丰县',
-  '441523': '陆河县',
-  '441581': '陆丰市',
-  '441602': '源城区',
-  '441621': '紫金县',
-  '441622': '龙川县',
-  '441623': '连平县',
-  '441624': '和平县',
-  '441625': '东源县',
-  '441702': '江城区',
-  '441704': '阳东区',
-  '441721': '阳西县',
-  '441781': '阳春市',
-  '441802': '清城区',
-  '441803': '清新区',
-  '441821': '佛冈县',
-  '441823': '阳山县',
-  '441825': '连山壮族瑶族自治县',
-  '441826': '连南瑶族自治县',
-  '441881': '英德市',
-  '441882': '连州市',
-  '445102': '湘桥区',
-  '445103': '潮安区',
-  '445122': '饶平县',
-  '445202': '榕城区',
-  '445203': '揭东区',
-  '445222': '揭西县',
-  '445224': '惠来县',
-  '445281': '普宁市',
-  '445302': '云城区',
-  '445303': '云安区',
-  '445321': '新兴县',
-  '445322': '郁南县',
-  '445381': '罗定市',
-  '450102': '兴宁区',
-  '450103': '青秀区',
-  '450105': '江南区',
-  '450107': '西乡塘区',
-  '450108': '良庆区',
-  '450109': '邕宁区',
-  '450110': '武鸣区',
-  '450123': '隆安县',
-  '450124': '马山县',
-  '450125': '上林县',
-  '450126': '宾阳县',
-  '450181': '横州市',
-  '450202': '城中区',
-  '450203': '鱼峰区',
-  '450204': '柳南区',
-  '450205': '柳北区',
-  '450206': '柳江区',
-  '450222': '柳城县',
-  '450223': '鹿寨县',
-  '450224': '融安县',
-  '450225': '融水苗族自治县',
-  '450226': '三江侗族自治县',
-  '450302': '秀峰区',
-  '450303': '叠彩区',
-  '450304': '象山区',
-  '450305': '七星区',
-  '450311': '雁山区',
-  '450312': '临桂区',
-  '450321': '阳朔县',
-  '450323': '灵川县',
-  '450324': '全州县',
-  '450325': '兴安县',
-  '450326': '永福县',
-  '450327': '灌阳县',
-  '450328': '龙胜各族自治县',
-  '450329': '资源县',
-  '450330': '平乐县',
-  '450332': '恭城瑶族自治县',
-  '450381': '荔浦市',
-  '450403': '万秀区',
-  '450405': '长洲区',
-  '450406': '龙圩区',
-  '450421': '苍梧县',
-  '450422': '藤县',
-  '450423': '蒙山县',
-  '450481': '岑溪市',
-  '450502': '海城区',
-  '450503': '银海区',
-  '450512': '铁山港区',
-  '450521': '合浦县',
-  '450602': '港口区',
-  '450603': '防城区',
-  '450621': '上思县',
-  '450681': '东兴市',
-  '450702': '钦南区',
-  '450703': '钦北区',
-  '450721': '灵山县',
-  '450722': '浦北县',
-  '450802': '港北区',
-  '450803': '港南区',
-  '450804': '覃塘区',
-  '450821': '平南县',
-  '450881': '桂平市',
-  '450902': '玉州区',
-  '450903': '福绵区',
-  '450921': '容县',
-  '450922': '陆川县',
-  '450923': '博白县',
-  '450924': '兴业县',
-  '450981': '北流市',
-  '451002': '右江区',
-  '451003': '田阳区',
-  '451022': '田东县',
-  '451024': '德保县',
-  '451026': '那坡县',
-  '451027': '凌云县',
-  '451028': '乐业县',
-  '451029': '田林县',
-  '451030': '西林县',
-  '451031': '隆林各族自治县',
-  '451081': '靖西市',
-  '451082': '平果市',
-  '451102': '八步区',
-  '451103': '平桂区',
-  '451121': '昭平县',
-  '451122': '钟山县',
-  '451123': '富川瑶族自治县',
-  '451202': '金城江区',
-  '451203': '宜州区',
-  '451221': '南丹县',
-  '451222': '天峨县',
-  '451223': '凤山县',
-  '451224': '东兰县',
-  '451225': '罗城仫佬族自治县',
-  '451226': '环江毛南族自治县',
-  '451227': '巴马瑶族自治县',
-  '451228': '都安瑶族自治县',
-  '451229': '大化瑶族自治县',
-  '451302': '兴宾区',
-  '451321': '忻城县',
-  '451322': '象州县',
-  '451323': '武宣县',
-  '451324': '金秀瑶族自治县',
-  '451381': '合山市',
-  '451402': '江州区',
-  '451421': '扶绥县',
-  '451422': '宁明县',
-  '451423': '龙州县',
-  '451424': '大新县',
-  '451425': '天等县',
-  '451481': '凭祥市',
-  '460105': '秀英区',
-  '460106': '龙华区',
-  '460107': '琼山区',
-  '460108': '美兰区',
-  '460202': '海棠区',
-  '460203': '吉阳区',
-  '460204': '天涯区',
-  '460205': '崖州区',
-  '460321': '西沙群岛',
-  '460322': '南沙群岛',
-  '460323': '中沙群岛的岛礁及其海域',
-  '469001': '五指山市',
-  '469002': '琼海市',
-  '469005': '文昌市',
-  '469006': '万宁市',
-  '469007': '东方市',
-  '469021': '定安县',
-  '469022': '屯昌县',
-  '469023': '澄迈县',
-  '469024': '临高县',
-  '469025': '白沙黎族自治县',
-  '469026': '昌江黎族自治县',
-  '469027': '乐东黎族自治县',
-  '469028': '陵水黎族自治县',
-  '469029': '保亭黎族苗族自治县',
-  '469030': '琼中黎族苗族自治县',
-  '500101': '万州区',
-  '500102': '涪陵区',
-  '500103': '渝中区',
-  '500104': '大渡口区',
-  '500105': '江北区',
-  '500106': '沙坪坝区',
-  '500107': '九龙坡区',
-  '500108': '南岸区',
-  '500109': '北碚区',
-  '500110': '綦江区',
-  '500111': '大足区',
-  '500112': '渝北区',
-  '500113': '巴南区',
-  '500114': '黔江区',
-  '500115': '长寿区',
-  '500116': '江津区',
-  '500117': '合川区',
-  '500118': '永川区',
-  '500119': '南川区',
-  '500120': '璧山区',
-  '500151': '铜梁区',
-  '500152': '潼南区',
-  '500153': '荣昌区',
-  '500154': '开州区',
-  '500155': '梁平区',
-  '500156': '武隆区',
-  '500229': '城口县',
-  '500230': '丰都县',
-  '500231': '垫江县',
-  '500233': '忠县',
-  '500235': '云阳县',
-  '500236': '奉节县',
-  '500237': '巫山县',
-  '500238': '巫溪县',
-  '500240': '石柱土家族自治县',
-  '500241': '秀山土家族苗族自治县',
-  '500242': '酉阳土家族苗族自治县',
-  '500243': '彭水苗族土家族自治县',
-  '510104': '锦江区',
-  '510105': '青羊区',
-  '510106': '金牛区',
-  '510107': '武侯区',
-  '510108': '成华区',
-  '510112': '龙泉驿区',
-  '510113': '青白江区',
-  '510114': '新都区',
-  '510115': '温江区',
-  '510116': '双流区',
-  '510117': '郫都区',
-  '510118': '新津区',
-  '510121': '金堂县',
-  '510129': '大邑县',
-  '510131': '蒲江县',
-  '510181': '都江堰市',
-  '510182': '彭州市',
-  '510183': '邛崃市',
-  '510184': '崇州市',
-  '510185': '简阳市',
-  '510302': '自流井区',
-  '510303': '贡井区',
-  '510304': '大安区',
-  '510311': '沿滩区',
-  '510321': '荣县',
-  '510322': '富顺县',
-  '510402': '东区',
-  '510403': '西区',
-  '510411': '仁和区',
-  '510421': '米易县',
-  '510422': '盐边县',
-  '510502': '江阳区',
-  '510503': '纳溪区',
-  '510504': '龙马潭区',
-  '510521': '泸县',
-  '510522': '合江县',
-  '510524': '叙永县',
-  '510525': '古蔺县',
-  '510603': '旌阳区',
-  '510604': '罗江区',
-  '510623': '中江县',
-  '510681': '广汉市',
-  '510682': '什邡市',
-  '510683': '绵竹市',
-  '510703': '涪城区',
-  '510704': '游仙区',
-  '510705': '安州区',
-  '510722': '三台县',
-  '510723': '盐亭县',
-  '510725': '梓潼县',
-  '510726': '北川羌族自治县',
-  '510727': '平武县',
-  '510781': '江油市',
-  '510802': '利州区',
-  '510811': '昭化区',
-  '510812': '朝天区',
-  '510821': '旺苍县',
-  '510822': '青川县',
-  '510823': '剑阁县',
-  '510824': '苍溪县',
-  '510903': '船山区',
-  '510904': '安居区',
-  '510921': '蓬溪县',
-  '510923': '大英县',
-  '510981': '射洪市',
-  '511002': '市中区',
-  '511011': '东兴区',
-  '511024': '威远县',
-  '511025': '资中县',
-  '511071': '内江经济开发区',
-  '511083': '隆昌市',
-  '511102': '市中区',
-  '511111': '沙湾区',
-  '511112': '五通桥区',
-  '511113': '金口河区',
-  '511123': '犍为县',
-  '511124': '井研县',
-  '511126': '夹江县',
-  '511129': '沐川县',
-  '511132': '峨边彝族自治县',
-  '511133': '马边彝族自治县',
-  '511181': '峨眉山市',
-  '511302': '顺庆区',
-  '511303': '高坪区',
-  '511304': '嘉陵区',
-  '511321': '南部县',
-  '511322': '营山县',
-  '511323': '蓬安县',
-  '511324': '仪陇县',
-  '511325': '西充县',
-  '511381': '阆中市',
-  '511402': '东坡区',
-  '511403': '彭山区',
-  '511421': '仁寿县',
-  '511423': '洪雅县',
-  '511424': '丹棱县',
-  '511425': '青神县',
-  '511502': '翠屏区',
-  '511503': '南溪区',
-  '511504': '叙州区',
-  '511523': '江安县',
-  '511524': '长宁县',
-  '511525': '高县',
-  '511526': '珙县',
-  '511527': '筠连县',
-  '511528': '兴文县',
-  '511529': '屏山县',
-  '511602': '广安区',
-  '511603': '前锋区',
-  '511621': '岳池县',
-  '511622': '武胜县',
-  '511623': '邻水县',
-  '511681': '华蓥市',
-  '511702': '通川区',
-  '511703': '达川区',
-  '511722': '宣汉县',
-  '511723': '开江县',
-  '511724': '大竹县',
-  '511725': '渠县',
-  '511771': '达州经济开发区',
-  '511781': '万源市',
-  '511802': '雨城区',
-  '511803': '名山区',
-  '511822': '荥经县',
-  '511823': '汉源县',
-  '511824': '石棉县',
-  '511825': '天全县',
-  '511826': '芦山县',
-  '511827': '宝兴县',
-  '511902': '巴州区',
-  '511903': '恩阳区',
-  '511921': '通江县',
-  '511922': '南江县',
-  '511923': '平昌县',
-  '511971': '巴中经济开发区',
-  '512002': '雁江区',
-  '512021': '安岳县',
-  '512022': '乐至县',
-  '513201': '马尔康市',
-  '513221': '汶川县',
-  '513222': '理县',
-  '513223': '茂县',
-  '513224': '松潘县',
-  '513225': '九寨沟县',
-  '513226': '金川县',
-  '513227': '小金县',
-  '513228': '黑水县',
-  '513230': '壤塘县',
-  '513231': '阿坝县',
-  '513232': '若尔盖县',
-  '513233': '红原县',
-  '513301': '康定市',
-  '513322': '泸定县',
-  '513323': '丹巴县',
-  '513324': '九龙县',
-  '513325': '雅江县',
-  '513326': '道孚县',
-  '513327': '炉霍县',
-  '513328': '甘孜县',
-  '513329': '新龙县',
-  '513330': '德格县',
-  '513331': '白玉县',
-  '513332': '石渠县',
-  '513333': '色达县',
-  '513334': '理塘县',
-  '513335': '巴塘县',
-  '513336': '乡城县',
-  '513337': '稻城县',
-  '513338': '得荣县',
-  '513401': '西昌市',
-  '513402': '会理市',
-  '513422': '木里藏族自治县',
-  '513423': '盐源县',
-  '513424': '德昌县',
-  '513426': '会东县',
-  '513427': '宁南县',
-  '513428': '普格县',
-  '513429': '布拖县',
-  '513430': '金阳县',
-  '513431': '昭觉县',
-  '513432': '喜德县',
-  '513433': '冕宁县',
-  '513434': '越西县',
-  '513435': '甘洛县',
-  '513436': '美姑县',
-  '513437': '雷波县',
-  '520102': '南明区',
-  '520103': '云岩区',
-  '520111': '花溪区',
-  '520112': '乌当区',
-  '520113': '白云区',
-  '520115': '观山湖区',
-  '520121': '开阳县',
-  '520122': '息烽县',
-  '520123': '修文县',
-  '520181': '清镇市',
-  '520201': '钟山区',
-  '520203': '六枝特区',
-  '520204': '水城区',
-  '520281': '盘州市',
-  '520302': '红花岗区',
-  '520303': '汇川区',
-  '520304': '播州区',
-  '520322': '桐梓县',
-  '520323': '绥阳县',
-  '520324': '正安县',
-  '520325': '道真仡佬族苗族自治县',
-  '520326': '务川仡佬族苗族自治县',
-  '520327': '凤冈县',
-  '520328': '湄潭县',
-  '520329': '余庆县',
-  '520330': '习水县',
-  '520381': '赤水市',
-  '520382': '仁怀市',
-  '520402': '西秀区',
-  '520403': '平坝区',
-  '520422': '普定县',
-  '520423': '镇宁布依族苗族自治县',
-  '520424': '关岭布依族苗族自治县',
-  '520425': '紫云苗族布依族自治县',
-  '520502': '七星关区',
-  '520521': '大方县',
-  '520523': '金沙县',
-  '520524': '织金县',
-  '520525': '纳雍县',
-  '520526': '威宁彝族回族苗族自治县',
-  '520527': '赫章县',
-  '520581': '黔西市',
-  '520602': '碧江区',
-  '520603': '万山区',
-  '520621': '江口县',
-  '520622': '玉屏侗族自治县',
-  '520623': '石阡县',
-  '520624': '思南县',
-  '520625': '印江土家族苗族自治县',
-  '520626': '德江县',
-  '520627': '沿河土家族自治县',
-  '520628': '松桃苗族自治县',
-  '522301': '兴义市',
-  '522302': '兴仁市',
-  '522323': '普安县',
-  '522324': '晴隆县',
-  '522325': '贞丰县',
-  '522326': '望谟县',
-  '522327': '册亨县',
-  '522328': '安龙县',
-  '522601': '凯里市',
-  '522622': '黄平县',
-  '522623': '施秉县',
-  '522624': '三穗县',
-  '522625': '镇远县',
-  '522626': '岑巩县',
-  '522627': '天柱县',
-  '522628': '锦屏县',
-  '522629': '剑河县',
-  '522630': '台江县',
-  '522631': '黎平县',
-  '522632': '榕江县',
-  '522633': '从江县',
-  '522634': '雷山县',
-  '522635': '麻江县',
-  '522636': '丹寨县',
-  '522701': '都匀市',
-  '522702': '福泉市',
-  '522722': '荔波县',
-  '522723': '贵定县',
-  '522725': '瓮安县',
-  '522726': '独山县',
-  '522727': '平塘县',
-  '522728': '罗甸县',
-  '522729': '长顺县',
-  '522730': '龙里县',
-  '522731': '惠水县',
-  '522732': '三都水族自治县',
-  '530102': '五华区',
-  '530103': '盘龙区',
-  '530111': '官渡区',
-  '530112': '西山区',
-  '530113': '东川区',
-  '530114': '呈贡区',
-  '530115': '晋宁区',
-  '530124': '富民县',
-  '530125': '宜良县',
-  '530126': '石林彝族自治县',
-  '530127': '嵩明县',
-  '530128': '禄劝彝族苗族自治县',
-  '530129': '寻甸回族彝族自治县',
-  '530181': '安宁市',
-  '530302': '麒麟区',
-  '530303': '沾益区',
-  '530304': '马龙区',
-  '530322': '陆良县',
-  '530323': '师宗县',
-  '530324': '罗平县',
-  '530325': '富源县',
-  '530326': '会泽县',
-  '530381': '宣威市',
-  '530402': '红塔区',
-  '530403': '江川区',
-  '530423': '通海县',
-  '530424': '华宁县',
-  '530425': '易门县',
-  '530426': '峨山彝族自治县',
-  '530427': '新平彝族傣族自治县',
-  '530428': '元江哈尼族彝族傣族自治县',
-  '530481': '澄江市',
-  '530502': '隆阳区',
-  '530521': '施甸县',
-  '530523': '龙陵县',
-  '530524': '昌宁县',
-  '530581': '腾冲市',
-  '530602': '昭阳区',
-  '530621': '鲁甸县',
-  '530622': '巧家县',
-  '530623': '盐津县',
-  '530624': '大关县',
-  '530625': '永善县',
-  '530626': '绥江县',
-  '530627': '镇雄县',
-  '530628': '彝良县',
-  '530629': '威信县',
-  '530681': '水富市',
-  '530702': '古城区',
-  '530721': '玉龙纳西族自治县',
-  '530722': '永胜县',
-  '530723': '华坪县',
-  '530724': '宁蒗彝族自治县',
-  '530802': '思茅区',
-  '530821': '宁洱哈尼族彝族自治县',
-  '530822': '墨江哈尼族自治县',
-  '530823': '景东彝族自治县',
-  '530824': '景谷傣族彝族自治县',
-  '530825': '镇沅彝族哈尼族拉祜族自治县',
-  '530826': '江城哈尼族彝族自治县',
-  '530827': '孟连傣族拉祜族佤族自治县',
-  '530828': '澜沧拉祜族自治县',
-  '530829': '西盟佤族自治县',
-  '530902': '临翔区',
-  '530921': '凤庆县',
-  '530922': '云县',
-  '530923': '永德县',
-  '530924': '镇康县',
-  '530925': '双江拉祜族佤族布朗族傣族自治县',
-  '530926': '耿马傣族佤族自治县',
-  '530927': '沧源佤族自治县',
-  '532301': '楚雄市',
-  '532302': '禄丰市',
-  '532322': '双柏县',
-  '532323': '牟定县',
-  '532324': '南华县',
-  '532325': '姚安县',
-  '532326': '大姚县',
-  '532327': '永仁县',
-  '532328': '元谋县',
-  '532329': '武定县',
-  '532501': '个旧市',
-  '532502': '开远市',
-  '532503': '蒙自市',
-  '532504': '弥勒市',
-  '532523': '屏边苗族自治县',
-  '532524': '建水县',
-  '532525': '石屏县',
-  '532527': '泸西县',
-  '532528': '元阳县',
-  '532529': '红河县',
-  '532530': '金平苗族瑶族傣族自治县',
-  '532531': '绿春县',
-  '532532': '河口瑶族自治县',
-  '532601': '文山市',
-  '532622': '砚山县',
-  '532623': '西畴县',
-  '532624': '麻栗坡县',
-  '532625': '马关县',
-  '532626': '丘北县',
-  '532627': '广南县',
-  '532628': '富宁县',
-  '532801': '景洪市',
-  '532822': '勐海县',
-  '532823': '勐腊县',
-  '532901': '大理市',
-  '532922': '漾濞彝族自治县',
-  '532923': '祥云县',
-  '532924': '宾川县',
-  '532925': '弥渡县',
-  '532926': '南涧彝族自治县',
-  '532927': '巍山彝族回族自治县',
-  '532928': '永平县',
-  '532929': '云龙县',
-  '532930': '洱源县',
-  '532931': '剑川县',
-  '532932': '鹤庆县',
-  '533102': '瑞丽市',
-  '533103': '芒市',
-  '533122': '梁河县',
-  '533123': '盈江县',
-  '533124': '陇川县',
-  '533301': '泸水市',
-  '533323': '福贡县',
-  '533324': '贡山独龙族怒族自治县',
-  '533325': '兰坪白族普米族自治县',
-  '533401': '香格里拉市',
-  '533422': '德钦县',
-  '533423': '维西傈僳族自治县',
-  '540102': '城关区',
-  '540103': '堆龙德庆区',
-  '540104': '达孜区',
-  '540121': '林周县',
-  '540122': '当雄县',
-  '540123': '尼木县',
-  '540124': '曲水县',
-  '540127': '墨竹工卡县',
-  '540171': '格尔木藏青工业园区',
-  '540172': '拉萨经济技术开发区',
-  '540173': '西藏文化旅游创意园区',
-  '540174': '达孜工业园区',
-  '540202': '桑珠孜区',
-  '540221': '南木林县',
-  '540222': '江孜县',
-  '540223': '定日县',
-  '540224': '萨迦县',
-  '540225': '拉孜县',
-  '540226': '昂仁县',
-  '540227': '谢通门县',
-  '540228': '白朗县',
-  '540229': '仁布县',
-  '540230': '康马县',
-  '540231': '定结县',
-  '540232': '仲巴县',
-  '540233': '亚东县',
-  '540234': '吉隆县',
-  '540235': '聂拉木县',
-  '540236': '萨嘎县',
-  '540237': '岗巴县',
-  '540302': '卡若区',
-  '540321': '江达县',
-  '540322': '贡觉县',
-  '540323': '类乌齐县',
-  '540324': '丁青县',
-  '540325': '察雅县',
-  '540326': '八宿县',
-  '540327': '左贡县',
-  '540328': '芒康县',
-  '540329': '洛隆县',
-  '540330': '边坝县',
-  '540402': '巴宜区',
-  '540421': '工布江达县',
-  '540422': '米林县',
-  '540423': '墨脱县',
-  '540424': '波密县',
-  '540425': '察隅县',
-  '540426': '朗县',
-  '540502': '乃东区',
-  '540521': '扎囊县',
-  '540522': '贡嘎县',
-  '540523': '桑日县',
-  '540524': '琼结县',
-  '540525': '曲松县',
-  '540526': '措美县',
-  '540527': '洛扎县',
-  '540528': '加查县',
-  '540529': '隆子县',
-  '540530': '错那县',
-  '540531': '浪卡子县',
-  '540602': '色尼区',
-  '540621': '嘉黎县',
-  '540622': '比如县',
-  '540623': '聂荣县',
-  '540624': '安多县',
-  '540625': '申扎县',
-  '540626': '索县',
-  '540627': '班戈县',
-  '540628': '巴青县',
-  '540629': '尼玛县',
-  '540630': '双湖县',
-  '542521': '普兰县',
-  '542522': '札达县',
-  '542523': '噶尔县',
-  '542524': '日土县',
-  '542525': '革吉县',
-  '542526': '改则县',
-  '542527': '措勤县',
-  '610102': '新城区',
-  '610103': '碑林区',
-  '610104': '莲湖区',
-  '610111': '灞桥区',
-  '610112': '未央区',
-  '610113': '雁塔区',
-  '610114': '阎良区',
-  '610115': '临潼区',
-  '610116': '长安区',
-  '610117': '高陵区',
-  '610118': '鄠邑区',
-  '610122': '蓝田县',
-  '610124': '周至县',
-  '610202': '王益区',
-  '610203': '印台区',
-  '610204': '耀州区',
-  '610222': '宜君县',
-  '610302': '渭滨区',
-  '610303': '金台区',
-  '610304': '陈仓区',
-  '610305': '凤翔区',
-  '610323': '岐山县',
-  '610324': '扶风县',
-  '610326': '眉县',
-  '610327': '陇县',
-  '610328': '千阳县',
-  '610329': '麟游县',
-  '610330': '凤县',
-  '610331': '太白县',
-  '610402': '秦都区',
-  '610403': '杨陵区',
-  '610404': '渭城区',
-  '610422': '三原县',
-  '610423': '泾阳县',
-  '610424': '乾县',
-  '610425': '礼泉县',
-  '610426': '永寿县',
-  '610428': '长武县',
-  '610429': '旬邑县',
-  '610430': '淳化县',
-  '610431': '武功县',
-  '610481': '兴平市',
-  '610482': '彬州市',
-  '610502': '临渭区',
-  '610503': '华州区',
-  '610522': '潼关县',
-  '610523': '大荔县',
-  '610524': '合阳县',
-  '610525': '澄城县',
-  '610526': '蒲城县',
-  '610527': '白水县',
-  '610528': '富平县',
-  '610581': '韩城市',
-  '610582': '华阴市',
-  '610602': '宝塔区',
-  '610603': '安塞区',
-  '610621': '延长县',
-  '610622': '延川县',
-  '610625': '志丹县',
-  '610626': '吴起县',
-  '610627': '甘泉县',
-  '610628': '富县',
-  '610629': '洛川县',
-  '610630': '宜川县',
-  '610631': '黄龙县',
-  '610632': '黄陵县',
-  '610681': '子长市',
-  '610702': '汉台区',
-  '610703': '南郑区',
-  '610722': '城固县',
-  '610723': '洋县',
-  '610724': '西乡县',
-  '610725': '勉县',
-  '610726': '宁强县',
-  '610727': '略阳县',
-  '610728': '镇巴县',
-  '610729': '留坝县',
-  '610730': '佛坪县',
-  '610802': '榆阳区',
-  '610803': '横山区',
-  '610822': '府谷县',
-  '610824': '靖边县',
-  '610825': '定边县',
-  '610826': '绥德县',
-  '610827': '米脂县',
-  '610828': '佳县',
-  '610829': '吴堡县',
-  '610830': '清涧县',
-  '610831': '子洲县',
-  '610881': '神木市',
-  '610902': '汉滨区',
-  '610921': '汉阴县',
-  '610922': '石泉县',
-  '610923': '宁陕县',
-  '610924': '紫阳县',
-  '610925': '岚皋县',
-  '610926': '平利县',
-  '610927': '镇坪县',
-  '610929': '白河县',
-  '610981': '旬阳市',
-  '611002': '商州区',
-  '611021': '洛南县',
-  '611022': '丹凤县',
-  '611023': '商南县',
-  '611024': '山阳县',
-  '611025': '镇安县',
-  '611026': '柞水县',
-  '620102': '城关区',
-  '620103': '七里河区',
-  '620104': '西固区',
-  '620105': '安宁区',
-  '620111': '红古区',
-  '620121': '永登县',
-  '620122': '皋兰县',
-  '620123': '榆中县',
-  '620171': '兰州新区',
-  '620201': '嘉峪关市',
-  '620302': '金川区',
-  '620321': '永昌县',
-  '620402': '白银区',
-  '620403': '平川区',
-  '620421': '靖远县',
-  '620422': '会宁县',
-  '620423': '景泰县',
-  '620502': '秦州区',
-  '620503': '麦积区',
-  '620521': '清水县',
-  '620522': '秦安县',
-  '620523': '甘谷县',
-  '620524': '武山县',
-  '620525': '张家川回族自治县',
-  '620602': '凉州区',
-  '620621': '民勤县',
-  '620622': '古浪县',
-  '620623': '天祝藏族自治县',
-  '620702': '甘州区',
-  '620721': '肃南裕固族自治县',
-  '620722': '民乐县',
-  '620723': '临泽县',
-  '620724': '高台县',
-  '620725': '山丹县',
-  '620802': '崆峒区',
-  '620821': '泾川县',
-  '620822': '灵台县',
-  '620823': '崇信县',
-  '620825': '庄浪县',
-  '620826': '静宁县',
-  '620881': '华亭市',
-  '620902': '肃州区',
-  '620921': '金塔县',
-  '620922': '瓜州县',
-  '620923': '肃北蒙古族自治县',
-  '620924': '阿克塞哈萨克族自治县',
-  '620981': '玉门市',
-  '620982': '敦煌市',
-  '621002': '西峰区',
-  '621021': '庆城县',
-  '621022': '环县',
-  '621023': '华池县',
-  '621024': '合水县',
-  '621025': '正宁县',
-  '621026': '宁县',
-  '621027': '镇原县',
-  '621102': '安定区',
-  '621121': '通渭县',
-  '621122': '陇西县',
-  '621123': '渭源县',
-  '621124': '临洮县',
-  '621125': '漳县',
-  '621126': '岷县',
-  '621202': '武都区',
-  '621221': '成县',
-  '621222': '文县',
-  '621223': '宕昌县',
-  '621224': '康县',
-  '621225': '西和县',
-  '621226': '礼县',
-  '621227': '徽县',
-  '621228': '两当县',
-  '622901': '临夏市',
-  '622921': '临夏县',
-  '622922': '康乐县',
-  '622923': '永靖县',
-  '622924': '广河县',
-  '622925': '和政县',
-  '622926': '东乡族自治县',
-  '622927': '积石山保安族东乡族撒拉族自治县',
-  '623001': '合作市',
-  '623021': '临潭县',
-  '623022': '卓尼县',
-  '623023': '舟曲县',
-  '623024': '迭部县',
-  '623025': '玛曲县',
-  '623026': '碌曲县',
-  '623027': '夏河县',
-  '630102': '城东区',
-  '630103': '城中区',
-  '630104': '城西区',
-  '630105': '城北区',
-  '630106': '湟中区',
-  '630121': '大通回族土族自治县',
-  '630123': '湟源县',
-  '630202': '乐都区',
-  '630203': '平安区',
-  '630222': '民和回族土族自治县',
-  '630223': '互助土族自治县',
-  '630224': '化隆回族自治县',
-  '630225': '循化撒拉族自治县',
-  '632221': '门源回族自治县',
-  '632222': '祁连县',
-  '632223': '海晏县',
-  '632224': '刚察县',
-  '632301': '同仁市',
-  '632322': '尖扎县',
-  '632323': '泽库县',
-  '632324': '河南蒙古族自治县',
-  '632521': '共和县',
-  '632522': '同德县',
-  '632523': '贵德县',
-  '632524': '兴海县',
-  '632525': '贵南县',
-  '632621': '玛沁县',
-  '632622': '班玛县',
-  '632623': '甘德县',
-  '632624': '达日县',
-  '632625': '久治县',
-  '632626': '玛多县',
-  '632701': '玉树市',
-  '632722': '杂多县',
-  '632723': '称多县',
-  '632724': '治多县',
-  '632725': '囊谦县',
-  '632726': '曲麻莱县',
-  '632801': '格尔木市',
-  '632802': '德令哈市',
-  '632803': '茫崖市',
-  '632821': '乌兰县',
-  '632822': '都兰县',
-  '632823': '天峻县',
-  '632857': '大柴旦行政委员会',
-  '640104': '兴庆区',
-  '640105': '西夏区',
-  '640106': '金凤区',
-  '640121': '永宁县',
-  '640122': '贺兰县',
-  '640181': '灵武市',
-  '640202': '大武口区',
-  '640205': '惠农区',
-  '640221': '平罗县',
-  '640302': '利通区',
-  '640303': '红寺堡区',
-  '640323': '盐池县',
-  '640324': '同心县',
-  '640381': '青铜峡市',
-  '640402': '原州区',
-  '640422': '西吉县',
-  '640423': '隆德县',
-  '640424': '泾源县',
-  '640425': '彭阳县',
-  '640502': '沙坡头区',
-  '640521': '中宁县',
-  '640522': '海原县',
-  '650102': '天山区',
-  '650103': '沙依巴克区',
-  '650104': '新市区',
-  '650105': '水磨沟区',
-  '650106': '头屯河区',
-  '650107': '达坂城区',
-  '650109': '米东区',
-  '650121': '乌鲁木齐县',
-  '650202': '独山子区',
-  '650203': '克拉玛依区',
-  '650204': '白碱滩区',
-  '650205': '乌尔禾区',
-  '650402': '高昌区',
-  '650421': '鄯善县',
-  '650422': '托克逊县',
-  '650502': '伊州区',
-  '650521': '巴里坤哈萨克自治县',
-  '650522': '伊吾县',
-  '652301': '昌吉市',
-  '652302': '阜康市',
-  '652323': '呼图壁县',
-  '652324': '玛纳斯县',
-  '652325': '奇台县',
-  '652327': '吉木萨尔县',
-  '652328': '木垒哈萨克自治县',
-  '652701': '博乐市',
-  '652702': '阿拉山口市',
-  '652722': '精河县',
-  '652723': '温泉县',
-  '652801': '库尔勒市',
-  '652822': '轮台县',
-  '652823': '尉犁县',
-  '652824': '若羌县',
-  '652825': '且末县',
-  '652826': '焉耆回族自治县',
-  '652827': '和静县',
-  '652828': '和硕县',
-  '652829': '博湖县',
-  '652871': '库尔勒经济技术开发区',
-  '652901': '阿克苏市',
-  '652902': '库车市',
-  '652922': '温宿县',
-  '652924': '沙雅县',
-  '652925': '新和县',
-  '652926': '拜城县',
-  '652927': '乌什县',
-  '652928': '阿瓦提县',
-  '652929': '柯坪县',
-  '653001': '阿图什市',
-  '653022': '阿克陶县',
-  '653023': '阿合奇县',
-  '653024': '乌恰县',
-  '653101': '喀什市',
-  '653121': '疏附县',
-  '653122': '疏勒县',
-  '653123': '英吉沙县',
-  '653124': '泽普县',
-  '653125': '莎车县',
-  '653126': '叶城县',
-  '653127': '麦盖提县',
-  '653128': '岳普湖县',
-  '653129': '伽师县',
-  '653130': '巴楚县',
-  '653131': '塔什库尔干塔吉克自治县',
-  '653201': '和田市',
-  '653221': '和田县',
-  '653222': '墨玉县',
-  '653223': '皮山县',
-  '653224': '洛浦县',
-  '653225': '策勒县',
-  '653226': '于田县',
-  '653227': '民丰县',
-  '654002': '伊宁市',
-  '654003': '奎屯市',
-  '654004': '霍尔果斯市',
-  '654021': '伊宁县',
-  '654022': '察布查尔锡伯自治县',
-  '654023': '霍城县',
-  '654024': '巩留县',
-  '654025': '新源县',
-  '654026': '昭苏县',
-  '654027': '特克斯县',
-  '654028': '尼勒克县',
-  '654201': '塔城市',
-  '654202': '乌苏市',
-  '654203': '沙湾市',
-  '654221': '额敏县',
-  '654224': '托里县',
-  '654225': '裕民县',
-  '654226': '和布克赛尔蒙古自治县',
-  '654301': '阿勒泰市',
-  '654321': '布尔津县',
-  '654322': '富蕴县',
-  '654323': '福海县',
-  '654324': '哈巴河县',
-  '654325': '青河县',
-  '654326': '吉木乃县',
-  '659001': '石河子市',
-  '659002': '阿拉尔市',
-  '659003': '图木舒克市',
-  '659004': '五家渠市',
-  '659005': '北屯市',
-  '659006': '铁门关市',
-  '659007': '双河市',
-  '659008': '可克达拉市',
-  '659009': '昆玉市',
-  '659010': '胡杨河市',
-  '659011': '新星市'
-}
-function getDisplayNmae(code){
-  if(code.substring(2)=="0000"){
-    return districtMap[code];
-  }else if(code.substring(4)=="00"){
-    return districtMap[code.substring(0,2)+"0000"]+"-"+districtMap[code];
-  }else{
-    return districtMap[code.substring(0,2)+"0000"]+"-"+districtMap[code.substring(0,4)+"00"]+"-"+districtMap[code];
-  }
-}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/js/eruda.js


+ 0 - 5685
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/js/moment.js

@@ -1,5685 +0,0 @@
-//! moment.js
-//! version : 2.29.4
-//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
-//! license : MIT
-//! momentjs.com
-
-;(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
-  typeof define === 'function' && define.amd ? define(factory) :
-  global.moment = factory()
-}(this, (function () { 'use strict';
-
-  var hookCallback;
-
-  function hooks() {
-      return hookCallback.apply(null, arguments);
-  }
-
-  // This is done to register the method called with moment()
-  // without creating circular dependencies.
-  function setHookCallback(callback) {
-      hookCallback = callback;
-  }
-
-  function isArray(input) {
-      return (
-          input instanceof Array ||
-          Object.prototype.toString.call(input) === '[object Array]'
-      );
-  }
-
-  function isObject(input) {
-      // IE8 will treat undefined and null as object if it wasn't for
-      // input != null
-      return (
-          input != null &&
-          Object.prototype.toString.call(input) === '[object Object]'
-      );
-  }
-
-  function hasOwnProp(a, b) {
-      return Object.prototype.hasOwnProperty.call(a, b);
-  }
-
-  function isObjectEmpty(obj) {
-      if (Object.getOwnPropertyNames) {
-          return Object.getOwnPropertyNames(obj).length === 0;
-      } else {
-          var k;
-          for (k in obj) {
-              if (hasOwnProp(obj, k)) {
-                  return false;
-              }
-          }
-          return true;
-      }
-  }
-
-  function isUndefined(input) {
-      return input === void 0;
-  }
-
-  function isNumber(input) {
-      return (
-          typeof input === 'number' ||
-          Object.prototype.toString.call(input) === '[object Number]'
-      );
-  }
-
-  function isDate(input) {
-      return (
-          input instanceof Date ||
-          Object.prototype.toString.call(input) === '[object Date]'
-      );
-  }
-
-  function map(arr, fn) {
-      var res = [],
-          i,
-          arrLen = arr.length;
-      for (i = 0; i < arrLen; ++i) {
-          res.push(fn(arr[i], i));
-      }
-      return res;
-  }
-
-  function extend(a, b) {
-      for (var i in b) {
-          if (hasOwnProp(b, i)) {
-              a[i] = b[i];
-          }
-      }
-
-      if (hasOwnProp(b, 'toString')) {
-          a.toString = b.toString;
-      }
-
-      if (hasOwnProp(b, 'valueOf')) {
-          a.valueOf = b.valueOf;
-      }
-
-      return a;
-  }
-
-  function createUTC(input, format, locale, strict) {
-      return createLocalOrUTC(input, format, locale, strict, true).utc();
-  }
-
-  function defaultParsingFlags() {
-      // We need to deep clone this object.
-      return {
-          empty: false,
-          unusedTokens: [],
-          unusedInput: [],
-          overflow: -2,
-          charsLeftOver: 0,
-          nullInput: false,
-          invalidEra: null,
-          invalidMonth: null,
-          invalidFormat: false,
-          userInvalidated: false,
-          iso: false,
-          parsedDateParts: [],
-          era: null,
-          meridiem: null,
-          rfc2822: false,
-          weekdayMismatch: false,
-      };
-  }
-
-  function getParsingFlags(m) {
-      if (m._pf == null) {
-          m._pf = defaultParsingFlags();
-      }
-      return m._pf;
-  }
-
-  var some;
-  if (Array.prototype.some) {
-      some = Array.prototype.some;
-  } else {
-      some = function (fun) {
-          var t = Object(this),
-              len = t.length >>> 0,
-              i;
-
-          for (i = 0; i < len; i++) {
-              if (i in t && fun.call(this, t[i], i, t)) {
-                  return true;
-              }
-          }
-
-          return false;
-      };
-  }
-
-  function isValid(m) {
-      if (m._isValid == null) {
-          var flags = getParsingFlags(m),
-              parsedParts = some.call(flags.parsedDateParts, function (i) {
-                  return i != null;
-              }),
-              isNowValid =
-                  !isNaN(m._d.getTime()) &&
-                  flags.overflow < 0 &&
-                  !flags.empty &&
-                  !flags.invalidEra &&
-                  !flags.invalidMonth &&
-                  !flags.invalidWeekday &&
-                  !flags.weekdayMismatch &&
-                  !flags.nullInput &&
-                  !flags.invalidFormat &&
-                  !flags.userInvalidated &&
-                  (!flags.meridiem || (flags.meridiem && parsedParts));
-
-          if (m._strict) {
-              isNowValid =
-                  isNowValid &&
-                  flags.charsLeftOver === 0 &&
-                  flags.unusedTokens.length === 0 &&
-                  flags.bigHour === undefined;
-          }
-
-          if (Object.isFrozen == null || !Object.isFrozen(m)) {
-              m._isValid = isNowValid;
-          } else {
-              return isNowValid;
-          }
-      }
-      return m._isValid;
-  }
-
-  function createInvalid(flags) {
-      var m = createUTC(NaN);
-      if (flags != null) {
-          extend(getParsingFlags(m), flags);
-      } else {
-          getParsingFlags(m).userInvalidated = true;
-      }
-
-      return m;
-  }
-
-  // Plugins that add properties should also add the key here (null value),
-  // so we can properly clone ourselves.
-  var momentProperties = (hooks.momentProperties = []),
-      updateInProgress = false;
-
-  function copyConfig(to, from) {
-      var i,
-          prop,
-          val,
-          momentPropertiesLen = momentProperties.length;
-
-      if (!isUndefined(from._isAMomentObject)) {
-          to._isAMomentObject = from._isAMomentObject;
-      }
-      if (!isUndefined(from._i)) {
-          to._i = from._i;
-      }
-      if (!isUndefined(from._f)) {
-          to._f = from._f;
-      }
-      if (!isUndefined(from._l)) {
-          to._l = from._l;
-      }
-      if (!isUndefined(from._strict)) {
-          to._strict = from._strict;
-      }
-      if (!isUndefined(from._tzm)) {
-          to._tzm = from._tzm;
-      }
-      if (!isUndefined(from._isUTC)) {
-          to._isUTC = from._isUTC;
-      }
-      if (!isUndefined(from._offset)) {
-          to._offset = from._offset;
-      }
-      if (!isUndefined(from._pf)) {
-          to._pf = getParsingFlags(from);
-      }
-      if (!isUndefined(from._locale)) {
-          to._locale = from._locale;
-      }
-
-      if (momentPropertiesLen > 0) {
-          for (i = 0; i < momentPropertiesLen; i++) {
-              prop = momentProperties[i];
-              val = from[prop];
-              if (!isUndefined(val)) {
-                  to[prop] = val;
-              }
-          }
-      }
-
-      return to;
-  }
-
-  // Moment prototype object
-  function Moment(config) {
-      copyConfig(this, config);
-      this._d = new Date(config._d != null ? config._d.getTime() : NaN);
-      if (!this.isValid()) {
-          this._d = new Date(NaN);
-      }
-      // Prevent infinite loop in case updateOffset creates new moment
-      // objects.
-      if (updateInProgress === false) {
-          updateInProgress = true;
-          hooks.updateOffset(this);
-          updateInProgress = false;
-      }
-  }
-
-  function isMoment(obj) {
-      return (
-          obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
-      );
-  }
-
-  function warn(msg) {
-      if (
-          hooks.suppressDeprecationWarnings === false &&
-          typeof console !== 'undefined' &&
-          console.warn
-      ) {
-          console.warn('Deprecation warning: ' + msg);
-      }
-  }
-
-  function deprecate(msg, fn) {
-      var firstTime = true;
-
-      return extend(function () {
-          if (hooks.deprecationHandler != null) {
-              hooks.deprecationHandler(null, msg);
-          }
-          if (firstTime) {
-              var args = [],
-                  arg,
-                  i,
-                  key,
-                  argLen = arguments.length;
-              for (i = 0; i < argLen; i++) {
-                  arg = '';
-                  if (typeof arguments[i] === 'object') {
-                      arg += '\n[' + i + '] ';
-                      for (key in arguments[0]) {
-                          if (hasOwnProp(arguments[0], key)) {
-                              arg += key + ': ' + arguments[0][key] + ', ';
-                          }
-                      }
-                      arg = arg.slice(0, -2); // Remove trailing comma and space
-                  } else {
-                      arg = arguments[i];
-                  }
-                  args.push(arg);
-              }
-              warn(
-                  msg +
-                      '\nArguments: ' +
-                      Array.prototype.slice.call(args).join('') +
-                      '\n' +
-                      new Error().stack
-              );
-              firstTime = false;
-          }
-          return fn.apply(this, arguments);
-      }, fn);
-  }
-
-  var deprecations = {};
-
-  function deprecateSimple(name, msg) {
-      if (hooks.deprecationHandler != null) {
-          hooks.deprecationHandler(name, msg);
-      }
-      if (!deprecations[name]) {
-          warn(msg);
-          deprecations[name] = true;
-      }
-  }
-
-  hooks.suppressDeprecationWarnings = false;
-  hooks.deprecationHandler = null;
-
-  function isFunction(input) {
-      return (
-          (typeof Function !== 'undefined' && input instanceof Function) ||
-          Object.prototype.toString.call(input) === '[object Function]'
-      );
-  }
-
-  function set(config) {
-      var prop, i;
-      for (i in config) {
-          if (hasOwnProp(config, i)) {
-              prop = config[i];
-              if (isFunction(prop)) {
-                  this[i] = prop;
-              } else {
-                  this['_' + i] = prop;
-              }
-          }
-      }
-      this._config = config;
-      // Lenient ordinal parsing accepts just a number in addition to
-      // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
-      // TODO: Remove "ordinalParse" fallback in next major release.
-      this._dayOfMonthOrdinalParseLenient = new RegExp(
-          (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
-              '|' +
-              /\d{1,2}/.source
-      );
-  }
-
-  function mergeConfigs(parentConfig, childConfig) {
-      var res = extend({}, parentConfig),
-          prop;
-      for (prop in childConfig) {
-          if (hasOwnProp(childConfig, prop)) {
-              if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
-                  res[prop] = {};
-                  extend(res[prop], parentConfig[prop]);
-                  extend(res[prop], childConfig[prop]);
-              } else if (childConfig[prop] != null) {
-                  res[prop] = childConfig[prop];
-              } else {
-                  delete res[prop];
-              }
-          }
-      }
-      for (prop in parentConfig) {
-          if (
-              hasOwnProp(parentConfig, prop) &&
-              !hasOwnProp(childConfig, prop) &&
-              isObject(parentConfig[prop])
-          ) {
-              // make sure changes to properties don't modify parent config
-              res[prop] = extend({}, res[prop]);
-          }
-      }
-      return res;
-  }
-
-  function Locale(config) {
-      if (config != null) {
-          this.set(config);
-      }
-  }
-
-  var keys;
-
-  if (Object.keys) {
-      keys = Object.keys;
-  } else {
-      keys = function (obj) {
-          var i,
-              res = [];
-          for (i in obj) {
-              if (hasOwnProp(obj, i)) {
-                  res.push(i);
-              }
-          }
-          return res;
-      };
-  }
-
-  var defaultCalendar = {
-      sameDay: '[Today at] LT',
-      nextDay: '[Tomorrow at] LT',
-      nextWeek: 'dddd [at] LT',
-      lastDay: '[Yesterday at] LT',
-      lastWeek: '[Last] dddd [at] LT',
-      sameElse: 'L',
-  };
-
-  function calendar(key, mom, now) {
-      var output = this._calendar[key] || this._calendar['sameElse'];
-      return isFunction(output) ? output.call(mom, now) : output;
-  }
-
-  function zeroFill(number, targetLength, forceSign) {
-      var absNumber = '' + Math.abs(number),
-          zerosToFill = targetLength - absNumber.length,
-          sign = number >= 0;
-      return (
-          (sign ? (forceSign ? '+' : '') : '-') +
-          Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
-          absNumber
-      );
-  }
-
-  var formattingTokens =
-          /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
-      localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
-      formatFunctions = {},
-      formatTokenFunctions = {};
-
-  // token:    'M'
-  // padded:   ['MM', 2]
-  // ordinal:  'Mo'
-  // callback: function () { this.month() + 1 }
-  function addFormatToken(token, padded, ordinal, callback) {
-      var func = callback;
-      if (typeof callback === 'string') {
-          func = function () {
-              return this[callback]();
-          };
-      }
-      if (token) {
-          formatTokenFunctions[token] = func;
-      }
-      if (padded) {
-          formatTokenFunctions[padded[0]] = function () {
-              return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
-          };
-      }
-      if (ordinal) {
-          formatTokenFunctions[ordinal] = function () {
-              return this.localeData().ordinal(
-                  func.apply(this, arguments),
-                  token
-              );
-          };
-      }
-  }
-
-  function removeFormattingTokens(input) {
-      if (input.match(/\[[\s\S]/)) {
-          return input.replace(/^\[|\]$/g, '');
-      }
-      return input.replace(/\\/g, '');
-  }
-
-  function makeFormatFunction(format) {
-      var array = format.match(formattingTokens),
-          i,
-          length;
-
-      for (i = 0, length = array.length; i < length; i++) {
-          if (formatTokenFunctions[array[i]]) {
-              array[i] = formatTokenFunctions[array[i]];
-          } else {
-              array[i] = removeFormattingTokens(array[i]);
-          }
-      }
-
-      return function (mom) {
-          var output = '',
-              i;
-          for (i = 0; i < length; i++) {
-              output += isFunction(array[i])
-                  ? array[i].call(mom, format)
-                  : array[i];
-          }
-          return output;
-      };
-  }
-
-  // format date using native date object
-  function formatMoment(m, format) {
-      if (!m.isValid()) {
-          return m.localeData().invalidDate();
-      }
-
-      format = expandFormat(format, m.localeData());
-      formatFunctions[format] =
-          formatFunctions[format] || makeFormatFunction(format);
-
-      return formatFunctions[format](m);
-  }
-
-  function expandFormat(format, locale) {
-      var i = 5;
-
-      function replaceLongDateFormatTokens(input) {
-          return locale.longDateFormat(input) || input;
-      }
-
-      localFormattingTokens.lastIndex = 0;
-      while (i >= 0 && localFormattingTokens.test(format)) {
-          format = format.replace(
-              localFormattingTokens,
-              replaceLongDateFormatTokens
-          );
-          localFormattingTokens.lastIndex = 0;
-          i -= 1;
-      }
-
-      return format;
-  }
-
-  var defaultLongDateFormat = {
-      LTS: 'h:mm:ss A',
-      LT: 'h:mm A',
-      L: 'MM/DD/YYYY',
-      LL: 'MMMM D, YYYY',
-      LLL: 'MMMM D, YYYY h:mm A',
-      LLLL: 'dddd, MMMM D, YYYY h:mm A',
-  };
-
-  function longDateFormat(key) {
-      var format = this._longDateFormat[key],
-          formatUpper = this._longDateFormat[key.toUpperCase()];
-
-      if (format || !formatUpper) {
-          return format;
-      }
-
-      this._longDateFormat[key] = formatUpper
-          .match(formattingTokens)
-          .map(function (tok) {
-              if (
-                  tok === 'MMMM' ||
-                  tok === 'MM' ||
-                  tok === 'DD' ||
-                  tok === 'dddd'
-              ) {
-                  return tok.slice(1);
-              }
-              return tok;
-          })
-          .join('');
-
-      return this._longDateFormat[key];
-  }
-
-  var defaultInvalidDate = 'Invalid date';
-
-  function invalidDate() {
-      return this._invalidDate;
-  }
-
-  var defaultOrdinal = '%d',
-      defaultDayOfMonthOrdinalParse = /\d{1,2}/;
-
-  function ordinal(number) {
-      return this._ordinal.replace('%d', number);
-  }
-
-  var defaultRelativeTime = {
-      future: 'in %s',
-      past: '%s ago',
-      s: 'a few seconds',
-      ss: '%d seconds',
-      m: 'a minute',
-      mm: '%d minutes',
-      h: 'an hour',
-      hh: '%d hours',
-      d: 'a day',
-      dd: '%d days',
-      w: 'a week',
-      ww: '%d weeks',
-      M: 'a month',
-      MM: '%d months',
-      y: 'a year',
-      yy: '%d years',
-  };
-
-  function relativeTime(number, withoutSuffix, string, isFuture) {
-      var output = this._relativeTime[string];
-      return isFunction(output)
-          ? output(number, withoutSuffix, string, isFuture)
-          : output.replace(/%d/i, number);
-  }
-
-  function pastFuture(diff, output) {
-      var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
-      return isFunction(format) ? format(output) : format.replace(/%s/i, output);
-  }
-
-  var aliases = {};
-
-  function addUnitAlias(unit, shorthand) {
-      var lowerCase = unit.toLowerCase();
-      aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
-  }
-
-  function normalizeUnits(units) {
-      return typeof units === 'string'
-          ? aliases[units] || aliases[units.toLowerCase()]
-          : undefined;
-  }
-
-  function normalizeObjectUnits(inputObject) {
-      var normalizedInput = {},
-          normalizedProp,
-          prop;
-
-      for (prop in inputObject) {
-          if (hasOwnProp(inputObject, prop)) {
-              normalizedProp = normalizeUnits(prop);
-              if (normalizedProp) {
-                  normalizedInput[normalizedProp] = inputObject[prop];
-              }
-          }
-      }
-
-      return normalizedInput;
-  }
-
-  var priorities = {};
-
-  function addUnitPriority(unit, priority) {
-      priorities[unit] = priority;
-  }
-
-  function getPrioritizedUnits(unitsObj) {
-      var units = [],
-          u;
-      for (u in unitsObj) {
-          if (hasOwnProp(unitsObj, u)) {
-              units.push({ unit: u, priority: priorities[u] });
-          }
-      }
-      units.sort(function (a, b) {
-          return a.priority - b.priority;
-      });
-      return units;
-  }
-
-  function isLeapYear(year) {
-      return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
-  }
-
-  function absFloor(number) {
-      if (number < 0) {
-          // -0 -> 0
-          return Math.ceil(number) || 0;
-      } else {
-          return Math.floor(number);
-      }
-  }
-
-  function toInt(argumentForCoercion) {
-      var coercedNumber = +argumentForCoercion,
-          value = 0;
-
-      if (coercedNumber !== 0 && isFinite(coercedNumber)) {
-          value = absFloor(coercedNumber);
-      }
-
-      return value;
-  }
-
-  function makeGetSet(unit, keepTime) {
-      return function (value) {
-          if (value != null) {
-              set$1(this, unit, value);
-              hooks.updateOffset(this, keepTime);
-              return this;
-          } else {
-              return get(this, unit);
-          }
-      };
-  }
-
-  function get(mom, unit) {
-      return mom.isValid()
-          ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
-          : NaN;
-  }
-
-  function set$1(mom, unit, value) {
-      if (mom.isValid() && !isNaN(value)) {
-          if (
-              unit === 'FullYear' &&
-              isLeapYear(mom.year()) &&
-              mom.month() === 1 &&
-              mom.date() === 29
-          ) {
-              value = toInt(value);
-              mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
-                  value,
-                  mom.month(),
-                  daysInMonth(value, mom.month())
-              );
-          } else {
-              mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
-          }
-      }
-  }
-
-  // MOMENTS
-
-  function stringGet(units) {
-      units = normalizeUnits(units);
-      if (isFunction(this[units])) {
-          return this[units]();
-      }
-      return this;
-  }
-
-  function stringSet(units, value) {
-      if (typeof units === 'object') {
-          units = normalizeObjectUnits(units);
-          var prioritized = getPrioritizedUnits(units),
-              i,
-              prioritizedLen = prioritized.length;
-          for (i = 0; i < prioritizedLen; i++) {
-              this[prioritized[i].unit](units[prioritized[i].unit]);
-          }
-      } else {
-          units = normalizeUnits(units);
-          if (isFunction(this[units])) {
-              return this[units](value);
-          }
-      }
-      return this;
-  }
-
-  var match1 = /\d/, //       0 - 9
-      match2 = /\d\d/, //      00 - 99
-      match3 = /\d{3}/, //     000 - 999
-      match4 = /\d{4}/, //    0000 - 9999
-      match6 = /[+-]?\d{6}/, // -999999 - 999999
-      match1to2 = /\d\d?/, //       0 - 99
-      match3to4 = /\d\d\d\d?/, //     999 - 9999
-      match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
-      match1to3 = /\d{1,3}/, //       0 - 999
-      match1to4 = /\d{1,4}/, //       0 - 9999
-      match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
-      matchUnsigned = /\d+/, //       0 - inf
-      matchSigned = /[+-]?\d+/, //    -inf - inf
-      matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
-      matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
-      matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
-      // any word (or two) characters or numbers including two/three word month in arabic.
-      // includes scottish gaelic two word and hyphenated months
-      matchWord =
-          /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
-      regexes;
-
-  regexes = {};
-
-  function addRegexToken(token, regex, strictRegex) {
-      regexes[token] = isFunction(regex)
-          ? regex
-          : function (isStrict, localeData) {
-                return isStrict && strictRegex ? strictRegex : regex;
-            };
-  }
-
-  function getParseRegexForToken(token, config) {
-      if (!hasOwnProp(regexes, token)) {
-          return new RegExp(unescapeFormat(token));
-      }
-
-      return regexes[token](config._strict, config._locale);
-  }
-
-  // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
-  function unescapeFormat(s) {
-      return regexEscape(
-          s
-              .replace('\\', '')
-              .replace(
-                  /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
-                  function (matched, p1, p2, p3, p4) {
-                      return p1 || p2 || p3 || p4;
-                  }
-              )
-      );
-  }
-
-  function regexEscape(s) {
-      return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
-  }
-
-  var tokens = {};
-
-  function addParseToken(token, callback) {
-      var i,
-          func = callback,
-          tokenLen;
-      if (typeof token === 'string') {
-          token = [token];
-      }
-      if (isNumber(callback)) {
-          func = function (input, array) {
-              array[callback] = toInt(input);
-          };
-      }
-      tokenLen = token.length;
-      for (i = 0; i < tokenLen; i++) {
-          tokens[token[i]] = func;
-      }
-  }
-
-  function addWeekParseToken(token, callback) {
-      addParseToken(token, function (input, array, config, token) {
-          config._w = config._w || {};
-          callback(input, config._w, config, token);
-      });
-  }
-
-  function addTimeToArrayFromToken(token, input, config) {
-      if (input != null && hasOwnProp(tokens, token)) {
-          tokens[token](input, config._a, config, token);
-      }
-  }
-
-  var YEAR = 0,
-      MONTH = 1,
-      DATE = 2,
-      HOUR = 3,
-      MINUTE = 4,
-      SECOND = 5,
-      MILLISECOND = 6,
-      WEEK = 7,
-      WEEKDAY = 8;
-
-  function mod(n, x) {
-      return ((n % x) + x) % x;
-  }
-
-  var indexOf;
-
-  if (Array.prototype.indexOf) {
-      indexOf = Array.prototype.indexOf;
-  } else {
-      indexOf = function (o) {
-          // I know
-          var i;
-          for (i = 0; i < this.length; ++i) {
-              if (this[i] === o) {
-                  return i;
-              }
-          }
-          return -1;
-      };
-  }
-
-  function daysInMonth(year, month) {
-      if (isNaN(year) || isNaN(month)) {
-          return NaN;
-      }
-      var modMonth = mod(month, 12);
-      year += (month - modMonth) / 12;
-      return modMonth === 1
-          ? isLeapYear(year)
-              ? 29
-              : 28
-          : 31 - ((modMonth % 7) % 2);
-  }
-
-  // FORMATTING
-
-  addFormatToken('M', ['MM', 2], 'Mo', function () {
-      return this.month() + 1;
-  });
-
-  addFormatToken('MMM', 0, 0, function (format) {
-      return this.localeData().monthsShort(this, format);
-  });
-
-  addFormatToken('MMMM', 0, 0, function (format) {
-      return this.localeData().months(this, format);
-  });
-
-  // ALIASES
-
-  addUnitAlias('month', 'M');
-
-  // PRIORITY
-
-  addUnitPriority('month', 8);
-
-  // PARSING
-
-  addRegexToken('M', match1to2);
-  addRegexToken('MM', match1to2, match2);
-  addRegexToken('MMM', function (isStrict, locale) {
-      return locale.monthsShortRegex(isStrict);
-  });
-  addRegexToken('MMMM', function (isStrict, locale) {
-      return locale.monthsRegex(isStrict);
-  });
-
-  addParseToken(['M', 'MM'], function (input, array) {
-      array[MONTH] = toInt(input) - 1;
-  });
-
-  addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
-      var month = config._locale.monthsParse(input, token, config._strict);
-      // if we didn't find a month name, mark the date as invalid.
-      if (month != null) {
-          array[MONTH] = month;
-      } else {
-          getParsingFlags(config).invalidMonth = input;
-      }
-  });
-
-  // LOCALES
-
-  var defaultLocaleMonths =
-          'January_February_March_April_May_June_July_August_September_October_November_December'.split(
-              '_'
-          ),
-      defaultLocaleMonthsShort =
-          'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
-      MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
-      defaultMonthsShortRegex = matchWord,
-      defaultMonthsRegex = matchWord;
-
-  function localeMonths(m, format) {
-      if (!m) {
-          return isArray(this._months)
-              ? this._months
-              : this._months['standalone'];
-      }
-      return isArray(this._months)
-          ? this._months[m.month()]
-          : this._months[
-                (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
-                    ? 'format'
-                    : 'standalone'
-            ][m.month()];
-  }
-
-  function localeMonthsShort(m, format) {
-      if (!m) {
-          return isArray(this._monthsShort)
-              ? this._monthsShort
-              : this._monthsShort['standalone'];
-      }
-      return isArray(this._monthsShort)
-          ? this._monthsShort[m.month()]
-          : this._monthsShort[
-                MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
-            ][m.month()];
-  }
-
-  function handleStrictParse(monthName, format, strict) {
-      var i,
-          ii,
-          mom,
-          llc = monthName.toLocaleLowerCase();
-      if (!this._monthsParse) {
-          // this is not used
-          this._monthsParse = [];
-          this._longMonthsParse = [];
-          this._shortMonthsParse = [];
-          for (i = 0; i < 12; ++i) {
-              mom = createUTC([2000, i]);
-              this._shortMonthsParse[i] = this.monthsShort(
-                  mom,
-                  ''
-              ).toLocaleLowerCase();
-              this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
-          }
-      }
-
-      if (strict) {
-          if (format === 'MMM') {
-              ii = indexOf.call(this._shortMonthsParse, llc);
-              return ii !== -1 ? ii : null;
-          } else {
-              ii = indexOf.call(this._longMonthsParse, llc);
-              return ii !== -1 ? ii : null;
-          }
-      } else {
-          if (format === 'MMM') {
-              ii = indexOf.call(this._shortMonthsParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._longMonthsParse, llc);
-              return ii !== -1 ? ii : null;
-          } else {
-              ii = indexOf.call(this._longMonthsParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._shortMonthsParse, llc);
-              return ii !== -1 ? ii : null;
-          }
-      }
-  }
-
-  function localeMonthsParse(monthName, format, strict) {
-      var i, mom, regex;
-
-      if (this._monthsParseExact) {
-          return handleStrictParse.call(this, monthName, format, strict);
-      }
-
-      if (!this._monthsParse) {
-          this._monthsParse = [];
-          this._longMonthsParse = [];
-          this._shortMonthsParse = [];
-      }
-
-      // TODO: add sorting
-      // Sorting makes sure if one month (or abbr) is a prefix of another
-      // see sorting in computeMonthsParse
-      for (i = 0; i < 12; i++) {
-          // make the regex if we don't have it already
-          mom = createUTC([2000, i]);
-          if (strict && !this._longMonthsParse[i]) {
-              this._longMonthsParse[i] = new RegExp(
-                  '^' + this.months(mom, '').replace('.', '') + '$',
-                  'i'
-              );
-              this._shortMonthsParse[i] = new RegExp(
-                  '^' + this.monthsShort(mom, '').replace('.', '') + '$',
-                  'i'
-              );
-          }
-          if (!strict && !this._monthsParse[i]) {
-              regex =
-                  '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
-              this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
-          }
-          // test the regex
-          if (
-              strict &&
-              format === 'MMMM' &&
-              this._longMonthsParse[i].test(monthName)
-          ) {
-              return i;
-          } else if (
-              strict &&
-              format === 'MMM' &&
-              this._shortMonthsParse[i].test(monthName)
-          ) {
-              return i;
-          } else if (!strict && this._monthsParse[i].test(monthName)) {
-              return i;
-          }
-      }
-  }
-
-  // MOMENTS
-
-  function setMonth(mom, value) {
-      var dayOfMonth;
-
-      if (!mom.isValid()) {
-          // No op
-          return mom;
-      }
-
-      if (typeof value === 'string') {
-          if (/^\d+$/.test(value)) {
-              value = toInt(value);
-          } else {
-              value = mom.localeData().monthsParse(value);
-              // TODO: Another silent failure?
-              if (!isNumber(value)) {
-                  return mom;
-              }
-          }
-      }
-
-      dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
-      mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
-      return mom;
-  }
-
-  function getSetMonth(value) {
-      if (value != null) {
-          setMonth(this, value);
-          hooks.updateOffset(this, true);
-          return this;
-      } else {
-          return get(this, 'Month');
-      }
-  }
-
-  function getDaysInMonth() {
-      return daysInMonth(this.year(), this.month());
-  }
-
-  function monthsShortRegex(isStrict) {
-      if (this._monthsParseExact) {
-          if (!hasOwnProp(this, '_monthsRegex')) {
-              computeMonthsParse.call(this);
-          }
-          if (isStrict) {
-              return this._monthsShortStrictRegex;
-          } else {
-              return this._monthsShortRegex;
-          }
-      } else {
-          if (!hasOwnProp(this, '_monthsShortRegex')) {
-              this._monthsShortRegex = defaultMonthsShortRegex;
-          }
-          return this._monthsShortStrictRegex && isStrict
-              ? this._monthsShortStrictRegex
-              : this._monthsShortRegex;
-      }
-  }
-
-  function monthsRegex(isStrict) {
-      if (this._monthsParseExact) {
-          if (!hasOwnProp(this, '_monthsRegex')) {
-              computeMonthsParse.call(this);
-          }
-          if (isStrict) {
-              return this._monthsStrictRegex;
-          } else {
-              return this._monthsRegex;
-          }
-      } else {
-          if (!hasOwnProp(this, '_monthsRegex')) {
-              this._monthsRegex = defaultMonthsRegex;
-          }
-          return this._monthsStrictRegex && isStrict
-              ? this._monthsStrictRegex
-              : this._monthsRegex;
-      }
-  }
-
-  function computeMonthsParse() {
-      function cmpLenRev(a, b) {
-          return b.length - a.length;
-      }
-
-      var shortPieces = [],
-          longPieces = [],
-          mixedPieces = [],
-          i,
-          mom;
-      for (i = 0; i < 12; i++) {
-          // make the regex if we don't have it already
-          mom = createUTC([2000, i]);
-          shortPieces.push(this.monthsShort(mom, ''));
-          longPieces.push(this.months(mom, ''));
-          mixedPieces.push(this.months(mom, ''));
-          mixedPieces.push(this.monthsShort(mom, ''));
-      }
-      // Sorting makes sure if one month (or abbr) is a prefix of another it
-      // will match the longer piece.
-      shortPieces.sort(cmpLenRev);
-      longPieces.sort(cmpLenRev);
-      mixedPieces.sort(cmpLenRev);
-      for (i = 0; i < 12; i++) {
-          shortPieces[i] = regexEscape(shortPieces[i]);
-          longPieces[i] = regexEscape(longPieces[i]);
-      }
-      for (i = 0; i < 24; i++) {
-          mixedPieces[i] = regexEscape(mixedPieces[i]);
-      }
-
-      this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
-      this._monthsShortRegex = this._monthsRegex;
-      this._monthsStrictRegex = new RegExp(
-          '^(' + longPieces.join('|') + ')',
-          'i'
-      );
-      this._monthsShortStrictRegex = new RegExp(
-          '^(' + shortPieces.join('|') + ')',
-          'i'
-      );
-  }
-
-  // FORMATTING
-
-  addFormatToken('Y', 0, 0, function () {
-      var y = this.year();
-      return y <= 9999 ? zeroFill(y, 4) : '+' + y;
-  });
-
-  addFormatToken(0, ['YY', 2], 0, function () {
-      return this.year() % 100;
-  });
-
-  addFormatToken(0, ['YYYY', 4], 0, 'year');
-  addFormatToken(0, ['YYYYY', 5], 0, 'year');
-  addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
-
-  // ALIASES
-
-  addUnitAlias('year', 'y');
-
-  // PRIORITIES
-
-  addUnitPriority('year', 1);
-
-  // PARSING
-
-  addRegexToken('Y', matchSigned);
-  addRegexToken('YY', match1to2, match2);
-  addRegexToken('YYYY', match1to4, match4);
-  addRegexToken('YYYYY', match1to6, match6);
-  addRegexToken('YYYYYY', match1to6, match6);
-
-  addParseToken(['YYYYY', 'YYYYYY'], YEAR);
-  addParseToken('YYYY', function (input, array) {
-      array[YEAR] =
-          input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
-  });
-  addParseToken('YY', function (input, array) {
-      array[YEAR] = hooks.parseTwoDigitYear(input);
-  });
-  addParseToken('Y', function (input, array) {
-      array[YEAR] = parseInt(input, 10);
-  });
-
-  // HELPERS
-
-  function daysInYear(year) {
-      return isLeapYear(year) ? 366 : 365;
-  }
-
-  // HOOKS
-
-  hooks.parseTwoDigitYear = function (input) {
-      return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
-  };
-
-  // MOMENTS
-
-  var getSetYear = makeGetSet('FullYear', true);
-
-  function getIsLeapYear() {
-      return isLeapYear(this.year());
-  }
-
-  function createDate(y, m, d, h, M, s, ms) {
-      // can't just apply() to create a date:
-      // https://stackoverflow.com/q/181348
-      var date;
-      // the date constructor remaps years 0-99 to 1900-1999
-      if (y < 100 && y >= 0) {
-          // preserve leap years using a full 400 year cycle, then reset
-          date = new Date(y + 400, m, d, h, M, s, ms);
-          if (isFinite(date.getFullYear())) {
-              date.setFullYear(y);
-          }
-      } else {
-          date = new Date(y, m, d, h, M, s, ms);
-      }
-
-      return date;
-  }
-
-  function createUTCDate(y) {
-      var date, args;
-      // the Date.UTC function remaps years 0-99 to 1900-1999
-      if (y < 100 && y >= 0) {
-          args = Array.prototype.slice.call(arguments);
-          // preserve leap years using a full 400 year cycle, then reset
-          args[0] = y + 400;
-          date = new Date(Date.UTC.apply(null, args));
-          if (isFinite(date.getUTCFullYear())) {
-              date.setUTCFullYear(y);
-          }
-      } else {
-          date = new Date(Date.UTC.apply(null, arguments));
-      }
-
-      return date;
-  }
-
-  // start-of-first-week - start-of-year
-  function firstWeekOffset(year, dow, doy) {
-      var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
-          fwd = 7 + dow - doy,
-          // first-week day local weekday -- which local weekday is fwd
-          fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
-
-      return -fwdlw + fwd - 1;
-  }
-
-  // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
-  function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
-      var localWeekday = (7 + weekday - dow) % 7,
-          weekOffset = firstWeekOffset(year, dow, doy),
-          dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
-          resYear,
-          resDayOfYear;
-
-      if (dayOfYear <= 0) {
-          resYear = year - 1;
-          resDayOfYear = daysInYear(resYear) + dayOfYear;
-      } else if (dayOfYear > daysInYear(year)) {
-          resYear = year + 1;
-          resDayOfYear = dayOfYear - daysInYear(year);
-      } else {
-          resYear = year;
-          resDayOfYear = dayOfYear;
-      }
-
-      return {
-          year: resYear,
-          dayOfYear: resDayOfYear,
-      };
-  }
-
-  function weekOfYear(mom, dow, doy) {
-      var weekOffset = firstWeekOffset(mom.year(), dow, doy),
-          week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
-          resWeek,
-          resYear;
-
-      if (week < 1) {
-          resYear = mom.year() - 1;
-          resWeek = week + weeksInYear(resYear, dow, doy);
-      } else if (week > weeksInYear(mom.year(), dow, doy)) {
-          resWeek = week - weeksInYear(mom.year(), dow, doy);
-          resYear = mom.year() + 1;
-      } else {
-          resYear = mom.year();
-          resWeek = week;
-      }
-
-      return {
-          week: resWeek,
-          year: resYear,
-      };
-  }
-
-  function weeksInYear(year, dow, doy) {
-      var weekOffset = firstWeekOffset(year, dow, doy),
-          weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
-      return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
-  }
-
-  // FORMATTING
-
-  addFormatToken('w', ['ww', 2], 'wo', 'week');
-  addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
-
-  // ALIASES
-
-  addUnitAlias('week', 'w');
-  addUnitAlias('isoWeek', 'W');
-
-  // PRIORITIES
-
-  addUnitPriority('week', 5);
-  addUnitPriority('isoWeek', 5);
-
-  // PARSING
-
-  addRegexToken('w', match1to2);
-  addRegexToken('ww', match1to2, match2);
-  addRegexToken('W', match1to2);
-  addRegexToken('WW', match1to2, match2);
-
-  addWeekParseToken(
-      ['w', 'ww', 'W', 'WW'],
-      function (input, week, config, token) {
-          week[token.substr(0, 1)] = toInt(input);
-      }
-  );
-
-  // HELPERS
-
-  // LOCALES
-
-  function localeWeek(mom) {
-      return weekOfYear(mom, this._week.dow, this._week.doy).week;
-  }
-
-  var defaultLocaleWeek = {
-      dow: 0, // Sunday is the first day of the week.
-      doy: 6, // The week that contains Jan 6th is the first week of the year.
-  };
-
-  function localeFirstDayOfWeek() {
-      return this._week.dow;
-  }
-
-  function localeFirstDayOfYear() {
-      return this._week.doy;
-  }
-
-  // MOMENTS
-
-  function getSetWeek(input) {
-      var week = this.localeData().week(this);
-      return input == null ? week : this.add((input - week) * 7, 'd');
-  }
-
-  function getSetISOWeek(input) {
-      var week = weekOfYear(this, 1, 4).week;
-      return input == null ? week : this.add((input - week) * 7, 'd');
-  }
-
-  // FORMATTING
-
-  addFormatToken('d', 0, 'do', 'day');
-
-  addFormatToken('dd', 0, 0, function (format) {
-      return this.localeData().weekdaysMin(this, format);
-  });
-
-  addFormatToken('ddd', 0, 0, function (format) {
-      return this.localeData().weekdaysShort(this, format);
-  });
-
-  addFormatToken('dddd', 0, 0, function (format) {
-      return this.localeData().weekdays(this, format);
-  });
-
-  addFormatToken('e', 0, 0, 'weekday');
-  addFormatToken('E', 0, 0, 'isoWeekday');
-
-  // ALIASES
-
-  addUnitAlias('day', 'd');
-  addUnitAlias('weekday', 'e');
-  addUnitAlias('isoWeekday', 'E');
-
-  // PRIORITY
-  addUnitPriority('day', 11);
-  addUnitPriority('weekday', 11);
-  addUnitPriority('isoWeekday', 11);
-
-  // PARSING
-
-  addRegexToken('d', match1to2);
-  addRegexToken('e', match1to2);
-  addRegexToken('E', match1to2);
-  addRegexToken('dd', function (isStrict, locale) {
-      return locale.weekdaysMinRegex(isStrict);
-  });
-  addRegexToken('ddd', function (isStrict, locale) {
-      return locale.weekdaysShortRegex(isStrict);
-  });
-  addRegexToken('dddd', function (isStrict, locale) {
-      return locale.weekdaysRegex(isStrict);
-  });
-
-  addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
-      var weekday = config._locale.weekdaysParse(input, token, config._strict);
-      // if we didn't get a weekday name, mark the date as invalid
-      if (weekday != null) {
-          week.d = weekday;
-      } else {
-          getParsingFlags(config).invalidWeekday = input;
-      }
-  });
-
-  addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
-      week[token] = toInt(input);
-  });
-
-  // HELPERS
-
-  function parseWeekday(input, locale) {
-      if (typeof input !== 'string') {
-          return input;
-      }
-
-      if (!isNaN(input)) {
-          return parseInt(input, 10);
-      }
-
-      input = locale.weekdaysParse(input);
-      if (typeof input === 'number') {
-          return input;
-      }
-
-      return null;
-  }
-
-  function parseIsoWeekday(input, locale) {
-      if (typeof input === 'string') {
-          return locale.weekdaysParse(input) % 7 || 7;
-      }
-      return isNaN(input) ? null : input;
-  }
-
-  // LOCALES
-  function shiftWeekdays(ws, n) {
-      return ws.slice(n, 7).concat(ws.slice(0, n));
-  }
-
-  var defaultLocaleWeekdays =
-          'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
-      defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
-      defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
-      defaultWeekdaysRegex = matchWord,
-      defaultWeekdaysShortRegex = matchWord,
-      defaultWeekdaysMinRegex = matchWord;
-
-  function localeWeekdays(m, format) {
-      var weekdays = isArray(this._weekdays)
-          ? this._weekdays
-          : this._weekdays[
-                m && m !== true && this._weekdays.isFormat.test(format)
-                    ? 'format'
-                    : 'standalone'
-            ];
-      return m === true
-          ? shiftWeekdays(weekdays, this._week.dow)
-          : m
-          ? weekdays[m.day()]
-          : weekdays;
-  }
-
-  function localeWeekdaysShort(m) {
-      return m === true
-          ? shiftWeekdays(this._weekdaysShort, this._week.dow)
-          : m
-          ? this._weekdaysShort[m.day()]
-          : this._weekdaysShort;
-  }
-
-  function localeWeekdaysMin(m) {
-      return m === true
-          ? shiftWeekdays(this._weekdaysMin, this._week.dow)
-          : m
-          ? this._weekdaysMin[m.day()]
-          : this._weekdaysMin;
-  }
-
-  function handleStrictParse$1(weekdayName, format, strict) {
-      var i,
-          ii,
-          mom,
-          llc = weekdayName.toLocaleLowerCase();
-      if (!this._weekdaysParse) {
-          this._weekdaysParse = [];
-          this._shortWeekdaysParse = [];
-          this._minWeekdaysParse = [];
-
-          for (i = 0; i < 7; ++i) {
-              mom = createUTC([2000, 1]).day(i);
-              this._minWeekdaysParse[i] = this.weekdaysMin(
-                  mom,
-                  ''
-              ).toLocaleLowerCase();
-              this._shortWeekdaysParse[i] = this.weekdaysShort(
-                  mom,
-                  ''
-              ).toLocaleLowerCase();
-              this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
-          }
-      }
-
-      if (strict) {
-          if (format === 'dddd') {
-              ii = indexOf.call(this._weekdaysParse, llc);
-              return ii !== -1 ? ii : null;
-          } else if (format === 'ddd') {
-              ii = indexOf.call(this._shortWeekdaysParse, llc);
-              return ii !== -1 ? ii : null;
-          } else {
-              ii = indexOf.call(this._minWeekdaysParse, llc);
-              return ii !== -1 ? ii : null;
-          }
-      } else {
-          if (format === 'dddd') {
-              ii = indexOf.call(this._weekdaysParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._shortWeekdaysParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._minWeekdaysParse, llc);
-              return ii !== -1 ? ii : null;
-          } else if (format === 'ddd') {
-              ii = indexOf.call(this._shortWeekdaysParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._weekdaysParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._minWeekdaysParse, llc);
-              return ii !== -1 ? ii : null;
-          } else {
-              ii = indexOf.call(this._minWeekdaysParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._weekdaysParse, llc);
-              if (ii !== -1) {
-                  return ii;
-              }
-              ii = indexOf.call(this._shortWeekdaysParse, llc);
-              return ii !== -1 ? ii : null;
-          }
-      }
-  }
-
-  function localeWeekdaysParse(weekdayName, format, strict) {
-      var i, mom, regex;
-
-      if (this._weekdaysParseExact) {
-          return handleStrictParse$1.call(this, weekdayName, format, strict);
-      }
-
-      if (!this._weekdaysParse) {
-          this._weekdaysParse = [];
-          this._minWeekdaysParse = [];
-          this._shortWeekdaysParse = [];
-          this._fullWeekdaysParse = [];
-      }
-
-      for (i = 0; i < 7; i++) {
-          // make the regex if we don't have it already
-
-          mom = createUTC([2000, 1]).day(i);
-          if (strict && !this._fullWeekdaysParse[i]) {
-              this._fullWeekdaysParse[i] = new RegExp(
-                  '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
-                  'i'
-              );
-              this._shortWeekdaysParse[i] = new RegExp(
-                  '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
-                  'i'
-              );
-              this._minWeekdaysParse[i] = new RegExp(
-                  '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
-                  'i'
-              );
-          }
-          if (!this._weekdaysParse[i]) {
-              regex =
-                  '^' +
-                  this.weekdays(mom, '') +
-                  '|^' +
-                  this.weekdaysShort(mom, '') +
-                  '|^' +
-                  this.weekdaysMin(mom, '');
-              this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
-          }
-          // test the regex
-          if (
-              strict &&
-              format === 'dddd' &&
-              this._fullWeekdaysParse[i].test(weekdayName)
-          ) {
-              return i;
-          } else if (
-              strict &&
-              format === 'ddd' &&
-              this._shortWeekdaysParse[i].test(weekdayName)
-          ) {
-              return i;
-          } else if (
-              strict &&
-              format === 'dd' &&
-              this._minWeekdaysParse[i].test(weekdayName)
-          ) {
-              return i;
-          } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
-              return i;
-          }
-      }
-  }
-
-  // MOMENTS
-
-  function getSetDayOfWeek(input) {
-      if (!this.isValid()) {
-          return input != null ? this : NaN;
-      }
-      var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
-      if (input != null) {
-          input = parseWeekday(input, this.localeData());
-          return this.add(input - day, 'd');
-      } else {
-          return day;
-      }
-  }
-
-  function getSetLocaleDayOfWeek(input) {
-      if (!this.isValid()) {
-          return input != null ? this : NaN;
-      }
-      var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
-      return input == null ? weekday : this.add(input - weekday, 'd');
-  }
-
-  function getSetISODayOfWeek(input) {
-      if (!this.isValid()) {
-          return input != null ? this : NaN;
-      }
-
-      // behaves the same as moment#day except
-      // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
-      // as a setter, sunday should belong to the previous week.
-
-      if (input != null) {
-          var weekday = parseIsoWeekday(input, this.localeData());
-          return this.day(this.day() % 7 ? weekday : weekday - 7);
-      } else {
-          return this.day() || 7;
-      }
-  }
-
-  function weekdaysRegex(isStrict) {
-      if (this._weekdaysParseExact) {
-          if (!hasOwnProp(this, '_weekdaysRegex')) {
-              computeWeekdaysParse.call(this);
-          }
-          if (isStrict) {
-              return this._weekdaysStrictRegex;
-          } else {
-              return this._weekdaysRegex;
-          }
-      } else {
-          if (!hasOwnProp(this, '_weekdaysRegex')) {
-              this._weekdaysRegex = defaultWeekdaysRegex;
-          }
-          return this._weekdaysStrictRegex && isStrict
-              ? this._weekdaysStrictRegex
-              : this._weekdaysRegex;
-      }
-  }
-
-  function weekdaysShortRegex(isStrict) {
-      if (this._weekdaysParseExact) {
-          if (!hasOwnProp(this, '_weekdaysRegex')) {
-              computeWeekdaysParse.call(this);
-          }
-          if (isStrict) {
-              return this._weekdaysShortStrictRegex;
-          } else {
-              return this._weekdaysShortRegex;
-          }
-      } else {
-          if (!hasOwnProp(this, '_weekdaysShortRegex')) {
-              this._weekdaysShortRegex = defaultWeekdaysShortRegex;
-          }
-          return this._weekdaysShortStrictRegex && isStrict
-              ? this._weekdaysShortStrictRegex
-              : this._weekdaysShortRegex;
-      }
-  }
-
-  function weekdaysMinRegex(isStrict) {
-      if (this._weekdaysParseExact) {
-          if (!hasOwnProp(this, '_weekdaysRegex')) {
-              computeWeekdaysParse.call(this);
-          }
-          if (isStrict) {
-              return this._weekdaysMinStrictRegex;
-          } else {
-              return this._weekdaysMinRegex;
-          }
-      } else {
-          if (!hasOwnProp(this, '_weekdaysMinRegex')) {
-              this._weekdaysMinRegex = defaultWeekdaysMinRegex;
-          }
-          return this._weekdaysMinStrictRegex && isStrict
-              ? this._weekdaysMinStrictRegex
-              : this._weekdaysMinRegex;
-      }
-  }
-
-  function computeWeekdaysParse() {
-      function cmpLenRev(a, b) {
-          return b.length - a.length;
-      }
-
-      var minPieces = [],
-          shortPieces = [],
-          longPieces = [],
-          mixedPieces = [],
-          i,
-          mom,
-          minp,
-          shortp,
-          longp;
-      for (i = 0; i < 7; i++) {
-          // make the regex if we don't have it already
-          mom = createUTC([2000, 1]).day(i);
-          minp = regexEscape(this.weekdaysMin(mom, ''));
-          shortp = regexEscape(this.weekdaysShort(mom, ''));
-          longp = regexEscape(this.weekdays(mom, ''));
-          minPieces.push(minp);
-          shortPieces.push(shortp);
-          longPieces.push(longp);
-          mixedPieces.push(minp);
-          mixedPieces.push(shortp);
-          mixedPieces.push(longp);
-      }
-      // Sorting makes sure if one weekday (or abbr) is a prefix of another it
-      // will match the longer piece.
-      minPieces.sort(cmpLenRev);
-      shortPieces.sort(cmpLenRev);
-      longPieces.sort(cmpLenRev);
-      mixedPieces.sort(cmpLenRev);
-
-      this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
-      this._weekdaysShortRegex = this._weekdaysRegex;
-      this._weekdaysMinRegex = this._weekdaysRegex;
-
-      this._weekdaysStrictRegex = new RegExp(
-          '^(' + longPieces.join('|') + ')',
-          'i'
-      );
-      this._weekdaysShortStrictRegex = new RegExp(
-          '^(' + shortPieces.join('|') + ')',
-          'i'
-      );
-      this._weekdaysMinStrictRegex = new RegExp(
-          '^(' + minPieces.join('|') + ')',
-          'i'
-      );
-  }
-
-  // FORMATTING
-
-  function hFormat() {
-      return this.hours() % 12 || 12;
-  }
-
-  function kFormat() {
-      return this.hours() || 24;
-  }
-
-  addFormatToken('H', ['HH', 2], 0, 'hour');
-  addFormatToken('h', ['hh', 2], 0, hFormat);
-  addFormatToken('k', ['kk', 2], 0, kFormat);
-
-  addFormatToken('hmm', 0, 0, function () {
-      return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
-  });
-
-  addFormatToken('hmmss', 0, 0, function () {
-      return (
-          '' +
-          hFormat.apply(this) +
-          zeroFill(this.minutes(), 2) +
-          zeroFill(this.seconds(), 2)
-      );
-  });
-
-  addFormatToken('Hmm', 0, 0, function () {
-      return '' + this.hours() + zeroFill(this.minutes(), 2);
-  });
-
-  addFormatToken('Hmmss', 0, 0, function () {
-      return (
-          '' +
-          this.hours() +
-          zeroFill(this.minutes(), 2) +
-          zeroFill(this.seconds(), 2)
-      );
-  });
-
-  function meridiem(token, lowercase) {
-      addFormatToken(token, 0, 0, function () {
-          return this.localeData().meridiem(
-              this.hours(),
-              this.minutes(),
-              lowercase
-          );
-      });
-  }
-
-  meridiem('a', true);
-  meridiem('A', false);
-
-  // ALIASES
-
-  addUnitAlias('hour', 'h');
-
-  // PRIORITY
-  addUnitPriority('hour', 13);
-
-  // PARSING
-
-  function matchMeridiem(isStrict, locale) {
-      return locale._meridiemParse;
-  }
-
-  addRegexToken('a', matchMeridiem);
-  addRegexToken('A', matchMeridiem);
-  addRegexToken('H', match1to2);
-  addRegexToken('h', match1to2);
-  addRegexToken('k', match1to2);
-  addRegexToken('HH', match1to2, match2);
-  addRegexToken('hh', match1to2, match2);
-  addRegexToken('kk', match1to2, match2);
-
-  addRegexToken('hmm', match3to4);
-  addRegexToken('hmmss', match5to6);
-  addRegexToken('Hmm', match3to4);
-  addRegexToken('Hmmss', match5to6);
-
-  addParseToken(['H', 'HH'], HOUR);
-  addParseToken(['k', 'kk'], function (input, array, config) {
-      var kInput = toInt(input);
-      array[HOUR] = kInput === 24 ? 0 : kInput;
-  });
-  addParseToken(['a', 'A'], function (input, array, config) {
-      config._isPm = config._locale.isPM(input);
-      config._meridiem = input;
-  });
-  addParseToken(['h', 'hh'], function (input, array, config) {
-      array[HOUR] = toInt(input);
-      getParsingFlags(config).bigHour = true;
-  });
-  addParseToken('hmm', function (input, array, config) {
-      var pos = input.length - 2;
-      array[HOUR] = toInt(input.substr(0, pos));
-      array[MINUTE] = toInt(input.substr(pos));
-      getParsingFlags(config).bigHour = true;
-  });
-  addParseToken('hmmss', function (input, array, config) {
-      var pos1 = input.length - 4,
-          pos2 = input.length - 2;
-      array[HOUR] = toInt(input.substr(0, pos1));
-      array[MINUTE] = toInt(input.substr(pos1, 2));
-      array[SECOND] = toInt(input.substr(pos2));
-      getParsingFlags(config).bigHour = true;
-  });
-  addParseToken('Hmm', function (input, array, config) {
-      var pos = input.length - 2;
-      array[HOUR] = toInt(input.substr(0, pos));
-      array[MINUTE] = toInt(input.substr(pos));
-  });
-  addParseToken('Hmmss', function (input, array, config) {
-      var pos1 = input.length - 4,
-          pos2 = input.length - 2;
-      array[HOUR] = toInt(input.substr(0, pos1));
-      array[MINUTE] = toInt(input.substr(pos1, 2));
-      array[SECOND] = toInt(input.substr(pos2));
-  });
-
-  // LOCALES
-
-  function localeIsPM(input) {
-      // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
-      // Using charAt should be more compatible.
-      return (input + '').toLowerCase().charAt(0) === 'p';
-  }
-
-  var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
-      // Setting the hour should keep the time, because the user explicitly
-      // specified which hour they want. So trying to maintain the same hour (in
-      // a new timezone) makes sense. Adding/subtracting hours does not follow
-      // this rule.
-      getSetHour = makeGetSet('Hours', true);
-
-  function localeMeridiem(hours, minutes, isLower) {
-      if (hours > 11) {
-          return isLower ? 'pm' : 'PM';
-      } else {
-          return isLower ? 'am' : 'AM';
-      }
-  }
-
-  var baseConfig = {
-      calendar: defaultCalendar,
-      longDateFormat: defaultLongDateFormat,
-      invalidDate: defaultInvalidDate,
-      ordinal: defaultOrdinal,
-      dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
-      relativeTime: defaultRelativeTime,
-
-      months: defaultLocaleMonths,
-      monthsShort: defaultLocaleMonthsShort,
-
-      week: defaultLocaleWeek,
-
-      weekdays: defaultLocaleWeekdays,
-      weekdaysMin: defaultLocaleWeekdaysMin,
-      weekdaysShort: defaultLocaleWeekdaysShort,
-
-      meridiemParse: defaultLocaleMeridiemParse,
-  };
-
-  // internal storage for locale config files
-  var locales = {},
-      localeFamilies = {},
-      globalLocale;
-
-  function commonPrefix(arr1, arr2) {
-      var i,
-          minl = Math.min(arr1.length, arr2.length);
-      for (i = 0; i < minl; i += 1) {
-          if (arr1[i] !== arr2[i]) {
-              return i;
-          }
-      }
-      return minl;
-  }
-
-  function normalizeLocale(key) {
-      return key ? key.toLowerCase().replace('_', '-') : key;
-  }
-
-  // pick the locale from the array
-  // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
-  // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
-  function chooseLocale(names) {
-      var i = 0,
-          j,
-          next,
-          locale,
-          split;
-
-      while (i < names.length) {
-          split = normalizeLocale(names[i]).split('-');
-          j = split.length;
-          next = normalizeLocale(names[i + 1]);
-          next = next ? next.split('-') : null;
-          while (j > 0) {
-              locale = loadLocale(split.slice(0, j).join('-'));
-              if (locale) {
-                  return locale;
-              }
-              if (
-                  next &&
-                  next.length >= j &&
-                  commonPrefix(split, next) >= j - 1
-              ) {
-                  //the next array item is better than a shallower substring of this one
-                  break;
-              }
-              j--;
-          }
-          i++;
-      }
-      return globalLocale;
-  }
-
-  function isLocaleNameSane(name) {
-      // Prevent names that look like filesystem paths, i.e contain '/' or '\'
-      return name.match('^[^/\\\\]*$') != null;
-  }
-
-  function loadLocale(name) {
-      var oldLocale = null,
-          aliasedRequire;
-      // TODO: Find a better way to register and load all the locales in Node
-      if (
-          locales[name] === undefined &&
-          typeof module !== 'undefined' &&
-          module &&
-          module.exports &&
-          isLocaleNameSane(name)
-      ) {
-          try {
-              oldLocale = globalLocale._abbr;
-              aliasedRequire = require;
-              aliasedRequire('./locale/' + name);
-              getSetGlobalLocale(oldLocale);
-          } catch (e) {
-              // mark as not found to avoid repeating expensive file require call causing high CPU
-              // when trying to find en-US, en_US, en-us for every format call
-              locales[name] = null; // null means not found
-          }
-      }
-      return locales[name];
-  }
-
-  // This function will load locale and then set the global locale.  If
-  // no arguments are passed in, it will simply return the current global
-  // locale key.
-  function getSetGlobalLocale(key, values) {
-      var data;
-      if (key) {
-          if (isUndefined(values)) {
-              data = getLocale(key);
-          } else {
-              data = defineLocale(key, values);
-          }
-
-          if (data) {
-              // moment.duration._locale = moment._locale = data;
-              globalLocale = data;
-          } else {
-              if (typeof console !== 'undefined' && console.warn) {
-                  //warn user if arguments are passed but the locale could not be set
-                  console.warn(
-                      'Locale ' + key + ' not found. Did you forget to load it?'
-                  );
-              }
-          }
-      }
-
-      return globalLocale._abbr;
-  }
-
-  function defineLocale(name, config) {
-      if (config !== null) {
-          var locale,
-              parentConfig = baseConfig;
-          config.abbr = name;
-          if (locales[name] != null) {
-              deprecateSimple(
-                  'defineLocaleOverride',
-                  'use moment.updateLocale(localeName, config) to change ' +
-                      'an existing locale. moment.defineLocale(localeName, ' +
-                      'config) should only be used for creating a new locale ' +
-                      'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
-              );
-              parentConfig = locales[name]._config;
-          } else if (config.parentLocale != null) {
-              if (locales[config.parentLocale] != null) {
-                  parentConfig = locales[config.parentLocale]._config;
-              } else {
-                  locale = loadLocale(config.parentLocale);
-                  if (locale != null) {
-                      parentConfig = locale._config;
-                  } else {
-                      if (!localeFamilies[config.parentLocale]) {
-                          localeFamilies[config.parentLocale] = [];
-                      }
-                      localeFamilies[config.parentLocale].push({
-                          name: name,
-                          config: config,
-                      });
-                      return null;
-                  }
-              }
-          }
-          locales[name] = new Locale(mergeConfigs(parentConfig, config));
-
-          if (localeFamilies[name]) {
-              localeFamilies[name].forEach(function (x) {
-                  defineLocale(x.name, x.config);
-              });
-          }
-
-          // backwards compat for now: also set the locale
-          // make sure we set the locale AFTER all child locales have been
-          // created, so we won't end up with the child locale set.
-          getSetGlobalLocale(name);
-
-          return locales[name];
-      } else {
-          // useful for testing
-          delete locales[name];
-          return null;
-      }
-  }
-
-  function updateLocale(name, config) {
-      if (config != null) {
-          var locale,
-              tmpLocale,
-              parentConfig = baseConfig;
-
-          if (locales[name] != null && locales[name].parentLocale != null) {
-              // Update existing child locale in-place to avoid memory-leaks
-              locales[name].set(mergeConfigs(locales[name]._config, config));
-          } else {
-              // MERGE
-              tmpLocale = loadLocale(name);
-              if (tmpLocale != null) {
-                  parentConfig = tmpLocale._config;
-              }
-              config = mergeConfigs(parentConfig, config);
-              if (tmpLocale == null) {
-                  // updateLocale is called for creating a new locale
-                  // Set abbr so it will have a name (getters return
-                  // undefined otherwise).
-                  config.abbr = name;
-              }
-              locale = new Locale(config);
-              locale.parentLocale = locales[name];
-              locales[name] = locale;
-          }
-
-          // backwards compat for now: also set the locale
-          getSetGlobalLocale(name);
-      } else {
-          // pass null for config to unupdate, useful for tests
-          if (locales[name] != null) {
-              if (locales[name].parentLocale != null) {
-                  locales[name] = locales[name].parentLocale;
-                  if (name === getSetGlobalLocale()) {
-                      getSetGlobalLocale(name);
-                  }
-              } else if (locales[name] != null) {
-                  delete locales[name];
-              }
-          }
-      }
-      return locales[name];
-  }
-
-  // returns locale data
-  function getLocale(key) {
-      var locale;
-
-      if (key && key._locale && key._locale._abbr) {
-          key = key._locale._abbr;
-      }
-
-      if (!key) {
-          return globalLocale;
-      }
-
-      if (!isArray(key)) {
-          //short-circuit everything else
-          locale = loadLocale(key);
-          if (locale) {
-              return locale;
-          }
-          key = [key];
-      }
-
-      return chooseLocale(key);
-  }
-
-  function listLocales() {
-      return keys(locales);
-  }
-
-  function checkOverflow(m) {
-      var overflow,
-          a = m._a;
-
-      if (a && getParsingFlags(m).overflow === -2) {
-          overflow =
-              a[MONTH] < 0 || a[MONTH] > 11
-                  ? MONTH
-                  : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
-                  ? DATE
-                  : a[HOUR] < 0 ||
-                    a[HOUR] > 24 ||
-                    (a[HOUR] === 24 &&
-                        (a[MINUTE] !== 0 ||
-                            a[SECOND] !== 0 ||
-                            a[MILLISECOND] !== 0))
-                  ? HOUR
-                  : a[MINUTE] < 0 || a[MINUTE] > 59
-                  ? MINUTE
-                  : a[SECOND] < 0 || a[SECOND] > 59
-                  ? SECOND
-                  : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
-                  ? MILLISECOND
-                  : -1;
-
-          if (
-              getParsingFlags(m)._overflowDayOfYear &&
-              (overflow < YEAR || overflow > DATE)
-          ) {
-              overflow = DATE;
-          }
-          if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
-              overflow = WEEK;
-          }
-          if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
-              overflow = WEEKDAY;
-          }
-
-          getParsingFlags(m).overflow = overflow;
-      }
-
-      return m;
-  }
-
-  // iso 8601 regex
-  // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
-  var extendedIsoRegex =
-          /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
-      basicIsoRegex =
-          /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
-      tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
-      isoDates = [
-          ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
-          ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
-          ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
-          ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
-          ['YYYY-DDD', /\d{4}-\d{3}/],
-          ['YYYY-MM', /\d{4}-\d\d/, false],
-          ['YYYYYYMMDD', /[+-]\d{10}/],
-          ['YYYYMMDD', /\d{8}/],
-          ['GGGG[W]WWE', /\d{4}W\d{3}/],
-          ['GGGG[W]WW', /\d{4}W\d{2}/, false],
-          ['YYYYDDD', /\d{7}/],
-          ['YYYYMM', /\d{6}/, false],
-          ['YYYY', /\d{4}/, false],
-      ],
-      // iso time formats and regexes
-      isoTimes = [
-          ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
-          ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
-          ['HH:mm:ss', /\d\d:\d\d:\d\d/],
-          ['HH:mm', /\d\d:\d\d/],
-          ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
-          ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
-          ['HHmmss', /\d\d\d\d\d\d/],
-          ['HHmm', /\d\d\d\d/],
-          ['HH', /\d\d/],
-      ],
-      aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
-      // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
-      rfc2822 =
-          /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
-      obsOffsets = {
-          UT: 0,
-          GMT: 0,
-          EDT: -4 * 60,
-          EST: -5 * 60,
-          CDT: -5 * 60,
-          CST: -6 * 60,
-          MDT: -6 * 60,
-          MST: -7 * 60,
-          PDT: -7 * 60,
-          PST: -8 * 60,
-      };
-
-  // date from iso format
-  function configFromISO(config) {
-      var i,
-          l,
-          string = config._i,
-          match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
-          allowTime,
-          dateFormat,
-          timeFormat,
-          tzFormat,
-          isoDatesLen = isoDates.length,
-          isoTimesLen = isoTimes.length;
-
-      if (match) {
-          getParsingFlags(config).iso = true;
-          for (i = 0, l = isoDatesLen; i < l; i++) {
-              if (isoDates[i][1].exec(match[1])) {
-                  dateFormat = isoDates[i][0];
-                  allowTime = isoDates[i][2] !== false;
-                  break;
-              }
-          }
-          if (dateFormat == null) {
-              config._isValid = false;
-              return;
-          }
-          if (match[3]) {
-              for (i = 0, l = isoTimesLen; i < l; i++) {
-                  if (isoTimes[i][1].exec(match[3])) {
-                      // match[2] should be 'T' or space
-                      timeFormat = (match[2] || ' ') + isoTimes[i][0];
-                      break;
-                  }
-              }
-              if (timeFormat == null) {
-                  config._isValid = false;
-                  return;
-              }
-          }
-          if (!allowTime && timeFormat != null) {
-              config._isValid = false;
-              return;
-          }
-          if (match[4]) {
-              if (tzRegex.exec(match[4])) {
-                  tzFormat = 'Z';
-              } else {
-                  config._isValid = false;
-                  return;
-              }
-          }
-          config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
-          configFromStringAndFormat(config);
-      } else {
-          config._isValid = false;
-      }
-  }
-
-  function extractFromRFC2822Strings(
-      yearStr,
-      monthStr,
-      dayStr,
-      hourStr,
-      minuteStr,
-      secondStr
-  ) {
-      var result = [
-          untruncateYear(yearStr),
-          defaultLocaleMonthsShort.indexOf(monthStr),
-          parseInt(dayStr, 10),
-          parseInt(hourStr, 10),
-          parseInt(minuteStr, 10),
-      ];
-
-      if (secondStr) {
-          result.push(parseInt(secondStr, 10));
-      }
-
-      return result;
-  }
-
-  function untruncateYear(yearStr) {
-      var year = parseInt(yearStr, 10);
-      if (year <= 49) {
-          return 2000 + year;
-      } else if (year <= 999) {
-          return 1900 + year;
-      }
-      return year;
-  }
-
-  function preprocessRFC2822(s) {
-      // Remove comments and folding whitespace and replace multiple-spaces with a single space
-      return s
-          .replace(/\([^()]*\)|[\n\t]/g, ' ')
-          .replace(/(\s\s+)/g, ' ')
-          .replace(/^\s\s*/, '')
-          .replace(/\s\s*$/, '');
-  }
-
-  function checkWeekday(weekdayStr, parsedInput, config) {
-      if (weekdayStr) {
-          // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
-          var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
-              weekdayActual = new Date(
-                  parsedInput[0],
-                  parsedInput[1],
-                  parsedInput[2]
-              ).getDay();
-          if (weekdayProvided !== weekdayActual) {
-              getParsingFlags(config).weekdayMismatch = true;
-              config._isValid = false;
-              return false;
-          }
-      }
-      return true;
-  }
-
-  function calculateOffset(obsOffset, militaryOffset, numOffset) {
-      if (obsOffset) {
-          return obsOffsets[obsOffset];
-      } else if (militaryOffset) {
-          // the only allowed military tz is Z
-          return 0;
-      } else {
-          var hm = parseInt(numOffset, 10),
-              m = hm % 100,
-              h = (hm - m) / 100;
-          return h * 60 + m;
-      }
-  }
-
-  // date and time from ref 2822 format
-  function configFromRFC2822(config) {
-      var match = rfc2822.exec(preprocessRFC2822(config._i)),
-          parsedArray;
-      if (match) {
-          parsedArray = extractFromRFC2822Strings(
-              match[4],
-              match[3],
-              match[2],
-              match[5],
-              match[6],
-              match[7]
-          );
-          if (!checkWeekday(match[1], parsedArray, config)) {
-              return;
-          }
-
-          config._a = parsedArray;
-          config._tzm = calculateOffset(match[8], match[9], match[10]);
-
-          config._d = createUTCDate.apply(null, config._a);
-          config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
-
-          getParsingFlags(config).rfc2822 = true;
-      } else {
-          config._isValid = false;
-      }
-  }
-
-  // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
-  function configFromString(config) {
-      var matched = aspNetJsonRegex.exec(config._i);
-      if (matched !== null) {
-          config._d = new Date(+matched[1]);
-          return;
-      }
-
-      configFromISO(config);
-      if (config._isValid === false) {
-          delete config._isValid;
-      } else {
-          return;
-      }
-
-      configFromRFC2822(config);
-      if (config._isValid === false) {
-          delete config._isValid;
-      } else {
-          return;
-      }
-
-      if (config._strict) {
-          config._isValid = false;
-      } else {
-          // Final attempt, use Input Fallback
-          hooks.createFromInputFallback(config);
-      }
-  }
-
-  hooks.createFromInputFallback = deprecate(
-      'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
-          'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
-          'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
-      function (config) {
-          config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
-      }
-  );
-
-  // Pick the first defined of two or three arguments.
-  function defaults(a, b, c) {
-      if (a != null) {
-          return a;
-      }
-      if (b != null) {
-          return b;
-      }
-      return c;
-  }
-
-  function currentDateArray(config) {
-      // hooks is actually the exported moment object
-      var nowValue = new Date(hooks.now());
-      if (config._useUTC) {
-          return [
-              nowValue.getUTCFullYear(),
-              nowValue.getUTCMonth(),
-              nowValue.getUTCDate(),
-          ];
-      }
-      return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
-  }
-
-  // convert an array to a date.
-  // the array should mirror the parameters below
-  // note: all values past the year are optional and will default to the lowest possible value.
-  // [year, month, day , hour, minute, second, millisecond]
-  function configFromArray(config) {
-      var i,
-          date,
-          input = [],
-          currentDate,
-          expectedWeekday,
-          yearToUse;
-
-      if (config._d) {
-          return;
-      }
-
-      currentDate = currentDateArray(config);
-
-      //compute day of the year from weeks and weekdays
-      if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
-          dayOfYearFromWeekInfo(config);
-      }
-
-      //if the day of the year is set, figure out what it is
-      if (config._dayOfYear != null) {
-          yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
-
-          if (
-              config._dayOfYear > daysInYear(yearToUse) ||
-              config._dayOfYear === 0
-          ) {
-              getParsingFlags(config)._overflowDayOfYear = true;
-          }
-
-          date = createUTCDate(yearToUse, 0, config._dayOfYear);
-          config._a[MONTH] = date.getUTCMonth();
-          config._a[DATE] = date.getUTCDate();
-      }
-
-      // Default to current date.
-      // * if no year, month, day of month are given, default to today
-      // * if day of month is given, default month and year
-      // * if month is given, default only year
-      // * if year is given, don't default anything
-      for (i = 0; i < 3 && config._a[i] == null; ++i) {
-          config._a[i] = input[i] = currentDate[i];
-      }
-
-      // Zero out whatever was not defaulted, including time
-      for (; i < 7; i++) {
-          config._a[i] = input[i] =
-              config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
-      }
-
-      // Check for 24:00:00.000
-      if (
-          config._a[HOUR] === 24 &&
-          config._a[MINUTE] === 0 &&
-          config._a[SECOND] === 0 &&
-          config._a[MILLISECOND] === 0
-      ) {
-          config._nextDay = true;
-          config._a[HOUR] = 0;
-      }
-
-      config._d = (config._useUTC ? createUTCDate : createDate).apply(
-          null,
-          input
-      );
-      expectedWeekday = config._useUTC
-          ? config._d.getUTCDay()
-          : config._d.getDay();
-
-      // Apply timezone offset from input. The actual utcOffset can be changed
-      // with parseZone.
-      if (config._tzm != null) {
-          config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
-      }
-
-      if (config._nextDay) {
-          config._a[HOUR] = 24;
-      }
-
-      // check for mismatching day of week
-      if (
-          config._w &&
-          typeof config._w.d !== 'undefined' &&
-          config._w.d !== expectedWeekday
-      ) {
-          getParsingFlags(config).weekdayMismatch = true;
-      }
-  }
-
-  function dayOfYearFromWeekInfo(config) {
-      var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
-
-      w = config._w;
-      if (w.GG != null || w.W != null || w.E != null) {
-          dow = 1;
-          doy = 4;
-
-          // TODO: We need to take the current isoWeekYear, but that depends on
-          // how we interpret now (local, utc, fixed offset). So create
-          // a now version of current config (take local/utc/offset flags, and
-          // create now).
-          weekYear = defaults(
-              w.GG,
-              config._a[YEAR],
-              weekOfYear(createLocal(), 1, 4).year
-          );
-          week = defaults(w.W, 1);
-          weekday = defaults(w.E, 1);
-          if (weekday < 1 || weekday > 7) {
-              weekdayOverflow = true;
-          }
-      } else {
-          dow = config._locale._week.dow;
-          doy = config._locale._week.doy;
-
-          curWeek = weekOfYear(createLocal(), dow, doy);
-
-          weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
-
-          // Default to current week.
-          week = defaults(w.w, curWeek.week);
-
-          if (w.d != null) {
-              // weekday -- low day numbers are considered next week
-              weekday = w.d;
-              if (weekday < 0 || weekday > 6) {
-                  weekdayOverflow = true;
-              }
-          } else if (w.e != null) {
-              // local weekday -- counting starts from beginning of week
-              weekday = w.e + dow;
-              if (w.e < 0 || w.e > 6) {
-                  weekdayOverflow = true;
-              }
-          } else {
-              // default to beginning of week
-              weekday = dow;
-          }
-      }
-      if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
-          getParsingFlags(config)._overflowWeeks = true;
-      } else if (weekdayOverflow != null) {
-          getParsingFlags(config)._overflowWeekday = true;
-      } else {
-          temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
-          config._a[YEAR] = temp.year;
-          config._dayOfYear = temp.dayOfYear;
-      }
-  }
-
-  // constant that refers to the ISO standard
-  hooks.ISO_8601 = function () {};
-
-  // constant that refers to the RFC 2822 form
-  hooks.RFC_2822 = function () {};
-
-  // date from string and format string
-  function configFromStringAndFormat(config) {
-      // TODO: Move this to another part of the creation flow to prevent circular deps
-      if (config._f === hooks.ISO_8601) {
-          configFromISO(config);
-          return;
-      }
-      if (config._f === hooks.RFC_2822) {
-          configFromRFC2822(config);
-          return;
-      }
-      config._a = [];
-      getParsingFlags(config).empty = true;
-
-      // This array is used to make a Date, either with `new Date` or `Date.UTC`
-      var string = '' + config._i,
-          i,
-          parsedInput,
-          tokens,
-          token,
-          skipped,
-          stringLength = string.length,
-          totalParsedInputLength = 0,
-          era,
-          tokenLen;
-
-      tokens =
-          expandFormat(config._f, config._locale).match(formattingTokens) || [];
-      tokenLen = tokens.length;
-      for (i = 0; i < tokenLen; i++) {
-          token = tokens[i];
-          parsedInput = (string.match(getParseRegexForToken(token, config)) ||
-              [])[0];
-          if (parsedInput) {
-              skipped = string.substr(0, string.indexOf(parsedInput));
-              if (skipped.length > 0) {
-                  getParsingFlags(config).unusedInput.push(skipped);
-              }
-              string = string.slice(
-                  string.indexOf(parsedInput) + parsedInput.length
-              );
-              totalParsedInputLength += parsedInput.length;
-          }
-          // don't parse if it's not a known token
-          if (formatTokenFunctions[token]) {
-              if (parsedInput) {
-                  getParsingFlags(config).empty = false;
-              } else {
-                  getParsingFlags(config).unusedTokens.push(token);
-              }
-              addTimeToArrayFromToken(token, parsedInput, config);
-          } else if (config._strict && !parsedInput) {
-              getParsingFlags(config).unusedTokens.push(token);
-          }
-      }
-
-      // add remaining unparsed input length to the string
-      getParsingFlags(config).charsLeftOver =
-          stringLength - totalParsedInputLength;
-      if (string.length > 0) {
-          getParsingFlags(config).unusedInput.push(string);
-      }
-
-      // clear _12h flag if hour is <= 12
-      if (
-          config._a[HOUR] <= 12 &&
-          getParsingFlags(config).bigHour === true &&
-          config._a[HOUR] > 0
-      ) {
-          getParsingFlags(config).bigHour = undefined;
-      }
-
-      getParsingFlags(config).parsedDateParts = config._a.slice(0);
-      getParsingFlags(config).meridiem = config._meridiem;
-      // handle meridiem
-      config._a[HOUR] = meridiemFixWrap(
-          config._locale,
-          config._a[HOUR],
-          config._meridiem
-      );
-
-      // handle era
-      era = getParsingFlags(config).era;
-      if (era !== null) {
-          config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
-      }
-
-      configFromArray(config);
-      checkOverflow(config);
-  }
-
-  function meridiemFixWrap(locale, hour, meridiem) {
-      var isPm;
-
-      if (meridiem == null) {
-          // nothing to do
-          return hour;
-      }
-      if (locale.meridiemHour != null) {
-          return locale.meridiemHour(hour, meridiem);
-      } else if (locale.isPM != null) {
-          // Fallback
-          isPm = locale.isPM(meridiem);
-          if (isPm && hour < 12) {
-              hour += 12;
-          }
-          if (!isPm && hour === 12) {
-              hour = 0;
-          }
-          return hour;
-      } else {
-          // this is not supposed to happen
-          return hour;
-      }
-  }
-
-  // date from string and array of format strings
-  function configFromStringAndArray(config) {
-      var tempConfig,
-          bestMoment,
-          scoreToBeat,
-          i,
-          currentScore,
-          validFormatFound,
-          bestFormatIsValid = false,
-          configfLen = config._f.length;
-
-      if (configfLen === 0) {
-          getParsingFlags(config).invalidFormat = true;
-          config._d = new Date(NaN);
-          return;
-      }
-
-      for (i = 0; i < configfLen; i++) {
-          currentScore = 0;
-          validFormatFound = false;
-          tempConfig = copyConfig({}, config);
-          if (config._useUTC != null) {
-              tempConfig._useUTC = config._useUTC;
-          }
-          tempConfig._f = config._f[i];
-          configFromStringAndFormat(tempConfig);
-
-          if (isValid(tempConfig)) {
-              validFormatFound = true;
-          }
-
-          // if there is any input that was not parsed add a penalty for that format
-          currentScore += getParsingFlags(tempConfig).charsLeftOver;
-
-          //or tokens
-          currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
-
-          getParsingFlags(tempConfig).score = currentScore;
-
-          if (!bestFormatIsValid) {
-              if (
-                  scoreToBeat == null ||
-                  currentScore < scoreToBeat ||
-                  validFormatFound
-              ) {
-                  scoreToBeat = currentScore;
-                  bestMoment = tempConfig;
-                  if (validFormatFound) {
-                      bestFormatIsValid = true;
-                  }
-              }
-          } else {
-              if (currentScore < scoreToBeat) {
-                  scoreToBeat = currentScore;
-                  bestMoment = tempConfig;
-              }
-          }
-      }
-
-      extend(config, bestMoment || tempConfig);
-  }
-
-  function configFromObject(config) {
-      if (config._d) {
-          return;
-      }
-
-      var i = normalizeObjectUnits(config._i),
-          dayOrDate = i.day === undefined ? i.date : i.day;
-      config._a = map(
-          [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
-          function (obj) {
-              return obj && parseInt(obj, 10);
-          }
-      );
-
-      configFromArray(config);
-  }
-
-  function createFromConfig(config) {
-      var res = new Moment(checkOverflow(prepareConfig(config)));
-      if (res._nextDay) {
-          // Adding is smart enough around DST
-          res.add(1, 'd');
-          res._nextDay = undefined;
-      }
-
-      return res;
-  }
-
-  function prepareConfig(config) {
-      var input = config._i,
-          format = config._f;
-
-      config._locale = config._locale || getLocale(config._l);
-
-      if (input === null || (format === undefined && input === '')) {
-          return createInvalid({ nullInput: true });
-      }
-
-      if (typeof input === 'string') {
-          config._i = input = config._locale.preparse(input);
-      }
-
-      if (isMoment(input)) {
-          return new Moment(checkOverflow(input));
-      } else if (isDate(input)) {
-          config._d = input;
-      } else if (isArray(format)) {
-          configFromStringAndArray(config);
-      } else if (format) {
-          configFromStringAndFormat(config);
-      } else {
-          configFromInput(config);
-      }
-
-      if (!isValid(config)) {
-          config._d = null;
-      }
-
-      return config;
-  }
-
-  function configFromInput(config) {
-      var input = config._i;
-      if (isUndefined(input)) {
-          config._d = new Date(hooks.now());
-      } else if (isDate(input)) {
-          config._d = new Date(input.valueOf());
-      } else if (typeof input === 'string') {
-          configFromString(config);
-      } else if (isArray(input)) {
-          config._a = map(input.slice(0), function (obj) {
-              return parseInt(obj, 10);
-          });
-          configFromArray(config);
-      } else if (isObject(input)) {
-          configFromObject(config);
-      } else if (isNumber(input)) {
-          // from milliseconds
-          config._d = new Date(input);
-      } else {
-          hooks.createFromInputFallback(config);
-      }
-  }
-
-  function createLocalOrUTC(input, format, locale, strict, isUTC) {
-      var c = {};
-
-      if (format === true || format === false) {
-          strict = format;
-          format = undefined;
-      }
-
-      if (locale === true || locale === false) {
-          strict = locale;
-          locale = undefined;
-      }
-
-      if (
-          (isObject(input) && isObjectEmpty(input)) ||
-          (isArray(input) && input.length === 0)
-      ) {
-          input = undefined;
-      }
-      // object construction must be done this way.
-      // https://github.com/moment/moment/issues/1423
-      c._isAMomentObject = true;
-      c._useUTC = c._isUTC = isUTC;
-      c._l = locale;
-      c._i = input;
-      c._f = format;
-      c._strict = strict;
-
-      return createFromConfig(c);
-  }
-
-  function createLocal(input, format, locale, strict) {
-      return createLocalOrUTC(input, format, locale, strict, false);
-  }
-
-  var prototypeMin = deprecate(
-          'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
-          function () {
-              var other = createLocal.apply(null, arguments);
-              if (this.isValid() && other.isValid()) {
-                  return other < this ? this : other;
-              } else {
-                  return createInvalid();
-              }
-          }
-      ),
-      prototypeMax = deprecate(
-          'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
-          function () {
-              var other = createLocal.apply(null, arguments);
-              if (this.isValid() && other.isValid()) {
-                  return other > this ? this : other;
-              } else {
-                  return createInvalid();
-              }
-          }
-      );
-
-  // Pick a moment m from moments so that m[fn](other) is true for all
-  // other. This relies on the function fn to be transitive.
-  //
-  // moments should either be an array of moment objects or an array, whose
-  // first element is an array of moment objects.
-  function pickBy(fn, moments) {
-      var res, i;
-      if (moments.length === 1 && isArray(moments[0])) {
-          moments = moments[0];
-      }
-      if (!moments.length) {
-          return createLocal();
-      }
-      res = moments[0];
-      for (i = 1; i < moments.length; ++i) {
-          if (!moments[i].isValid() || moments[i][fn](res)) {
-              res = moments[i];
-          }
-      }
-      return res;
-  }
-
-  // TODO: Use [].sort instead?
-  function min() {
-      var args = [].slice.call(arguments, 0);
-
-      return pickBy('isBefore', args);
-  }
-
-  function max() {
-      var args = [].slice.call(arguments, 0);
-
-      return pickBy('isAfter', args);
-  }
-
-  var now = function () {
-      return Date.now ? Date.now() : +new Date();
-  };
-
-  var ordering = [
-      'year',
-      'quarter',
-      'month',
-      'week',
-      'day',
-      'hour',
-      'minute',
-      'second',
-      'millisecond',
-  ];
-
-  function isDurationValid(m) {
-      var key,
-          unitHasDecimal = false,
-          i,
-          orderLen = ordering.length;
-      for (key in m) {
-          if (
-              hasOwnProp(m, key) &&
-              !(
-                  indexOf.call(ordering, key) !== -1 &&
-                  (m[key] == null || !isNaN(m[key]))
-              )
-          ) {
-              return false;
-          }
-      }
-
-      for (i = 0; i < orderLen; ++i) {
-          if (m[ordering[i]]) {
-              if (unitHasDecimal) {
-                  return false; // only allow non-integers for smallest unit
-              }
-              if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
-                  unitHasDecimal = true;
-              }
-          }
-      }
-
-      return true;
-  }
-
-  function isValid$1() {
-      return this._isValid;
-  }
-
-  function createInvalid$1() {
-      return createDuration(NaN);
-  }
-
-  function Duration(duration) {
-      var normalizedInput = normalizeObjectUnits(duration),
-          years = normalizedInput.year || 0,
-          quarters = normalizedInput.quarter || 0,
-          months = normalizedInput.month || 0,
-          weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
-          days = normalizedInput.day || 0,
-          hours = normalizedInput.hour || 0,
-          minutes = normalizedInput.minute || 0,
-          seconds = normalizedInput.second || 0,
-          milliseconds = normalizedInput.millisecond || 0;
-
-      this._isValid = isDurationValid(normalizedInput);
-
-      // representation for dateAddRemove
-      this._milliseconds =
-          +milliseconds +
-          seconds * 1e3 + // 1000
-          minutes * 6e4 + // 1000 * 60
-          hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
-      // Because of dateAddRemove treats 24 hours as different from a
-      // day when working around DST, we need to store them separately
-      this._days = +days + weeks * 7;
-      // It is impossible to translate months into days without knowing
-      // which months you are are talking about, so we have to store
-      // it separately.
-      this._months = +months + quarters * 3 + years * 12;
-
-      this._data = {};
-
-      this._locale = getLocale();
-
-      this._bubble();
-  }
-
-  function isDuration(obj) {
-      return obj instanceof Duration;
-  }
-
-  function absRound(number) {
-      if (number < 0) {
-          return Math.round(-1 * number) * -1;
-      } else {
-          return Math.round(number);
-      }
-  }
-
-  // compare two arrays, return the number of differences
-  function compareArrays(array1, array2, dontConvert) {
-      var len = Math.min(array1.length, array2.length),
-          lengthDiff = Math.abs(array1.length - array2.length),
-          diffs = 0,
-          i;
-      for (i = 0; i < len; i++) {
-          if (
-              (dontConvert && array1[i] !== array2[i]) ||
-              (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
-          ) {
-              diffs++;
-          }
-      }
-      return diffs + lengthDiff;
-  }
-
-  // FORMATTING
-
-  function offset(token, separator) {
-      addFormatToken(token, 0, 0, function () {
-          var offset = this.utcOffset(),
-              sign = '+';
-          if (offset < 0) {
-              offset = -offset;
-              sign = '-';
-          }
-          return (
-              sign +
-              zeroFill(~~(offset / 60), 2) +
-              separator +
-              zeroFill(~~offset % 60, 2)
-          );
-      });
-  }
-
-  offset('Z', ':');
-  offset('ZZ', '');
-
-  // PARSING
-
-  addRegexToken('Z', matchShortOffset);
-  addRegexToken('ZZ', matchShortOffset);
-  addParseToken(['Z', 'ZZ'], function (input, array, config) {
-      config._useUTC = true;
-      config._tzm = offsetFromString(matchShortOffset, input);
-  });
-
-  // HELPERS
-
-  // timezone chunker
-  // '+10:00' > ['10',  '00']
-  // '-1530'  > ['-15', '30']
-  var chunkOffset = /([\+\-]|\d\d)/gi;
-
-  function offsetFromString(matcher, string) {
-      var matches = (string || '').match(matcher),
-          chunk,
-          parts,
-          minutes;
-
-      if (matches === null) {
-          return null;
-      }
-
-      chunk = matches[matches.length - 1] || [];
-      parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
-      minutes = +(parts[1] * 60) + toInt(parts[2]);
-
-      return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
-  }
-
-  // Return a moment from input, that is local/utc/zone equivalent to model.
-  function cloneWithOffset(input, model) {
-      var res, diff;
-      if (model._isUTC) {
-          res = model.clone();
-          diff =
-              (isMoment(input) || isDate(input)
-                  ? input.valueOf()
-                  : createLocal(input).valueOf()) - res.valueOf();
-          // Use low-level api, because this fn is low-level api.
-          res._d.setTime(res._d.valueOf() + diff);
-          hooks.updateOffset(res, false);
-          return res;
-      } else {
-          return createLocal(input).local();
-      }
-  }
-
-  function getDateOffset(m) {
-      // On Firefox.24 Date#getTimezoneOffset returns a floating point.
-      // https://github.com/moment/moment/pull/1871
-      return -Math.round(m._d.getTimezoneOffset());
-  }
-
-  // HOOKS
-
-  // This function will be called whenever a moment is mutated.
-  // It is intended to keep the offset in sync with the timezone.
-  hooks.updateOffset = function () {};
-
-  // MOMENTS
-
-  // keepLocalTime = true means only change the timezone, without
-  // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
-  // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
-  // +0200, so we adjust the time as needed, to be valid.
-  //
-  // Keeping the time actually adds/subtracts (one hour)
-  // from the actual represented time. That is why we call updateOffset
-  // a second time. In case it wants us to change the offset again
-  // _changeInProgress == true case, then we have to adjust, because
-  // there is no such time in the given timezone.
-  function getSetOffset(input, keepLocalTime, keepMinutes) {
-      var offset = this._offset || 0,
-          localAdjust;
-      if (!this.isValid()) {
-          return input != null ? this : NaN;
-      }
-      if (input != null) {
-          if (typeof input === 'string') {
-              input = offsetFromString(matchShortOffset, input);
-              if (input === null) {
-                  return this;
-              }
-          } else if (Math.abs(input) < 16 && !keepMinutes) {
-              input = input * 60;
-          }
-          if (!this._isUTC && keepLocalTime) {
-              localAdjust = getDateOffset(this);
-          }
-          this._offset = input;
-          this._isUTC = true;
-          if (localAdjust != null) {
-              this.add(localAdjust, 'm');
-          }
-          if (offset !== input) {
-              if (!keepLocalTime || this._changeInProgress) {
-                  addSubtract(
-                      this,
-                      createDuration(input - offset, 'm'),
-                      1,
-                      false
-                  );
-              } else if (!this._changeInProgress) {
-                  this._changeInProgress = true;
-                  hooks.updateOffset(this, true);
-                  this._changeInProgress = null;
-              }
-          }
-          return this;
-      } else {
-          return this._isUTC ? offset : getDateOffset(this);
-      }
-  }
-
-  function getSetZone(input, keepLocalTime) {
-      if (input != null) {
-          if (typeof input !== 'string') {
-              input = -input;
-          }
-
-          this.utcOffset(input, keepLocalTime);
-
-          return this;
-      } else {
-          return -this.utcOffset();
-      }
-  }
-
-  function setOffsetToUTC(keepLocalTime) {
-      return this.utcOffset(0, keepLocalTime);
-  }
-
-  function setOffsetToLocal(keepLocalTime) {
-      if (this._isUTC) {
-          this.utcOffset(0, keepLocalTime);
-          this._isUTC = false;
-
-          if (keepLocalTime) {
-              this.subtract(getDateOffset(this), 'm');
-          }
-      }
-      return this;
-  }
-
-  function setOffsetToParsedOffset() {
-      if (this._tzm != null) {
-          this.utcOffset(this._tzm, false, true);
-      } else if (typeof this._i === 'string') {
-          var tZone = offsetFromString(matchOffset, this._i);
-          if (tZone != null) {
-              this.utcOffset(tZone);
-          } else {
-              this.utcOffset(0, true);
-          }
-      }
-      return this;
-  }
-
-  function hasAlignedHourOffset(input) {
-      if (!this.isValid()) {
-          return false;
-      }
-      input = input ? createLocal(input).utcOffset() : 0;
-
-      return (this.utcOffset() - input) % 60 === 0;
-  }
-
-  function isDaylightSavingTime() {
-      return (
-          this.utcOffset() > this.clone().month(0).utcOffset() ||
-          this.utcOffset() > this.clone().month(5).utcOffset()
-      );
-  }
-
-  function isDaylightSavingTimeShifted() {
-      if (!isUndefined(this._isDSTShifted)) {
-          return this._isDSTShifted;
-      }
-
-      var c = {},
-          other;
-
-      copyConfig(c, this);
-      c = prepareConfig(c);
-
-      if (c._a) {
-          other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
-          this._isDSTShifted =
-              this.isValid() && compareArrays(c._a, other.toArray()) > 0;
-      } else {
-          this._isDSTShifted = false;
-      }
-
-      return this._isDSTShifted;
-  }
-
-  function isLocal() {
-      return this.isValid() ? !this._isUTC : false;
-  }
-
-  function isUtcOffset() {
-      return this.isValid() ? this._isUTC : false;
-  }
-
-  function isUtc() {
-      return this.isValid() ? this._isUTC && this._offset === 0 : false;
-  }
-
-  // ASP.NET json date format regex
-  var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
-      // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
-      // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
-      // and further modified to allow for strings containing both week and day
-      isoRegex =
-          /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
-
-  function createDuration(input, key) {
-      var duration = input,
-          // matching against regexp is expensive, do it on demand
-          match = null,
-          sign,
-          ret,
-          diffRes;
-
-      if (isDuration(input)) {
-          duration = {
-              ms: input._milliseconds,
-              d: input._days,
-              M: input._months,
-          };
-      } else if (isNumber(input) || !isNaN(+input)) {
-          duration = {};
-          if (key) {
-              duration[key] = +input;
-          } else {
-              duration.milliseconds = +input;
-          }
-      } else if ((match = aspNetRegex.exec(input))) {
-          sign = match[1] === '-' ? -1 : 1;
-          duration = {
-              y: 0,
-              d: toInt(match[DATE]) * sign,
-              h: toInt(match[HOUR]) * sign,
-              m: toInt(match[MINUTE]) * sign,
-              s: toInt(match[SECOND]) * sign,
-              ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
-          };
-      } else if ((match = isoRegex.exec(input))) {
-          sign = match[1] === '-' ? -1 : 1;
-          duration = {
-              y: parseIso(match[2], sign),
-              M: parseIso(match[3], sign),
-              w: parseIso(match[4], sign),
-              d: parseIso(match[5], sign),
-              h: parseIso(match[6], sign),
-              m: parseIso(match[7], sign),
-              s: parseIso(match[8], sign),
-          };
-      } else if (duration == null) {
-          // checks for null or undefined
-          duration = {};
-      } else if (
-          typeof duration === 'object' &&
-          ('from' in duration || 'to' in duration)
-      ) {
-          diffRes = momentsDifference(
-              createLocal(duration.from),
-              createLocal(duration.to)
-          );
-
-          duration = {};
-          duration.ms = diffRes.milliseconds;
-          duration.M = diffRes.months;
-      }
-
-      ret = new Duration(duration);
-
-      if (isDuration(input) && hasOwnProp(input, '_locale')) {
-          ret._locale = input._locale;
-      }
-
-      if (isDuration(input) && hasOwnProp(input, '_isValid')) {
-          ret._isValid = input._isValid;
-      }
-
-      return ret;
-  }
-
-  createDuration.fn = Duration.prototype;
-  createDuration.invalid = createInvalid$1;
-
-  function parseIso(inp, sign) {
-      // We'd normally use ~~inp for this, but unfortunately it also
-      // converts floats to ints.
-      // inp may be undefined, so careful calling replace on it.
-      var res = inp && parseFloat(inp.replace(',', '.'));
-      // apply sign while we're at it
-      return (isNaN(res) ? 0 : res) * sign;
-  }
-
-  function positiveMomentsDifference(base, other) {
-      var res = {};
-
-      res.months =
-          other.month() - base.month() + (other.year() - base.year()) * 12;
-      if (base.clone().add(res.months, 'M').isAfter(other)) {
-          --res.months;
-      }
-
-      res.milliseconds = +other - +base.clone().add(res.months, 'M');
-
-      return res;
-  }
-
-  function momentsDifference(base, other) {
-      var res;
-      if (!(base.isValid() && other.isValid())) {
-          return { milliseconds: 0, months: 0 };
-      }
-
-      other = cloneWithOffset(other, base);
-      if (base.isBefore(other)) {
-          res = positiveMomentsDifference(base, other);
-      } else {
-          res = positiveMomentsDifference(other, base);
-          res.milliseconds = -res.milliseconds;
-          res.months = -res.months;
-      }
-
-      return res;
-  }
-
-  // TODO: remove 'name' arg after deprecation is removed
-  function createAdder(direction, name) {
-      return function (val, period) {
-          var dur, tmp;
-          //invert the arguments, but complain about it
-          if (period !== null && !isNaN(+period)) {
-              deprecateSimple(
-                  name,
-                  'moment().' +
-                      name +
-                      '(period, number) is deprecated. Please use moment().' +
-                      name +
-                      '(number, period). ' +
-                      'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
-              );
-              tmp = val;
-              val = period;
-              period = tmp;
-          }
-
-          dur = createDuration(val, period);
-          addSubtract(this, dur, direction);
-          return this;
-      };
-  }
-
-  function addSubtract(mom, duration, isAdding, updateOffset) {
-      var milliseconds = duration._milliseconds,
-          days = absRound(duration._days),
-          months = absRound(duration._months);
-
-      if (!mom.isValid()) {
-          // No op
-          return;
-      }
-
-      updateOffset = updateOffset == null ? true : updateOffset;
-
-      if (months) {
-          setMonth(mom, get(mom, 'Month') + months * isAdding);
-      }
-      if (days) {
-          set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
-      }
-      if (milliseconds) {
-          mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
-      }
-      if (updateOffset) {
-          hooks.updateOffset(mom, days || months);
-      }
-  }
-
-  var add = createAdder(1, 'add'),
-      subtract = createAdder(-1, 'subtract');
-
-  function isString(input) {
-      return typeof input === 'string' || input instanceof String;
-  }
-
-  // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
-  function isMomentInput(input) {
-      return (
-          isMoment(input) ||
-          isDate(input) ||
-          isString(input) ||
-          isNumber(input) ||
-          isNumberOrStringArray(input) ||
-          isMomentInputObject(input) ||
-          input === null ||
-          input === undefined
-      );
-  }
-
-  function isMomentInputObject(input) {
-      var objectTest = isObject(input) && !isObjectEmpty(input),
-          propertyTest = false,
-          properties = [
-              'years',
-              'year',
-              'y',
-              'months',
-              'month',
-              'M',
-              'days',
-              'day',
-              'd',
-              'dates',
-              'date',
-              'D',
-              'hours',
-              'hour',
-              'h',
-              'minutes',
-              'minute',
-              'm',
-              'seconds',
-              'second',
-              's',
-              'milliseconds',
-              'millisecond',
-              'ms',
-          ],
-          i,
-          property,
-          propertyLen = properties.length;
-
-      for (i = 0; i < propertyLen; i += 1) {
-          property = properties[i];
-          propertyTest = propertyTest || hasOwnProp(input, property);
-      }
-
-      return objectTest && propertyTest;
-  }
-
-  function isNumberOrStringArray(input) {
-      var arrayTest = isArray(input),
-          dataTypeTest = false;
-      if (arrayTest) {
-          dataTypeTest =
-              input.filter(function (item) {
-                  return !isNumber(item) && isString(input);
-              }).length === 0;
-      }
-      return arrayTest && dataTypeTest;
-  }
-
-  function isCalendarSpec(input) {
-      var objectTest = isObject(input) && !isObjectEmpty(input),
-          propertyTest = false,
-          properties = [
-              'sameDay',
-              'nextDay',
-              'lastDay',
-              'nextWeek',
-              'lastWeek',
-              'sameElse',
-          ],
-          i,
-          property;
-
-      for (i = 0; i < properties.length; i += 1) {
-          property = properties[i];
-          propertyTest = propertyTest || hasOwnProp(input, property);
-      }
-
-      return objectTest && propertyTest;
-  }
-
-  function getCalendarFormat(myMoment, now) {
-      var diff = myMoment.diff(now, 'days', true);
-      return diff < -6
-          ? 'sameElse'
-          : diff < -1
-          ? 'lastWeek'
-          : diff < 0
-          ? 'lastDay'
-          : diff < 1
-          ? 'sameDay'
-          : diff < 2
-          ? 'nextDay'
-          : diff < 7
-          ? 'nextWeek'
-          : 'sameElse';
-  }
-
-  function calendar$1(time, formats) {
-      // Support for single parameter, formats only overload to the calendar function
-      if (arguments.length === 1) {
-          if (!arguments[0]) {
-              time = undefined;
-              formats = undefined;
-          } else if (isMomentInput(arguments[0])) {
-              time = arguments[0];
-              formats = undefined;
-          } else if (isCalendarSpec(arguments[0])) {
-              formats = arguments[0];
-              time = undefined;
-          }
-      }
-      // We want to compare the start of today, vs this.
-      // Getting start-of-today depends on whether we're local/utc/offset or not.
-      var now = time || createLocal(),
-          sod = cloneWithOffset(now, this).startOf('day'),
-          format = hooks.calendarFormat(this, sod) || 'sameElse',
-          output =
-              formats &&
-              (isFunction(formats[format])
-                  ? formats[format].call(this, now)
-                  : formats[format]);
-
-      return this.format(
-          output || this.localeData().calendar(format, this, createLocal(now))
-      );
-  }
-
-  function clone() {
-      return new Moment(this);
-  }
-
-  function isAfter(input, units) {
-      var localInput = isMoment(input) ? input : createLocal(input);
-      if (!(this.isValid() && localInput.isValid())) {
-          return false;
-      }
-      units = normalizeUnits(units) || 'millisecond';
-      if (units === 'millisecond') {
-          return this.valueOf() > localInput.valueOf();
-      } else {
-          return localInput.valueOf() < this.clone().startOf(units).valueOf();
-      }
-  }
-
-  function isBefore(input, units) {
-      var localInput = isMoment(input) ? input : createLocal(input);
-      if (!(this.isValid() && localInput.isValid())) {
-          return false;
-      }
-      units = normalizeUnits(units) || 'millisecond';
-      if (units === 'millisecond') {
-          return this.valueOf() < localInput.valueOf();
-      } else {
-          return this.clone().endOf(units).valueOf() < localInput.valueOf();
-      }
-  }
-
-  function isBetween(from, to, units, inclusivity) {
-      var localFrom = isMoment(from) ? from : createLocal(from),
-          localTo = isMoment(to) ? to : createLocal(to);
-      if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
-          return false;
-      }
-      inclusivity = inclusivity || '()';
-      return (
-          (inclusivity[0] === '('
-              ? this.isAfter(localFrom, units)
-              : !this.isBefore(localFrom, units)) &&
-          (inclusivity[1] === ')'
-              ? this.isBefore(localTo, units)
-              : !this.isAfter(localTo, units))
-      );
-  }
-
-  function isSame(input, units) {
-      var localInput = isMoment(input) ? input : createLocal(input),
-          inputMs;
-      if (!(this.isValid() && localInput.isValid())) {
-          return false;
-      }
-      units = normalizeUnits(units) || 'millisecond';
-      if (units === 'millisecond') {
-          return this.valueOf() === localInput.valueOf();
-      } else {
-          inputMs = localInput.valueOf();
-          return (
-              this.clone().startOf(units).valueOf() <= inputMs &&
-              inputMs <= this.clone().endOf(units).valueOf()
-          );
-      }
-  }
-
-  function isSameOrAfter(input, units) {
-      return this.isSame(input, units) || this.isAfter(input, units);
-  }
-
-  function isSameOrBefore(input, units) {
-      return this.isSame(input, units) || this.isBefore(input, units);
-  }
-
-  function diff(input, units, asFloat) {
-      var that, zoneDelta, output;
-
-      if (!this.isValid()) {
-          return NaN;
-      }
-
-      that = cloneWithOffset(input, this);
-
-      if (!that.isValid()) {
-          return NaN;
-      }
-
-      zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
-
-      units = normalizeUnits(units);
-
-      switch (units) {
-          case 'year':
-              output = monthDiff(this, that) / 12;
-              break;
-          case 'month':
-              output = monthDiff(this, that);
-              break;
-          case 'quarter':
-              output = monthDiff(this, that) / 3;
-              break;
-          case 'second':
-              output = (this - that) / 1e3;
-              break; // 1000
-          case 'minute':
-              output = (this - that) / 6e4;
-              break; // 1000 * 60
-          case 'hour':
-              output = (this - that) / 36e5;
-              break; // 1000 * 60 * 60
-          case 'day':
-              output = (this - that - zoneDelta) / 864e5;
-              break; // 1000 * 60 * 60 * 24, negate dst
-          case 'week':
-              output = (this - that - zoneDelta) / 6048e5;
-              break; // 1000 * 60 * 60 * 24 * 7, negate dst
-          default:
-              output = this - that;
-      }
-
-      return asFloat ? output : absFloor(output);
-  }
-
-  function monthDiff(a, b) {
-      if (a.date() < b.date()) {
-          // end-of-month calculations work correct when the start month has more
-          // days than the end month.
-          return -monthDiff(b, a);
-      }
-      // difference in months
-      var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
-          // b is in (anchor - 1 month, anchor + 1 month)
-          anchor = a.clone().add(wholeMonthDiff, 'months'),
-          anchor2,
-          adjust;
-
-      if (b - anchor < 0) {
-          anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
-          // linear across the month
-          adjust = (b - anchor) / (anchor - anchor2);
-      } else {
-          anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
-          // linear across the month
-          adjust = (b - anchor) / (anchor2 - anchor);
-      }
-
-      //check for negative zero, return zero if negative zero
-      return -(wholeMonthDiff + adjust) || 0;
-  }
-
-  hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
-  hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
-
-  function toString() {
-      return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
-  }
-
-  function toISOString(keepOffset) {
-      if (!this.isValid()) {
-          return null;
-      }
-      var utc = keepOffset !== true,
-          m = utc ? this.clone().utc() : this;
-      if (m.year() < 0 || m.year() > 9999) {
-          return formatMoment(
-              m,
-              utc
-                  ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
-                  : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
-          );
-      }
-      if (isFunction(Date.prototype.toISOString)) {
-          // native implementation is ~50x faster, use it when we can
-          if (utc) {
-              return this.toDate().toISOString();
-          } else {
-              return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
-                  .toISOString()
-                  .replace('Z', formatMoment(m, 'Z'));
-          }
-      }
-      return formatMoment(
-          m,
-          utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
-      );
-  }
-
-  /**
-   * Return a human readable representation of a moment that can
-   * also be evaluated to get a new moment which is the same
-   *
-   * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
-   */
-  function inspect() {
-      if (!this.isValid()) {
-          return 'moment.invalid(/* ' + this._i + ' */)';
-      }
-      var func = 'moment',
-          zone = '',
-          prefix,
-          year,
-          datetime,
-          suffix;
-      if (!this.isLocal()) {
-          func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
-          zone = 'Z';
-      }
-      prefix = '[' + func + '("]';
-      year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
-      datetime = '-MM-DD[T]HH:mm:ss.SSS';
-      suffix = zone + '[")]';
-
-      return this.format(prefix + year + datetime + suffix);
-  }
-
-  function format(inputString) {
-      if (!inputString) {
-          inputString = this.isUtc()
-              ? hooks.defaultFormatUtc
-              : hooks.defaultFormat;
-      }
-      var output = formatMoment(this, inputString);
-      return this.localeData().postformat(output);
-  }
-
-  function from(time, withoutSuffix) {
-      if (
-          this.isValid() &&
-          ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
-      ) {
-          return createDuration({ to: this, from: time })
-              .locale(this.locale())
-              .humanize(!withoutSuffix);
-      } else {
-          return this.localeData().invalidDate();
-      }
-  }
-
-  function fromNow(withoutSuffix) {
-      return this.from(createLocal(), withoutSuffix);
-  }
-
-  function to(time, withoutSuffix) {
-      if (
-          this.isValid() &&
-          ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
-      ) {
-          return createDuration({ from: this, to: time })
-              .locale(this.locale())
-              .humanize(!withoutSuffix);
-      } else {
-          return this.localeData().invalidDate();
-      }
-  }
-
-  function toNow(withoutSuffix) {
-      return this.to(createLocal(), withoutSuffix);
-  }
-
-  // If passed a locale key, it will set the locale for this
-  // instance.  Otherwise, it will return the locale configuration
-  // variables for this instance.
-  function locale(key) {
-      var newLocaleData;
-
-      if (key === undefined) {
-          return this._locale._abbr;
-      } else {
-          newLocaleData = getLocale(key);
-          if (newLocaleData != null) {
-              this._locale = newLocaleData;
-          }
-          return this;
-      }
-  }
-
-  var lang = deprecate(
-      'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
-      function (key) {
-          if (key === undefined) {
-              return this.localeData();
-          } else {
-              return this.locale(key);
-          }
-      }
-  );
-
-  function localeData() {
-      return this._locale;
-  }
-
-  var MS_PER_SECOND = 1000,
-      MS_PER_MINUTE = 60 * MS_PER_SECOND,
-      MS_PER_HOUR = 60 * MS_PER_MINUTE,
-      MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
-
-  // actual modulo - handles negative numbers (for dates before 1970):
-  function mod$1(dividend, divisor) {
-      return ((dividend % divisor) + divisor) % divisor;
-  }
-
-  function localStartOfDate(y, m, d) {
-      // the date constructor remaps years 0-99 to 1900-1999
-      if (y < 100 && y >= 0) {
-          // preserve leap years using a full 400 year cycle, then reset
-          return new Date(y + 400, m, d) - MS_PER_400_YEARS;
-      } else {
-          return new Date(y, m, d).valueOf();
-      }
-  }
-
-  function utcStartOfDate(y, m, d) {
-      // Date.UTC remaps years 0-99 to 1900-1999
-      if (y < 100 && y >= 0) {
-          // preserve leap years using a full 400 year cycle, then reset
-          return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
-      } else {
-          return Date.UTC(y, m, d);
-      }
-  }
-
-  function startOf(units) {
-      var time, startOfDate;
-      units = normalizeUnits(units);
-      if (units === undefined || units === 'millisecond' || !this.isValid()) {
-          return this;
-      }
-
-      startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
-
-      switch (units) {
-          case 'year':
-              time = startOfDate(this.year(), 0, 1);
-              break;
-          case 'quarter':
-              time = startOfDate(
-                  this.year(),
-                  this.month() - (this.month() % 3),
-                  1
-              );
-              break;
-          case 'month':
-              time = startOfDate(this.year(), this.month(), 1);
-              break;
-          case 'week':
-              time = startOfDate(
-                  this.year(),
-                  this.month(),
-                  this.date() - this.weekday()
-              );
-              break;
-          case 'isoWeek':
-              time = startOfDate(
-                  this.year(),
-                  this.month(),
-                  this.date() - (this.isoWeekday() - 1)
-              );
-              break;
-          case 'day':
-          case 'date':
-              time = startOfDate(this.year(), this.month(), this.date());
-              break;
-          case 'hour':
-              time = this._d.valueOf();
-              time -= mod$1(
-                  time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
-                  MS_PER_HOUR
-              );
-              break;
-          case 'minute':
-              time = this._d.valueOf();
-              time -= mod$1(time, MS_PER_MINUTE);
-              break;
-          case 'second':
-              time = this._d.valueOf();
-              time -= mod$1(time, MS_PER_SECOND);
-              break;
-      }
-
-      this._d.setTime(time);
-      hooks.updateOffset(this, true);
-      return this;
-  }
-
-  function endOf(units) {
-      var time, startOfDate;
-      units = normalizeUnits(units);
-      if (units === undefined || units === 'millisecond' || !this.isValid()) {
-          return this;
-      }
-
-      startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
-
-      switch (units) {
-          case 'year':
-              time = startOfDate(this.year() + 1, 0, 1) - 1;
-              break;
-          case 'quarter':
-              time =
-                  startOfDate(
-                      this.year(),
-                      this.month() - (this.month() % 3) + 3,
-                      1
-                  ) - 1;
-              break;
-          case 'month':
-              time = startOfDate(this.year(), this.month() + 1, 1) - 1;
-              break;
-          case 'week':
-              time =
-                  startOfDate(
-                      this.year(),
-                      this.month(),
-                      this.date() - this.weekday() + 7
-                  ) - 1;
-              break;
-          case 'isoWeek':
-              time =
-                  startOfDate(
-                      this.year(),
-                      this.month(),
-                      this.date() - (this.isoWeekday() - 1) + 7
-                  ) - 1;
-              break;
-          case 'day':
-          case 'date':
-              time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
-              break;
-          case 'hour':
-              time = this._d.valueOf();
-              time +=
-                  MS_PER_HOUR -
-                  mod$1(
-                      time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
-                      MS_PER_HOUR
-                  ) -
-                  1;
-              break;
-          case 'minute':
-              time = this._d.valueOf();
-              time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
-              break;
-          case 'second':
-              time = this._d.valueOf();
-              time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
-              break;
-      }
-
-      this._d.setTime(time);
-      hooks.updateOffset(this, true);
-      return this;
-  }
-
-  function valueOf() {
-      return this._d.valueOf() - (this._offset || 0) * 60000;
-  }
-
-  function unix() {
-      return Math.floor(this.valueOf() / 1000);
-  }
-
-  function toDate() {
-      return new Date(this.valueOf());
-  }
-
-  function toArray() {
-      var m = this;
-      return [
-          m.year(),
-          m.month(),
-          m.date(),
-          m.hour(),
-          m.minute(),
-          m.second(),
-          m.millisecond(),
-      ];
-  }
-
-  function toObject() {
-      var m = this;
-      return {
-          years: m.year(),
-          months: m.month(),
-          date: m.date(),
-          hours: m.hours(),
-          minutes: m.minutes(),
-          seconds: m.seconds(),
-          milliseconds: m.milliseconds(),
-      };
-  }
-
-  function toJSON() {
-      // new Date(NaN).toJSON() === null
-      return this.isValid() ? this.toISOString() : null;
-  }
-
-  function isValid$2() {
-      return isValid(this);
-  }
-
-  function parsingFlags() {
-      return extend({}, getParsingFlags(this));
-  }
-
-  function invalidAt() {
-      return getParsingFlags(this).overflow;
-  }
-
-  function creationData() {
-      return {
-          input: this._i,
-          format: this._f,
-          locale: this._locale,
-          isUTC: this._isUTC,
-          strict: this._strict,
-      };
-  }
-
-  addFormatToken('N', 0, 0, 'eraAbbr');
-  addFormatToken('NN', 0, 0, 'eraAbbr');
-  addFormatToken('NNN', 0, 0, 'eraAbbr');
-  addFormatToken('NNNN', 0, 0, 'eraName');
-  addFormatToken('NNNNN', 0, 0, 'eraNarrow');
-
-  addFormatToken('y', ['y', 1], 'yo', 'eraYear');
-  addFormatToken('y', ['yy', 2], 0, 'eraYear');
-  addFormatToken('y', ['yyy', 3], 0, 'eraYear');
-  addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
-
-  addRegexToken('N', matchEraAbbr);
-  addRegexToken('NN', matchEraAbbr);
-  addRegexToken('NNN', matchEraAbbr);
-  addRegexToken('NNNN', matchEraName);
-  addRegexToken('NNNNN', matchEraNarrow);
-
-  addParseToken(
-      ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],
-      function (input, array, config, token) {
-          var era = config._locale.erasParse(input, token, config._strict);
-          if (era) {
-              getParsingFlags(config).era = era;
-          } else {
-              getParsingFlags(config).invalidEra = input;
-          }
-      }
-  );
-
-  addRegexToken('y', matchUnsigned);
-  addRegexToken('yy', matchUnsigned);
-  addRegexToken('yyy', matchUnsigned);
-  addRegexToken('yyyy', matchUnsigned);
-  addRegexToken('yo', matchEraYearOrdinal);
-
-  addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
-  addParseToken(['yo'], function (input, array, config, token) {
-      var match;
-      if (config._locale._eraYearOrdinalRegex) {
-          match = input.match(config._locale._eraYearOrdinalRegex);
-      }
-
-      if (config._locale.eraYearOrdinalParse) {
-          array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
-      } else {
-          array[YEAR] = parseInt(input, 10);
-      }
-  });
-
-  function localeEras(m, format) {
-      var i,
-          l,
-          date,
-          eras = this._eras || getLocale('en')._eras;
-      for (i = 0, l = eras.length; i < l; ++i) {
-          switch (typeof eras[i].since) {
-              case 'string':
-                  // truncate time
-                  date = hooks(eras[i].since).startOf('day');
-                  eras[i].since = date.valueOf();
-                  break;
-          }
-
-          switch (typeof eras[i].until) {
-              case 'undefined':
-                  eras[i].until = +Infinity;
-                  break;
-              case 'string':
-                  // truncate time
-                  date = hooks(eras[i].until).startOf('day').valueOf();
-                  eras[i].until = date.valueOf();
-                  break;
-          }
-      }
-      return eras;
-  }
-
-  function localeErasParse(eraName, format, strict) {
-      var i,
-          l,
-          eras = this.eras(),
-          name,
-          abbr,
-          narrow;
-      eraName = eraName.toUpperCase();
-
-      for (i = 0, l = eras.length; i < l; ++i) {
-          name = eras[i].name.toUpperCase();
-          abbr = eras[i].abbr.toUpperCase();
-          narrow = eras[i].narrow.toUpperCase();
-
-          if (strict) {
-              switch (format) {
-                  case 'N':
-                  case 'NN':
-                  case 'NNN':
-                      if (abbr === eraName) {
-                          return eras[i];
-                      }
-                      break;
-
-                  case 'NNNN':
-                      if (name === eraName) {
-                          return eras[i];
-                      }
-                      break;
-
-                  case 'NNNNN':
-                      if (narrow === eraName) {
-                          return eras[i];
-                      }
-                      break;
-              }
-          } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
-              return eras[i];
-          }
-      }
-  }
-
-  function localeErasConvertYear(era, year) {
-      var dir = era.since <= era.until ? +1 : -1;
-      if (year === undefined) {
-          return hooks(era.since).year();
-      } else {
-          return hooks(era.since).year() + (year - era.offset) * dir;
-      }
-  }
-
-  function getEraName() {
-      var i,
-          l,
-          val,
-          eras = this.localeData().eras();
-      for (i = 0, l = eras.length; i < l; ++i) {
-          // truncate time
-          val = this.clone().startOf('day').valueOf();
-
-          if (eras[i].since <= val && val <= eras[i].until) {
-              return eras[i].name;
-          }
-          if (eras[i].until <= val && val <= eras[i].since) {
-              return eras[i].name;
-          }
-      }
-
-      return '';
-  }
-
-  function getEraNarrow() {
-      var i,
-          l,
-          val,
-          eras = this.localeData().eras();
-      for (i = 0, l = eras.length; i < l; ++i) {
-          // truncate time
-          val = this.clone().startOf('day').valueOf();
-
-          if (eras[i].since <= val && val <= eras[i].until) {
-              return eras[i].narrow;
-          }
-          if (eras[i].until <= val && val <= eras[i].since) {
-              return eras[i].narrow;
-          }
-      }
-
-      return '';
-  }
-
-  function getEraAbbr() {
-      var i,
-          l,
-          val,
-          eras = this.localeData().eras();
-      for (i = 0, l = eras.length; i < l; ++i) {
-          // truncate time
-          val = this.clone().startOf('day').valueOf();
-
-          if (eras[i].since <= val && val <= eras[i].until) {
-              return eras[i].abbr;
-          }
-          if (eras[i].until <= val && val <= eras[i].since) {
-              return eras[i].abbr;
-          }
-      }
-
-      return '';
-  }
-
-  function getEraYear() {
-      var i,
-          l,
-          dir,
-          val,
-          eras = this.localeData().eras();
-      for (i = 0, l = eras.length; i < l; ++i) {
-          dir = eras[i].since <= eras[i].until ? +1 : -1;
-
-          // truncate time
-          val = this.clone().startOf('day').valueOf();
-
-          if (
-              (eras[i].since <= val && val <= eras[i].until) ||
-              (eras[i].until <= val && val <= eras[i].since)
-          ) {
-              return (
-                  (this.year() - hooks(eras[i].since).year()) * dir +
-                  eras[i].offset
-              );
-          }
-      }
-
-      return this.year();
-  }
-
-  function erasNameRegex(isStrict) {
-      if (!hasOwnProp(this, '_erasNameRegex')) {
-          computeErasParse.call(this);
-      }
-      return isStrict ? this._erasNameRegex : this._erasRegex;
-  }
-
-  function erasAbbrRegex(isStrict) {
-      if (!hasOwnProp(this, '_erasAbbrRegex')) {
-          computeErasParse.call(this);
-      }
-      return isStrict ? this._erasAbbrRegex : this._erasRegex;
-  }
-
-  function erasNarrowRegex(isStrict) {
-      if (!hasOwnProp(this, '_erasNarrowRegex')) {
-          computeErasParse.call(this);
-      }
-      return isStrict ? this._erasNarrowRegex : this._erasRegex;
-  }
-
-  function matchEraAbbr(isStrict, locale) {
-      return locale.erasAbbrRegex(isStrict);
-  }
-
-  function matchEraName(isStrict, locale) {
-      return locale.erasNameRegex(isStrict);
-  }
-
-  function matchEraNarrow(isStrict, locale) {
-      return locale.erasNarrowRegex(isStrict);
-  }
-
-  function matchEraYearOrdinal(isStrict, locale) {
-      return locale._eraYearOrdinalRegex || matchUnsigned;
-  }
-
-  function computeErasParse() {
-      var abbrPieces = [],
-          namePieces = [],
-          narrowPieces = [],
-          mixedPieces = [],
-          i,
-          l,
-          eras = this.eras();
-
-      for (i = 0, l = eras.length; i < l; ++i) {
-          namePieces.push(regexEscape(eras[i].name));
-          abbrPieces.push(regexEscape(eras[i].abbr));
-          narrowPieces.push(regexEscape(eras[i].narrow));
-
-          mixedPieces.push(regexEscape(eras[i].name));
-          mixedPieces.push(regexEscape(eras[i].abbr));
-          mixedPieces.push(regexEscape(eras[i].narrow));
-      }
-
-      this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
-      this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
-      this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
-      this._erasNarrowRegex = new RegExp(
-          '^(' + narrowPieces.join('|') + ')',
-          'i'
-      );
-  }
-
-  // FORMATTING
-
-  addFormatToken(0, ['gg', 2], 0, function () {
-      return this.weekYear() % 100;
-  });
-
-  addFormatToken(0, ['GG', 2], 0, function () {
-      return this.isoWeekYear() % 100;
-  });
-
-  function addWeekYearFormatToken(token, getter) {
-      addFormatToken(0, [token, token.length], 0, getter);
-  }
-
-  addWeekYearFormatToken('gggg', 'weekYear');
-  addWeekYearFormatToken('ggggg', 'weekYear');
-  addWeekYearFormatToken('GGGG', 'isoWeekYear');
-  addWeekYearFormatToken('GGGGG', 'isoWeekYear');
-
-  // ALIASES
-
-  addUnitAlias('weekYear', 'gg');
-  addUnitAlias('isoWeekYear', 'GG');
-
-  // PRIORITY
-
-  addUnitPriority('weekYear', 1);
-  addUnitPriority('isoWeekYear', 1);
-
-  // PARSING
-
-  addRegexToken('G', matchSigned);
-  addRegexToken('g', matchSigned);
-  addRegexToken('GG', match1to2, match2);
-  addRegexToken('gg', match1to2, match2);
-  addRegexToken('GGGG', match1to4, match4);
-  addRegexToken('gggg', match1to4, match4);
-  addRegexToken('GGGGG', match1to6, match6);
-  addRegexToken('ggggg', match1to6, match6);
-
-  addWeekParseToken(
-      ['gggg', 'ggggg', 'GGGG', 'GGGGG'],
-      function (input, week, config, token) {
-          week[token.substr(0, 2)] = toInt(input);
-      }
-  );
-
-  addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
-      week[token] = hooks.parseTwoDigitYear(input);
-  });
-
-  // MOMENTS
-
-  function getSetWeekYear(input) {
-      return getSetWeekYearHelper.call(
-          this,
-          input,
-          this.week(),
-          this.weekday(),
-          this.localeData()._week.dow,
-          this.localeData()._week.doy
-      );
-  }
-
-  function getSetISOWeekYear(input) {
-      return getSetWeekYearHelper.call(
-          this,
-          input,
-          this.isoWeek(),
-          this.isoWeekday(),
-          1,
-          4
-      );
-  }
-
-  function getISOWeeksInYear() {
-      return weeksInYear(this.year(), 1, 4);
-  }
-
-  function getISOWeeksInISOWeekYear() {
-      return weeksInYear(this.isoWeekYear(), 1, 4);
-  }
-
-  function getWeeksInYear() {
-      var weekInfo = this.localeData()._week;
-      return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
-  }
-
-  function getWeeksInWeekYear() {
-      var weekInfo = this.localeData()._week;
-      return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
-  }
-
-  function getSetWeekYearHelper(input, week, weekday, dow, doy) {
-      var weeksTarget;
-      if (input == null) {
-          return weekOfYear(this, dow, doy).year;
-      } else {
-          weeksTarget = weeksInYear(input, dow, doy);
-          if (week > weeksTarget) {
-              week = weeksTarget;
-          }
-          return setWeekAll.call(this, input, week, weekday, dow, doy);
-      }
-  }
-
-  function setWeekAll(weekYear, week, weekday, dow, doy) {
-      var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
-          date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
-
-      this.year(date.getUTCFullYear());
-      this.month(date.getUTCMonth());
-      this.date(date.getUTCDate());
-      return this;
-  }
-
-  // FORMATTING
-
-  addFormatToken('Q', 0, 'Qo', 'quarter');
-
-  // ALIASES
-
-  addUnitAlias('quarter', 'Q');
-
-  // PRIORITY
-
-  addUnitPriority('quarter', 7);
-
-  // PARSING
-
-  addRegexToken('Q', match1);
-  addParseToken('Q', function (input, array) {
-      array[MONTH] = (toInt(input) - 1) * 3;
-  });
-
-  // MOMENTS
-
-  function getSetQuarter(input) {
-      return input == null
-          ? Math.ceil((this.month() + 1) / 3)
-          : this.month((input - 1) * 3 + (this.month() % 3));
-  }
-
-  // FORMATTING
-
-  addFormatToken('D', ['DD', 2], 'Do', 'date');
-
-  // ALIASES
-
-  addUnitAlias('date', 'D');
-
-  // PRIORITY
-  addUnitPriority('date', 9);
-
-  // PARSING
-
-  addRegexToken('D', match1to2);
-  addRegexToken('DD', match1to2, match2);
-  addRegexToken('Do', function (isStrict, locale) {
-      // TODO: Remove "ordinalParse" fallback in next major release.
-      return isStrict
-          ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
-          : locale._dayOfMonthOrdinalParseLenient;
-  });
-
-  addParseToken(['D', 'DD'], DATE);
-  addParseToken('Do', function (input, array) {
-      array[DATE] = toInt(input.match(match1to2)[0]);
-  });
-
-  // MOMENTS
-
-  var getSetDayOfMonth = makeGetSet('Date', true);
-
-  // FORMATTING
-
-  addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
-
-  // ALIASES
-
-  addUnitAlias('dayOfYear', 'DDD');
-
-  // PRIORITY
-  addUnitPriority('dayOfYear', 4);
-
-  // PARSING
-
-  addRegexToken('DDD', match1to3);
-  addRegexToken('DDDD', match3);
-  addParseToken(['DDD', 'DDDD'], function (input, array, config) {
-      config._dayOfYear = toInt(input);
-  });
-
-  // HELPERS
-
-  // MOMENTS
-
-  function getSetDayOfYear(input) {
-      var dayOfYear =
-          Math.round(
-              (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
-          ) + 1;
-      return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
-  }
-
-  // FORMATTING
-
-  addFormatToken('m', ['mm', 2], 0, 'minute');
-
-  // ALIASES
-
-  addUnitAlias('minute', 'm');
-
-  // PRIORITY
-
-  addUnitPriority('minute', 14);
-
-  // PARSING
-
-  addRegexToken('m', match1to2);
-  addRegexToken('mm', match1to2, match2);
-  addParseToken(['m', 'mm'], MINUTE);
-
-  // MOMENTS
-
-  var getSetMinute = makeGetSet('Minutes', false);
-
-  // FORMATTING
-
-  addFormatToken('s', ['ss', 2], 0, 'second');
-
-  // ALIASES
-
-  addUnitAlias('second', 's');
-
-  // PRIORITY
-
-  addUnitPriority('second', 15);
-
-  // PARSING
-
-  addRegexToken('s', match1to2);
-  addRegexToken('ss', match1to2, match2);
-  addParseToken(['s', 'ss'], SECOND);
-
-  // MOMENTS
-
-  var getSetSecond = makeGetSet('Seconds', false);
-
-  // FORMATTING
-
-  addFormatToken('S', 0, 0, function () {
-      return ~~(this.millisecond() / 100);
-  });
-
-  addFormatToken(0, ['SS', 2], 0, function () {
-      return ~~(this.millisecond() / 10);
-  });
-
-  addFormatToken(0, ['SSS', 3], 0, 'millisecond');
-  addFormatToken(0, ['SSSS', 4], 0, function () {
-      return this.millisecond() * 10;
-  });
-  addFormatToken(0, ['SSSSS', 5], 0, function () {
-      return this.millisecond() * 100;
-  });
-  addFormatToken(0, ['SSSSSS', 6], 0, function () {
-      return this.millisecond() * 1000;
-  });
-  addFormatToken(0, ['SSSSSSS', 7], 0, function () {
-      return this.millisecond() * 10000;
-  });
-  addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
-      return this.millisecond() * 100000;
-  });
-  addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
-      return this.millisecond() * 1000000;
-  });
-
-  // ALIASES
-
-  addUnitAlias('millisecond', 'ms');
-
-  // PRIORITY
-
-  addUnitPriority('millisecond', 16);
-
-  // PARSING
-
-  addRegexToken('S', match1to3, match1);
-  addRegexToken('SS', match1to3, match2);
-  addRegexToken('SSS', match1to3, match3);
-
-  var token, getSetMillisecond;
-  for (token = 'SSSS'; token.length <= 9; token += 'S') {
-      addRegexToken(token, matchUnsigned);
-  }
-
-  function parseMs(input, array) {
-      array[MILLISECOND] = toInt(('0.' + input) * 1000);
-  }
-
-  for (token = 'S'; token.length <= 9; token += 'S') {
-      addParseToken(token, parseMs);
-  }
-
-  getSetMillisecond = makeGetSet('Milliseconds', false);
-
-  // FORMATTING
-
-  addFormatToken('z', 0, 0, 'zoneAbbr');
-  addFormatToken('zz', 0, 0, 'zoneName');
-
-  // MOMENTS
-
-  function getZoneAbbr() {
-      return this._isUTC ? 'UTC' : '';
-  }
-
-  function getZoneName() {
-      return this._isUTC ? 'Coordinated Universal Time' : '';
-  }
-
-  var proto = Moment.prototype;
-
-  proto.add = add;
-  proto.calendar = calendar$1;
-  proto.clone = clone;
-  proto.diff = diff;
-  proto.endOf = endOf;
-  proto.format = format;
-  proto.from = from;
-  proto.fromNow = fromNow;
-  proto.to = to;
-  proto.toNow = toNow;
-  proto.get = stringGet;
-  proto.invalidAt = invalidAt;
-  proto.isAfter = isAfter;
-  proto.isBefore = isBefore;
-  proto.isBetween = isBetween;
-  proto.isSame = isSame;
-  proto.isSameOrAfter = isSameOrAfter;
-  proto.isSameOrBefore = isSameOrBefore;
-  proto.isValid = isValid$2;
-  proto.lang = lang;
-  proto.locale = locale;
-  proto.localeData = localeData;
-  proto.max = prototypeMax;
-  proto.min = prototypeMin;
-  proto.parsingFlags = parsingFlags;
-  proto.set = stringSet;
-  proto.startOf = startOf;
-  proto.subtract = subtract;
-  proto.toArray = toArray;
-  proto.toObject = toObject;
-  proto.toDate = toDate;
-  proto.toISOString = toISOString;
-  proto.inspect = inspect;
-  if (typeof Symbol !== 'undefined' && Symbol.for != null) {
-      proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
-          return 'Moment<' + this.format() + '>';
-      };
-  }
-  proto.toJSON = toJSON;
-  proto.toString = toString;
-  proto.unix = unix;
-  proto.valueOf = valueOf;
-  proto.creationData = creationData;
-  proto.eraName = getEraName;
-  proto.eraNarrow = getEraNarrow;
-  proto.eraAbbr = getEraAbbr;
-  proto.eraYear = getEraYear;
-  proto.year = getSetYear;
-  proto.isLeapYear = getIsLeapYear;
-  proto.weekYear = getSetWeekYear;
-  proto.isoWeekYear = getSetISOWeekYear;
-  proto.quarter = proto.quarters = getSetQuarter;
-  proto.month = getSetMonth;
-  proto.daysInMonth = getDaysInMonth;
-  proto.week = proto.weeks = getSetWeek;
-  proto.isoWeek = proto.isoWeeks = getSetISOWeek;
-  proto.weeksInYear = getWeeksInYear;
-  proto.weeksInWeekYear = getWeeksInWeekYear;
-  proto.isoWeeksInYear = getISOWeeksInYear;
-  proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
-  proto.date = getSetDayOfMonth;
-  proto.day = proto.days = getSetDayOfWeek;
-  proto.weekday = getSetLocaleDayOfWeek;
-  proto.isoWeekday = getSetISODayOfWeek;
-  proto.dayOfYear = getSetDayOfYear;
-  proto.hour = proto.hours = getSetHour;
-  proto.minute = proto.minutes = getSetMinute;
-  proto.second = proto.seconds = getSetSecond;
-  proto.millisecond = proto.milliseconds = getSetMillisecond;
-  proto.utcOffset = getSetOffset;
-  proto.utc = setOffsetToUTC;
-  proto.local = setOffsetToLocal;
-  proto.parseZone = setOffsetToParsedOffset;
-  proto.hasAlignedHourOffset = hasAlignedHourOffset;
-  proto.isDST = isDaylightSavingTime;
-  proto.isLocal = isLocal;
-  proto.isUtcOffset = isUtcOffset;
-  proto.isUtc = isUtc;
-  proto.isUTC = isUtc;
-  proto.zoneAbbr = getZoneAbbr;
-  proto.zoneName = getZoneName;
-  proto.dates = deprecate(
-      'dates accessor is deprecated. Use date instead.',
-      getSetDayOfMonth
-  );
-  proto.months = deprecate(
-      'months accessor is deprecated. Use month instead',
-      getSetMonth
-  );
-  proto.years = deprecate(
-      'years accessor is deprecated. Use year instead',
-      getSetYear
-  );
-  proto.zone = deprecate(
-      'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
-      getSetZone
-  );
-  proto.isDSTShifted = deprecate(
-      'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
-      isDaylightSavingTimeShifted
-  );
-
-  function createUnix(input) {
-      return createLocal(input * 1000);
-  }
-
-  function createInZone() {
-      return createLocal.apply(null, arguments).parseZone();
-  }
-
-  function preParsePostFormat(string) {
-      return string;
-  }
-
-  var proto$1 = Locale.prototype;
-
-  proto$1.calendar = calendar;
-  proto$1.longDateFormat = longDateFormat;
-  proto$1.invalidDate = invalidDate;
-  proto$1.ordinal = ordinal;
-  proto$1.preparse = preParsePostFormat;
-  proto$1.postformat = preParsePostFormat;
-  proto$1.relativeTime = relativeTime;
-  proto$1.pastFuture = pastFuture;
-  proto$1.set = set;
-  proto$1.eras = localeEras;
-  proto$1.erasParse = localeErasParse;
-  proto$1.erasConvertYear = localeErasConvertYear;
-  proto$1.erasAbbrRegex = erasAbbrRegex;
-  proto$1.erasNameRegex = erasNameRegex;
-  proto$1.erasNarrowRegex = erasNarrowRegex;
-
-  proto$1.months = localeMonths;
-  proto$1.monthsShort = localeMonthsShort;
-  proto$1.monthsParse = localeMonthsParse;
-  proto$1.monthsRegex = monthsRegex;
-  proto$1.monthsShortRegex = monthsShortRegex;
-  proto$1.week = localeWeek;
-  proto$1.firstDayOfYear = localeFirstDayOfYear;
-  proto$1.firstDayOfWeek = localeFirstDayOfWeek;
-
-  proto$1.weekdays = localeWeekdays;
-  proto$1.weekdaysMin = localeWeekdaysMin;
-  proto$1.weekdaysShort = localeWeekdaysShort;
-  proto$1.weekdaysParse = localeWeekdaysParse;
-
-  proto$1.weekdaysRegex = weekdaysRegex;
-  proto$1.weekdaysShortRegex = weekdaysShortRegex;
-  proto$1.weekdaysMinRegex = weekdaysMinRegex;
-
-  proto$1.isPM = localeIsPM;
-  proto$1.meridiem = localeMeridiem;
-
-  function get$1(format, index, field, setter) {
-      var locale = getLocale(),
-          utc = createUTC().set(setter, index);
-      return locale[field](utc, format);
-  }
-
-  function listMonthsImpl(format, index, field) {
-      if (isNumber(format)) {
-          index = format;
-          format = undefined;
-      }
-
-      format = format || '';
-
-      if (index != null) {
-          return get$1(format, index, field, 'month');
-      }
-
-      var i,
-          out = [];
-      for (i = 0; i < 12; i++) {
-          out[i] = get$1(format, i, field, 'month');
-      }
-      return out;
-  }
-
-  // ()
-  // (5)
-  // (fmt, 5)
-  // (fmt)
-  // (true)
-  // (true, 5)
-  // (true, fmt, 5)
-  // (true, fmt)
-  function listWeekdaysImpl(localeSorted, format, index, field) {
-      if (typeof localeSorted === 'boolean') {
-          if (isNumber(format)) {
-              index = format;
-              format = undefined;
-          }
-
-          format = format || '';
-      } else {
-          format = localeSorted;
-          index = format;
-          localeSorted = false;
-
-          if (isNumber(format)) {
-              index = format;
-              format = undefined;
-          }
-
-          format = format || '';
-      }
-
-      var locale = getLocale(),
-          shift = localeSorted ? locale._week.dow : 0,
-          i,
-          out = [];
-
-      if (index != null) {
-          return get$1(format, (index + shift) % 7, field, 'day');
-      }
-
-      for (i = 0; i < 7; i++) {
-          out[i] = get$1(format, (i + shift) % 7, field, 'day');
-      }
-      return out;
-  }
-
-  function listMonths(format, index) {
-      return listMonthsImpl(format, index, 'months');
-  }
-
-  function listMonthsShort(format, index) {
-      return listMonthsImpl(format, index, 'monthsShort');
-  }
-
-  function listWeekdays(localeSorted, format, index) {
-      return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
-  }
-
-  function listWeekdaysShort(localeSorted, format, index) {
-      return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
-  }
-
-  function listWeekdaysMin(localeSorted, format, index) {
-      return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
-  }
-
-  getSetGlobalLocale('en', {
-      eras: [
-          {
-              since: '0001-01-01',
-              until: +Infinity,
-              offset: 1,
-              name: 'Anno Domini',
-              narrow: 'AD',
-              abbr: 'AD',
-          },
-          {
-              since: '0000-12-31',
-              until: -Infinity,
-              offset: 1,
-              name: 'Before Christ',
-              narrow: 'BC',
-              abbr: 'BC',
-          },
-      ],
-      dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
-      ordinal: function (number) {
-          var b = number % 10,
-              output =
-                  toInt((number % 100) / 10) === 1
-                      ? 'th'
-                      : b === 1
-                      ? 'st'
-                      : b === 2
-                      ? 'nd'
-                      : b === 3
-                      ? 'rd'
-                      : 'th';
-          return number + output;
-      },
-  });
-
-  // Side effect imports
-
-  hooks.lang = deprecate(
-      'moment.lang is deprecated. Use moment.locale instead.',
-      getSetGlobalLocale
-  );
-  hooks.langData = deprecate(
-      'moment.langData is deprecated. Use moment.localeData instead.',
-      getLocale
-  );
-
-  var mathAbs = Math.abs;
-
-  function abs() {
-      var data = this._data;
-
-      this._milliseconds = mathAbs(this._milliseconds);
-      this._days = mathAbs(this._days);
-      this._months = mathAbs(this._months);
-
-      data.milliseconds = mathAbs(data.milliseconds);
-      data.seconds = mathAbs(data.seconds);
-      data.minutes = mathAbs(data.minutes);
-      data.hours = mathAbs(data.hours);
-      data.months = mathAbs(data.months);
-      data.years = mathAbs(data.years);
-
-      return this;
-  }
-
-  function addSubtract$1(duration, input, value, direction) {
-      var other = createDuration(input, value);
-
-      duration._milliseconds += direction * other._milliseconds;
-      duration._days += direction * other._days;
-      duration._months += direction * other._months;
-
-      return duration._bubble();
-  }
-
-  // supports only 2.0-style add(1, 's') or add(duration)
-  function add$1(input, value) {
-      return addSubtract$1(this, input, value, 1);
-  }
-
-  // supports only 2.0-style subtract(1, 's') or subtract(duration)
-  function subtract$1(input, value) {
-      return addSubtract$1(this, input, value, -1);
-  }
-
-  function absCeil(number) {
-      if (number < 0) {
-          return Math.floor(number);
-      } else {
-          return Math.ceil(number);
-      }
-  }
-
-  function bubble() {
-      var milliseconds = this._milliseconds,
-          days = this._days,
-          months = this._months,
-          data = this._data,
-          seconds,
-          minutes,
-          hours,
-          years,
-          monthsFromDays;
-
-      // if we have a mix of positive and negative values, bubble down first
-      // check: https://github.com/moment/moment/issues/2166
-      if (
-          !(
-              (milliseconds >= 0 && days >= 0 && months >= 0) ||
-              (milliseconds <= 0 && days <= 0 && months <= 0)
-          )
-      ) {
-          milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
-          days = 0;
-          months = 0;
-      }
-
-      // The following code bubbles up values, see the tests for
-      // examples of what that means.
-      data.milliseconds = milliseconds % 1000;
-
-      seconds = absFloor(milliseconds / 1000);
-      data.seconds = seconds % 60;
-
-      minutes = absFloor(seconds / 60);
-      data.minutes = minutes % 60;
-
-      hours = absFloor(minutes / 60);
-      data.hours = hours % 24;
-
-      days += absFloor(hours / 24);
-
-      // convert days to months
-      monthsFromDays = absFloor(daysToMonths(days));
-      months += monthsFromDays;
-      days -= absCeil(monthsToDays(monthsFromDays));
-
-      // 12 months -> 1 year
-      years = absFloor(months / 12);
-      months %= 12;
-
-      data.days = days;
-      data.months = months;
-      data.years = years;
-
-      return this;
-  }
-
-  function daysToMonths(days) {
-      // 400 years have 146097 days (taking into account leap year rules)
-      // 400 years have 12 months === 4800
-      return (days * 4800) / 146097;
-  }
-
-  function monthsToDays(months) {
-      // the reverse of daysToMonths
-      return (months * 146097) / 4800;
-  }
-
-  function as(units) {
-      if (!this.isValid()) {
-          return NaN;
-      }
-      var days,
-          months,
-          milliseconds = this._milliseconds;
-
-      units = normalizeUnits(units);
-
-      if (units === 'month' || units === 'quarter' || units === 'year') {
-          days = this._days + milliseconds / 864e5;
-          months = this._months + daysToMonths(days);
-          switch (units) {
-              case 'month':
-                  return months;
-              case 'quarter':
-                  return months / 3;
-              case 'year':
-                  return months / 12;
-          }
-      } else {
-          // handle milliseconds separately because of floating point math errors (issue #1867)
-          days = this._days + Math.round(monthsToDays(this._months));
-          switch (units) {
-              case 'week':
-                  return days / 7 + milliseconds / 6048e5;
-              case 'day':
-                  return days + milliseconds / 864e5;
-              case 'hour':
-                  return days * 24 + milliseconds / 36e5;
-              case 'minute':
-                  return days * 1440 + milliseconds / 6e4;
-              case 'second':
-                  return days * 86400 + milliseconds / 1000;
-              // Math.floor prevents floating point math errors here
-              case 'millisecond':
-                  return Math.floor(days * 864e5) + milliseconds;
-              default:
-                  throw new Error('Unknown unit ' + units);
-          }
-      }
-  }
-
-  // TODO: Use this.as('ms')?
-  function valueOf$1() {
-      if (!this.isValid()) {
-          return NaN;
-      }
-      return (
-          this._milliseconds +
-          this._days * 864e5 +
-          (this._months % 12) * 2592e6 +
-          toInt(this._months / 12) * 31536e6
-      );
-  }
-
-  function makeAs(alias) {
-      return function () {
-          return this.as(alias);
-      };
-  }
-
-  var asMilliseconds = makeAs('ms'),
-      asSeconds = makeAs('s'),
-      asMinutes = makeAs('m'),
-      asHours = makeAs('h'),
-      asDays = makeAs('d'),
-      asWeeks = makeAs('w'),
-      asMonths = makeAs('M'),
-      asQuarters = makeAs('Q'),
-      asYears = makeAs('y');
-
-  function clone$1() {
-      return createDuration(this);
-  }
-
-  function get$2(units) {
-      units = normalizeUnits(units);
-      return this.isValid() ? this[units + 's']() : NaN;
-  }
-
-  function makeGetter(name) {
-      return function () {
-          return this.isValid() ? this._data[name] : NaN;
-      };
-  }
-
-  var milliseconds = makeGetter('milliseconds'),
-      seconds = makeGetter('seconds'),
-      minutes = makeGetter('minutes'),
-      hours = makeGetter('hours'),
-      days = makeGetter('days'),
-      months = makeGetter('months'),
-      years = makeGetter('years');
-
-  function weeks() {
-      return absFloor(this.days() / 7);
-  }
-
-  var round = Math.round,
-      thresholds = {
-          ss: 44, // a few seconds to seconds
-          s: 45, // seconds to minute
-          m: 45, // minutes to hour
-          h: 22, // hours to day
-          d: 26, // days to month/week
-          w: null, // weeks to month
-          M: 11, // months to year
-      };
-
-  // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
-  function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
-      return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
-  }
-
-  function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
-      var duration = createDuration(posNegDuration).abs(),
-          seconds = round(duration.as('s')),
-          minutes = round(duration.as('m')),
-          hours = round(duration.as('h')),
-          days = round(duration.as('d')),
-          months = round(duration.as('M')),
-          weeks = round(duration.as('w')),
-          years = round(duration.as('y')),
-          a =
-              (seconds <= thresholds.ss && ['s', seconds]) ||
-              (seconds < thresholds.s && ['ss', seconds]) ||
-              (minutes <= 1 && ['m']) ||
-              (minutes < thresholds.m && ['mm', minutes]) ||
-              (hours <= 1 && ['h']) ||
-              (hours < thresholds.h && ['hh', hours]) ||
-              (days <= 1 && ['d']) ||
-              (days < thresholds.d && ['dd', days]);
-
-      if (thresholds.w != null) {
-          a =
-              a ||
-              (weeks <= 1 && ['w']) ||
-              (weeks < thresholds.w && ['ww', weeks]);
-      }
-      a = a ||
-          (months <= 1 && ['M']) ||
-          (months < thresholds.M && ['MM', months]) ||
-          (years <= 1 && ['y']) || ['yy', years];
-
-      a[2] = withoutSuffix;
-      a[3] = +posNegDuration > 0;
-      a[4] = locale;
-      return substituteTimeAgo.apply(null, a);
-  }
-
-  // This function allows you to set the rounding function for relative time strings
-  function getSetRelativeTimeRounding(roundingFunction) {
-      if (roundingFunction === undefined) {
-          return round;
-      }
-      if (typeof roundingFunction === 'function') {
-          round = roundingFunction;
-          return true;
-      }
-      return false;
-  }
-
-  // This function allows you to set a threshold for relative time strings
-  function getSetRelativeTimeThreshold(threshold, limit) {
-      if (thresholds[threshold] === undefined) {
-          return false;
-      }
-      if (limit === undefined) {
-          return thresholds[threshold];
-      }
-      thresholds[threshold] = limit;
-      if (threshold === 's') {
-          thresholds.ss = limit - 1;
-      }
-      return true;
-  }
-
-  function humanize(argWithSuffix, argThresholds) {
-      if (!this.isValid()) {
-          return this.localeData().invalidDate();
-      }
-
-      var withSuffix = false,
-          th = thresholds,
-          locale,
-          output;
-
-      if (typeof argWithSuffix === 'object') {
-          argThresholds = argWithSuffix;
-          argWithSuffix = false;
-      }
-      if (typeof argWithSuffix === 'boolean') {
-          withSuffix = argWithSuffix;
-      }
-      if (typeof argThresholds === 'object') {
-          th = Object.assign({}, thresholds, argThresholds);
-          if (argThresholds.s != null && argThresholds.ss == null) {
-              th.ss = argThresholds.s - 1;
-          }
-      }
-
-      locale = this.localeData();
-      output = relativeTime$1(this, !withSuffix, th, locale);
-
-      if (withSuffix) {
-          output = locale.pastFuture(+this, output);
-      }
-
-      return locale.postformat(output);
-  }
-
-  var abs$1 = Math.abs;
-
-  function sign(x) {
-      return (x > 0) - (x < 0) || +x;
-  }
-
-  function toISOString$1() {
-      // for ISO strings we do not use the normal bubbling rules:
-      //  * milliseconds bubble up until they become hours
-      //  * days do not bubble at all
-      //  * months bubble up until they become years
-      // This is because there is no context-free conversion between hours and days
-      // (think of clock changes)
-      // and also not between days and months (28-31 days per month)
-      if (!this.isValid()) {
-          return this.localeData().invalidDate();
-      }
-
-      var seconds = abs$1(this._milliseconds) / 1000,
-          days = abs$1(this._days),
-          months = abs$1(this._months),
-          minutes,
-          hours,
-          years,
-          s,
-          total = this.asSeconds(),
-          totalSign,
-          ymSign,
-          daysSign,
-          hmsSign;
-
-      if (!total) {
-          // this is the same as C#'s (Noda) and python (isodate)...
-          // but not other JS (goog.date)
-          return 'P0D';
-      }
-
-      // 3600 seconds -> 60 minutes -> 1 hour
-      minutes = absFloor(seconds / 60);
-      hours = absFloor(minutes / 60);
-      seconds %= 60;
-      minutes %= 60;
-
-      // 12 months -> 1 year
-      years = absFloor(months / 12);
-      months %= 12;
-
-      // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
-      s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
-
-      totalSign = total < 0 ? '-' : '';
-      ymSign = sign(this._months) !== sign(total) ? '-' : '';
-      daysSign = sign(this._days) !== sign(total) ? '-' : '';
-      hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
-
-      return (
-          totalSign +
-          'P' +
-          (years ? ymSign + years + 'Y' : '') +
-          (months ? ymSign + months + 'M' : '') +
-          (days ? daysSign + days + 'D' : '') +
-          (hours || minutes || seconds ? 'T' : '') +
-          (hours ? hmsSign + hours + 'H' : '') +
-          (minutes ? hmsSign + minutes + 'M' : '') +
-          (seconds ? hmsSign + s + 'S' : '')
-      );
-  }
-
-  var proto$2 = Duration.prototype;
-
-  proto$2.isValid = isValid$1;
-  proto$2.abs = abs;
-  proto$2.add = add$1;
-  proto$2.subtract = subtract$1;
-  proto$2.as = as;
-  proto$2.asMilliseconds = asMilliseconds;
-  proto$2.asSeconds = asSeconds;
-  proto$2.asMinutes = asMinutes;
-  proto$2.asHours = asHours;
-  proto$2.asDays = asDays;
-  proto$2.asWeeks = asWeeks;
-  proto$2.asMonths = asMonths;
-  proto$2.asQuarters = asQuarters;
-  proto$2.asYears = asYears;
-  proto$2.valueOf = valueOf$1;
-  proto$2._bubble = bubble;
-  proto$2.clone = clone$1;
-  proto$2.get = get$2;
-  proto$2.milliseconds = milliseconds;
-  proto$2.seconds = seconds;
-  proto$2.minutes = minutes;
-  proto$2.hours = hours;
-  proto$2.days = days;
-  proto$2.weeks = weeks;
-  proto$2.months = months;
-  proto$2.years = years;
-  proto$2.humanize = humanize;
-  proto$2.toISOString = toISOString$1;
-  proto$2.toString = toISOString$1;
-  proto$2.toJSON = toISOString$1;
-  proto$2.locale = locale;
-  proto$2.localeData = localeData;
-
-  proto$2.toIsoString = deprecate(
-      'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
-      toISOString$1
-  );
-  proto$2.lang = lang;
-
-  // FORMATTING
-
-  addFormatToken('X', 0, 0, 'unix');
-  addFormatToken('x', 0, 0, 'valueOf');
-
-  // PARSING
-
-  addRegexToken('x', matchSigned);
-  addRegexToken('X', matchTimestamp);
-  addParseToken('X', function (input, array, config) {
-      config._d = new Date(parseFloat(input) * 1000);
-  });
-  addParseToken('x', function (input, array, config) {
-      config._d = new Date(toInt(input));
-  });
-
-  //! moment.js
-
-  hooks.version = '2.29.4';
-
-  setHookCallback(createLocal);
-
-  hooks.fn = proto;
-  hooks.min = min;
-  hooks.max = max;
-  hooks.now = now;
-  hooks.utc = createUTC;
-  hooks.unix = createUnix;
-  hooks.months = listMonths;
-  hooks.isDate = isDate;
-  hooks.locale = getSetGlobalLocale;
-  hooks.invalid = createInvalid;
-  hooks.duration = createDuration;
-  hooks.isMoment = isMoment;
-  hooks.weekdays = listWeekdays;
-  hooks.parseZone = createInZone;
-  hooks.localeData = getLocale;
-  hooks.isDuration = isDuration;
-  hooks.monthsShort = listMonthsShort;
-  hooks.weekdaysMin = listWeekdaysMin;
-  hooks.defineLocale = defineLocale;
-  hooks.updateLocale = updateLocale;
-  hooks.locales = listLocales;
-  hooks.weekdaysShort = listWeekdaysShort;
-  hooks.normalizeUnits = normalizeUnits;
-  hooks.relativeTimeRounding = getSetRelativeTimeRounding;
-  hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
-  hooks.calendarFormat = getCalendarFormat;
-  hooks.prototype = proto;
-
-  // currently HTML5 input type only supports 24-hour formats
-  hooks.HTML5_FMT = {
-      DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
-      DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
-      DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
-      DATE: 'YYYY-MM-DD', // <input type="date" />
-      TIME: 'HH:mm', // <input type="time" />
-      TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
-      TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
-      WEEK: 'GGGG-[W]WW', // <input type="week" />
-      MONTH: 'YYYY-MM', // <input type="month" />
-  };
-
-  return hooks;
-
-})));

+ 0 - 82
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/login.html

@@ -1,82 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>登录</title>
-    <!-- jQuery:操作 dom、发起请求等 -->
-    <script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.1.2/jquery.min.js"
-            type="application/javascript"></script>
-
-    <script type="application/javascript">
-
-        /**
-         * 账号密码登录
-         */
-        function login() {
-            const clientId = 'workflow'; // 可以改写成,你的 clientId
-            const clientSecret = 'workflow_zdww'; // 可以改写成,你的 clientSecret
-            const grantType = 'password'; // 密码模式
-
-            // 账号 + 密码
-            const username = $('#username').val();
-            const password = $('#password').val();
-            if (username.length === 0 || password.length === 0) {timeSelector
-                alert('账号或密码未输入');
-                return;
-            }
-
-            // 发起请求
-            $.ajax({
-                url: "http://60.191.110.205:28080/admin-api/system/oauth2/token?"
-                    // 客户端
-                    + "client_id=" + clientId
-                    + "&client_secret=" + clientSecret
-                    // 密码模式的参数
-                    + "&grant_type=" + grantType
-                    + "&username=" + username
-                    + "&password=" + password
-                    + '&scope=user.read user.write',
-                method: 'POST',
-                headers: {},
-                success: function (result) {
-                    if (result.code !== 0) {
-                        alert('登录失败,原因:' + result.msg)
-                        return;
-                    }
-                    var a = {};
-                    a.v = JSON.stringify(result.data.access_token);
-                    var r = {};
-                    r.v = JSON.stringify(result.data.refresh_token);
-                    // 设置到 localStorage 中
-                    localStorage.setItem('ACCESS_TOKEN', JSON.stringify(a));
-                    localStorage.setItem('REFRESH_TOKEN', JSON.stringify(r));
-
-                    // 设置带有过期时间的cookie
-                    var expiryDate = new Date();
-                    expiryDate.setDate(expiryDate.getDate() + 1); // 7天后过期
-                    document.cookie = 'ACCESS_TOKEN='+ result.data.access_token + '; expires=' + expiryDate.toUTCString();
-                    document.cookie = 'REFRESH_TOKEN='+ result.data.refresh_token + '; expires=' + expiryDate.toUTCString();
-                    // 提示登录成功
-                    alert('登录成功!');
-                    window.location.href = '/index.html';
-                }
-            });
-        }
-    </script>
-</head>
-<body>
-账号:<input id="username" value="admin"/> <br/>
-密码:<input id="password" value="admin123"> <br/>
-<button style="float: right; margin-top: 5px;" onclick="login()">登录</button>
-</body>
-<style>
-    body { /** 页面居中 */
-        border-radius: 20px;
-        height: 350px;
-        position: absolute;
-        left: 50%;
-        top: 50%;
-        transform: translate(-50%, -50%);
-    }
-</style>
-</html>

+ 0 - 64
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/TimeSelector.css

@@ -1,64 +0,0 @@
-.dateTimeRange {
-    position: relative;
-    width: 260px;
-    height: 30px;
-}
-.dateTime{
-  height: 100%;
-  border: solid 1px #cbd1d6;
-  border-radius: 4px;
-  box-sizing: border-box;
-}
-.dateTimeRange>.dateTime>input {
-    padding: 5px 10px;
-    width: 100%;
-    cursor: pointer;
-    outline: none;
-    box-sizing: border-box;
-    height: 28px;
-    border: none;
-    font-size: 16px;
-}
-.dateTimeRange>.dateTime>.icon {
-    position: absolute;
-    right: 10px;
-    top: 5px;
-    width: 16px;
-    height: 16px;
-    display: block;
-    background: url("time-icon.png") no-repeat;
-    background-size: 100% 100%;
-}
-.dateTimeRange>.dateTimeRangeBox {
-    border: 1px solid #DEE0E3;
-    position: absolute;
-    top: 0px;
-    width: 300px;
-    top: 32px;
-    background: #fff;
-    padding: 10px;
-    box-sizing: border-box;
-    display: none;
-    z-index: 99999999;
-}
-.dateTimeRange>.dateTimeRangeBox h4 {
-    font-size: 14px;
-    margin: 8px 0px;
-    margin-left: 10px;
-}
-.dateTimeRange>.dateTimeRangeBox>.box1 h4 {
-    margin-top: 0px;
-}
-.dateTimeRange>.dateTimeRangeBox ul,
-.dateTimeRange>.dateTimeRangeBox ul li {
-    list-style:none;
-    padding: 0px;
-    margin: 0px;
-}
-.dateTimeRange>.dateTimeRangeBox ul li {
-    display: inline-block;
-    width: calc(25% - 20px);
-    margin: 8px 10px;
-    font-size: 14px;
-    cursor: pointer;
-}

+ 0 - 82
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/TimeSelector.js

@@ -1,82 +0,0 @@
-;(function(_g){
-    var dateTime = function(option){
-        if(!option['ele']) return;
-        var containerDom = document.querySelector(option['ele']);
-        var dateTimeInputFnc = generateDateTimeInput(option);
-        var titleData = option['data'] || [
-            {
-                title: '上午',
-                value: ['09:00','09:30','10:00','10:30','11:00','11:30','12:00']
-            },
-            {
-                title: '下午',
-                value: ['13:00','13:30','14:00','14:30','15:00','15:30','16:00','16:30','17:00','17:30']
-            }
-        ];
-        var conDom = generateDateTimeRangeBox(function(val){
-            dateTimeInputDom.querySelector("input").value = val;
-            conDom.style.display = 'none'
-            option['callback'] && option['callback'](val)
-        }, titleData);
-        var dateTimeInputDom = dateTimeInputFnc(conDom);
-        containerDom.appendChild(dateTimeInputDom)
-        containerDom.appendChild(conDom)
-
-    }
-    function generateDateTimeInput(option){
-        var dateTimeDom = document.createElement("div");
-        dateTimeDom.setAttribute("class", "z-comp-dateTime dateTime");
-        if(option['name']){
-            dateTimeDom.setAttribute("name", option['name'])
-        }
-        dateTimeDom.innerHTML = '<input type="text" readonly /><span class="icon"></span>';
-        return function(conDom){
-            addEvent(dateTimeDom, 'click', function(){
-                if(conDom){
-                    conDom.style.display = conDom.style.display == 'block' ? 'none': 'block';
-                }
-            })
-            return dateTimeDom;
-        }
-    }
-    function generateDateTimeRangeBox(callback, titles){
-        var dateTimeRangeBox = document.createElement("div")
-        dateTimeRangeBox.setAttribute("class", "dateTimeRangeBox")
-        var cFragment = document.createDocumentFragment();
-        for(var i = 0; i < 2; i++){
-            var item = titles[i];
-            var dom = document.createElement("div");
-            dom.setAttribute("class", "box"+(i + 1));
-            var titleBox = document.createElement("h4");
-            titleBox.innerHTML = item['title'];
-            var ulFrameDom = document.createDocumentFragment();
-            for(var j = 0; j < item['value'].length; j++){
-                var liDom = document.createElement('li')
-                liDom.innerHTML = item['value'][j]
-                ;(function(val){
-                    addEvent(liDom, 'click', function(){
-                        callback && callback(val)
-                    })
-                })(item['value'][j]);
-                ulFrameDom.appendChild(liDom);
-            }
-            var ulDom = document.createElement("ul");
-            ulDom.appendChild(ulFrameDom);
-            dom.appendChild(titleBox);
-            dom.appendChild(ulDom);
-            cFragment.appendChild(dom);
-        }
-        dateTimeRangeBox.appendChild(cFragment)
-        return dateTimeRangeBox;
-    }
-    function addEvent(dom, evt, callback){
-        if(dom.addEventListener){
-            dom.addEventListener(evt, callback, false);
-        }else if(dom.attachEvent){
-            dom.attachEvent('on'+evt, callback);
-        }else{
-            dom['on'+evt] = callback;
-        }
-    }
-    _g.timeSelector = dateTime;
-})(window);

+ 0 - 77
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/demo.html

@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- 
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <meta name="format-detection" content="telephone=yes" />
-    <!-- 视图窗口,移动端特属的标签。 -->
-    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
-    <!-- 是否启动webapp功能,会删除默认的苹果工具栏和菜单栏。 -->
-    <meta name="apple-mobile-web-app-capable" content="yes" />
-    <!-- 这个主要是根据实际的页面设计的主体色为搭配来进行设置。 -->
-    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
-    <!-- 忽略页面中的数字识别为电话号码,email识别 -->
-    <meta name="format-detection" content="telephone=no, email=no" />
-    <!-- 启用360浏览器的极速模式(webkit) -->
-    <meta name="renderer" content="webkit">
-    <!-- 避免IE使用兼容模式 -->
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <!-- 针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓 -->
-    <meta name="HandheldFriendly" content="true">
-    <!-- 微软的老式浏览器 -->
-    <meta name="MobileOptimized" content="320">
-    <!-- uc强制竖屏 -->
-    <meta name="screen-orientation" content="portrait">
-    <!-- QQ强制竖屏 -->
-    <meta name="x5-orientation" content="portrait">
-    <!-- UC强制全屏 -->
-    <meta name="full-screen" content="yes">
-    <!-- QQ强制全屏 -->
-    <meta name="x5-fullscreen" content="true">
-    <!-- UC应用模式 -->
-    <meta name="browsermode" content="application">
-    <!-- QQ应用模式 -->
-    <meta name="x5-page-mode" content="app">
-    <!-- windows phone 点击无高光 -->
-    <meta name="msapplication-tap-highlight" content="no">
-    <title>demo</title>
-	<link rel="stylesheet" type="text/css" href="TimeSelector.css" />
-</head>
- 
-<body>
-<div>
-	<div class="dateTimeRange dateTimeRange1">
-	</div>
-	<div class="dateTimeRange dateTimeRange2">
-	</div>
-</div>
-</body>
-<script language="javascript" src="TimeSelector.js"></script>
-<script language="javascript">
-;(function(){
-	timeSelector({
-		ele: ".dateTimeRange1", 
-		data: [
-			{
-				title: '上午',
-				value: ['09:30','10:00','10:30','11:00','11:30']
-			},
-			{
-				title: '下午',
-				value: ['14:00','14:30','15:00']
-			}
-		],
-		callback: function(val){
-			console.log("111111111111", val);
-		}
-	})
-	timeSelector({
-		ele: ".dateTimeRange2", 
-		callback: function(val){
-			console.log("2222222222", val);
-		}
-	})
-})();
-</script>
-</html>

BIN
zjugis-module-business/zjugis-module-business-biz/src/main/resources/templates/static/timeSelector/time-icon.png


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff