From 0b1a169901589d2b584e656b8538dd7514561b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=81=A5?= Date: Wed, 1 Sep 2021 16:55:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=E3=80=81?= =?UTF-8?q?=E4=BC=9A=E5=91=98=E5=BC=80=E9=80=9A=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 3 +- app.json | 84 +- app.wxss | 8 + class/main.wxss | 65 +- components/cuicustom/cu-custom.js | 9 +- components/cuicustom/cu-custom.wxml | 5 +- components/cuicustom/cu-custom.wxss | 10 + images/code-icon.png | Bin 2186 -> 885 bytes images/contact-icon.png | Bin 2509 -> 1124 bytes images/create-btn.png | Bin 1726 -> 625 bytes images/htm.png | Bin 0 -> 683 bytes images/ic_address_icon.png | Bin 1925 -> 1352 bytes images/ic_arrow_cir.png | Bin 1359 -> 561 bytes images/ic_arrow_down.png | Bin 1036 -> 478 bytes images/ic_arrow_right.png | Bin 223 -> 223 bytes images/ic_arrow_up.png | Bin 1032 -> 471 bytes images/ic_audio_play.png | Bin 2475 -> 524 bytes images/ic_audio_playing.png | Bin 1213 -> 301 bytes images/ic_audio_rewind.png | Bin 2894 -> 587 bytes images/ic_audio_speed.png | Bin 3065 -> 598 bytes images/ic_auth.png | Bin 2038 -> 1125 bytes images/ic_call_phone_icon.png | Bin 1797 -> 1286 bytes images/ic_card_normal.png | Bin 1807 -> 885 bytes images/ic_card_sel.png | Bin 2624 -> 2180 bytes images/ic_cash.png | Bin 0 -> 791 bytes images/ic_code_icon.png | Bin 2184 -> 1264 bytes images/ic_collect_icon.png | Bin 1496 -> 810 bytes images/ic_column_icon.png | Bin 1151 -> 747 bytes images/ic_comment_icon.png | Bin 875 -> 524 bytes images/ic_corner_mark_bg.png | Bin 0 -> 533 bytes images/ic_email_icon.png | Bin 1933 -> 1286 bytes images/ic_empty_data.png | Bin 15996 -> 13878 bytes images/ic_empty_desc.png | Bin 28425 -> 22626 bytes images/ic_empty_map.png | Bin 31341 -> 26447 bytes images/ic_empty_text.png | Bin 27772 -> 24220 bytes images/ic_empty_voice.png | Bin 24459 -> 20472 bytes images/ic_favour.png | Bin 1134 -> 699 bytes images/ic_goods_catalog.png | Bin 1043 -> 554 bytes images/ic_goods_list_icon.png | Bin 1082 -> 587 bytes images/ic_hot_number_bg.png | Bin 0 -> 647 bytes images/ic_information_icon.png | Bin 0 -> 603 bytes images/ic_member_list_icon.png | Bin 985 -> 538 bytes images/ic_member_qrcode.png | Bin 1054 -> 575 bytes images/ic_mine_normal.png | Bin 2785 -> 1417 bytes images/ic_mine_sel.png | Bin 3886 -> 2726 bytes images/ic_mine_title_bg.png | Bin 5104 -> 1645 bytes images/ic_order_all.png | Bin 0 -> 498 bytes images/ic_order_close.png | Bin 2112 -> 842 bytes images/ic_order_finish.png | Bin 2343 -> 862 bytes images/ic_order_pay.png | Bin 2494 -> 897 bytes images/ic_order_wait_pay.png | Bin 1684 -> 874 bytes images/ic_pause_icon.png | Bin 2199 -> 826 bytes images/ic_pay_order_icon.png | Bin 0 -> 909 bytes images/ic_phone_icon.png | Bin 1969 -> 1092 bytes images/ic_play_icon.png | Bin 2215 -> 839 bytes images/ic_position_icon.png | Bin 1056 -> 620 bytes images/ic_poster_icon.png | Bin 0 -> 692 bytes images/ic_purse.png | Bin 0 -> 681 bytes images/ic_recycle_icon.png | Bin 3977 -> 1270 bytes images/ic_scan_icon.png | Bin 0 -> 829 bytes images/ic_serve_normal.png | Bin 2660 -> 1390 bytes images/ic_serve_sel.png | Bin 3783 -> 2694 bytes images/ic_setting.png | Bin 4207 -> 1493 bytes images/ic_share_cir_icon.png | Bin 0 -> 1875 bytes images/ic_share_icon.png | Bin 2204 -> 1315 bytes images/ic_share_img.png | Bin 0 -> 1174 bytes images/ic_share_moment.png | Bin 0 -> 1722 bytes images/ic_squareness_del.png | Bin 1023 -> 499 bytes images/ic_staff_list_icon.png | Bin 973 -> 547 bytes images/ic_staff_qrcode.png | Bin 1035 -> 553 bytes images/ic_success.png | Bin 46754 -> 13962 bytes images/ic_temp.png | Bin 41767 -> 12033 bytes images/ic_unauth.png | Bin 2199 -> 1231 bytes images/ic_unfavour.png | Bin 1271 -> 676 bytes images/ic_user_default.png | Bin 3902 -> 1222 bytes images/ic_video_default.png | Bin 2437 -> 999 bytes images/ic_video_play.png | Bin 808 -> 470 bytes images/ic_vip_icon.png | Bin 0 -> 1760 bytes images/ic_wait_consignment.png | Bin 0 -> 785 bytes images/ic_wait_pay.png | Bin 0 -> 945 bytes images/ic_wait_receipt.png | Bin 0 -> 805 bytes images/ic_yellow_bg.png | Bin 0 -> 1462 bytes images/jpg.png | Bin 0 -> 1322 bytes images/lib.png | Bin 0 -> 925 bytes images/map.png | Bin 0 -> 1327 bytes images/mid-btn-1.png | Bin 2805 -> 0 bytes images/mid-btn-2.png | Bin 3888 -> 0 bytes images/mid-btn-3.png | Bin 3171 -> 0 bytes images/mid-btn-4.png | Bin 3471 -> 0 bytes images/mp3.png | Bin 0 -> 1243 bytes images/mp4.png | Bin 0 -> 1505 bytes images/txt.png | Bin 0 -> 913 bytes packagecard/cardDetail/cardDetail.js | 65 +- packagecard/cardDetail/cardDetail.wxml | 3 +- packagecard/cardDetail/cardDetail.wxss | 1 - packagecard/cardList/cardList.js | 205 +- packagecard/cardList/cardList.json | 3 +- packagecard/cardList/cardList.wxml | 59 +- packagecard/cardList/cardList.wxss | 102 +- packagecard/lucre/historylucre.js | 66 + packagecard/lucre/historylucre.json | 3 + packagecard/lucre/historylucre.wxml | 2 + packagecard/lucre/historylucre.wxss | 1 + packagecard/marketing/marketinginfo.js | 59 + packagecard/marketing/marketinginfo.json | 4 + packagecard/marketing/marketinginfo.wxml | 112 + packagecard/marketing/marketinginfo.wxss | 155 + packagecard/marketing/marketingposter.js | 470 + packagecard/marketing/marketingposter.json | 3 + packagecard/marketing/marketingposter.wxml | 103 + packagecard/marketing/marketingposter.wxss | 117 + packagecard/marketing/marketingpublish.js | 258 + packagecard/marketing/marketingpublish.json | 3 + packagecard/marketing/marketingpublish.wxml | 78 + packagecard/marketing/marketingpublish.wxss | 210 + packagecard/marketing/posteredit.js | 318 + packagecard/marketing/posteredit.json | 3 + packagecard/marketing/posteredit.wxml | 82 + packagecard/marketing/posteredit.wxss | 220 + packagecard/moments/edit/momentedit.js | 122 +- packagecard/moments/edit/momentedit.wxml | 18 +- packagecard/moments/list/momentslist.js | 26 +- packagecard/moments/list/momentslist.wxml | 9 +- packagecard/moments/list/momentsshowlist.js | 51 +- packagecard/moments/list/momentsshowlist.wxml | 7 +- .../moments/momentsdetail/momentsdetail.js | 58 +- packagecard/moments/publish/momentpublish.js | 1147 +- .../moments/publish/momentpublish.wxml | 627 +- .../moments/publish/momentpublish.wxss | 169 + .../moments/publish/momentpublishline.js | 105 +- .../moments/publish/momentpublishline.wxml | 21 +- packagecard/moments/showlist/showlist.js | 41 +- packagecard/moments/showlist/showlist.wxml | 19 +- packagecard/paypage/paypage.js | 298 + packagecard/paypage/paypage.json | 3 + packagecard/paypage/paypage.wxml | 73 + packagecard/paypage/paypage.wxss | 195 + packagecard/paypage/paystate.js | 66 + packagecard/paypage/paystate.json | 3 + packagecard/paypage/paystate.wxml | 6 + packagecard/paypage/paystate.wxss | 1 + packagecard/purse/recordlist.js | 89 + packagecard/purse/recordlist.json | 4 + packagecard/purse/recordlist.wxml | 37 + packagecard/purse/recordlist.wxss | 121 + packagecard/purse/takecash.js | 110 + packagecard/purse/takecash.json | 3 + packagecard/purse/takecash.wxml | 27 + packagecard/purse/takecash.wxss | 53 + packagecard/sharePage/cardcode.js | 67 + packagecard/sharePage/cardcode.json | 3 + packagecard/sharePage/cardcode.wxml | 16 + packagecard/sharePage/cardcode.wxss | 38 + packagecard/shop/index/shop.js | 6 - packagecard/shop/shopingcart/cart.js | 7 - pages/index/index.js | 252 +- pages/index/index.wxml | 131 +- pages/index/index.wxss | 40 +- pages/mine/income/incomelist.js | 85 + pages/mine/income/incomelist.json | 5 + pages/mine/income/incomelist.wxml | 21 + pages/mine/income/incomelist.wxss | 121 + pages/mine/index/index.js | 226 +- pages/mine/index/index.wxml | 153 +- pages/mine/index/index.wxss | 248 +- pages/mine/myCard/myCard.js | 55 +- pages/mine/myCard/myCard.wxml | 11 +- pages/mine/myCard/myCard.wxss | 5 +- pages/mine/myCardDetail/myCardDetail.js | 20 +- pages/mine/myCardDetail/myCardDetail.wxml | 4 +- pages/mine/myCardDetail/myCardDetail.wxss | 1 - pages/mine/order/orderlist.js | 65 +- pages/mine/order/orderlist.wxml | 15 +- pages/mine/order/ordersuccess.js | 54 +- pages/mine/order/ordersuccess.wxml | 8 +- pages/mine/otherCard/othercarddetail.js | 92 +- pages/mine/otherCard/othercarddetail.wxml | 28 +- pages/mine/otherCard/othercarddetail.wxss | 2 - pages/mine/setting/columnsetting.js | 236 +- pages/mine/setting/columnsetting.wxml | 110 +- pages/mine/setting/columnsetting.wxss | 25 + pages/mine/vip/vipcenter.js | 146 + pages/mine/vip/vipcenter.json | 5 + pages/mine/vip/vipcenter.wxml | 53 + pages/mine/vip/vipcenter.wxss | 117 + pages/serve/index/index.js | 20 +- pages/serve/index/index.wxml | 10 +- project.config.json | 2 +- utils/api.js | 50 +- utils/rsa.js | 14462 ++++++++++++++++ utils/util.js | 224 +- vant/dist/dropdown-menu/index.wxml | 16 +- vant/dist/dropdown-menu/index.wxss | 78 +- 193 files changed, 22153 insertions(+), 1578 deletions(-) create mode 100644 images/htm.png create mode 100644 images/ic_cash.png create mode 100644 images/ic_corner_mark_bg.png create mode 100644 images/ic_hot_number_bg.png create mode 100644 images/ic_information_icon.png create mode 100644 images/ic_order_all.png create mode 100644 images/ic_pay_order_icon.png create mode 100644 images/ic_poster_icon.png create mode 100644 images/ic_purse.png create mode 100644 images/ic_scan_icon.png create mode 100644 images/ic_share_cir_icon.png create mode 100644 images/ic_share_img.png create mode 100644 images/ic_share_moment.png create mode 100644 images/ic_vip_icon.png create mode 100644 images/ic_wait_consignment.png create mode 100644 images/ic_wait_pay.png create mode 100644 images/ic_wait_receipt.png create mode 100644 images/ic_yellow_bg.png create mode 100644 images/jpg.png create mode 100644 images/lib.png create mode 100644 images/map.png delete mode 100644 images/mid-btn-1.png delete mode 100644 images/mid-btn-2.png delete mode 100644 images/mid-btn-3.png delete mode 100644 images/mid-btn-4.png create mode 100644 images/mp3.png create mode 100644 images/mp4.png create mode 100644 images/txt.png create mode 100644 packagecard/lucre/historylucre.js create mode 100644 packagecard/lucre/historylucre.json create mode 100644 packagecard/lucre/historylucre.wxml create mode 100644 packagecard/lucre/historylucre.wxss create mode 100644 packagecard/marketing/marketinginfo.js create mode 100644 packagecard/marketing/marketinginfo.json create mode 100644 packagecard/marketing/marketinginfo.wxml create mode 100644 packagecard/marketing/marketinginfo.wxss create mode 100644 packagecard/marketing/marketingposter.js create mode 100644 packagecard/marketing/marketingposter.json create mode 100644 packagecard/marketing/marketingposter.wxml create mode 100644 packagecard/marketing/marketingposter.wxss create mode 100644 packagecard/marketing/marketingpublish.js create mode 100644 packagecard/marketing/marketingpublish.json create mode 100644 packagecard/marketing/marketingpublish.wxml create mode 100644 packagecard/marketing/marketingpublish.wxss create mode 100644 packagecard/marketing/posteredit.js create mode 100644 packagecard/marketing/posteredit.json create mode 100644 packagecard/marketing/posteredit.wxml create mode 100644 packagecard/marketing/posteredit.wxss create mode 100644 packagecard/paypage/paypage.js create mode 100644 packagecard/paypage/paypage.json create mode 100644 packagecard/paypage/paypage.wxml create mode 100644 packagecard/paypage/paypage.wxss create mode 100644 packagecard/paypage/paystate.js create mode 100644 packagecard/paypage/paystate.json create mode 100644 packagecard/paypage/paystate.wxml create mode 100644 packagecard/paypage/paystate.wxss create mode 100644 packagecard/purse/recordlist.js create mode 100644 packagecard/purse/recordlist.json create mode 100644 packagecard/purse/recordlist.wxml create mode 100644 packagecard/purse/recordlist.wxss create mode 100644 packagecard/purse/takecash.js create mode 100644 packagecard/purse/takecash.json create mode 100644 packagecard/purse/takecash.wxml create mode 100644 packagecard/purse/takecash.wxss create mode 100644 packagecard/sharePage/cardcode.js create mode 100644 packagecard/sharePage/cardcode.json create mode 100644 packagecard/sharePage/cardcode.wxml create mode 100644 packagecard/sharePage/cardcode.wxss create mode 100644 pages/mine/income/incomelist.js create mode 100644 pages/mine/income/incomelist.json create mode 100644 pages/mine/income/incomelist.wxml create mode 100644 pages/mine/income/incomelist.wxss create mode 100644 pages/mine/vip/vipcenter.js create mode 100644 pages/mine/vip/vipcenter.json create mode 100644 pages/mine/vip/vipcenter.wxml create mode 100644 pages/mine/vip/vipcenter.wxss create mode 100755 utils/rsa.js diff --git a/app.js b/app.js index e0514de..ecb9817 100644 --- a/app.js +++ b/app.js @@ -28,6 +28,7 @@ App({ globalData: { userInfo: {}, token: '', - userId: '' + userId: '', + showUserId: '', //当前浏览的人的ID }, }) \ No newline at end of file diff --git a/app.json b/app.json index 8b95c1f..abbb1b1 100644 --- a/app.json +++ b/app.json @@ -35,45 +35,60 @@ "pages/mine/product/recycle/productrecycle", "pages/mine/product/coupon/couponlist", "pages/mine/product/coupon/editcoupon", - "pages/mine/product/coupon/choosegoods" + "pages/mine/product/coupon/choosegoods", + "pages/mine/vip/vipcenter", + "pages/mine/income/incomelist" + ], + "subPackages": [ + { + "root": "packagecard", + "pages": [ + "cardList/cardList", + "cardDetail/cardDetail", + "moments/publish/momentpublish", + "moments/edit/momentedit", + "moments/list/momentslist", + "moments/publish/momentpublishline", + "sharePage/sharePage", + "moments/list/momentsshowlist", + "moments/momentsdetail/momentsdetail", + "moments/showlist/showlist", + "shop/catalog/bannerlist/bannerlist", + "shop/catalog/column/column", + "shop/catalog/list/list", + "shop/shopingcart/cart", + "shop/product/product", + "shop/bespeak/bespeak", + "shop/product/goodsdetail", + "shop/product/affirmorder", + "shop/catalog/bannerlist/goodscataloglist", + "common/corpperimg/cropperimg", + "sharePage/cardcode", + "paypage/paypage", + "purse/takecash", + "marketing/marketinginfo", + "marketing/marketingposter", + "marketing/marketingpublish", + "marketing/posteredit", + "paypage/paystate", + "lucre/historylucre", + "purse/recordlist" + ] + } ], - "subPackages": [{ - "root": "packagecard", - "pages": [ - "cardList/cardList", - "cardDetail/cardDetail", - "moments/publish/momentpublish", - "moments/edit/momentedit", - "moments/list/momentslist", - "moments/publish/momentpublishline", - "sharePage/sharePage", - "moments/list/momentsshowlist", - "moments/momentsdetail/momentsdetail", - "moments/showlist/showlist", - "shop/catalog/bannerlist/bannerlist", - "shop/catalog/column/column", - "shop/catalog/list/list", - "shop/shopingcart/cart", - "shop/product/product", - "shop/bespeak/bespeak", - "shop/product/goodsdetail", - "shop/product/affirmorder", - "shop/catalog/bannerlist/goodscataloglist", - "common/corpperimg/cropperimg" - ] - }], "window": { - "backgroundTextStyle": "dark", - "navigationBarBackgroundColor": "#fff", - "navigationBarTitleText": "名片", - "navigationBarTextStyle": "black", + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#E6B980", + "navigationBarTitleText": "服务", + "navigationBarTextStyle": "white", "navigationStyle": "custom" }, "tabBar": { "color": "#000000", "selectedColor": "#000000", "borderStyle": "black", - "list": [{ + "list": [ + { "text": "首页", "pagePath": "pages/index/index", "iconPath": "images/ic_card_normal.png", @@ -112,7 +127,12 @@ "van-switch": "/vant/dist/switch/index", "van-tab": "/vant/dist/tab/index", "van-tabs": "/vant/dist/tabs/index", - "van-picker": "/vant/dist/picker/index" + "van-picker": "/vant/dist/picker/index", + "van-popup": "/vant/dist/popup/index", + "van-dropdown-menu": "/vant/dist/dropdown-menu/index", + "van-dropdown-item": "/vant/dist/dropdown-item/index", + "van-collapse": "/vant/dist/collapse/index", + "van-collapse-item": "/vant/dist/collapse-item/index" }, "plugins": { "chooseLocation": { diff --git a/app.wxss b/app.wxss index 184905c..b43f71a 100644 --- a/app.wxss +++ b/app.wxss @@ -25,6 +25,14 @@ scroll-view { border-bottom-color: #dfdfdf; } +.line-so-gray { + border-bottom-style: solid; + border-bottom-width: 2rpx; + border-bottom-color: #dfdfdf; + width: 100%; + margin: 15rpx; +} + .nav-list { display: flex; flex-wrap: wrap; diff --git a/class/main.wxss b/class/main.wxss index 789f1c6..dd8cb4c 100644 --- a/class/main.wxss +++ b/class/main.wxss @@ -27,7 +27,7 @@ page { --grey: #8799a3; --black: #333333; --darkGray: #666666; - --gray: #aaaaaa; + --gray: #999999; --ghostWhite: #f1f1f1; --white: #ffffff; --depBlack: #000000; @@ -3589,6 +3589,15 @@ scroll-view.cu-steps .cu-item { color: var(--white); } +.bg-yellowlight { + background-color: var(--yellowLight); + color: var(--white); +} + +.line-yellowlight2 { + color: var(--yellowLight); +} + .bg-orange { background-color: var(--orange); color: var(--white); @@ -3613,6 +3622,10 @@ scroll-view.cu-steps .cu-item { color: var(--white); } +.bg-yellow-light-3 { + color: var(--yellowLight); +} + .bg-olive { background-color: var(--olive); color: var(--white); @@ -4149,6 +4162,56 @@ l .text-depblack { } /* 自定义 */ +.tab { + position: fixed; + display: flex; + left: 0; + right: 0; + background: #fff; + flex-direction: column; + z-index: 100; + width: 100%; +} + +.tab-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; +} + +.options-box { + display: flex; + flex-direction: column; + justify-content: flex-start; + width: 100%; + flex-wrap: wrap; + padding: 15rpx; + box-shadow: 0rpx 2rpx 2rpx rgba(4, 0, 0, .2); +} + +.options-box .item { + font-size: 28rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + min-width: 20%; + border-radius: 20rpx; + padding: 7.5rpx 0rpx 7.5rpx 0rpx; +} + +.options-box .item:nth-child(1) { + padding: 0rpx 0rpx 7.5rpx 0rpx; +} + +.loading-box { + width: 100%; + display: flex; + justify-content: center; +} + .play-box { display: flex; margin-left: 20rpx; diff --git a/components/cuicustom/cu-custom.js b/components/cuicustom/cu-custom.js index b06c6d8..ad2e20a 100644 --- a/components/cuicustom/cu-custom.js +++ b/components/cuicustom/cu-custom.js @@ -13,7 +13,11 @@ Component({ properties: { bgColor: { type: String, - default: 'title-bar-bg' + default: '1' + }, + isWhite: { + type: [Boolean, String], + default: false }, isCustom: { type: [Boolean, String], @@ -47,7 +51,7 @@ Component({ StatusBar: app.globalData.StatusBar, CustomBar: app.globalData.CustomBar, Custom: app.globalData.Custom, - userIcon: wx.getStorageSync('userIcon') || app.globalData.userIcon + userIcon: wx.getStorageSync('userIcon') || '/images/ic_user_default.png' }, /** * 组件的方法列表 @@ -82,7 +86,6 @@ Component({ }, // 点击标题 showIcre() { - console.log('点击了') this.triggerEvent('show', {}, {}) } } diff --git a/components/cuicustom/cu-custom.wxml b/components/cuicustom/cu-custom.wxml index b7b4cc1..27e0170 100644 --- a/components/cuicustom/cu-custom.wxml +++ b/components/cuicustom/cu-custom.wxml @@ -1,6 +1,7 @@ - + diff --git a/components/cuicustom/cu-custom.wxss b/components/cuicustom/cu-custom.wxss index 0f566a1..2bea59b 100644 --- a/components/cuicustom/cu-custom.wxss +++ b/components/cuicustom/cu-custom.wxss @@ -25,4 +25,14 @@ /* background-color: #ffffff; */ color: #fff; /* color: #000000; */ +} + +.title-bar-bg-white { + background-color: #ffffff; + color: #000000; +} + +.title-bar-bg-dark { + background-color: #000000; + color: #ffffff; } \ No newline at end of file diff --git a/images/code-icon.png b/images/code-icon.png index 677af43fa6659601ef18ec5a7d0ba66d5efe3a4e..151b96ce20e167cdd049207d3baf36d60237ee47 100644 GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=3?wxlRx|^tMFBn`u0Z<#;07#uWlca=nwA9l z1v4!Fqd4L1OJ>2V2OhAge5=>lwW;@6br;v|Gad$uW@j2niEJ%-@1V(dG9@=I+~z`? z{~>F$?RK+nNiZ-l`FgrIhIkx*JMHD9MFt|R`p04q@(N}+9IVY)m&donk{Ugc4FGygEz53*RVS+UmC+}-I6fyb9p75*H8o8D`*@~7YwU+C}Kj~hy zPHET0)#Zvp(p!2rEWi4!YSn}(zjKpYdH>wu;JP3)?Qmb1`R65HV$|-iRYhKpIQ*26 zpS|R;g?807nXf(8l2*m1qZ0Ydvpg+Ty{&od9-reezIXFp$SE=9zF0AbS$8s-1h+l^ zMNs3-rwF^U_`clr4tq45EMixmakMRZenN4}=9U}oUplMw&+U#%I`UJLg_GY{ znlt%nAwPe=#hifX)8Cg!&Q52$W4^4V=7`<5l+ekoPGXbAPj}zk;Wjl(*yW^&_G8&~ zrzDOwCQn&YevNzm!Bwsg;W_Lk)JDKoALK5ks2b@iT|2kZ9xCudFH zUhK7PPqgjHtPIa)6XTuWzbyY?(M+cwWZbX~}EX9-eqw^pg8BgFV_;Ii(iH z3jK9(+V*9Q%iZ^DJUgd+e=c*5ePaKAHShZdc4x23m##YTp5G{Ys?Wy`r!Pmc1XP<- z99(!e^&I*wyvcuYPu2uYvuk_0gLsqHOKjPtch7;%|M#bh$0Y0dBW0HKoOYGl-yTr6 zZ_-x%uO|w$|8?xpKk-4m{gi^@DsFDeLlNO|_qlwsYPUGt-qzLX_(p{}@)PIB?v-Mb z{{9fs5K%g{VBN)cSN4ZK?H20%%d5WR@|P+-#=Vu9?K8e=xtOS}tqEQCC@yx#I=jD{ i4kWY^lfl!~&t;ucLK6T&Ea`v% literal 2186 zcmaJ@X;f3^77c@dK;lqja4Cc!1_Uxef(fBC6N5^m7-nh+$rUb`f#d=SC?GQ;D5Z}< z%GfFhWl%(^whTf`0S83X`T#*-J!*>}C_Yf2FR^0ZkH@>~-un$}?|sg9&i?Ubd9mH# zx;u4YFc{p!o$0L{393&=OZhi-$-Jx_Odys&bVPg%iseZG7)>A!1&|&>UKrpF@C1se zUVsXNX`n!kKjiOuh{6{OF+3FpBNs}PY#5B{BA4*^kpP4Y1;Rj)GivT;I|>O3oKb#6 zPn@TO0fd9@aZ=z&9GkR5?W{AOs*DQZ76$l2PQ&sQ0=Q${7_7K@tiU8yg#oiM7XwrD0e+nM_t`5D0ckgq=(wf_QQ}k<4OU zfeFa?QcwbcVi8iM$O{!mL(V8=rhgqlDETNWl6@$XvS3&_PlCl`aH=D%13f+eKU66E zh?YU#z~A})PhlBHApx-7fJ_`M#Ny-YRrCrMLt&M2h<1_T8Z9M08&XpeWGv-Y#_cov;bbRaNT zOfueqgrkvZj_X{em>(?!M9?}{@HdyZAy;Jup+p&(2}r>hK;SAB3z6@SOaV8}g|MOC z2d-e_T2|5o))hqid>Bk~&4Wqf$p1NW zJ~4BLk3rA$o#E)9=%Ak-S`iH^ z%e>!^*^aawMYfo)=n?zu4uCGcF{6-POn>yrH&5AP56bc;pWPi%*mt$1Jw0`gAe$?W zpHsxn{y6>hlQYwb+;ed+t>ii*`n8?Wx(5gq+EX1oF2@e_FBTesF;g%$H+0e=hb9bp((9ale&b>Hfl%v?xQqoyI zjKiasS{5$A0%_R8;IGhGb;nB!FUFUX!fIy8J~3)5prWOw!SE2wr|Jj2+ZEjKx+@D? zi#Dgjj0AQAjqQkFL*Z1XLD%s^oBYyDotq1Wn-(V*ijJM?intwgX+FQI;**i>&vrY` z*G8PEr-hXcKH1gWc$wL(QOtq<0<>zjBRY_izy5L}J;A(>WPf#|uRx!QZ#u=kv-DukUBxs6rEXqAhR2n5`pRtWk+a%s8p~j{<>&o8j z4vneFAo}6N&VO}o8Ml$tcC+Hq{_3;p#BJ{)HMBbu?$*BcvtsN+$E#}a_@K{c$sq`| zWjfP8De+a-Dx6#B)?Kh)ZN{_7a_#nW)9PJIM&yC>gXW6~skwi28a^r&)U<2QXf`HA z__$@=fQJ|rVc{l-Ky@vjCNF*Y?51q<9QyTQZM3Xwnzg!fab~irAv@T1Uo~+-zX_^5)E%Q+XL6BC{ zs&1-r#}d=BH<#!;e^Nuf^@PC$ES+4%+BR%J4?Q2LR?y#`d8nAwGvc`OAuKHQx3#?u zPT$t$3EtIzj)@9>KE)jz8;oQ?-0AvN*O#tY=Hf??p)Xw0H&pmW^Zql|LpMM2;h59z zXOqoJ*Te-EelcxIN$Ff1FRaKvi4@ppe77gaiUW7|)l_W1hcM(G{CT)**DG`;uG0T` zf`sus+*&KR#PDiDVLt3h~30yFonnh^sV!!!FXOt0EY;@A5ddPdm5VcSr#J^>5vB&yxaQFUrePc84!{(AN-1`<|0xsI; wkaLaaCK>1hy7{45ke#K0nb1h1O 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 L>?y>n_yF-=BKIw5 diff --git a/images/create-btn.png b/images/create-btn.png index b565a7ea7322be9e9c83b8f4ad20d8bc71c76bd9..6731b0d2f6b7ab577643c4efb2818d9d4598378d 100644 GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0vp^c0jDh!3-qbPe#23QoR8_A+A9B|DXZP-NvmTSC$0% z1v9*RtMu*X-aS(?<#L|s{eHDo^zXfk>sU@5+F8bb^UC@KlbXCt)VWsXCxqDdCHi}; z@Z@J;U`+LNaSZV|e)ZbTyk-M|)`!e#-r3&-HodQozW4uQl<9&a#x9#2SIv5F^kO>4 zw#0@F6T;LtaWr07XSLZ`C6u4@kzFOvYX7{0?$%jvUm3E>(3U{#iwcE^C zC^+rdPd0wOeTn;;l;%o5En>TBW_)t_f<0B)zU)4J#qJHi_QXmy&AzaQW%K^Kf0I~_ zEw5x!+dKDIrMKO+lTY7I&3F@>9RB#3>yrOZp7LC|mhy1hf~H?yPmFBh?S8%v-B+LN zwJ&qO$G&y**6%)Fyz}tl;*iXI>3?6!zR!1deA}MOUe>a^B+@jdy-0iB`~?!Sy?k%D zjwEJGI4yF;bhY`~;}$0OAKW|`(eT+ruJr-iEcR`GLz0&7eJ8v{!0+#-Ds{g}PrSEy z=-yS=XWdb}Y=6P((gjiC@49Oj{5N}VDfLz6%!vqziQ-PW#Zs^QJWd2uiS))uM!6^} rIIlDkIxcR)^!gyX)bt3+&i#xJ4LtMaotU!>7*!0Ou6{1-oD!M&O(O#n5Nv~x z{2{3*Sr{Nf^dP{YvM6dgg8^{4R0f;F;zYqkQU!y}79y>=6*k?0W!m?&AGojDiLjCzw?&CI!oXXMiGWN7Bb z{;SbbTey47(`nn{i)rJ7Fz$9eZtLf9NiF!-!jy^wl!o5tKiuCb3!mRQQjM0*=>+^0 zTOS5wZhf?3y>GCnfW5j?Yz$w2(QxF3?*qGzW5Kx&&c379uZYFu!JL|0cgYT`JGYa5 zvmR+5jv1`6WA`7*Xpe^b@3AWUx}f1FgX5RRDlc{Srl)sDTduK9t4r%haO%p;YOQ1q z1@LogKPx$iMOh@fnleT^;7*Vy9rfIN;CrU2h&8&G^Q6k#=DgQ@nB{RiKiVXJ?`(0+ zg0kDco_#t?8*D=AwL1HYf0sh!sM*6=RJvcz#7#Lj|62Oiav)z5@*r%Fo_MqQB(LGwi-RsX=}KVqOxH*e zp^;SMtK-va_}*}1{EvMJU$oR_W&RnGp?tER3e)(TwYS{pPV|+s9SFMjM(gFJHyeVA z&Lx68IRA}7YFrK$y{8fF_zPdVpRm~(>uK+&2!EZIRp^|?;kkPq`rYbe$T&q7GCsuI z{#Cr&fMNi-kh3svUqivI*0$kg)}H%&>^t5$Co6XKMb5+8cZ zU)W4EG#0x(sx|^vnO@eV9SaO(@z~Q(?=eZN^7c@h;?^Y{1-l2yc zbff&lPv?FyRW{{jmBiRy>1B8Igi9Bdp6rXf+E7HSY&jlnV>h<#e!mB1U=iRu!cbS_XYvqz>ZO8JC=cQ2OgH?q=9yQ*DmV>CZ)7;wZM<`lv zt4fTh;@{gIvB=-W#o;j76iZ4;cRYF-iM5Nks(lZTJh@vL!_7zsa2I$P#AYP zp4FYw=9X|P(>P-fP(J6Jz`Ata^|Ey1mQz^guKw!KLB`;ILz^(^OKqL0XHAKo0qlt3 p!B+dQuHvqr%g3J09YQRKgijRfH{E_pePI5hNP|Mfrvl@%{{ew!rQQGl diff --git a/images/htm.png b/images/htm.png new file mode 100644 index 0000000000000000000000000000000000000000..d9777457828a6ef988e6cf2d177bb891b2e2602e GIT binary patch literal 683 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 Hu0mjfLy@p3 diff --git a/images/ic_arrow_cir.png b/images/ic_arrow_cir.png index f4b6c0cc1e4c1191fb2ba6ec7835c876cb7946bc..dc97612f862cee89fc019429e5b95688c6b6b76f 100644 GIT binary patch delta 547 zcmX@lwUK3lWIZzj14F_c&aFVID8MJg6-a-coAhm7@|U^EK=RxCm12ih)MWOZv2`@Z0

SW}7NLkR-|qo=2fV~EG`t5a_lH5>4_riyKD6JW|@TKaO*@BjO6c%Hhl zVw-_YX_4I0opI}QX3k?2JrWtE<~cL1aKQ=pz{Wt)Ek_dB>$~qZsi>e7=`3 z!ylUA`Qv{Beg&`W?YcePQd2zY&`<-XcXiLYYmWOh1Ak9z=u9DmPgYv4uATq#=U0M6 zLJd@u*vp_U-OPya3wzvYJL(5liYJhw_rX}D8y|)9SEtsT%4-`a_vIfWkAE@|C+6i@ zN1Ygt;enoXlfUXr{Yy2h z#9}Yurlo7ZR~wR|BSrKvfVrkd2qdziPz*HSN`KJ}qFtt>adRMuuPnt*$1ONd zB87?lBTkzLzh`su!H^2%e`fGQaU?)f$1MYu5#W1@S#rfW0;5`G|iKENI9EQK%YVK zh?&IGw~V?f{{p~Ynk0W68?lU*i_WXW*lkW4eVA+HtMoam*u%F;bO7wPh1?i8iCvYu z8%Ui?Lae(ARix-(qW&Zr*9(A+c24dOG=DINzG~X#7JK(J51*C?W`ztqC5K+bua(5oYLyNHSk#Pov#|sWF}&5bD4q=Bifk>84g-t*W%ZUl z#Iz~v6iQ(U#5Q+tv5B{BA-6|;y?;T&i&p9PETtYG&<9MK3WER;9#kJVY=GV z$H3aDHNq#YbSfX!k&fL5!V=`8-Lu^D<=s>Hi)lD>_06zOwDBYkGcsd;@--Urf3t$< z*`&kDZxw?1z_kBnZ8XBA%?pRC)pbm~jy)_P!aV_hb;`^*M=AVDOh;y?(?Cb+TZBpH zmG&ey6}ZyhG2a@=_(o96jGUXdsdUklLkB-)26V)424=<^_y^Go>_96JQKA3<002ov JPDHLkV1h9NhQ0s* diff --git a/images/ic_arrow_down.png b/images/ic_arrow_down.png index ef5918495c88130cb239193eb8a1645dfa46b0c1..82937f33c91a60c970c11bc8e7326546f3f6c042 100644 GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyQ2{<7u0Xo8v$G2Z+S}W^ySsrr zxFC=VXG2uMxe!K2M+bz_)6)Y{(BIz=WPInV*$gyYwj{_en4xLa*M|Eak-ak_Q#%W2IDJZ{PXYptWEpDVim-}HIU zi3x$#RrRWje3AP+lD;l0yteDukI-{>x+mG6dZfp`N#?}uUGHC)85{pR&Qaq1Wg4G^ z>&J#HfujKjm3Q*>$QV4BGWTRBkI$BK&#mgtuY5A8>(BOEOl&(-8k|z}UN+SSw|KZ) zo@TMzrX)1`L84Ie)Ltf6!6Y$d-nVuko=Si3fulG@>SWhzEr%ENs`CRnZCP?!0PG2K3;DKms9A6UYh%C1UW8T#VpF z%)uCQ&|oAaF>?xC@`j$FXQq3n#~tt;yT7XX>b-jPz9K3v?|=Pd6h#}&Y^#}VAbAUb zn=|vj&Flin( z?YKW&(G~$!eILLpS@s);Ex4*=v%)-{;Xe?OSJ`MZ)71J=Vcj{RA$DQ6h=e}Sx4idPNnQuwaM*!UB<}_Ag@`;+VsJOflK^h4 zNZ`!)`1k{}v$KDcB=k9e$Ia}=umisXxSizwIF7fM1yI#p0N$)Zz|3|y=k}CglO)+^ zX4?Rq3k0qL2;1?lh{P)eP}S1_?ixViQxR#m-+w}=swM#D05pds5Uy&dhtd^A(S37s zb3Y77q>DhMBWOEJlH@xxn<@%GaxsqM*9IL^*AY}H!o0(Ug@p}cV`IM*1!*>$~s_qByVjfHKg*c86RIyKzC6JTUW8HdVAz_fGwHXu_D2e_mK&X zO+AB2X-y41ng!uP^4p@(%*-Clghq=~CO-e$Xx7duH=I77>BcHo{t|!#s~%4Ck%D+7 v86@>)GrO~7Jpa|qj+)tWtyT*p2CjbrM=lHi2KXmR00000NkvXXu0mjf(?8>4 diff --git a/images/ic_arrow_right.png b/images/ic_arrow_right.png index 3fb3a3df4f5a0acddcf727f0af94e8e811338481..e78c4aea0ded69ec623f8f790c9c4a6e55994941 100644 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+i!3-o*C8sL@DYF2d5LY1G)6>(11iHJsk$7F5 zU;q>W(m=Aky&XvQsU*b!bqbaQ`2{m*U0FUQp}X+yiT(3hsE{-7* zm)D-L6g!~6!yMS`eB#iu-|=Eo%MLGgxckRx)7FLCU-JjtmOYTKD7a45q{;ehOVUE2 qO)mv19~!qQYrYD;^x3G~jFICovk>QuTeUzV89ZJ6T-G@yGywqUV^oL$ delta 206 zcmcc5c%N~CWIY=L14Gd9bRi(cSRCZ;#CY?hPCbyrS>O>_%)r1c48n{Iv*t(u1zS8_ z978JRBqvCOEZDpE?!wipvqc5UC$EuQk!dgRzx|QwlB{n|m;UVEyt!D;ldYt@{J4TN z!;#CLMhqFrMza`&Jxmq2Z!#?C-sNG$uwo&HE>Dy@h_#aIYy;CG)9+utWH6e>I$pAw zs?)1r=8+SkEW#kFuk5WHQp_Z5AO=rYKbLh*2~7ZO CSw_wP diff --git a/images/ic_arrow_up.png b/images/ic_arrow_up.png index 8670240fad3d12bdf8fe5629b6c33a477edcf4a6..a4dfcf3f6b700810e9f2f43af7c7aabe20a660cd 100644 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy;Q>A&u0Xo0tE;`e9Y_K}cXv0C z?Ck7>kPrq$5F`x-KtUkr=;(lRf$W~19v}&k0*XIt-9Hm(v`k5mUogWvheuyOt*oD> zd4AKPz@4+ZTb%h0u8H-OWY3Cz#$mLAfq_xj)5S5w;&kuin?=nAJg!e~=rEoU+P1~^ z|Npsjow7Jj_*Bo+IVl$#IY}e=jJAB!`cD?8rdGf7*zu{Zk6&`aR^R*PZ_8x*K61Xe z7N7mL;p8#dEBvo3t~|K%Wy0xBnLU=`MGHOFv-Qr;=ZUVB+`4C}+V7RySQfv3oHoTt z)5yx|b8MgfR;xQ2+((@Et`JR}IJ4kFX@Ja(rHeutb8IFrUMl3DoRYs{@j>qe*Qe+Q zsoEZlTTx+nlY7=8g^w#WL!R87_`zRv=H$0-oeS^OO73)txO}D{WTTTwe68_|@a)YZ zx7YmN63r&NggugsQRb$VUgjd1-Jum0}cGp%su g_pkHCH~+iuvsupHCuPPSU@$Uxy85}Sb4q9e07|^vtN;K2 delta 1021 zcmVe+s~UNiSP#zZ+&Vlz?;Yg(!;l zNV>4+gycVxz9e}<(uwe$wf*khmG))7ECkK%jNWgpl8GxH}h6`z$9%?ii zM~3aF-EMD@%Ir!Bc<=uJ5Y9NPMM*DNYd@)({w~ZpcN@t^0o<9{ zoixT=R`juofcO4K09R(f_lz<3j1str_1?b=;O^}EPsW(5@|ZpXd9b8st+may1n=28 z=b9v+DcjTvflzQHp9r9F1}`HaX>YGEy9B~ji=yc3tbf`UjWOHDvGbDSI2>w%WVjtS zge%%5;Jtqhz{A<@x701TPN#F;($dnV`T6-{bqHsLc{IbmZj9N@cDubUilUzZtOKxM zjCrVzvsSCMabjX3IJ;QV{npyI>)3hk-^i}$=`>9@&^fo0jY1dA# z<0Ll%_}Cb8N0ozSvpG36HMLZRo1C1yd~R;8+n$Fl@BK#rZkO~;$iOcEt|0kV9LKwA z7=Hj@TN#ezn{gaJP~{^@l6{hP0{Ar$I13=8<9|hCOkBZy7C<<%fs5qkIF5(j3h#Xa z;4uK_Mk0_T$+wcOuh`+hho@&(Bv9)Jy!Vd-*jts}thyhu)`s3vy84cwP7!uGookkt zm%qxrkX1Z>m$b=R`&${XScLll>A zs36Ju8daGnT~Wm2AW;auN*NE5<#}a1E_PYIN)dOj;-E?{$msxEkaVOhE+oGw8_gu$lnIUQzB2Lo-$t`uW^%*neR&C1(F0BccxTPSX+B60uOx${ r-Y)6t0ps}(k`7B+Y&05yMCJMyePSB`f#7H!00000NkvXXu0mjf>`wNl diff --git a/images/ic_audio_play.png b/images/ic_audio_play.png index 7c73ce521d0c3270f725496abd4044c01ae4c545..d2960407051e5391b7c6adfab5fb7a1edcdbc844 100644 GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sbpbvhu0UFF+AX1Jw;3kg7MglT zWb!p28;E$pf)KXQRG<`4@D7kGIPH$`v^#>+Z;Q^nD>CywvI3x#(6n1XQe^sF(WxNC zVD-0wih+6sr`;Bwa#sLIPP-`t5&JjV)pV4YpXMETBl^BD$XGcgm@LlDV*pt!m!l?|q`s#0m4RXv49Sql4J?_X% zV0!VaL9AhUgY0h=or3%O?aK}}{T2&8>3irv8}r#HjR&Wf@>(+H?OiL#cue@8xG76c zlYz})>2%|+w{ve~-fnU!?`8a^-O7~Pw(_rr6Vu+Cf3%#MId0zM=KYc>@6Wi8YejnF iSv|XsGs>UdmD;OcQ_HHZcUTP!R0dC1KbLh*2~7ZhfZ}2R literal 2475 zcmZ{mX*ksD8^?dfnuu&=Ptu|>W6LsS8_UetvP_t)V;H8gkCB~}b;?pC3}?tzI3W@t zTXT+G31citN*Kw$J9Eyv|BL@~UH9|3zRz>r-}`y@eUhv!5&XOoyZ`|3qmV{6EGqw7 zf?TYfJ42z91r9F*3j+YCPCdSluanFE_XA85sR#~W7rhU!ZCj&CWuAke`WIbZCwE1F+&*{ zpzn?|bHc4`L&RvUt@jh|i3yE#oz+DF_FTqo2o zceQn`@7Gk&zyTY+H(Lewf&8om&Uf+{N6DkY(m|i3yFP)Njb>5q)$_-T6ZcH1f)v~S zZ=i+6E_WL7(WjrC*lr=;b|#}x{^zg2OWN8e5;9XS*G^8DQ_`ODt8H>d>!~fmnGgh` z@+nE8z~1Jb)VKj%9-%w>o85bCKTAx+osWq`4c*XCdgZYF_l1x#m_`Ocy~Gk7f?XH= zqxmyq5A$jWdhCMqi@>MCw%xt0^y5i94($Le0+B3V6iKLXa;^NDNy})GB@j$J-bm!Vnj9kz*{*Y2r zvnjl`!sb}|`Nit}y(=mj8v0)({0g$NO7o43$aL2p?=SEyC1G-`K>gChvD@SK!~6Rw z4-unuUya{`axHq@j_8@05C=iYzA9(6VEBgep@;SNu!qZ$h z@=1aT2Y*({_c=_o;+VVS+;`zSb@bMA5!?vxQ&p$@l&dy?DNYK91Iyn(1Q)`;TExJAf#VfyU^*5EvbQYYA1l@tfaT z=w-RB`1M)LP_pQgcx1%n;2(Yi_p14+Q&V7GOOJyN0rzy(%0@*!SC4{c)*bwk_=TNy z7+by&?ey%9iN%Ts%F4Iub3S)+LLCG$j5J8=?807-Hyj%t_N{^|KPSh=#wxjxLC#7A z#GRVNk7YUTxCGl1&c#s&E}P)6YM`}vCfEO{I!QpL45R$GX3SwGL1IrF&h`gPj52!RKd zqrNW5KY2uXRb*q)f+E9TJ#KpjZLSk=&3@|!Y*9VU(zkm|64W(blyobe%TyK5oX_CE zy10m>{-SCHw7;hUiXNe1s}E93c?bNa4-03vLfO`>Z^OBokPsL2pIOprCH*q?$iG9(2T~XW6hFGQ-Mdux`h0M#cb0scOR1-dHX$NoY z;@R@!HtsOBM0M4Z`tr;r0FW8T)+7A67AV%I z={tVE2&xfQAgYhf_)dG!M@cb&X`j{GBWueiMG-@O4YxgbK(#8uX0H2na&UN`=bR*M zT!KUmY3-7MII+^50IX0_RpLRq2jk5w)U8tt%B5Uum~g?zFDHI)aEalC@v?@z<`rlS zb+7wzQMRMR)jrgd(>omJb2yHFYXQI8ppnp5+@8oolH#jaE0HXg6G~nU+~y6$ zW7J#=A(z;`(4_-f;Gox0<02^^Go9)RTvH^HE}A0UPBf&B)Yn3tU@MC4a`guv_(eJd z(yOZ%wj|JyOLV%v6t4W*^rZFHuHt-1uB~R!@+>XoM{#(NTvt~m^ZS0p@L9ni*!-3r z{SZz_^w3kdP>ZY-r8hRcH1t$W@))hE*VyVwZXK zc$g6kUQrO3T9!zdmyRlSs>&CBN8e!fJY|zon~MmG1u8uY@5Yg+lM&DOTx%{ibae&a zJg*yj*zaM5zJcX@sIa)P_*u7xm+(DZz9j#lu8tkRU8;_?7^%RV8&sOh73KZ*>foY` z8dr=xVw2f)L5d*mj5J59Fzua@G zT6M1N_QZv1HsZ=2f=BasCR3tUwZ6R z3cNPCH*CyZ&m4#n@j}YnOX{&)*DSGTKF1_(r zK4$nZ%youzk*gC6bw|Z{>Z}kKSNk{36^__myuY8`F(l4l{Vx=V#tuXeEYTB&3-n|G zP*qk{QBu}WQr1SRXu#B!Vah6(m9=2X%5}4ZhyT;yflA^1WGI6q${yq_--O7!vnPr0gi6I6n3h2XT* d@lba^Jl59>!g7(Z_Q$bI0hF<&Q5D?n-aotScUAxZ diff --git a/images/ic_audio_playing.png b/images/ic_audio_playing.png index c2756ec3274f17655140a2a37322c88afe5368cf..c67cf014a6eb697c11fc6b16c4a7f975a397a138 100644 GIT binary patch delta 286 zcmdnXxt3{yL_G&H0|P_C9nP&l$|Jxh#1%*jPP;7xLU)9w-WHj52f`Jcc1Hjz4w4m_ zewTkbh#@@fjxdM>u?45y5}kTqy!#@MeYz@t7SJs5k|4iehL~%I3XS)4Xv=?nby-#5 zSMJivq6`Ucg*A5d_CPhYo-U3d9>?EK^%QDQ;9rBM0hDB+4>`xBeS^a$nDlbURf QK$kFhy85}Sb4q9e0PS#kKmY&$ literal 1213 zcmeAS@N?(olHy`uVBq!ia0vp^1|TfJ1|-=hsU87REa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq8sKd6mGxU^Rn*LA+qju0R{01Y44~ zy9wy$!fk$L9koEv$x0Bg+3=GUMo-U3d6}R5r_V>7)D0BSd`Om-CdbT}# z?=IpfI4R2If~x8Yos)c1Z`!}Up!j8xW}2jy>&lcCIiolItDB{EEQm^&!ruC?qr&U7 zUz6E#vnCPG%LUrc>+bU<24>&5b4~b5ZEVZg_nV)8-?RNOv%xWm-|?LVx-xrLuG^sQ zeEsa-%O3?pH*WkKd;BqD&!vwaJ3II6Y1z%p{5dw=^HJ}S##&BJiI7b_uU2R%2fkb) zwY_@H)4y+byxzO_0IOn4;*Yuc`=>rR(bsRjYFX)F8zZA@K^LUzlZ%XQ6bCigznY)v zYF=(NZC(8OYt?H6pOi?kIehu_wC4XREd?zZzO$*Cude&e=PR+_wR+p_ck9-e$aqcr zUKD@-&8~_>m4_+*{r5JkxwG+p*4*NM4HGj(_E$2`xYW2%@$EX-*Y!J!p4y8$$Sm{7 z^70gnUfHxtOqc8CA=Mr3=fAzyClDew9tZWA|G z7H{Ym{lsA5Z&1!f)`DC^Y z?>|fDx`4W;3&LaGypULZX1Cb&8FSvezyBq4>-0Cdt*t*)OxEluQjNK-$a;K(t@ZC_ z?e)g*PS3Tje=Acb_$!`)n}dBq53|QHMwQ15lL{G5S~R4{I2iFMNKzhuWQAgH-$-+~9X56(Vo_j#g)_wCy2bGtnpxu^bpSKO?;>_e1= z&Af!`oRth!3NeooqNPhaj0)4TUj1&Httl?tFaO)GX7^l=-hxG6e-_W*UV7z_UrShy z^Te}aAL=-sZ`iZbGUa@^{Kg$tHaS^~WMBRJ_ATK$_ifXwN4s^WZO=F5b-nlQyriL_ z@KW_x*GhQ#e$C%-vm+$5ThddmU`_P$Sy$AWZoZitDB5`O;>Ui={*7s{ zjFHhw6)UR;tebkvJ(PoX-^pJ7?aS9*8%?`y3x6FK?=d_k!F?rscTSv2AS1^QV1`pI zag8WRNi0dVN-jzTQVd20MuxfuX1WHJA%MVNi-tfAULYHa%hIiq5{pxHON%lY(lT>Wt@QQvGxBp&^%GNaGxPK_lk@X*)AI95 x^h_c)I$ztaD0e0svIP2e1GD diff --git a/images/ic_audio_rewind.png b/images/ic_audio_rewind.png index 238ed046009c56b9ec55153676075e569cff2cd9..b8fb0f5047927382b7453f6574683c715ff2ba0e 100644 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEdf3uu0UF7+HK*fw}2$yv|Iek zZZgcd4`f4-@YFkk({2M1NX@i6AaeRmq3O3pr(B1N3xdUgT!E<|1wvphoB>ic^{&XY zTS7qDska4Z+yzR34ZI@^v*n??$U&exv`d2gf*Bra{t#qi{;;FBI>Y;mlcBmY_uW&6 zCbgBxzuvuZ)r`C-Ystn$*(-~JOjpF8SDM4X!07Gi;uzv_{O#nMMNJL@uKJ0S8ydJc zb~NsO`Tzg^2eLw5*~c!GpOcQQ)$={yFmYo4j@aOu13KapyT1qAexG>gw(nCviz#>1 zgimS}+uU4mTvJ!9=mm$QypF3{t;0j_{n%D+```s0%C)*niHG(_vTO zbnAe*=;L literal 2894 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 wzopr0G5RlivR!s literal 3065 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 b!rjB&TbdLzdVD2?lnUr-8N%LcI6V6woJg7t diff --git a/images/ic_auth.png b/images/ic_auth.png index 48270d7cc6ab542352d637b0549de78b68246463..a283a055bd1de4d4a94d141c735d05733d0f68e8 100644 GIT binary patch delta 1115 zcmeyy|CD2bWIZzj1H+dG6Mq6Jj{u(#S0K%L&4%r&4ciSHw(B7D|NnonTOKLTS{HrT z_Tldr)BA}Rf81X9VcUi8w+?>YWgmhq(`bJr8+OS^RR++Ox#eX|V&SnD5TzLvbtFuS1ozqzidY1qt= z5N);3%iW_iSI54rnXvIO!w1>Gq|E#N+uD|AzxwuHPU`zTn z;Wb~h6|*?2v~KP>rn0SW{Z_H4{Y?wLvUf{0mHn-|Ah_jsy=abQx+UZL^d<)v{mg^6 zeyv_`k;@_MgVpbu^$WfPPn*juo%KI7K{&KwiNf`Ns}Jyn2nls@ol4E?2zPv2ZnkL3 z0!EoQ*5tS1_S)6A4!_&9{F=Uwg!jdwnP%@&q5O8g;=+ytetU9iFXwlP zNjmcE$-5WYmm6{L6vv(2((j%Xd);b#7!Y@0@*PWU=`4<%=dZFnSE$rSe2)2-eAJ&a zX^&pl6~R`)qpX$nmU_+U?9*EEHgT6dm)QcN=(^9HF%hekm#xkR@Nwzx(~sU( zeDZz;o0hIwL3m>&F%Wh`K{(Otll@R!fMM!TV%wRq*}J^wkx4;*fa`DJ$P zzk5*zQ$@st%uoBIEB^np+Gd%{RN-`Bo<#5aU*GGm-MY`h`{75O!J~-Zt5Y|)|JS@x z@8EX9@ATSwf2-fMbAlEeVeq%R`~0un@muvZmE6`~$=BKMXJuu-wr8<+@G=PS-Oh5a zo`cK5BVeC)PGw&;|NHe!-3lradspl3`QPKp!svLm=5jn!Q`5Tr@7)DNZmdiHn^{m9 zE$QInQ2*xF-KUXi9Ng>v9`|Mw5c%-^zH!5vgrv{UB^@e+ZvNRlk=f3$Q-?>vy3?HD zqvsx04*y4TzbzTWb85N1crr-Xv6nMcHtuEY;Et1LEjYNGF-C#^LDTJqoE|d@}_os|>Rm)EJ&hTsY_dVC`g| U&j;S61M@nAr>mdKI;Vst01%M`Q~&?~ delta 2035 zcmVKaU+X6vek;KLX!?hMtP0OF_?)9zh8WG|+aB!}} zlSeNfes*-maCyWKCl4PU?1KmaAs_^VU^gLn{`=PmL5p?`f=~YV{OsDD_Xt6Y zb_s$9Z#_;3G$I6qfDjOZZ9?$Ox34CRCIm`t2?Cfedf|sFguqH$fFLwqbo|XrguqH` zhTzJNZ~f1F=zr(G?w&pJ<$%=<94<$8obDGvxrcRtF;zuzJRvosTe+F`#Jf_HxT@a*N=Z`?10pr9EL zw9ffG5MUY!b?NjuLQv932wwl`ZB@XhfglB%763wEP=C<*8uK*}ER8a++`ih?211}L zso}WA{8|X`?;rejeG#-?00@DypyPYZFF}Bx@$XBz^Y^dkaNIBfnh-P=bbKtNceU4x zAt;%T2Tb@(>Ujbos8BBiDF9$f&ou>thrT#2nr~$~A?PqG7Ut?+15($WWj-NjD7Z^g zN^SP2Eq^t`z6Pk)e8c`haP#O%jbW*2Kx@UvH6Qis z9hnG0p&$y!a?Hv&Y!wTk>Y4MyM3v@ABq69QsXc$a2IBvv_6^1bvB=Wz;#@@!OoYGz zf|`OjWa;{GjM9^*AOtIgKpqpv*H5idEV71#V1LCBU?tDVf*VY7)HC)~XLf!x-$8$G+&b>;8|Br%sf2R3_prOEEm;?}DH0FCu3%PYU zj9)sDOa#+qYJ1Q=og zg2V(lVSa}psTF~&DsTx0EM{GmG4E-k{NeVOYXM zkS5)WQ6+UeT^xUK%Xy<_KoBOBFn|1Ouaklxo{}{C85beg7mb7ubz!DH;g8`+pVELa=m#Y0Waw+WfFiEiapR_x)<5 zfj|JjT_;~sfjPVMvS_RM^7)dfVL)07fp@>JO05tqoh_7`v$f`zOiisuY9R3L^VMlY zosaN-H)4=H3ZsWKmIHMm?$dn~xn^Ob41ZJ^@&XEFrL-2E6-bZ)635_RV7g zumV{?KmazbUI+-l4oC~Zh~nKBd#klT;N1^YltH z@NPF1$O8iJHdB#iL*U(BDxsMWc(;{W&@2eN+eu|K0|M_hQU#5Mz`K1^g+@Z)-8QOH zqag5Z7uBE<5O}wVYLqnu-tD0jvV_39EtFDL5O}wP>W~El-ff^d)eC`l{V4 z%1BxWyz5OFN^ApxcbzF?wL;)sUuu9_An>j$HAuA(c-NB}s2T{o>qre&2?Fo>Q4^Gd zz`JhLBrQSUT`y{)QV@98iJGh!0`K}z4hkXgt_$TPfxx>Sl%oKFcO58a{R1I?l9`5K RopS&H002ovPDHLkV1k{$pB4ZB diff --git a/images/ic_call_phone_icon.png b/images/ic_call_phone_icon.png index 78ec06b8ab83456809b9b1def1ac74172106a1c8..c3c8e2f4b575631eb9abcc55cca2fc75e55fe61c 100644 GIT binary patch delta 1277 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 iS3rFG7nT06T>k)Vlp{(~3V2ok0000yIh diff --git a/images/ic_card_normal.png b/images/ic_card_normal.png index 680112790bce72f0ba0044972888a942dbb9a86d..7e959371872bb03312f5433f3cdfbc4914bd60c0 100644 GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!<^=eJxB}_Gz(9Y0e;^450RaI( zHjsoce0_a^Tt7cQxFB2#t_5fUPyrA?jDjeDkPvZX5r{6J2v9K)02vUIA?)DbV2H?U zp|fg0_ZgQ2`2{n~p8n~@+4t5gF)%QNdb&7zt_eqCs`fxwmn0tS;_UJVKEIr#VA|NBZu zPwu$g^hA;Wo_LzyoviQA{FHtFUSx{teRljd@c<@QPhZBFkQj0#R;8nI&V!Hg6 z;Dia6<75}xe>bsk{=EC3UcnSkmWGODDx3Oc_1aIa_qn_9(d4h|yjKby7iB7K_~p9b z1jBI)-QJU%@{?Y<=KMZ7XL`c5wGB>gyE&aR{%I}SVrKDuz45c(FQWI?>M!0}ZX@30 z-W;enKj5Ti_+xuf-A^IQcyE&J*}dFigMu)P7dIYil+g*?!pk_x!h$P4quJP6}MMh zg-963&dNBBm?_%4H~0kWuHN5zKqN~j^v4;yY>N*%rT=a%-uNw|cX`>D4cn~E?YG)j zw%5))m1A<|@?EEiFBujruKW0M3ikwlhIO&`XB?h;{LO8}e|KI69b{!H=gu3Ej$zy)fx+i+JFo#@%=0nAGN0T#~xO z;;rJ8Gi!Q-f{$a!56%q=heZ}v1A~vrOM&AtXIgxd{=w-Fyg#TuP?4zDlCF1mxTPp| zB%0}V-$75Mye6fq3fta#E1WN7FgLDX&3XC0YF@lj;*1Ulo7Gl-A2_70<(QztvtA>8 z+Vh5IW*!dn6&AQ%Kk#ww(@)PnE$J{|anXF2CoApBR(B$|RsMbjd$?Go!tVApLGx`k zuX(2M@xg@%fBntJju{E^`(!8k{Ifh*@rPyMj8yJ;2Zt@d^vU4q>gTe~DWM4f;$4Uh delta 1803 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 I+)uvtKdR{FB>(^b literal 2624 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 delta 2182 zcmV;12zmGL35XGp8Gi-<00374`G)`i00DDSM?wMF$t-^W000SaNLh0L01FcU01FcV z0GgZ_000OrNklo| zj^W3MWt?LaGO8I(j8;as&VX*!)};Crsxh%j#y5;9jEQ5d_!o??7+#FSj8aA~qhF`2 zQS_^^kdeSxz<-#=m^v29PlRB`kBoRmJ>&HVly-*KN+x7aXG|V7Z>X8~U<5I87|o16 z#@kUe;H{Dg**6#g>Y1Otuks!$WWpH*3~dyZb_Pv7D_lL><9%ix0=6^S8E?ixc{|>y zXKq(I49^pqE#^JcEI`mm7U}z0)e6sF}xt4S!Ou9M745mnWbD*2H9^27oHT zHaXh(#JrI;frSlra!s*n_P^F_ylnmml()mIbeiTelr&q0MUnz1_k9G4+tH_VLb99U z%7E`RTZTnqc_+_Xt=&{zT}S87U#9r@-zhpemSSS!1`rpQKv%BZpvubHfibv7+kpcK zgZg4@LVrRcUAS;rWOj6PJ2T*|(g|Le?#ckvC8e%r!)$J+GiT0Gc=$H*_FhB2zW(Ir zw^6Wuy)U=hk*ni_5`sl|%24q2|0Rw{glef`SqOuF-~jjs`#mWI?7u1IigmfTIDoG+Q-jzX4Kc$kG5hQH5JN=h2%fq0?DsHhlv_N+mGYqa4W`k=3EOs2?yEXagx1Ahi| zD_t8M4KOm8Uc6`*Uf;ZV3oTmY$us9QfF(&p&=#$$hLkqpkGt zVFhR0KRID#$;@YDWQr#)U%n<`27j533w*c+z%4yS2ZPTaJ$kB`#w6e1^s=(@LCV{K z1^oPZlO!v9f&=R6%+%W2IUL1%oQ05yVR0t_3$MDmo^o>TP+D3B9Y21OkwPa8l zDy62TbB4|5*stgQHpXdcvQSM;gD7jUbW(l2Sq#C9qphZY??Xq2d;Pg=~mO+_=R|QzPH$ z>6u~-!VuwSGL?##3>e^)Mhzu0%&ecEKLrPeNNw|9U6U`$zyqsS`_RsvyQ!k0Mko_& z1C{5oW66>iz(zqq!QzRSn15Kw5$Wk?#R~=uaGJ;rmJ+p`_Loy+sgQMH0L6BCcnzI{={VIilbgyCWiSrhdO zl-1v}*Fwm=!NH+C+ePvl-x(R_grTt5p)e{?ENU8f zQIx??o>V#*&?B>mq=f8iS1L6%joZRx6LaTI0ma51q)nRwIfPzNZtguc?55Cid%N2; z(5rMDT23n?{268LL+ITeu-8I14}=VOASLCLgw+21(ZczcE?pJ&0(~YXCehx#`(+^; z2qEa^KSXhz0oeIt+kfVCO9}2?xpEcl-o00-6k%WosPVyrN6bS05<(_ZnHY5Pq}_mD zWq**FnN5cd9hSN%GIBqABY^w-A$03Ral>0m9C2gg+@Lwx)Pv7AZVZquVRZCw9K%K2M2GVhK3f|Cx7D}GPH{=WuMZ??WP_l za?>;y$0{u?9dz~TP1z=*uJQC-%r(#wbq#p3^1JEUwH#3%VTCdRREyb%r;xF6zrFpX zT;m?f5BzpwfU#p0WyDk!N;pg!aO#qW zxNFru%;D}on(Z)avo@T=U7Zp7<8|ved*YQ+K8*3DHqsXz+Ta%)h1&SN;K)-m59LSp zg2TZR9x4v8n7{~Q^@_=?o)M^x#w#YB5m*yg*!DyRPJbTlmwXLM_UOLkb1(!H3oc%u z9){HZzOPx!w6T88>R<%CF-6T3Y9|y|=TzLHR>y_|yC(hiv`4iysXlpXOq`N2T^s8c z-7XA5Wr*??H99sL*ezkp=lE9xle(9r`eMxZ|JC5rXOutx0+eMP1#*sWCIA2c07*qo IM6N<$f_eZDv;Y7A diff --git a/images/ic_collect_icon.png b/images/ic_collect_icon.png index 49b5017d4979757b2305d8e9ac66fa24080dc336..0bdff9bafccc649215c6c165227480601854829d 100644 GIT binary patch literal 810 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-slLLH0T!C}}Ay8agjHaZpun;Jc zpPvsA&&|z+FyJCU2AmDoTU1m8XG2VYbCDSqa|^6MZY>G&3ugGu@|{!i%BQ#Yk8AR7 zoOGcmGAGp6*;4-Hlfx@}ZB)GQug$T(>7<`1{Yf__w@U;@mKyi*Xy#M^jY~_ zm)tD+7v*eyP$NcXgGO%Z)Meg3H}$G1reA4mZJL$n5XQVXebXA|c?Tla_Ha!to9Qa} z>rbXo&@^4ojlKpG_v`HznOf6$p!=gzZL9}F*4_h3!f%rHybJt);b`s$ZPBWi)=J^0 ze9D!%r4@^$O@2!V1jgGRPP3Cvw;->`gx9@ke|z?NVN|)PMG+WA`6u zmLB@rXYraxZ)*buZ!u#B}p8l0^_Hx(hv$4yq8jTdSa_w$E-<+}QcEGmz&pB_2 zuyCAucDU(f!@c)Pwm&woN}tQ0clU*)*75xxyc?b!6?%C{^x&W09PE!pC&!3RT|Gm7 zn#bIU|JPgy_?Z49@cd7u*0=l5_Q{ln*g9JTtn=u$zc|z1g!)$&|J~=t-|;dm&6%q-8<@HnJYD@< J);T3K0RUuab$3$g6vt_4YiX?_m{_z#!YVOAjnP!9L~x4;2vtE*KbWXN z?DD#58>nsNlLk`J_(4StngD)Kp&B)AF^Ym4Xx)>F;#vV?)qjdgYyJIsXQtEXbe8tE zgQh3>W!}7Z-+AZUd+xdC-ch4QWJHck@jUN(*bY0O4APQqQ$q5ecA&JhR0jV6-Nv7A zce3q@OG-*gW?<}BX88N?nq9Y*m6gp+wtX=LL)SxxdL3s@XEaXW`e*nHwj|rWsDgnf z!3XdUy}b?66o32hsEtA^_s&YTo&5^EeJ4i#A_ur$2&r7Bz}fIS9E6QWKvdGege&(CVu5q zKKdq?mw%UMLrUC6^HK^-L%}-OWqJKj*at(=3i|_;z_D>SkO^189vg}N^a|BeUt-T@ zm?zs}IzSK1qT%;Z6n+YuXj5jXaVGDKD=sdMd-xgIRLJ4Isc-d8JehI z&r+N8ZSgeTZQi~MvxdRGSoTb^&{9~n#(aTLS!gjQCq5!<&KU+fBMMQVy~Ue>Ie~2} zW4=T~RgguNc{CSVC==!kgT3K)hwA0dbL)`U~EjYJW+-WpEf%!vhb5JmJHs9N6 zQGd|INUVa)M3rQM(%Y}*gu-dj5ZN61-2&KYqp#k-4YCKMjF`*B^JSJ&ySZ*5-(T+7 z=AiJ6x$rjMQM`BX%io@T#ejs~7^4LQz77c|t)%fU?{NtFE>PIWc&gh2wY9Y?>gwtS zXM8}YMY3>YIkcJ+O0_EF5{t_SLV{4eb$>Cs-m+2NUs+jMT3=ruvn)wSFg_z}B(yo1 z?m+MHo_~@dod=*;Wrhoz`v}TaN<3lNVJ(astj_A{YHf7NEm`O!Z?+3tBMQpT_x!^u z_0&pwFV%%!!scpKouFOaV%PKQuvnpW4eVD+<)hA0D*7(7d8JMNtuE$PAECFiJb(X? zRvVdDa3J5I?gG!>;MM&>>qa3pMe7f-BuYLHWt> zfH|;{59K-3onuKsquUJ5IwvSPLGb(yj&@~ha9~UfqvY^iytkenoe`}qX)^_V+LG?0 zy-F6hXGYqKqWnV7KQ{k{|2Ov6R)5<>+SI6>jh4cq4H~0`9gF1>8BhCm&)>kfJ3mFa z%88pie_#5JR?hG?6%`eE+}H8qUYm^F77~GqR`-5{)i5c-H*`$%lC`bDnX%3su+?&n z^=326fAIK(|G7|Oqtg{)?2Dd%Dm?`rw-gz8_AN9*UWlHFwn(Z?6aU>!WPcP+fP3uY zkD&ZGyLUT$;q^XtX|}>FE#!TzA?o3Wy`J+VIlG6>xr5P@@k-P8dwvQ1AWU@T0M+4m zhPc5TP_3@oWmkyd3azJMi5I1I_xv-VdGMImv(JztI�y^S6(O%M={Tb>;v)q;2LL zc+cy7R@1?UUI105$Hc48dP@5ebGkiD=Vve<(qn5%K(rquYaszkU1mxpU|C?c29{_3G;CY9%G5 zM~@yYT)42Vt}ZAj$iu@UFE1}OHPyhtz@&Q)JJ1t?B|(0{3<3`t0uC%l*l^+ehk6Ht z_5M45_x)vHU_9yR;uzv_eCf28^+inv0u7!HuG#%lwOyx#>E*w^yZinBu+%9+lNbtL znIGO?b29B_&Y~FpsuyMkOCGp=XVf%``hK9`{;Iiqs+pP0@19CE;aU3N_NSM#13ZPN z_PlrCl|8uQZ~*td$Ip%{FfN`|@g&gnA=9kZnnSL4rsX6|jnMg6q?za3Dx+T#@#bZ{ zNYRy?Mkm_{zy4I4nIcA0uSy5xGz-TZW;nG|sMPI4Z-Je~<{7h&nEEbwvAm-}@I>0z zzjF-l6fr5x3f|?kMW)y7<@Wo>#q={O`&K+?`Fu2K-;DE*dSCw9>G1i=1E)=s9;m8H zRP7b<%UHtnto81$`J4DA2`!w=b%1l3xy{FIo9EOU$_sTgz2A52UT2EfOc%Wg*AG6_ zOcsq*ir8FgpDe=FwBzMG|6~2>$67wjK4!9ZQ`Dl&(A6ySZ!AphviDmp)M03|Ch7Jw zZ{|?W$!8yCZ|7&)_d{f_lfj~|yRZNMlX7adoWjQ=JHt%4?fTpwGHA9c@7gL~toH27 z+sEymt8TEcMTaXNFP!vUStM|#nKJw0dXr7{+q_t}I(kWOd>d!?Zx*+!T&Q$xx#p?$ zcey4+ElLo*YA0Kga3Q*jXUWR?e&JB(Q&;~m1t-^i5$&6^5*X_Yp00i_>zopr0Qh!e AH~;_u delta 1141 zcmV-*1d99X1^)<;8Gi-<00374`G)`i00DDSM?wMF$t-^W000SaNLh0L01FcU01FcV z0GgZ_000CeNkloJYRak!;>bJXgX`9kOPD_vR*=v_pg)~?QtZoMZ0aQA(Ia#kbD$D%Oa!+oN=~{8A~~>L_V41l_JE#5W%DXF{YKIlU}pY zn4h1A-Q8WdzrW{3C=`N?jST|BDtKc>-*kI$c6LT2tc=&!S9o}MATS6JjRd$^{D{%J zySuX_;Q9F(Zf|c1jJe>}6VS&pi71Nn;Lp!b60)7^lzP=_f3h2|b57Q)30q^hcu)n_#-QC?#P*4DQd3l8V{CpLn$J*N3V0CpB z-rnA<2mnHVTU1R31_u6MaBz@5`}_N$x3?F1dU~kxoSvRqT>*rPtNQ2( zh(sb(k$=X=$H^uLv{UqRYHEszA08f(eUSLq*OyfRUZsEluK<*X zw8i4$B1O8Tr3IRsoByD-wG}!#I>7Ju!^On~*?$e|zYP`wTLeUj93LOU($W%HMGx3^ zOioV1=H@0`U0vCc#P$flGK%D}&X<;!LP<%9E{cnbp{S^c$}Nh(`%*$cGzYNKR99D% z?<*=QbWv4RMI{w0mfZqEyaI4wDMdo)?U$DqL*RM54n^CL#35VCXp(v%gsO~kZ)9c% zu747?4@XBwu(!8IyD?TTOlSm$0M$mu-Ab4pNFJ|mYHFfn@9OHJs)b!GfBL>t?7)P@x47-?ZGV`Un4qXz@xPFy1bSHo+wkdQoQV*h?1 z{B8i5x>ybHUUx!C8whd8_QEIz3|1#3pYzJsCjZYKsW5&4%&30DZtoPB00000NkvXX Hu0mjfgjfyc diff --git a/images/ic_comment_icon.png b/images/ic_comment_icon.png index e521d984a7f267823bb9036c04cf4237585c2b6c..6960eaa2a6ee6b08df0eb2a0443aeea87e155ff6 100644 GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s`2jv5u0Xng2vAs92v?P#pATf` z<>kRefDE7@L>yTqngSr#h_?dd4waH1zhH(p?LW)ru%Erbbz-WV*r&Zsh1ptCPcJ4% z1uw1gF*>}}(OUJ6pYbUf1_nkAPZ!4!kK=Er-0o{u5OM8~a&Xvlf7Lgu-~aa)a!DQc zJeKi%ZRYjMTqm0ZPAuGh)F7XI`fnM7H;-)CN44tJDR&9Z1uD`rcNezGFQLqS9CDa?K5^(DJpAx=u_;js^%z9-{fEseLTsLHxB%kqoE z{)e{G7rE>m+h^|BeR-13zwA$vvVIi~Q>S$+II5~eY_y3iI{s3KIcb7PV2$Ga9k&Bn z4(yqk|Nl4JCjLe({k86IX(D>@p!HGfK@eL(^x#1d@!&-T1s@2x6(yi~ zY@!vxgHlE7QSgOTM7-$HiwM%9;9C;42df?gK@n}NiXy&Z{eKOam1R50ZfZ6oG9Ucd zP4?TF|F^S`*==YrGBWzVl*weKSeA7L-oQI3XhziV7B0g)KLO5S9F-K|mu8BNdaip0 zz%(LvybV2YP&4~s0Di)IKLH9d^{qHWeAfdvqvlQ2w& zsd$>pwZrxhv`Ru1`fG-1vdu9UaLohgkO`n$CV+040J=pj-Qx+cFZj~@NjxxR0AF7v z3i6Tu5PwcUUl~rqs=q8O1iP)$m%wuU9Jfl}sEWP<@H9N{nwwPO1Du1o;|w75xr+X7 zdN#`Zq!r^acnr_riGm@k^v%+4_%-vN1K|0RV~h8IM*IWz{%{|13i5K_Tz1nHwodpMgY$dtBWYOQ{Fj7 z96_$aN~e#4V~&eAO(5mVycUUbmV#Ep6-Nm1Y&mMlFBxn*Wp5+&3f(m;CGTcgc_*`j z^jK4{IQL)3Yvm;u@*Lf@RuqMHQ1lVk-O5Ic%9vNke@@~%5rr;e+3yU%@AbNCt4b6- pnNw>E%cn5N`h49r85tRA)^BqDStsl%z`Fnd002ovPDHLkV1iyll+FME diff --git a/images/ic_corner_mark_bg.png b/images/ic_corner_mark_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fdcbb7fcafa3fdff18486ea4ce5b061003b0de76 GIT binary patch literal 533 zcmV+w0_y#VP)Px$&q+iM16aV12C#x33_yWLz-^WBsGB+# zd&i(Pd~X6Q;x7TL;?DsrZ~$%ipa2L^S3-}v$)CmNd>7D)pEUuR@mB+A z$4>_E9^Tyd;i1%(l7;g XP!wiRI-Gl<00000NkvXXu0mjfr5)ug literal 0 HcmV?d00001 diff --git a/images/ic_email_icon.png b/images/ic_email_icon.png index 7885bfb85ecbd0c85bfbd7830424703bc6f2dc91..661ffabb5b447f0efd59420b05b5d475698e4bd2 100644 GIT binary patch delta 1277 zcmV&24m#gp^dwDZ`q^VhNS*|Y1#lYi*Ghx6IA=)H&Q#+B&2 zhVs|3^VhNN%%11Gg!9?7?#-a|+P3l4uJP2Y^3|^J(y8gejquW_=evaIz>DwCqwL6- z@Y1OB+O_S;o9DcR?#!R`+P3uCw({4p|NsB;*Rk@}ujsyr@6V+1)U4^jjquW`>A;NY z!;tgYwDZ`q?0?6X?aG_+)2jXV@an>k@zt&C#gpj0hwjax>&BJmyoK(}pXtAf@X@F5 z&Z6tYlI_c#?8%w)+O_b}rvCf){rK|o)vo*V==0jR|Ni{^_U-oM%l`cO{PpYh;>h>s z(fy7l11{rU9z@#FU8&Gg^G^Vqce^ndB}-@)|Vz4+?a`Rv>I>)K$d zkbwXI07GP<8h?>{eB*p+i1B<|M7zA$aeuR*PBL0+p$iM2R(Us=zTTXPs=(-^(UQ3U~KH>fM z(0}p}5LMTeX`1D7tyW73X1eON^u4_x8tyN42XRf)^TmRUDHxSN+h};sg#OxZu>$c$NP|f zfGWLVM+|{&a11?_(hZS(!ELaye5HmzpfHDA{h}yMZYOhxtw)sjw|j>L$kn$7>v+r2}+!#O%#e z{kYY7QH)WY?tsyWf4s$6e6@UL2X@4_^wV$Dhf-9xwITW`6k_P=u*w5=9sDlP*u+fp z^3-Q>&eHO?jtAa5IUA0}Cgp*pNv;uNGqyHZZ{2G8VqfiLb>dI0ad$8={Gq0LL=xk+5OxFkRMBvYJuiSdULH6z}! zKM!qJ{vgC1Im)>~*K3pVia3L~M72X0tv;E zGhy@rF)zIR8N?;3?4H3pUz-(h;)~@xJuXRcS-y&S28lb&GjRKafqc_$h%Z~odFW#w zi;2r@BN}9hSlECNOGFhmQmhA9)Vs(63mw^s58ftuaO;z&|K@IO0W(d7R*ruWS1G!- zz-35sBkX1I&>HYaU)NMWO9Y8k77q(j5ka=T>VIGY?gvd=Wbr#GapvhKZnD+>8-+Rr zG`3pFx!?XAGAq2x)XC7NVHR2%#MhxD^gZ#B7{K=f{A+NrmxUJl*}7DG%=@~DK*5k26hOZhXK;QvUh(OrJwTw`aU?rL$Pz!`jg9UmWj z(>O34ukcwto5dw5&gIM5XQJz}ODSOTam4DFOS=zkpVUPWBK&IF~5_a13ttmHOmP4vkb%$ zz2#9{sg>mW<53om_>6MSMX_!TQOVWE|j23-HJnS=xi%MLUFJM5Wj47%q2my04kU zX_T!FRGD=BtR#O%;`FlX^=a)RB`;#=?kU5kqKq+D7_Gq|H<4ulD)EqnT)^980h@Q7 zL7dQks81G9m5;dCvwSKtIsVIyj(;mT&lCqGbI#W#dkhPph2#IQHE|2azb5Aw%*ESf zagMXC6z^(e*@*x5do3kbisv;$_ZPzvkwTeCh@9 zqsaNfmUG^2Do$OuL;Oh2#nX!DEX_w;PC;7G%elevueU9##XaEUj*4e4#N|7PABTAF zmUG@#)Cuw9=(@EnGS>^@dm&x`@e)XPfRK*3AGCvFh!;S7?-!N+udIIn;Yt*F8G5aO Q00000NkvXXt^-0~g1-f~3jhEB diff --git a/images/ic_empty_data.png b/images/ic_empty_data.png index e24d15445b59f4382e35296cd9912f4c44ea97f9..ec1e5603d2062b5efa6832b1867deb8e4c53034b 100644 GIT binary patch literal 13878 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 delta 27585 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 U_9Rbu4~%yPPgg&ebxsLQ02Ap|nE(I) delta 1124 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 diff --git a/images/ic_hot_number_bg.png b/images/ic_hot_number_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..727d2650a5eb056a66eae4f34afb12219624efc2 GIT binary patch literal 647 zcmV;20(kw2P)UXNHDCI{ZT~f_Q^={AmCl zwRq%y(3YMD&{Gy~fXDCCpglbefMdirk=IZa05(p1-Qq)40ML2juRigiDFEaGk_Y&* z6(5QM04@@L@fGiU0pQZaSK8s7E&$jv@#Ri3y!pVFy5XHG&@0}l z0xiqt*LY_Nv^=m~*SvED09g9XZsTMDOrAn^e%j}qEr5xW#J7FJI$Z#hCW!y`ZR30a z|1dvG{8hjBzzbX!ycra*___o>&;r0uAiIVqDWSZeKqCnJDDn4_c;wa;a(Qihg!o4V z{B{udJxum2h<_!1OB)|0{z({L13rt4XyT`ce-Os|#E)v?W5nMHA>1x@@KCbIZ5X*^=_sUYxWaeTpBNB;3aH^TTT@iUtE1o79xcpOH& z4P;UiA0z%o7+*6*Zxb2Q!x!I=fd@wT-p2kJKJZ9H6CXt^Ui#j~;0W(sya7v3$Xl73%8dX3002ovPDHLkV1hf)D<=Q| literal 0 HcmV?d00001 diff --git a/images/ic_information_icon.png b/images/ic_information_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0402e9b3070d9a4e7c8a18a9c500da48a203384c GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!b_Mu^xB}^h?Y|m!{A$?#vtj#p z5F5zY_5;cQiT`NW_OoFJP!@>5?Cn3BcKmMG^S@!|&zx02l@Rq11wb}PapTUP1*?D8 zZvO`4Htqal*9}tk|NsB26+f%D{F-<4PvDFn=O6#gTk)%K?a#1TKPMgd9W(#utIz*_ z{{Daa<-gqKQF$gTc?+$*eZ#9c>Ci1rJeJd!yPQO6rz^@O=nE3~DCO7-ocjf7CG`r1i#_qcF%@2(?^BApy7I3GOZ`50h1c$lE1!v0-u8ig^2gHOOmUB*+#k5(>qC~;3 zv&eA6uZ|PfmI_3;`4meAxWvpq#3?2tz}=X%bwSkf-zDt24f*Sfm+n#gAQT!U*4yxX z`HEYc4HN#bTvmN|Uv>ubQkeozg~`lvoDagdViPCXfTn{tiWN8cf&uHD{VWp zS1WJY$A8r(>E|xz%z&xSTU4n69P1|O}4ZZ7i*PJX{wjj4?O)eMv aP5#Zznd=TEbo>K`GlQqApUXO@geCwhel|A% literal 0 HcmV?d00001 diff --git a/images/ic_member_list_icon.png b/images/ic_member_list_icon.png index 04eee11d91e6d127a8bcef4fe6f79964e8599a07..58e314417e5121b94e081e7747a8945f1e152708 100644 GIT binary patch delta 456 zcmV;(0XP2H2bu(sBnWs=OjJbx005CuJb$>K`RU>P*U9|4qWSIS{o>dC)5H7j=>E&O z`@g9Ayrucx()`Z6`^dEV^6mb`u=>HQ`sCaF+s*uxC)z#$000$qQchC<_7ly=p>#_f z3S;uvvwbhyv3h1@;0m%70003zNkl{+p6qiepq*=~>B6`FJKpf&nv<;szN;&6mDW^NdDWg1v`1J_C;CQ9~ z6yIc^MpVKdC>I}J{cW9o3aoLd`HHE=jF&_O2-k}h${<%UmdE(6c}Lo#9hOI&vuv%P zdkEkhYh)}%YOn?ZT8nZiOOTqI8h--3XqHF9Zb;b{#&Naaz+u4~TP=vGbG=yfRXgei zO;CcLlsD>SzE(nVjs-7N0tRLLtR=`s*Uma*3zh_9)_ASu%w?;{aKcg`81A~>Sl3O0 zxHL2hp5m%@y7fwX8drv`Ml@UkJj)Of=Qu2c_Irmzh~BrS_ZIzoycLCa&;J90*h0;p2gug|0000eK@{oCO|{#S9FF zW+2Qs>$#HxP(fsXPlzi}a>x9il%U;&u6Kmyi7Z z@ao_3Ex(@L`Fm>n?}yj^>{{LBApk!0?TUpMQY<@yf>H4y55EtG~*r4V|-Z3z7nRTjp(31cA9 zn^M20-T1uVtJhax9MAG}aSW-L(;FNfeaJz;#_3{#nu3P|>y(Cx3641mT3ShrJ-ofF z+-7gS{*epe`U+nAGx5a%1*e|=WW9xF`j35_VBk}vepG}jLwdm$F6G5-uaX~UhBPyk`7Axc z*{rDSw!}5S@q$~ zhdHM`#HD7cUk?!wS6X`d*ws^CeR~Rme=V4De8rnR-!YxnKf+|G=ij(a``V5(ZCKKbLh*2~7Z; C=V#0S diff --git a/images/ic_member_qrcode.png b/images/ic_member_qrcode.png index 505a035228c27d6f01dff99a35d01ddc14e48191..72f5f0b5c25eccb91f4f6e7a8bbddaa2983ace25 100644 GIT binary patch delta 493 zcmVB#%T zXZ_^5`@v!T+M)g9xBm3w{oJMh|NsB{^#1YN{ot_t(TV=&!u-~i`@?4b?$i9pa{SVb zeV?9P0000LbW%=J0QD2i$Fh4%9SWgzWAfN9`P-m%W%A^pRR911Oi4sRR5;6xlYiHG zgD?z*4Phi9vyBksZ>MySbAkOyKe8-Kz-k*t`_u7w+DG9Q{FEDb4pefy zz+Jiz%4?XzH)Q8)za{*g^`AHJ7j4ewf9+oqDu(OBKjh0ip7UE~DgsFVfD*2P^kPL= z5IjU6={8T9=KLOae1nm&2CROb1bxqU0r(E~2H@YC0X^Sn;0;_A&~})qVnD(-T`SF3a8W=V3)Q5=e9cp7zA)fl9nBGA zA(WAkQd-|1qcopPl5NE!^BkI{=^md*CmAhnp#XEu=R)iB;FDu_mYfw`&=00000NkvXXu0mjf+Km4y literal 1054 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 HMHc^GGIYkM diff --git a/images/ic_mine_title_bg.png b/images/ic_mine_title_bg.png index 5f8b68d2f05096c7dcd2224105f8596ea7273b71..4c76db6f04a72006a23f8176f2c712dc94a1c22f 100644 GIT binary patch delta 1640 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 Oz;#2DE96U#LH`4eeI0!O diff --git a/images/ic_order_all.png b/images/ic_order_all.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8d1d61f57a97e0c7f0c4b071b235e6fac2f3d5 GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&IR*HHxB}^?+Z$f)YZ+Z&&Qlr=p8tKkb?7YH;(v?Rzcn4v*x zZvFjLsoMQLvFA_h3HNa?F;?4p#a5Ytfziv;#WAGf*4x`R^9~sZxIHX1+q8jo#`pTG zUQ=&P@yqyhI#hV&^W6{5y%137)|F=P>3a7<`|8t!`y^-G3b*>Y_N<4V4S~Zu=J|?uS;i7Bp44v>Eu_=-9i|QB_&E}r9 z=H|DQ&0XG6nH3Qi;K7`x!;)^{PUN8pJ%J(R&o{?>6l=4R zV!iVA>5R+-?;E@4bXCMfhPZNle7LzZ*)+VeX(KG)yv?5>v#`bljzoD_VZ%H>nQW zgRjI46#rERvx{YCt(MT^K6uM`Ia|VYnKK$njE@$1NgVWPQ8_5v!tC>Hx0;~ClbJhv z3iOEm{0T&V1C2xf3+rc`|LY0LXHP}7OJ@{3OM><122Q^{z$HsZyoQ> zd6RG1)St+5OX!Y+<_gK(#?E4gjvvaqR#?Gd=_r2S^n#lVXNsp}=c=xLkS;8KZTS&# zzhG_UPWLmdQy;ILnp9Ho)RFBB(N|(8d`ei-Y|-og kwcLK=s(TNo&ws4na9!@)WhwDaU>aobboFyt=akR{0G)hsTmS$7 delta 2110 zcmV-E2*LNt2EY)I8Gi-<006NoGQ$7>2nR_-K~!i%?OAntqN62qepOk_ zA~R0K`4Pn>uqeijjLj&hiOv$Rt|sk!-j>9PS-57?MMnFa_tv74&7j+|jYJ0`n{iRf zOf*I&g!!?laTuM8Fto<5R4(^D=6CbF&AX=U{b>7#$dlaM-hX?a_nh-PAHQ>+r%V^% z;tLQHT?F;N64i^5`oE1-S65eI$&w|@nRz)8;k^~kFf(T6KX~t-TWIIZOZr7ow33-` zBBBjM^gd>O+RT1$X3sG5A|iSV5xtR!+KK4bX7;F=9W9kgk1hnjIe`+9R})bmGjB1o z1I)bNdw*ayLx1Bqelroh$IRe_70f*7z5n)nf@>O-i0mMu&lAxQGnbl4tG>Rz8!DB` zR%Wi8J9lpL?%lh`<^x<)paP)l&8#a)k`sADdU|>mGxKU@zRWrIN;7*o5k1e$e_OU} z*+{WiJU7*F5h)VUhbxuJ`k|qrzs?m{!=OauJ4Ey!Re$|Vro6wu|FZMv&)>?-w-V7P z5&fKqs>YewCC<4HGwUFtcM{PdW`5Xv|482WIF4g88ziFZRCQ!7z#0N2A}H)(RXvm` zjiRX6IoD@qPng+#Ns>H1n?WM-ULuN_`L#%0@BKqL=UiKFV0D8M5hbE=Ro$K$ z5y$b6nSZ@IP1EhAQt8KycsGvY&1QC&ncbNr$=7l+*O=M&%yixw@~vUBIoe>bB%ilVnN^W8+`RCQfW_D7s^o!iimo^NFs7G5p@O)$C!D&xzysN;5ms*4DP7SS+6J?CiXxt*z~ps$N<*BBI$(z9RAzGjI0Z9}R{g zB99>Lpj=f?hVKCen6l4p04^dUs)}d=WPkO&7RWe`K@7XHv=)&U$H&KCv1iYo@p^&H z7%3bfmM&fTqN-xbhEYg2)DuP;7>F0XJ4Qrr&x{Xy_Yx6Obr~~@nf(iRkgEA8i%1(0 z!2wlgV8wBKlbNkj)i2?56h*&kX=&LqI5-GBb*&jeg$evgReen`REX&0)Vi51&3}R; zkg_OrfCLdFIU)ck)FPO5?Q~I$qUb^A+=2Y$Q486OpaL6#VsREir1nGkYyty7W#+?3 zPedU^2M(#GU}iYvWsz4^!3vRY3(p@w1jDe4v_*#0wPuSH(rbsRUYCI)qG!XI=_NEC z6vN|LO=YYY5z&4;ldr)b4+Juqj(>q{&;!vrkiL*Nf>A6@(`WLdR4rsPg6i+@Us0)4 z4yo$ZnUIi9h!$#z;8CQOnIWaB-{tngv(=gbut5D_!?ig%a02B0GsxVGo|Mmuc}>6I zP0;D(p8$n zF%SNvZY?h*5D*6_8WRWpMwGyMsK3d+6(W3;neV7|Lp9ZodO%_BLx0!*Y*5rqM4K|t zHUn(BXF~0vz7RFgdY74fFiDb+Hmaj0sA93$IyyRf!Z~;Q;NakQ12D{gC%pH#CY$pT zkx$^VGaHSvD5YuITPl@))~JG-pdc`g<4tDvg>t$4f#KodGeIeO%YCZa+o;m~{wRw2 zopW2g_mfuzBJxdUo`3M(qj@*H>H-C+Q54<7%mr2bbguZnPec={x~WmkxK>Nk^eble zAys{S_Iw=2A2+jZRbA7l%xr(%paQVpFf(Sd$r~jRxzo(v@0`2Gdw*{|hM-=E2(@`4 z@1!V-HZt=*GkaB%B!90*)^vLs0u|EkG!Y%nN2kBP|Efx*@_$Jpf>8&}><5KH;V%;t z6S&a4v`{GEGV>ZU!^m|l5&hQ8?$1vNp+DW$($cbOU|`_sW&z>3hCzjheT$i2HeK3< zhPe)D#mt!SQG*z*o^Z}RnWia@GtcMJZMm8C5YhFmt*sk&?b>x}E`XW_70Ba`G)>n# z=WxBX&wKx;Mt_Y7%@qyy>+S9Bx8n%ksEm0@zr2ue<^pkiE*tKyAO%1+6p38ag0e4xL?kXiR4Phd04uws2vjU_Nm1;wqU3pHh#~b- zK&2NH#4jlUC7@=3ZIuF=4zdGe(3)Lt^+0zSlmz(&GdOI}_pettus~o!!^PHugzLvU ztytf$o>d|B<)OyYohw4bL>5Q77;&e2{WvovC+_9iI?g!^3`}00E{-7{$KOspS@z06 zz{Pt~>dDU>W@c&id;)DP|Nrm0UgYQZAktye3BB^bV^-_lW$7^f`yqSk>6U~Z-@1gE z*KVpl-D#ga+b3`T^O;YS-`3pg_?z*!>G=t@{b#?PI=*}PGM_KS8;|bvi#yf7^~1@U z*Ig;9ySGd-idvm^FTGd)&BV-aUPXEP-87HgJQgE&^H0ZP4Y%zy6b$*Zq1&UihM%HH_OGR^NY77_Sg`=XrSK+2_YLZ9K*N^t|zLzRh{Aq0VJlp127W2J09Kovt4UluvDc;#j|L--9Ui zxcU<^y$AOERcdJ!U!}hKwdnMN;(2dQO`EuST|)AcL$7aqIQ_KmLgRspbsp z{jn^EtjIXjQ2#4Yy%VYb-$->Xs+vCOa&72_tR)eym7#1n z=Zq{UOx5q4OP=n#)y|oa^oyDLTu6S51+4_|00?h0PMJOe|0Yn=B*$>d)7@RYX7&Q=72cQm&#mp+@K@Ubo(9Q)^?X*$=RghdjfsEw;Dtc_~ocEcq$bkz$tC$V^QDrZD&@ z2<_>F(^0O{o2}0s$}A7mFyHSxEn@0@A;~NH>Yc7~bc_iVGxbLqSmPP?DkU@+shKG) zDFqq;Y6Q?v#I0^3@8wFbsHtxU<0D?uUX#;jYFh!io;GY%cO_qALPf3k&qzw!O*%Vr zDPiiZ)smYF(=Q)EXrAHh)Kc1%0bokH-f;>YQOv5k8K>x4v7xmaMkXGl&vaFB9_)f`4m-$unmUB zEMG45K#iIDAxZoLKdqytevO6(?{*iv*GmN(9jbFtRjlgrHP^7Km9TueiKa>tS1gN3ZI*g^X$D}|qZ8+Z>cH}>Z<$5>Sn;JJ% zZUV0s$K8Y-%L~_lyZfVUM*_J0FhbS|Zu5UO`lS1){16$t^0{p3&1h z46YhW7r;k_M2B*Oklf5dG`dDl%WzHRe$(|%?zfa{RH#TwYoHKq^%C|nA4=7T@_b<% zkD2inDP^llxjOtu%+)35~qTrR57qo zp;Y=+RSDBG?CHJ`Ww7!hgH?_6D-ScFizK}qOevL;LQsoq*iEWqs{P7P^{WnX-$}%D zMZH*7XVEbbQnd%vWYMOgE3@cVDLtX-H(d1nG8_76df}OOBPo4VxLTyn%|Cm_hs=9e zG?0{SRe&=Pf}y${f!49)Cgtg8Uz(*eiP-@@Cg?9?W&3{A+w&@U6ELxM17&59+KMtpplbq74FT{gkZ%y8I}|y5gG|(7a^N zhEnvD6scTvy7YfTBH=Bxd+)LCnL5PbZUI`;XPo_WIf`z!HrHVVHLJOivT#^XGeC~2 zQPnM@rq)S>?-%<*RVcgYlpg7d?;ycbyoCL&e6-?E67g!k)sGh}xL>89>XPali(1+f zVEUYA*k3GHM^PvoZ3stedo6&T_l%xj=b~rD4-jDawN|du!u1hLUj^oQ{%Dl1U#*iQ zZ*=Q>|5~p6;!r9&-TG>hcuox5c&P7_eV2xt#ua9~mQLCm%T*d&Kf{VI5K?}{OFGZ_ z_oJ5nb1()x!+yFF*(E^@L%a&0$}{Y>zM_b!|CW$bzPeoHcb}N|fpF%11){!vjMxz~ zwJ$U1NzbsCmMgR5MiCSo?TViO$%DZ!N>Nka#=wIDc-1xRUzB18k)%5pYOK{+$em|24S= z=dQko$wCa(u@H+{!XU!88MKcecL&cq^_7+cZ6@NRn{eK)6iDqW8)`Tew-fML5U(pV zKpmJ;&~gF#JOgUNzr3H N002ovPDHLkV1j`GdP)EQ diff --git a/images/ic_order_pay.png b/images/ic_order_pay.png index 90c55c01eb8a549e9441a14dbf493fdf9b252b05..24645bc5dff8939e9a018d9252b219870930a3a9 100644 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^ra)}K!3-qZz8?Arq?QKwgt!7}iHiyn7ZfBeDoS2d z6uG1=c?rY-bAf^?KsH1~3akLkR*<};01^jk1PcO5*^9E`XF(c4dM_ye5kyw%g1q=; zkV=RlKoY1JWaC98kV=S|Kv^K;f;>b7C@2LM0on+$bVct8L!d*=N`m}?8S3q&tXL0j zT%IF(WA!4}cgNczzg_7pHx}gn_%uB<$j3nY?2g$}CMGC8ys)=7Sz|^`q5sSIPDho0 z%x7R=3iWhx4DmSr_Ug@|RSp7d59-@$10BQ!T^v{nd%d6hm4AEY$Q+|%g(qF#eG0u9 z)@W>dw}kWGAHJh^PE85oTz}gwD?KwYShr?6&qpE6l6(9=Li*;$$)6Xr-(wfP?&jj< z-FKLJica-p+zUTG!R z=F_{Cou;Ql4XzpZdnatY?Xc);p!y+UCBunZ51iPLX=hOO+K+wtu{K7F!cH#}OTE_2 zTC?(cjYl4`pEik22-Dd5dE0g;rZxNW!o%bYG8??sJ#X04;!w{z;dP`G^H_niIA(~rI|Oq`Hw7FM|U>@LII$<7{}Y7J@?Qh~Yai|l88`%B|l&cVwocj$kJ_;Ba!bThr5ev#>q8mFk=s=797TUTVxwafkc-5%wC z3|P@Tx%0Jtn96j9BS%a>9yxY#eY{=ZBhB@DI(OYuI5ty;?W>sn#ACbG-!i?p{GZXJ jx?f$oO9cP@nOE;LQ%mSc0FwYPi86S)`njxgN@xNAvpA4$ literal 2494 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 Z0isIPKx29JjsO4v00>D%PDHLkV1o5;8+!l% diff --git a/images/ic_pause_icon.png b/images/ic_pause_icon.png index 449d69434e2326ed0797375a57b7486d1b5fb16c..ed5eb020bb8411cbc9ff23ffb980580132518dd3 100644 GIT binary patch delta 814 zcmV+}1JV4K5xNGD8Gi!+005o0f$RVP0CG@FR7C&)0OYuU=D2|8x_{=nfabY?<+y?8 zxqs%mfakh_=D303vV7*bfabY?=DC39x`5}lhUB+>=DC38x`F1of#=D&dFxq#=nfakh^=DC38x`5}nf9AD&<+*_5xPj)gfPdz>fZjiW%m4rYC3I3w zQvg7KtM`mC8_QHu2<4)MUlls-+1AFwvT#TgpJyuFzg8cTa}~0#ZptK~z}7 zrB~Uaf*=q@y&!0Yt+v>n|No0OHc3zdnHOU_!Ql)u16+1O#ofC`}yAI0Ng*F+s~Kn1kC|J?Cb!X_!R{L=&L?)oDR$Z0IU~r-(JiESnxOG z!1NFbpcQ_I28cdFG>OsI7%L?NH_rLgCPqN=Wu{C z3r2F>epKITjYfNqJgTW4ha>nm)wsz$+RyrQV1K#1Zf)I5roFu`qk$zpw8aNk9eQv` zc*i<$X+|=CfXw7QzZxl;N1}Ee+XjM zdGAiP_c~R!4f>?}&Ww`!6&%!2?`>qslTowep_wdsHi>7^)!cQ_b#LsVE57WDFFYMo sEGMzO8ZQ$NV2^fKe76tBx~x!2kdN07*qoM6N<$g0AnEPyhe` delta 2198 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 literal 0 HcmV?d00001 diff --git a/images/ic_phone_icon.png b/images/ic_phone_icon.png index 1afedb6d6e303869b89c3a1d57f97fb338649cc9..097f6012c10efe379c6ca60cef09a7e8fca43d4c 100644 GIT binary patch literal 1092 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s#{zspT!Hj|`hsuIFaP`Z=iQ|> zUml(M_vhE&AD{kwd-wIp**9kv{{H;($D7+<9vppra?Zcs-#=X4^!CDvx966Ax_jW` zjqUHRtpEG-%dd}5zrVcx=j-dA@9w`kI_1-?-7gOH2^4MtdW1o>B*-tA;qS9U-~GfN zv;SH>VJ$!N8B?jG&$kMkZC>o|UQ``(^U8^~*0<4#6VG-sFfem?x;Tb-9A6riUcA^q zU@PkkiROc*>pbMN()a&X7psy`+dmtC53UHZZEOY*&evyS_#9{B#- z*J=NG=FIh5Zrb--6rMOEnW|AV`}uPB;#5na_Fwe|BJSQxJp;Fxt}kzh&-OZeuxRhA za=~A#zfRgIaryV>GyCQq?4OtYtLMmTJ1%Zxm$f2=i|<^S>$CIW)q5(1PItbY*!l9w zD~HJkug`n+u$dXsb#+`s+Tt3je4?4;Y;1$ zs@?1N>U^8vs2@L5L+7F8xjP(_n*?{b zePZEWp=Qp{ciL7qce0J+7Yll5N7)!o?E|OT>*{Io-6`Q&zrm$qzrncY5D-5~AMi zzZ_6^de*14)3zq+cAFmMWxq9BDZzImW2)Bn?Xi`swv>PC+?JpHraJe~mzo7UdW)IA zYpv5;eAuhz>5Uf`4ClPrw*6ts?!|{s`hOH(vf}du*^7?Rpj_nX>gTe~DWM4fyqIQ| delta 1966 zcmV;f2T}OM2(b^48Gi-<00374`G)`i00DDSM?wMF$t-^W000SaNLh0L01FcU01FcV z0GgZ_000M8Nkl0NpBQa5Jmxla^S!P2$%eaoN_>sBIO$R0YOTXh&%V3$t6N2 zBvN(~mTX`g2q6$VA~uVS@qz*41!KI7#~#m2&%X66U8%3S+JBxIJf7~Eu`MMfm1MWO zU)T5ES6|h8?QPrs??yy>+23J5&VG@-n|*-YPpjtFYu$R!aeZd*Rs{SC`)lln*^jZe zv3Icdu}`wkvoEnH%K#+x+PvP=r_Z$M7>C&Rv+vlbpkHF&#r`V$8|+7QCZDorsBz2a z7#G;zWq)0PY=3VxfS1`1uz$eb&c3KGFS1)r0I+lnjOEv{-(%n1%HT2cZ?d0czs0`5 zo^LYnwSeSx>>l<{*bm~}%>=%aeGmKF8a()GwlL^gX6n06>bnuc&PD*>LGZnkn&Ww+ zmeF@3hCN<`-=*j=K!9wXZnhQm-JKdseL9h?Hb_{9^M6jFZk0I+j#v)5o%sW_%K6%6 zm8ew6QOQhEDVHRRf3`{+h83|Ov3JvY5=*wue@M34)J#|eTFfOVHP=s(kqcxDo~P9O zeaa`7Hwpk^fjYg97;6QO3X6ofM3rqoW$?v36;eS;KEF-T$G?#={1X`?zmoCr0wrhe z3b2)xz<(;`)0B_L3X39D^9_YegwhMc6uS2{ zMIK#}pwo*FDLi;qz+?hr41zlc%Mu`kbePh@sX||}?zDjS;ej70z2ik)F#{Z#OlH${!{Sb5<4)Z3`e?ArkD30<VTPh98gpHZOa1jV0r@!zI659WC# zzZYs@6+9+(hZ8pde5`)Y&67D}nqnM~@qgeKnOV#-UJeeM8CFyZpOBrDBeGeT9Oo zOwlJ-c}9a(l&~b(&6tk^ZkHs+Du@(wK14^a$haPCl>ICm0D9DYt{&xC%_jnq2Y;vo zkWeTNeue@;Dhp|&Ca00;SgFLbe?*DmlbsYEI?pQ-@&dr;#0>xg>Pv2)hK55XksC;D3K16}Ero)k30U6+KweiF=!ur>f25*+fD@VbcB) z=Jhlsrfy1=2Di=VoFp-5w*sC6MSD>)(=rjwZtR)@fM7rggE@?qNY3k1q>}nJ{e#T4fRD806bHu+`x6v1xXxz+#!Vt1q<{F51r#YX@8gMjkQ(z7d#ZRfD^ZO8LeT^dCVpPmR@PLSJVj&AA(-KeM)3j6bd=O_orsjQk;_< z!YX-?(h3>%RLE)?s|}RNp??#!UfKrE0rWq1A2h-D#8jCqQ6fkx?v+-YrP!ra6f#e( zL>&~8*r*ZGadHkoVgW!X0@bOKRWs@nI-!eA&i1)|QAI1^shM+YW@L_goof`h)h4rx zR=QNkNWM5L0C~j@Ps?h!w2Ee~yq(Tci%#66iHk2vaYJDXbANK9QbR&fKfrgi z5>T#C|F@b0!Ft158slm^?R7)r#bif@He*FTFA9kGL2cw0dS7jyU1>wwgQB6 z64ym;kJqa}I3GB=Xlp)j@Wz@hQzIWZ6hQeWCM+R%xLKc=@PDoo>~B${pP0&kfKJE> zBoUMV%i8>2u+l6Y(@(AX$hQU%C;(&(TD%dTSr>I|yrXrWS<3)GVo@hhNKg$?($SY> zn*fld)eqfAbZoq%wI8~xfS_Wd?LhBT{;vk;(Xr70f1zB}|7sA>zm4j>oA<8V!Z07*qoM6N<$f{mc1 A7XSbN diff --git a/images/ic_play_icon.png b/images/ic_play_icon.png index c0207a6a1d5bde1f61d308d5edad93c6699746e9..2830b5928e294abe3a25f8396139ecd3bd1cb972 100644 GIT binary patch delta 827 zcmZ23c${s5WIZzj1H;_yjc``2{mL#$0)KV&kW6OJ+9+rp~Bl&y5T)y}hT$OXVvUp-%4~gD;Cs4$IX?wW%*l{N6a>(el-0n=*Grn#?}pTL1fQ zMC~KSGYUbEjJEHcn0QN3z*_QA@4oO8>)qWv?77~4K5|SpvOv5^*xY+# zjH0%d;;;INXTKd0pD4WJ%}Q6UCi`%6=J10n1nYltZPPgP$;LAMNsqDrkAV6|7X@EU zjdm=F+rL|tt!&S($%3q$Q7lGEPkaTLkJ)_8d%xek;ouU#{xHA&suE}3Muo}-So>57 zKbghoo%yV>C+5U|hpS(MXC0F8ax_bJc=RXxMf|)4PfsT-sJA|A_Idh(;%n^;CnmcD zE6COg7){w%Uvr>=>8keC`t{5AO!^+i9J^v}_V0bmcFJ-|2YgVUxa_ae`9}xy96tFy zJn(tPwF5%pALekMbL44I*tN_suhC?epynqBB~C5%35+lI^tA*>awOewnDDgi-n-7C zWeXTL=mrL!>zF0Q_3;dEeJkJmpiDL$;ZV~Z|5#>a#iZ}ty7JrM^w0md-CJWHaZNt= zHGlY5iQTV{PYzE?IIxK)DnhzY%lxmGbYVcGzWkK6VMB(3kpRC;SVhs$e|qL*3M z<9=U@w|N_W|Ms3=zVq_RWF%+C?c-$r_50TA|ML28w)qz=D0v19TjW(JtNE8e4YmYk$t{&g|@+d*b5NJ{5}fmb7-T~RBuTc@j& zw*`Rf*qaF0%HXxSK;4iNXqyx~RevFZ$$6RsC|6?6g`Kx@J&6#d z0hR#EKP@0cbef6pHiyL1A@ZuKGzGwvBR=Z^Khy>w>?NZ8)35X4>ooSpA`cCK>)2lbc&w3QBK)#c@^ zM2v0B_hXP<#N7}f$H+gpI22z0`9rSJ{Y4OP2rAoAX*b^qVWBj7b>`001hgzhQV| zackt~?fBQ({^iittKJ$}DNml>S*y#8XX7cct_*P0L+{6 zFT4_s^$!c>zC#y7C!e2!awOFL&VQShcsnT*Wcq@c%IwiO*U9w&lviTU1IFIqOJnaz zJy_KFY*y~(?Ylty1HWC#!vMJjdkZ+AbzFvbn*-vX%?9)9hXJ5!!}vP^qp_5DxZSw5 z_UUnx3-At~aN4xQ%1$KF6aWhWUo_-GX=R@4L=N-Q{C`aS;VRun zt|J}=@Wt9d1UeD3G9T56gnld%!DuITpGC)hg~8YRYWhAE3*sO%7Ht!Wa5R<_ zgFOI%?A0!SdF<-Q)uSth?wM&dr(!`IVaBbC9yH;Q907j-;D6ftOiOHTHCU}(n>_xBHq zKZj6Vq~hi?J3;g{-&CKu;sBT}&0f2Dc*n_(0dU1k0niCBzSHW7lzIyE{36IR3?uvR z5@)X)7U!CM@)i9?i(oIm2KT^-WX+-b|I}*XRRC14!5(ddattpUw|_ZrfG8Ip#sBV>o=XL5C<8PWnkc+@kHZROn_7AVCV;GAiR<#Puj zj(CFVyQJyYXAoRzv$ePK^bHh|TY~RKnAE=-I*kUHj4_=Od9SOqhsQ{&p z-2E2|;>Tbl8T9bQWt?3zApX-1sLj}_4n-M#t0nPr;aJ?sJbxcVaQvS<76%_QE&CP; z zlcqutB<4FqB}InNJLD)o7#gxvIEu`CV{{{d4ygFRR~$)7@`%B=2a&0jY%fWQhKHwA zL#~&|QW|m;V1M8a6^Xhb-Azl5?g7%2+mI9`Yi~@R*7E&yBs~MpUMQW(wM(#=Cpe@*xGl^F z6FPFVe^GA=0BI~q)C}II;t~4-oCWX#m=578ekSa7dw=;l`y#CevAnaq+0X6>dNUE| zB!M=mNYSddS@;;hrEew61e(34rRluv9;r^P{?CKb))uLY}?% z5p8AW!63q=ZYYM5GhSlG(VqKswthrBux1u-q=*fRs7y-mGtffS3*fvgn8|bc@RqzJ oHik6}s~^|a8W1)}FMmG&U&XQ^gVbf>UjP6A07*qoM6N<$f~pH9lmGw# diff --git a/images/ic_position_icon.png b/images/ic_position_icon.png index 577a1ecdec96cde1cfdc29331ddf87a5d1c2e4e7..9cc8fe6b410cee63817361a87263f19a5f838fac 100644 GIT binary patch delta 502 zcmV4t8`>DnIA`n;I#*Ti5^pt%d|iu%SKP2M)~K zgiI!p9$@P%dZs!Z_2%}IAU#}n4ZlKFtl@orpvXRtvT3BXB}wzhlMc&wR=xnvuzVqt zTV5ZD1zFdqpwywy2mpZMdZn}$hkuRPogsvmsQ$Ld3Kb?q<={PF#g;qfs^tAUPKqQA zlA<`Ld7fXt$d1`q@T$Qm48s`0FogIC-(N^{j)guIUJpLco(erI%xL5kii8ms}r4uUHsUAw!oPM{p!jlP&Vpx=8)6Di&C9jdsCsu%LC@g=6lPbej|k zqGz6utSoZPwfleo0yhu>32V1BFk24HK&r51p|E6!+7lToO=5=q>o2C&Xa6d%Z1(^80U+=M=Kufz literal 1056 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP{GsypAc7|Wb*VM^hE9Jf1SMj_tL|^XYT%;u=Ur@i+}c9{xfaougTkg zP2KTp>$yM2Z~cM0=lIP(J)3?tto{iU$)Epo(zahKj{aVG^!Mve{|;UI^Zv`fwI_bB zIq`eW-rr?QKx$6i`Fr->-x<4pP2crv;R}J^k1+W7%}Z7 zL4LsuyfIx{ZhroHe`1EPO8$Yj|Bux&+8_Vpz{Fbq>-T()(tq{yf*vvdM*?-6M}a&O zB#|g6ds07$apnL2#}I*2VCq)j{~rB!v26Pf`ay*M7lG*8DStytQtvdJ^xFIWqN%rd zupBVWO!Rbd45^rtoS-0QU}U&?!={bJ8w!dFlP5lV`1G-O1CyDfqMS))qF|sQV~T>7 zUZak_rmAiOTT04Pflo!BxL$l>V&dWu73zw3(x^2hVVlP4gvso;7OmkbT%Zx-;T!Ah z>>SMfE~q1ZhCtPp(vq)VczGVyC{Nh4k<+PhrQ`&I>kXe-9Tn3KvZX~wMc$6MeJk?z zjTbkpEv&38o1J^OR~%qnbmQvTyN3@4$6r6}d_Oom{Q7BWomb2u54Zy#Jnw(h+~8nv zlqp1jMUb=1JupFzX_-?a*Mi13&s!EL@GNrRSv|#q#gQv+IA_j&Ta}>(6puG4%a2)1}>w`1==UlSX|xsEH*xU z_EcQtkb|RRpy7$hsvZ~T21SL%u`xe=x>J z34sd(v^%G~d2NuhGT*`L+k&3U9a$bcS;rVPGqe2KPi~rNz-gS&bY@FR{6(>CVe!+= fl65ZaU|AQpUKl)G{an^LB{Ts5hip$g diff --git a/images/ic_poster_icon.png b/images/ic_poster_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f8eeb18537355bb1edcc3d4230251968e9be4540 GIT binary patch literal 692 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!b_Mu^xB}^&%l}Vr|G#tD|6Qy8 zPi_6bc+&ql-T&wI{-59fe?|ug&FcI=yBj1pukZhYevsl7Q=#HBJ3vxEkvU-XK-u{d z{_j}+f9WKUfr}=C(6(j&S55stv-AI~uK#m-{x6^Ue;!bA9|$b~Dqit_TKoTLK#RKm z?^*SKLErxw6aLR=2bn*&=l|+iAeR6Y07ZaOK#PD{7ES^&PFSZb1iId~B*-tAp?-h7 zeZ&6aD?6jVJUw@KhL64Yua}Q6o!QcomFjI~q@$?7^ZwrLjgux+6r`tnnrX`jY+Ac$ z;r!_n%5s8TE}ku!!N9Jb;NcAv*i6}SaD-Nqt;o54_&t$OdW2-2y1*P&{)kb zQSxgYyUELvQGMg~@RN2-jTXZbyE&15J60&4 z3S{uOnlY=rHsqB;);fkc^($F*54?LgV>PQy<2C(EhQ)S%SC=;Ixm~sL($wyVc{~Yf zWxkdUHtswo0;UV4mF_ulOlj}Pa+UukaFR>ufUli_u#YigfR*j%dou*sbDV#tA2_hG zcJW2V=?9tavTSHv!N<+>$U*RtoFv0ei3g5z&NJQ6>pvi2bXBS0<+Oi>t&!6iX!UJ8@ds-hGTbTNJOJyP4qzyEz>U|?M6>Eaj? zaro`E&ULdKBpe>fvk64rIZ(SZZuPyj&;Q1+clKV)Jjp8g(w5HnGcN4KPHl|}{`D6V z=7}w|;BL?GRLQebKM=;xT^RVR_QiAQ&P0W4X}|d&sIJ;~&NDsfcnyK83WJ^5T)(XE63s?1tX#0c3s$9dgWd+Mvw{`9L(Ld-6n86`Ql z8InF8e9iMCIbns5?cbH`wLA7ma=h+6Fu(HN+5-&QZyV%S|Gvu+@o_%m_5)Y;uVAX$ z!l}_Oc3x>iOFPr;SMNUf&T~y*U1gdnIKxS;pXJ(yX{U6GxLFKD-%j`-wu|M;`oqud zK74dY@O^q(QQ+{;=TTXmrzK?`hO~3UFvSaarwUK=3wPXfx^Q~~Kg-f$hu{qB^9iB? z|L^|GGjTnb^(5B8^k4q@Bk2#~`Ii)I;?jsPyC+;7*2wd%_jsO>)sOF7ZYJ?M&u>_D qWOmFgtd8tjSib&amV$qH9fL_oS=~|n4}HK`X7F_Nb6Mw<&;$T^G*}h@ literal 0 HcmV?d00001 diff --git a/images/ic_recycle_icon.png b/images/ic_recycle_icon.png index 21da4303a7b430f42a56dfeec3cac6738daae0d2..03ab945b1a3ed20e71fafca3d31ea8859afa9ca0 100644 GIT binary patch literal 1270 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&wFLNtxB}?{R8Ux0h%AtwpI-z9 z$b$IUKod$zN+4>0+JOvAGl3#`d3g}oFJVmQfbP&P3GxeOaA??He8cy_?9hdx+-%Rz zpXe~y)R&i}{&i}GyRyKCH`~{kEvt i3$(>sHRH%fP_=&C|s(q~g|_8?W;g8wj*L z+}K>G(ca?VcXlD?&5+r3-|OpFd#!d$;rVy*T*%a4F${YyDcCsdubZ=X?mV^f%vtNwgv1%jl{?uNTd{TrYI2^|?#c4F5%03b^BRlbG>N+ny0ym+ z9dTin5)S6upU{6{Lncq_k_(fC!b2_uiypCYzHDshf8mSE8P-{PM^r9M5!l?YjJ1&S zi;754_=Ui$B4Kx?eUp9nX8Fg}Gn(yf+k2O`XKJz9XBJdD?>=emV(n55^pv zbA)MI!oQYfn}oPL4*qyBecp6V4fO;grL2Qnlo&b9j-T3nv*zCXvY$+8y1OU%{Qe%< zXnB(D3BS63hFKG%eDZf??M2ghHRQJS>q=-#Ic&3kp2Vys&bvT-f%N~c<&?ZR(;Co}4Q_B2f-2^T63p};0WethvA6#c!^M7l$-mY9H zLkY9#Dl8rgJr(a{YKvX^@%MiIEVbNO|5pC6PzzdG=l?&M%r98GOVu8jb!5-wjDoey~%_>bcszhf7@aCpiDmTX5ff z_u58=uxQK73)~4(Q|uxRgiooO#w5%4P)=K*`M{3=#`75|_uIT08ycB4PptM+4KNaz z)MQ+|M9`!B)jIL~pw$8&ByX(Jk9wz9kfNZ#D=ah5Mn?Ha zV-jZz5}M4Gzcv2N-p6kz9Ap*ZG~w|n*L%dO$HaMV30sj;l0u2V42c;hJ0A<5`y{;a zK;q)8FBuQbTap?tB`8dLazk%w)`w6rTVZq9PdN@8sFPS7U;;!D)0w?-Bm}{@zG=1HK2!)1)2a>AIHctuD64)j4 zWZu#zpQ;{gI%WSsQEWk8ul0scg?bCiGnGpBjqf#gK^Gal_ h-q)S8t=)Xaf58@^(7pA2XMqI=gQu&X%Q~loCIEXvF@OL7 literal 3977 zcmX9>c{r47|9?h9qbxJ%wZAmVR-vp}!ysdA?E8`i*^(qOj4k8HG7K7fG$F>4U6ODj zjXhho^NwSkkcMOD_nhnZ$8+D;^<3BeeXj5K{%lW@rMVI31)&Q70B{=LMPa}l|L+51 z1J`bCk8j`x3BefY0o8*dYXHElZ;aBle&)L2!k+GIAb5JF>g2~!e$V>5d$_~}7KpB; zrA#sO65l0jl9hqk`?0xtKg<66wVLI%8YiDz=ym;<6YZ?Omlv0KCOwNSx%vmPgr`!8 zz_|1^aQVbG@$2`Wn<87gjPPC>;~kZ={cQF0G-!dr42mz|P-ap4PL&tpW`(@Shqg-L zG3yny;|T2hdBh$Bf8Kzw#)a)Tj~EylcVuWtta8Qs1hR`$A}<5dfZDXjm8NHfs!o;T z9rR)BTeGDM0MjoEw3oT{A?b~d47;6gQQ1G2Q-Kq%D3eD`Jj8=H98bPpg2cmX40|l3 z1c+{k5eWOC$*fHv46Jz_n1uos<^q%f)Dy=pZQhU^DVCkx4-1^ZLrim_@2MVgFa;Hr zf66fxJ0ZX`XU}M%WYK`j$ehv?Qf}RBfE=utD~CSM4P8y#a)#eQ zABX}9i>FH85>Q^+`sZveu*7pnDMt6~oixAT8%nXaW4SBC&4#xT^hqJ_7$0%|G5~&! zeeoQBXQOIYIUa7eYj24E!pDFDn(`8#!^S6c>zF#gz6xN|P#gui=C5~AWi^(+10;9%j6+IKWtoPZC`8tP-B?ZUfJrxne1NLAHJfl)y>&YuawGB{Z zGZ8_!bJE!AX(8F2QC$FW&CxFaJd8(E9$Uhp*p83VxAi)i?QwpMKLVO;T$MQZ^j=EP z-%#uH> z?*!k$i8lUvfoRZTL^SJ~Im zo08?)R>kJ3_@K4jYF3VVgcb3U+Y0Z+01+5q;a~Ar5Tuh!Pi!yxTj`&kyah zmM*n1gax;+gnKK7l*`y*PtPM=QwerH)M(%KOHjg#aLG4AI%mg;bJ1rflIdkr)&w$x z&_X20NyFUZ-2YHdvFcq;UmX**UJM~TGroD@5#EbOQZ}m}p$k9mtgF!=AJnHrb;*qp zT1sv%wyj{?j5qGcEkm-!Ye(yqk*!ZV(D0)+;FEm3C)> z0PS{92Op~4#qVRZ+e;^b8?a%PT+(k0pf<_UdsmiLgEhXH(G`1&OjcZ1 zYr(W)(&{_tNn@xD8~|u)Vu(+~M+%$LS!g3OGqbt8+69Bn3oM$o81LBV$kCWPJ;^Rr zYrPeF!@PH3b^k?p)A0gEs<7Bn5Kw0HWb1xQUiXv3T?-*W!2>x!Q~T16*rVKsn=!8? z@tB7%$dhFP$8*&SD3q8*>3{W2K=iTGB3*=vo3{@>M0`B0B9qCY#*^MY?CG|>HCA{; zFxoG`{DG9?iwpoQ^O;7H9=)7@neO4pD0%@8mAv%?3fI#VMSNPTUG#1mc3VRtX~)V7 zdv5eDTYF)BBS2;;5$H62$B&B4nK;B@(E8d2#T)I6ax*nyu{dyY(fo!gso*!nuiwS=r?GT~&;6~zYJ~R9&KSse{IiQTdDIc@ z>94QF!3VWx8Sd%nDGl44^*zm)$#%V{hCwSf9!DC*Jim&-eI`=>*{Hjzy=v4Q56>j1 z&9miUduw+v*CzSeSLlNnVFf<^&=Y; zD|qomJ#@vMasf)ar5l{f1=O_i4h+=iUu$Nt^i0I13r@?4n;u@WESVA4sU!SykVMbh*f+ZiAH64D~g>QR1GW6*`91O1u$93

8#Q+pt@BmkHuW(LatNs~J0*g7^G ziv@y9cy#Sx+g2z|rPzMt2$4wCl9G}-^Q&Ait`W!kp){r{tz~{o=dLo|3t`9l!UbgH?KDD+*Wk^c@*{YP5Q<$mk4N2&z~1I zgTw&v4o5moq3C9}g;51v8LhtvHhFt|@i(j}ihDRhSE6JKT_oZIxf+bpuOtw&h z>}hVL8~&w1@1zy|gVSkj*hg0cV^c|K;Ya^$l-AeRU%VG5Y^c2lO~*vB0m!+HJZqjW z=8$wu2a#NqOc>%M#xCoicG49-HxR!nL;N*tY3)T@M`2UIvSXREoDS%0dEjQT&eO$?;UXEoi z3>o1iRP6oLyBY>MUD~eZ78^fsi+QzUE6=7aMg}y@KXu`nnFKuxrKLXr3_4`#k4(S6 zn*-<6--k1o4?9t3F$P6+Br*sG?c7eMd}oJkDf`Lw5iduH}cUUcCKS>vK< z>r28s{4H0j_?<;8)9rd|@nzGaA777?2!-yI`8FRZ*HQ@2N+u2uU3UjqA!<#A^5L;q>3e$bv1r3`kRfD)2jqRyTIkTg54w;lI=_ zSEiO+YPtci;(ff^Xk)OD8q>E}^L}3_)YU}r*RIMJw zR4&R~@^xnNZ*yeCr;GZ=)8LzWeD#EEAhM)%W?U;1s_=XTP06@zw`YAGf0jr1?|P>> zU6O>!xmlli%8d*hc64j6Dsmrt7Zt{m0OuDk$^2xGjVjnWDr)fc{-F+fb>ajglqoYc zqwCT%!Pr$+R8*XC40y1~Ic(2RRehx0ty>x-Q4%LQWjqj1`t1Vzay7c7Rzy(2<^p;I zRj?jyx^P9*p>jNG71nM|t8!`%tN|OZQD7ptWFMVJR*yKI1vOJ?A0f^+_Qk;r=@&8- zw3$r$&0)9Zg9t8|Xq#>wQ* zUD(TOg)15Wb|I&}6xTH2{J_H$FW$HM0)D7C!r6Dnn*P6~Kvy_DbmQaiYv7LRp+-yL zWGLh+NjI#6&wQ*B@5OSnYwm6PHX= z@@0@6Z*sp z-uEw1gT1ktZ`4f;5F^#XR=4!=Nl8gsPeBjKR#v>1&6VRXdo^CbsApJMDIjucwZRol z6l8hz;;ziV`lPE$%HxVSf}J0AU}~nVrSGEGMtifTB75jtFax(WP9B`j2P8{2;~%JvZdT zWd(4^|DSO**NiS9z(u@XK#no z4+uVT?&t;%x-@{0A9u_f`T9P?fkjC@ei>;Pa{0dJ17HP$O<=# zu;i2GE{){uGyO}8cFeV~SF<^>O5=48Tgt*{E9OOp4-9a;F7cHiEjHqB11(q&kN?rl z@>EXh?3f|?c*B)n2+14Qfmiyx@>}CAuZEaSLi-`u)AW__<=Bd&t|l!zs84{k#Ospj znI?5u?D(=OGIycWLs-mka61Yw&Dft?zCtURwnfeM)1q&lH5GLC-GFpKo$Ztf6j$OB{=YK4ko2J zCG{Ofy_ODWK;q$^yvXVldU-l$8h&lysAFsW_gZx-6$WqA=j~Wa@Hz)!WPL4%IU+jM zh?ra#MJa<&`@TJt`$a^-tW`e|ul(W*Ar9q`HNIb+5wrzuo40hEW!hFokJ@yR<@n=!GTZ=#}WM5SXvCSDk@vSW@+HHjB z0aj$gqRxC*Ty|wYXH0<`r1N}|bmPFAL702&c#G`G6Rfr%!a^Vx_@Oc~`}Aqbw1LQj zrNIdYRjo3pPpFqlShanfXHh~zLhoKFJ-op|HtSSHM<;rSMx%Xtk2&i=h+pHpzCI!v g6AS1Mrk|Z7DYLFG1bqtx|E&RI19Mcho_p;70skj{@&Et; diff --git a/images/ic_scan_icon.png b/images/ic_scan_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..77f9f349f398886b55abb83dac43ec5395ed10e0 GIT binary patch literal 829 zcmV-D1H$}?P)Px%_en%SRA@u(nMHhxf|9xxyUwbX_mz(}_{kY>xy^1AT#&lAbpdP$t=)%w6g&+Y`e1F>L{VB8t87 z@o#3p_SWnujrV#h*fb#CWbv&3T6Bz7Kb~5Fd^Lxp*XU><{znJ48hc=lq#K3zfbD+3 zs1_0s#e)x$;{Ujt{hOP(g(6=_rJaGo5H%T4udEU$5t3dvdHy8#wr2u;B;73B#I~b^ zSgC?dk`za3X=Xd>Q&Fc1TPEpj(M1-3B^hY7q^{D~|M(w>3Q46Baaq!WA_48H#GlOA ze_54iFQKxR&@7;G-ae2N)#}pBc2uLILlib!(ygLXDBn5hlyspC1-2JOi>YevVUj*J z6c8V6M`K}g74R*PzYn5*Gyyo;iyqk~U^(y@c#{j#Dj;e?6+0|xOFoc|dSnsxg$a@G zX^(6O&@Gw`=DH{;vhj-*btzW>+ko*6ocE?j_9|LT4SYWV4oW&z50mtq&YFH>YdGoX zP4U-uv}zXvAtZ0lYBlwemr%meX$eSD23mq?9TIH;WoPF*2)8gmT0B*d00000NkvXX Hu0mjfEBbGV literal 0 HcmV?d00001 diff --git a/images/ic_serve_normal.png b/images/ic_serve_normal.png index 0e65fc0d6c3a28e5a765cc90564907edef42c8ca..740e69e318c0ea9999c157c0776e82bddad1a956 100644 GIT binary patch literal 1390 zcmd6n`8yK~0LO=^9WifKj@L1Fj(N+GqsdN2WF$mkmFcBNmRm$K$D&Ze#FAXq+oZ!? z&!W(>Ip*q^V`Vi`&d9ab`(M1@=lOg;zkYxEGDt_A6(H&m005xiLd1J*8~q<3x$Q1% zyz+fpOp=>7VcVAf%T!uKJ8qA&i1s>q46tJzD*3!PwlWK6=)5pet@n7K6diF|&{bf{ z4?W(%Dj_%|S<~Kgb2WxLZ1-ba@A(&$zAFI$fL<W+pL?zsd8G6piE-}A( zHsSi`H~L-6!Xlz$Rns$ffq861EU9pg*vLgAf^bWHD$hMHeMM91W@yE6MtgW*MR(Yp zB-nk-oz)jL^X(&Arjg*oJ*r`)#8i=U>!(@Q0Ocicvo&*_oEB3zZ1*8P3mZ_9F5TE#bXs z1U+ZCF+mne$^J1{ghyZp20P8H>=h?C$cEGD&E~e#{XB#Ag*T1b#Vx_cfuZ8~3wc>^ ztJ%%M>2M9QoyX=tt`Tl@j)sK?Rr)Ueg3%6T1a}OtZKR;mWZpbW^{^&6^+~>YMoB;s zoVD4y+Z<%F)zk5}ZebtTWgn~0%$;Qk`Nk8fNyXt$hXB1!f*X-YWp;)mHm2u9VXLj> zM!)#mkVz;59rLO=RzuL-Xwcq3(VAaYoGVSZ`6*{h-}P({yC^GBS7ly=G(h5RPf-C< zpgXRn-0Y>Nw!^5t5}N1Ba!ApP!kadFdBtR4WOuDXY52!zhzF*x`Z;j^grQt#bm9QQ!S9?V%MPokkSta2w?zG*OliV{ z5c(Ga?48|VCGU!l1Faa;{EAO3!;SZnhr1%>x^*O>cy&hJ>r*%qlb-ivGrAk>miIh+ z!CXTV!g`EblP3uRbuCbvar0%}Pc9CQIXt?t7rMU6(u?sepL*o9BB=xHcxn5h3S&do zxxe1INzDm~qGx$#2by#ftvNKw69a{Nae<%^j$B!NYF2{>=?}N4s0LhTxPOgtq_l-VZ`?4QQCCDKEHs z5PH!?xPF5?E+eNV*vzHK6gIVajd4dId%&)hei<~yhP4EoBfq9&%SK~#90?VAa(mQ@+YLADTZ14PROEk(t~ z^ieD=jFhr$QAul@MnlVN(~4}FHp`~cnk* ztKJJezs~>6d+y73zwLd$`&~xQ%zwDtd%m+g=h>g<>(}q)@$zVBnAr}FLmVG;eBW`6 z;||9^9RGAIa@^?niQ}V=gB;rz*ss51cgJCl;~npFoaT6!;|-2|9fO%y<~{R=7~~k` zc#Gp)#|+0D$6bzx9m^f79Zxz|Iv#c0>-dY~TaKe00~^?HxMQ5-9gdGVzU`Rl_`Tz5 z5&aL2Upg*vOmmzfB8@Ej^1~eaIZkx^)N!BVImebd@o&c`9YbsE(_b&iYrjc^{*B{) z$6CjW71r)@Y;Y`fT<^HRae`y4&b?h31c2SYs+Z;<&pS3ZK!A;ouQ^84*k^#_RU+10 zan*Y5*HvXte*c09@uWEKJC4`YB6>ZS=Or%Eq8&O2n{IME;keE5N5^Gi#Y@B`vmJkR zEY{!Qp21c287?uo&~dvilD;@UuX8-^cu;su^EwjZbctx}`!mN$jxo(#e2C-KqT~a~ zK|1s@TpXGFv^F`)@mk^aj`uh|?)awTy^ei)*ax;Bs?Q+j|4N9=t3K^`#DbFjlZbn< z9_2@l--*zO$tpceJnI_AuPrD`6!(Be2!I?SPY*dd6IMgP{oI0_?c&(pg507c2PWWm zuh8Fz^t8F=BCj*VQE@MTxZUdbyknAMZ(U@VFhb`%-0>mDm0Ba!4-oJ=&8g24Y0>vP z?h!j}(ZBrvi;jto-K?O35rM|(MHlB@?{2*^oP-%2B|`SktpVY8v|tL~?D(wX2Cda4 zf-bXQEo$ooEyx8gx1fAD3>qID@Fg91NRf+cA1-r%1x^28a(NUc{sc;Q0z_(H&Fw6R z?OBd_7W4x|K$QODI8T4?*%`g(Z+L=%WoF95jPxFbe{_QVglzR z1XwPj@YsX%lhLC1?k@@`5rU4LOE|~~iPx1qNCA{G@QzQq)fpFG`y zzt5!qT2OxDOE?6wh^=3lup%!p--4Gotmqy!_CHKw5XBBN`xTI%c$EcTn@KAiUvP{q zurYFv;=_5m$1=+Tu+!M<(Pb&UD(Bcwa=%J@KdQ%_m7h32nM4RX)v^Zu?#t;DK=`yXiR)jsjw=S=9>}ny4 zv^3E@_y-H}6BkPMBLSuqA%NC|2*+87^xy=%%-2{0E^g6b!MvX&){pv)yDrR6yd_~( zUg~tmZY3OGj0H~;LLAVWm)HL2nNt!DfXi`{Z_iIeE~3}Ozr^}`_2yw)F)T#4=(Ad#o_QJzLWH?C=yHNx{0pf$4m7h#T_P3gd-;B-1 zV;a|{^A{en02FYZvn;brL`bq_LVog4UHBpE?y+G*2es)Ag@%Q!_AEW-X6d#WBFv~t zA9%Ng%1ca6@&Quam6Hg4c*y*b-&mYHC;=Xormgb<`Vc1L%ZV6lmi(OGhC37*7DDW+ zElab5nOm`b?n7j1kJkrduI_1Bgb!3?n?5!ygx`l+$TLL$zf;=(!;W2QEwHyHKAdPy z+{c#2?qv)M6(%lEL1u|A-l<2Vka9%53z3z@F?zzfmz}7@P$6z<2;0n%Tod|Evyj${ ztWR=>902M5`f?8zDmskIEvvRbh!tY3x3~B{4G#-J7S7z?Eo7ZyzL6}~ROz?+9!}K6 zi8xuW9)qNq!NrtdON&)sOBfcCF0ZuEjB!(@r*Wry3`66T9z{3Bu=25eQ=3)YV>@g zrI@i&v6_X_BbFf#N!7YoO~XRt0+xZa5^;1)F2WJy`bazXx})TKj&!`!LJ54GWyMhR z)D=?JJC(H=oPd43KuRV}aNZ%}P?IaAc39&qG1W%O{>RqcX@d*?Y@vB-hq5<@6ZW;N zZy*u?cB4t*?859;-#JjuwCzw$dfYN|2O+MNJ{VEA#&2-*fub(TC9UidGfw&Al?f5x1ZoR!EuH=Pb?YfOPsERx-zZ{G z4c@cteJdR#7CNc8&;S){39#Zbj$b*BYr(#>($G5)%UrQLY>6&U^F!~1?NW*mffkn8 z2@zuD1;2Y@8LTLRQ`|@$op^bA7IAdwT%(4!zGbDe{TIMJbNPSOAv*|RrbPm?# zRB88E;Or8iDY%Zeb~$4r0^MSS%6D6LHx$++DjQp1{T;tjR3{g!o;aCzEy&a_Z#Y+D3cb6DsJm?Sw} zohU|r#&4KhiG3~PBe^`8-21G%xkJI8TSTGu>d;G~q34Q?wRcxjczj8kk~q2m9ksP}s!(Z+W0q>JSmg zEs~GBA;$^GH%${1E(u;v6QRGUv4=-<-b@vu;mKnsG?7NOm z(P6>inJiPtw?*hg!C#;$i#kKg6RT|>vJ3x>+Q936;C?!rvDA~(4gN$w+T<>sAZZfeX? z;ER4`o~FjM<@stO4mCM!IdL-~^xUeJ(K=|yP> zC1HFhO=0uRQ8P6t=mXAqTqNW`|K+Zfwc*0)Y7{sZ@$pcyHe3Wb&<8v)g*jZrB<6t! z=C1T+Q2&kqn=zORHl-;XYJZg!GCx+*`p|O?A)L(covvongN(z?R6KMUJ zfS=kFzSN!w39E!0&;jN`!hB0KWAHUFrM=Hw9oX|Pw8j8^Fdzy|pmvq;8p!UU8hj1W zRYLY$L+E6=2aE=qv-Lr1BPAf$+DIWdXKSCpE`SJ72BDzUFSP^77@w7%^u1-h^IPh8 z4zlm<3-b{8f~vE1PnJ3ofgOZqY61Z#0GMkGg%bMvEWiN%`IacS13(1yB)|2YsSSjD zNQNk|Snf{yr`&`7A$z4KZLU5TY#0GhL1!4W&=v=+m?LG=)ks(w_#wK|hXxs;2|U+E z%U~Vkw~rthki#H2zjSB7YT(L!=}cZ5Df+U9GYAF&7(fU^p%8Y&94Y`wVf5aDMlsBh zH;kd;|CSD!bV4o^LKS1Ubng!1<3M@f3z~zB%#jM%^>TLx8S6_QEc}lwt?vcsOdrVG z+YYhdtGXKoz5pcOtESfwtn9qpoV#uO96xvV?|z>%krMp5qoblEedvJDw^iC;Usa5U z+R;Pbx3<2nuPjr@q>rQht*^6_gDoy;D;yKs-lWqOr-lhH1N^-m9qcU(wN(@ji;8^T zWH1&f6!Q4!$Y6I}9TtCQ(xxTIn z`=+EYD>EZGDJC)^EG#6*_mTS@8*6iYeLd~d(vsi5ZEdVjDYMgKqoX5T?f7O~eHEsn z{7p&zYjk>SOsKc3>-~FYkJIKR|LMoKw*Fn7n|?iE;s^r4VQ-{+(bA@akl|-3Y9ZQv z&wrdHLx@dQmW_=qIY~gcNMc`d3f;V){{P3scqqTWZIi`wRbF=<-t0Ne;1E(KGI$EN zLw>b&f)V1Xb6@8Zf&Ji#068q-(Zx7^@uLFdYJ)PHaH3>_xH@rlhQPjlmk_9>G@yi9 zcT02Nqly2J?s;rwH$mHx@Heqe{a50-zt4>Vt@uktbv1P-GfhlyU`)n@@Sjn=Z(@dc z)YNKgt0poO?bA;ab0aR6cHpkjMZ@r=9^VFpi2=PSpIv$U)ZXr!b#TgQFuJ0jE!g+T z@1FVOz1xkODoSoNQaPIboBy#mBsqnWXLr3sDCp}Cl<^}ETiaP*x4)&-g%1~GYh%M^ zf&=m57kb8uisbZAFSm{?iKQqGY@6S#{BjcMn6=fNuxvek?8VE|YN%qRnP=5v6rn%I z+BBMr6E{oClYsy?dT5wcS|48xj z{!@leJXA1dCvwcoO#2lr$2u8bFB^Bb8pLu7m%lh+!)e*esu_XABW7{Nn2+2Cs$=X0 zc!LB+72duIOW2q!!efuN4mq#wxbyW+2|qq;8l~GlLw6x$em9o$k4`SdW~APdjrhp> zg@pqXDW7C9yj^-uz4S!x!}VJAGpYJ4B3Fl_r1V%>!qE6r znvK`OgbnYTiOeo}xO*O`f7h6!E3Tz8sdJ}9@sqEM*q<>AXKEB)3OQ$KIJTtp-}SNO z5;Qij{h*`o8lhODpb)(^9x$;Oe^n!NrtfkoNUI>esRZpQ4w+S#BMe|mNX;j{D+^FP4yb5yHqX088>5- z@>|Y}OvD!__#Eb(?&K36cX!Mwl*x*irw9|L_2Sq#SdH@ERODKxp}AX8e>h1UWs_K3 z`h7Nz_}y^NRU zpLkha@~$w{yDq8o@uOU5LS`}}{f`}0%pJUY1MM0q0v? z*?!ZSOa8rWY$$$+!oksuLq0q0vfwN2{2++yxUX6iCX!#gPy>F$kg_5%$$>vTbG>hB z2zWWDOlukv5PTu7Zo{IP4Qkm^ft;GeLwr2p$zQwg!o(;eBOtRA)|1R;WJ<{6xlWuE4W0L5DLy~85t$$GKHKG{z zHxs!3a;d$>GucGjpzju&+uO-XdUHMZk#y3mvDTWg(jZnc1nA!APj(iH{r{|UBnSnU zQkD2Ew>YHEd!MPTt<>w>H^w{|)!M+Z&TZe}9GWA$KY(f@QJo%A6mLdryI84heBi-@ zLwtI3+fvElWQXWG^9D zmS!#m>F_4~F*-ze%ewG@Y?0Uc5w%-$_F1N}V6X8)a^0@a;na?wID5wBpk~g=f zbO)7pj3}5Fue#tp<4IChv^lbf=JGmq=gmaPiOfQ7mfijH4#idc|4TcAO4>A9kXD}*g~W!S<2GfbfvP4(qg&gN>N$n{>lT4*Yv)$jHD{c+CuoX>gR^PcmZ=RD8zrh2Vd##NoH3IJTU z<*wdzE1D>5CS70Lw55w~&{pqdi_o(Mt0cO^kt|=k6+lgUq98bxtq-8F+0E6(N18p@ z&WT;M+PH4Z`Wv9@V-J=S_`dX+JW|I7Ltq7yB1b7DP?c6_dWQI^tTx@lee$@gbII>$K7n0@O( zv8gl9G&N#b*vh0zznu&0-LtNkmD&F=T>bvS<4~Kk z>yAt2NA-0znfn&D-mw`MX;&8d{*#(NB`f}B$1dB>n9;m z$cv4c*aJ2~I)ie8m(X%+VC<>!AI7tz$Mxp*f48p;9paS)swfu2OMBD)2Ya zl9SWxzrg#{a+u^Pz(uELnXhdU1c*P+oC1r-N0k!c&#*hy_NK8=vEDV%7MtBa) zg&9c5!*vkGuX?Y%kn@1#vqf4xmNT`1z^V{~>@`I8&<%Wsh!2-go2p11HbDw0RENv) zwNp>U*}``;Mqq6Sg97HnzUZ1I(tv)jXNe}kWSE8Ew*x>iL^J6Z3z6be+F^b67qZ|Z*sEc|P4DA0@Dd{|1~X7DfCog29Xa;67X>!Y-S3WG`@ISOI2!T4D_Ij{);U$y5 zNFXQy46$Uk-~?mP!U1PE!%#TFbf}jjA)=Qw3Jx5+!8g~^UHW+MEh3#wLqK5f z8guW5pbu04RLs4tW3;x-7@wI~HJ8Rag|UBP`8hC5PZZ5j|f#T%<|me|#$yd(j-aiW%j5gI;i{TAD@@4SH?{ z^wD69spCW_jT>HwBrF*V^1vQ26SRQ|ACNvv#M>qneSf0@QAlhAcOlahPsS=Kqkm0y zeDlTj$l+gIe9{WF-0QD>b3Q#Qq2%R@i+!*Wi9xg+`|r@L;9)cC%}}9>osopV?(`>@ z!U`l*$6stg$i`k^|MfQlTSB3Vg2(;c{Ft-6%VzWGe2>HYyQ$r&xox`B$Lkj%oDQ#` znW>ltrxHFBlr}DgG^WA=Lge0>y`|8M6i05IArioj@O(Yjv^-*jP>#&*+0dEz z%x>h1F%!>*H^|~RH1hp`>iv{5wWr?TvUSagb5Tcn_OPp3R3*}Civ`!$g{`uC{H^oT zJtSU|DP-Upc;S(d3$>`C=ntif2CF=!+hy!tq1G);tNrX- zZGp|C^tAhM?wa8X(PlWrcfFCwQEQo~=PTxB|7?BDtbX{Tj zF{vFKi2;_waGBaWrS$TY(M>(MW5e-HyOOom8GKbaHir{_w8m<2Uh;#=4sDPwDpKFG zf6D@nj1V)y_AM$S(@l^KA=HJWEM@O$?&V{4GkwDTU9A_kEL@)95$5Nd(5LD#LBJ)c6iOGciqyIWB)njuJX=}RxeO!Ko=6M zB6N^M2j`8z7Vs}a(#1$Yky(?v)@5*nKe_7EC0Ulbm;2V({$$rv8DghN>EWlSJ{?Y= z{iNW&v4Rc1+bveSgO0n&dH%?2O`_?=qTCt5C6+zbRkBnFK+>kaSYcp~D9%nC1|Me7 zGO9g%@t0lxoNnUhLJlNC8bh$2&;bcxas(p4%L7k`jMooq&&!ir%5+;9cnCaMia#0k zOtB@bA4Gpax)mx02^*V43Q9d{ffl;WAoC-#Rp`4f+KGLUJsZINPE(c zRBJN+e)1+#OR%BtPBC~g1ovKUAJc)UPd+<{h%uy$u9~ABZk(FmYS>yIKH$T7FoiR|GoD%+ zJiSmQ-O=U5%i&J{t*fg%euG37r32oyfl=zTg>qtMzGdMJJbxrHsW6A6f6hlWmoUn! z4RuT#x*K}aIXy<`XL)@P1@2M&uu8!5NV3i|Ds76Ir zlX&-v>ysrTMVIS>^Eby1U(IL=4GO9wHQ@$9tIlH3A;nCJP3gi*QfURhbe-9-WH~4D z{Hn-Tm;28Ix>&e*$KPI%vpL=CN1;dO9ZA@h6wP^i&u(7`Nlbw{Orfoo?fiK<=^kw_V7x*6xv8&smeArIPd6{I1T|Vjeb!!^9O;Y(#UC zO=puf4iy2hglui#)n_JB38$kddy8r8pz*Z6TdD3V!=8NIt2WZJb);E|WW0%pK#JrY zCO#Z0kmkLDC2ER1X;N|CCi2asfJWw`%avtr2d)YHqR#jaarQ;CqdNufh0qK2glsaD z7!jeM&!wuYCv`BXL-S?YF3zD&!m#5xUL_uBt!8`uG*1~Px&_p!P*d?$C_n`aiq1yx zGvuKGghLOKewt6N+p=PFS?c}n>G|r(ry^sXoRJCacd;&He@Y&y`*Y!vcSu2k1|bHl ze5elR2%#G7=@n(B_cx{7kw-D!QGBUy7C)iFKJida$XP*BSv47!ATRLm&U>vI#Tl=) z;z5*(A`(WxYvw5D6wvy~fhr`C>V=os(J_9ghCgQLC@_XS9TuBr{jokEFd=@I9XmAA zOkR5}V_=H(4wnuI>Y%_K=3x{3H2@Egs=`WG7u6b3h*~tTF{B}ZCicF*s?<}v(my{n z!0y7poz@%W`Ey%7BxZN2;1j5gDRQDM+Y`bNo2f8`sJ6kUJV6@?0YZ5~d0mY3)*UaDm&|GM0biZP1JHPYAQnw(Qm9jEaFcHL#{E?_f z@5hh8lfV`TJPZBKRp?Ou15u};^!~a2pOc7NzCb0j2Yn9r|z|C$#k$EFv*s(H9PM81Cj}#tHBBh+L^M+xc0-G0X0#3 zz(B=wIw!-yoZp)!62CEgMVUZn8UOL}#KpK$)0LJH%%aCm)cZcM9ieVATZB~&>Mp=$@j=8N(F0CS$V>N8eM7hkS^i1Yb zacHr~;xs&N$0)59TCT%FO%{^l{1@kap5OcX`hI%JrvpxC0QGvlU#&#Y8@F3Lqh8@M*;~kg5rH{@ z?V?=m$v#b!6rBkP3ry->=DMZ3WYvG8AqNuxHc4wHTW>neZDJbJk#)~UrjL470$oY{|vzhT2IXwBj*RY!1dGQC31A&=wu0Js_G}hAPJ5T*VzcEWQ zI>1?ndKW2q`xVTA=e@z$t~7p7xoqQhZPpy?9~D>5{9p%h*q#$R{~e2Gj^V zU(}=xo{LCCJ9QVRpgIm=MX3t?U#uEm+3qSj5?{X5rH{H~TYb%5D?C@r}sJ`PT zniE=m<@My)kM)68HSU@TaK?DSLk~J&`xyo4*Bz7z98r8AjU2#InzJG2J|p6}biDB? zLM=Zvu3jy;DbBVggtkRWeiZ28l1GU(jbzoJa%n+tr#AN#V`Fg3$CCkdW7oQWPFNhz zNUF6(CEXST9qRnUbv%NZlt%h{V4A&Yc@{gBn-i#+j;^`NCuLW8+5j<|tGtBD0u-K> zdxA_Aq9fXqbb=@S$J+Ql(dpk*_P3Ua2s0BCdNUOpkYlBX6MQPq;IxKFl(3~W^%&;w3}#QOf-Eq_ z4EgE~*!y`1cvB>;$f({R9GqzKD9sSX=SJD?0^w}9a`^#^iEHa_BerWZBN^)^Ov^x-yZrWa4y+RbKtJ3-217wFV35SB<+){M)_ zmKGMQrKV60k?(+;@~`M{hyoUZZUy!CEGlG^th%1YR;4HvMY43YhUh_ZFjIu94P3*F zpWhCFWZfCfWD~7){e3Bp$S}aeqRN@Cjfh}FgJ>uq?s-F}qW)myD2YUkp?`uoYE*;u z1KO!`9FL?v%~7q~A4Iji69@Ft3j4xY4%*hAtHLff3d8GLE}&=)I7#W*S*+`3SJnE$ zTIbh|+uRK1+(%5E`^pBl#bRi?+kX2`>|)wL2UO%2_qwi@{e%WDSC;=JIeRZkji6vR zuhxIYc*<|DeQfl?Ql~Jkn`}V+?W;+7*EW+!NBc^n?vI$rc02Y;(sh$cm`>)K3T7AQ z2kwGj_@OUu0k5ZHaqVpndc4rMd@FO^5#hZ&v|OH1QP%z0IYKhtn=niBftcJwP68C8v)pbl07&xNJ$uvr);Gyt0C*JmUddjNv>kv80NgR5*Q3E~ zWbi04Y8f>EBt0F#z5sU3wBi{gpP8AbF}bAE0qmZs^GpE8kvuCi-_nwg5&#Qy{Jh~_ zOY(>kmXvfLfWsHiHCiBy3IK&Ve!iccNAhzEbQ~l-7rnKDh~!~&b?}_S%S1nI#jA>=NnYAEL+Nyb0>F)t z^lbp!w`iC<`4c365KAk`GxWzc==m{#lL8QaTchJHq2pf!-~kP~PA0i`jSjcP6IVYe zxs2pPQ;GWgeGCAwp^j~6u3w_JUt z(~kuJF9Gn;NaGfn!M_v0n+q9i1Ibr+(Ix2x06rec`!VUZG7mKczq@{_fbeAS+VFU9!7GkfowBMU=~MvEj%4cX)H0`nV*$WD0bISz@1&$n0}x#7 zwIq|Pj2y$xf$uW_Vj!LXFlVHP0Jtn-;A2R76K7>b(!l`UK8*kkT`0*bfS4!GTS>lS zWqbdB8(q%<5Ic|9lcYz7L1iqTfUkr-^{O%UA$j7U7Fw`yN!tR5`6f)uK-)GrT70+0 z&QBz1aICCI^3I}n9yf_JVoQ?Vq8>~J9|0tJEqqAC0+*0{Av_G?HKHq_{w)p#e~Lg7+r?Ta)}vfi{jpg(M$i z&pems>+~~{_Z_N|g8`sn=(jD7B56N?H6xPjP3-gkm>f#dr=Clf&H#|KLsv%zNgo05 zvYOUk1jT~V-3k~b*cU$0QguqcD2`Q@=QDIy!l|nPt$Sj z{Yd(pe$9y_Z+ZLZyUDfu0|1U7`RkMcB+VR8en`?zEZNct0O5MnywAJQ>*bm^bFKq0 z`*zxJc0Z(fSEn*E^k-)`_E;5 zDoM{XvZN~jzSzNmGgYy{mqe)wmij$0|LIyxr;Vj-00h@@sWocpQ&?d#5d7YnUIp0G{s9m4wo@W1vfz7oKX>}2Zu5jEb% zZeHtAAO`?-Z@+K0ymA$cy4LF0u$pK+3bX=1xSwCQ#=Hl~U#&Icu0ngl=34ZYQ=rR9 zPOjSmz`Ij1)(ubO_FDyGt<^e8dLMw-N7{E7$)@{~H)d%I0N=-pF>^eWWXzXut=fBZ z?P|DqayiN54XGpm8qTsmL(8nPgxKNV2z) zy^gAq++J@303Sr$f{m-o#m#~3bYt<6<(2>U$}d-ImV_6P+^Na#jQ|Kde6joZD>M0% z(Z$e3^GLF{ zkzK6pi%>!gghNOkUqV@F9g^x^R2Ov)$=C$(#%k08Ab78&E=OKS@^Pgbw1~c*&e~^H zN=~X4se6~al0F%3KsROInB?`b1Wf=iDROcr3BU~`?dmkR^xXNQ1A!!aPq#TV+PjWK zJM{^$-@YeK`y~9>en8S!pazo`ly0t@4^uo@GQC{PbuH#<6>C#x;)+rRlH~38yEo`F zW$qc_6Ht2xF}VzM0pa?VZ|^iwrJDEdRizr3qo+mZXZatrJf9y71d_fSxRdM5GOg3 zsaj5P2F@@sjJd9#PV!m3HuQfJaew!3;zyn<&-?-pZp(vQt!HNdgi*j$sPBq2-a(Zf zwFINYs9~=rY3kSFBI)Mv`mxfENy)%AEiqYx*(;UYn>)gVUHdqJ%VHB{JYV|YlACj?eRkA{D z6NLSKAJkN(x6Wt)-OKwvCy->~$||>^FNHp+t<7TTN&ukl!00Z0aqk7-y$8S>B8}RD zq<8#^izHvh{7FRddr7{rc!5D-gY#!=@87z*l>k89#>Dm{ztf{pe90s>`MN#H8~P|$ zlBwup0V6+8GR6j4q#BaycoaWK((#Ns%LIT7(@g+~7^{K%X8HtVfU7C#*gpZ&BoJ7i zlR!yhTn6^$snighs<)NLY-AYaGEmac8$mwvt~z;MNpg!qqwmesNb(9`o|eVG|CMAa zob1BY8Qn%u2(32sRk@*j$e$SY?+5a`;v@p zNOkJyx=f=w3`%(5jO94Evm;2g6B-;t*57e(3-_zZA*ATL|9@qJJA|yLOIT;ekOoH( z_sUY={<+n_@?FAKz$w%hL7Kk9eK>{ozV>gJ4=l$iG@O2|id%TyE#`SUrWj34()5JL znSZq}7WOq<^efT3TX;)KQ@3L&4iRk(HeC#)|GbS_=db z4jF55W|e=&{&xBi6m-? z9o$q@14&de7E#hAY@&%9NiR24qgR@^FbYgWkt4-H??jOS025X0cmc2!s#pg+oXDa_ z27;xLMTb#fqKh9N0P4;^T3;ARP6B6bo&rWJxA#XEFd{Juw6V?RSFwdcodii!xT8O?fc!F zF6-^@Gy)Wu3)D4Xa4(xOeUR4DljBP3ng4tZvp)d=096{a|>scWe`l1%DslE*qqmt#oo-=#cB4E!@6j^r6M=EBeb zaOWEYF-e9zYuf=sr%T+Z>YZDlsr`cjAdCWa2O1wHS;vbzbf0FGFX>_ckBDR%Z0MiW zWefn=E>O-^?elxz&>{JcENhP}u_WI#vXf~{wj^n)*TH0P0EAKCD*zrJu|ls@bIY*0 zq`kw^u3B8DjhoVS9t!~W0&sGqakW>PN*kgteUeOOX;RCo>`AgVluKXrsp=gI0O}@# z?;!csWf`N7awIvVt3$h1WfY^^*a2`V$-0m&3-woUr`jwixwg&DTbBYQIeyPGB6&T( z`9&9(ex}PfXvIAXQ8=h0bc5EtcVzMtJoeCgEBYOvuG1}Rr z&XNhn0swOmd?C`Xg_cQ@o)m&AdLmZs@RS|R&h1Dbr;+?xDskQK4J;!Yk^FO4y`}Pv z1psx--<_{xC+J;r?YDts>^q*+Bgr&&rn9R`=e8va%}6j70Gtb8=SaP`B6&qddu~iB zX#;=*a`Pq9pGPuQ$Hr_87dJ)`fqg6haKwvEtCl30T|Y_R2e3`y&Y!8fhUDhCx@#_O z{+#4}a&?tXpKajM6=(>?G%Lzcz>jV-OP3UjAylpMzW{jl?dK{0p8Pq+(CoQwqK(&+ zj2-ISESn?)#Z_Ha3;=M{&+S`O{QY5O9`zWKRClsCQ|&F+lK`Ap7h@-o zUpwaEi)x~w&2*hi(i6*Dh$OdV-|(cGRh-c@Rp2c~+1v~z)7z0De5-S~cI_&4Hp!bp zs5P*7&#LRU&>io$KPiC+*+7WJMV#e7h~#0j|Bz%7iao-UEF&a1A&hRF9BbMZ(v)uS z5x|v`v`ZK&cg<{+qkwzO?x#*V&$e5zqV5^aF#N{ni0@W7*tRFXgUToXF!vVu;)#u! z3xwjGKUb%ctYhwY&;AYEQOKwOP#6eVQM8+SqXk87sxwE|@v{n#5&a0W?#lZ%O@ z(*f+Bsc^I%zY+kL1A_SpyshiU%ws*w&na1l zK6H(G1c)^_a26Q|rhMBmlIC!d<~J-Zl00ko>YyqY1+O1>y8m7oSvdgATUL@sgW1U7 zQNq%jlcgjt^FAHQ@!LIn)BV=3q^vXmDq!%%i(N>@Jd28TP9V{Cbo9ZGa!WL7%>bZ; zG1jAw2>|P{*XPPx+4M{{nRA@uZS_@2*R}?-?R1`sZ6?wy05e1=4KmjL+GKYXV=m@Ah!b|HbGa80S zjMJ%zOw_4}3OEo1qTm#UE>@5_MHx6MqYPUgD1~avL-B!gNtgR)B|O^x_lMSb6B3es z=R5bi&vVcDX`qHClgX@0FWgHI2qpgS`rn(sd-sn?SJ!Jmf2bK6PA2}ew8n|GCXN@` zG3ZxV!Oo{>G+NtO-P1-(Ad|@q%P#Qtbc*{z>wa%DkVsxpqN3AvV2-VdF{vlZ0_`a@K8D$pCfEOwKalSj;36uvpL(-)24+ADYk%s zfMX^LeC^M)3M76V9WSW(z{Z-HO$9qUI)_``8d+JnUW{XiC1Cg7E1T}$m!?XjuO{M< zjuk^U(&@LeGv2yAW$|G$E>Z#M2dc8Gs_(~<5ozN0g}&2s61OajSH-PTKx!JNoO?qU zq>0Yqa(d5aR3s<)EmekBD&SZax45E$ABO8llenNDhm!Sd?{Gyv6bdLRxw|+2OkJ`j zI%R8X2)(^;p}YGHCHknyIjJkcW^WsAG(y11lQ$zTTx!av#7+W6XMR+KJ208%U}QL% zKtFlX1LwA7S&%`e$VY6ZYckc>>*`HY`L>8W{ zhr*%;3>JWCCR5%%@941|e8dhBurHl+wWdbshsA~oii`CCRxnd3y07mYM8_6FfB$0kyS{XJ((S<*WOW`te{0Fc@@|oue`f=(0Xy^u;wGu0RdSj zZq{5ZZ}P?(1`42pyht!G&{mrOM6`UV6PLYap3i^)6qs%Nrc|n~*k*8VE6dlA%B3;` zhz!L}M-H=$Pyk5GKv8jhc78##3?1=ush{f>pH-sE)qe??PX@-o!17^l9iZ5)pmoG1ZHOih#27aWGM9+z6A= zb{-L-eN~VbX+tY4s^3>oSf50tLsYP*b5_DMV_n$)!!>yLs0&j0W0wyDoR$scSP) zH~Y>VOTgXD3i9&npyb>i>ZT|7=FYJe(~?ulWsN)$We0R49WXJSGGN!#)G_e?=1mL0 zZ;?GzUgpEm%o~)saSdFU=0ID`E|xuQ@5Qx&RV!S<&CLqzryCEk;q%3C`PUY(u{Ho! z2oresM39_Pfz3M_prwT#&{&~4vNvz>;*g*~M_9-HoYa?8`Wm8Q3P^Ed1!zwik1qhN zXSA+yTE?O4l)_{jPDL0(0PYgnuzo%S_&Z?vYUYa}G3g=}b}S%b3E^zw$=Va(TuBTi zUkU7D5Q#LCevx;C*u*%;sFRZ!r0rGuu2v{4{Xi8|Ul&jkO%+TWqc|7YXawy1{tDcw zQ=R&pF=HA8FLy@gIf%tC0UhV)&gkjEdoL3g+4(Zw?ws7(6jka+BLFQQflva%2NDnn zr63ea;O(H(&c?<7GLM9gY4+k`J@*j7Ty$*VW3uGz{(Z|({t|1J(KE5(?o)7@WlChF z0BrDcs- z*}1n#pH5$gFd;U^L#1=HaghLJ&6utO^XAz?LY${c9x?&(u^uN_Auen}0F@^tig7|& zE?{Xn^!@W!>vOnxsR?ShLekMin>Qov%yy-BcpXCR+wOV zdj0>b$|xHMWz`y`1&)uQIwKdOs!F4>#Pl&#X;f8bkU-KRpC+p{Wcx;0 zRc5dqsQ?5*_9a z4_1x}A-sE{EKPiB;KH<6D=%D-Eid`+*fTJk5Cwq6B@Joqq8F@2o=A^sau_9NU6|&* z7Uok+!^2#YKG??|ibe)Kip~}{tbOvd*AM4&8!Jma&dPAtFWfrS_Xh?YTW4`W zy_uQUC6djhrM3S4Ap#)*g9!`^3!j*nuCISuSXfLZ=dP}92n3_AUJWprHFxe*L`7W{ zi$9N!j;E)Srl#hao7s(xEe{?%uB>F1mos8wVjn%KOGzOnC8fm0;UgjxWpF?p94%oCPSr?N(Z{vuPnU!!qaZR{#Jo0OjI@@p$t%@Iuxs zQjY+j`sw>fBf3JirBt;zH9K*Er@B?G0xIhJn`BIk;o_~+olkeAL|m$-c@#z&q{{n1H^wuc>Y7R!kN11-ED4R=gJeLKF_F9Hl8eY zJ~YG0-5vX-@;Jq?;Q&9mYlk8G$0(ZGW6}TQUDHZs-Miao%M4bg9sAC^G0?^@^T*qm?I~VHq$M@)!0Na{yhX z^})tRs8i_{EG_DYYX~fZG9Dn!NjQ3vui6(f^uj2~O*sL0d@{-Wj%~1)DM7f))WweJ?`Qnsn|_bTnAU{o>Y#LCrvEtC^?mr8+Q- zyy)Ks_e`_Ukw%WC(ur31{ov@@nc5MB({wM3#;9H&M1)Cp;@kBmBRq@^uZFkRfwD{XR~rWZc9GA)^B8otMm>f` zZ(zaCR9Gm&^{ZiEM&~@u``D$v?Mrm)$h+F(iC-E&a(NF&0#Cjm47``c4BmM3QAe@t zSq#bgaF&y8Ad(o-l)Yr Rd1~*X0F0X;4;G7&bMRn#%s9t=9A-)BZYRW0_5jGcGNPq_|)bE*RjN zJBb@=ikXTikhowfvIs6|rXq?0iYBArf`YQ|9yK+$xA!^se1FdM^L}!!fHV^`&v3c- zocBEMd6)B^b7<7)|N0}u&1V!^GrnX5F=7}=jH8S~1}PM(cS)*Ekm}RgA?In5exC6T zqYq;|V<{tnk;XX3$Y+!=u9+0LrrzbNHfgHQQYE7|<26RJdQpajHfFS7yvgXo@MXj^ zau_#EMD5~+l7A7$_>S=*;|)gBx+ITTe~$4k!-ug|&E`$UUB>-dC~#lNfUIIAd$@9~ zXKQT@HS;epx-nKVj;Mid*OIuEBDa<7!;IyO&(+wCpOifO@fGFk5yA+>+jU6V6>h7s zBGlO6(9AA*xJ?^I55@sy;`%1;42+qiIJD7rCq=#$<9}<$Ax63K)2FS#T{ZS0#if-F z`6j{$*e@87j9ZL*4M5(3dx`_N^b|%+y0(Nca{T*@Fku8#LlJidxU68j#c1J*JhXe8 zF@cdTYzAyq)paT>yFvv8Wt5j!L>DjSGYaJ26%|)&s{puQ@f*u%YiR|3`4ZzZ#vVqQ zuJG#WzkemcoSaLPl9EoFH^^Z#As=yzz2-U zs^J|Sp;xZlpu)m(N>4vd8#ZjBxpU`}pPxSs8#bK0yu9UeSlF+Wk&#&!3fxiLV1@Ur z6!1_QB4}z{q(J`i{jNe5h}E zxsWbaTwF<&mDh9?xUabFV)S<=-<&a37{ykNSqE-YR8&EUi92b=jG0V)08N@Sg;uSK zpuKw!(9xrR(Wz5s>D;+Ij)77c8;FsL3L&3QoH#`h5v#dvGPlW<-!LH>O59T%!L_+r zfq(XlRg8ahX1}PYoc8ZONYkbT(4awsY08vo6d%8hPM?m6oik(z3*T#SvWFn-%b4{H|k4m^?Exn`X|OL!O>PXv~;#bm&kT z<>!|?LL6=3DhCgyQgn2zbgRXSmyo~z7=P;6u_JZu`Y9_hU0STPw8~CA>|}VF6+rQH zT&FW;60YO!{tb;E|AWjrNR`gMjK7hYqM|m^^yxp!z#cKehkSg#m$TogQzz=ud4F!-=e=;kuopC{@Gh84zcnNjy-h-AdT|sBgT(I=t3m5Wf$Bx}hcz={6 z9T+%^{XUW+BiGAkknh*8KP_3Zj9u@X3~U<;U{e%lRv<+@yajX#%)Y<>Xr9GEv~}xt z8PHbkkbQ!J7Lc1;U;aH`y3wUeMT}zFvuD3_qvgv(DLMIwogj7qTvN;nWHTysIORQP5p405Nvc!O^xRM7MkcF%U>)NouRkH$T7?pZ4@EZ*t z>`9X+Pjwjsa3L&oAt9?|Fe7lSWT7u)AfAv~*RI{5s{pv3F)M(Lw5=>OaG>if1Y#(u zvEU&{U6s@53mK5*=Qmo))_+t0To0QS*da96fz;FtX>zOsNP}n3UUZp>s;gb6N4!Vh zWy?aPEXagxO$D$H#G4feVVuzEj7>^H!cOYj*PSLzn8>wE{DX|5IrxJtv}H>?2k%5F z3o;>FQwBC%3(X4PRBV^-;Bbw=z}d1E8asBp^mD6P$koiFE&8A@WPd;wWZIYn)Ivkd z3Um<0K3MC(3e_k|VH9GhMp2c*m$R~RT&}8khi_@Qio(hBj!6KIjV>kmaf*al$>t z5nLbM+zVqzwp-ZPk$)jQB3;g!HCOJ)kP1hQ^5w1NJh|X)+!!r^XS~BVv_V_+L0`zw ztb-goGH~>0^STl*l(*b|q@?1A+GTS;GEKUq3^dk^FCd87oM@ebe625r#? zeQgwRj)N|6Y-goFOUB2HKUG65!N#eCp!4VRWX-c_Qw%R)D}T9G3Z{AU7D(V3@9+(6 z&=!3(-Nu1(#SI)SPbF}q*j8!ygy%xloMB4krY9%oG84TdfoHtKH?%=pJF*p*bj1xE ztxxBK5zIK;3Khm3fZc)W3nhvZxLKdfnXG{G(O!&oqT$a*aTbJ9KT>gO;&S$#6nR+~ zXY;6$DjG-$kbf@{#!2B<;8Y`VCri94j8p1l(J=P|)xxL_dMPgUuA78$*oC_)cV$Ay z)lz*EcU(1v3*+_@9Gch6*xCv>v3^k)cVsx;P8CK#!Mt^SM|MZaPE})dQ)55=PC!$U zX3C7XrA!p{b4yvGWc#SG>h{iW1=wj5|}w;tSn*dmP#4dO+>G&cZI6WVbv!@$#7FL>*uE4g(6LqRbCfH zumv!pgpsu}#H0T!k)ggtskXgU-=;!0zt@v8j(_%;CXB@o*Rsbf6gZ~7ty68~KYKI? d>HpHtzZ4gpbVG6tpPm2!002ovPDHLkV1jr|AoBnK diff --git a/images/ic_share_img.png b/images/ic_share_img.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc772b52c10abe182ecfbbdf7651951f44c177d GIT binary patch literal 1174 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 delta 1012 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 diff --git a/images/ic_staff_qrcode.png b/images/ic_staff_qrcode.png index ba542c8d4d6db1125f724961ba44f65b86b6a35e..75bdd6b0e477719953e9f3b930a5a366626e8787 100644 GIT binary patch delta 471 zcmV;|0Vw{92&n{+BnX61OjJbx005CuJb&BZ@tvvH*xm2H$K~JS^2E#MwZ7rb)a%I3 z>94up(%9{qr`D{t-ISu#%+uCW?WC{Tp{?2F>Gi0y+_=Hwxx(VfNLl0n000zp zQchC<^b^g;vU^J%3ZZmk`PeVppmk;MNPdU_00BTrL_t(I%Z-!Sc7q@gK+(8Gqkl=0 z5zx5d8two8Um>8@r8W17!(3q;X3&gddv2g8iBy#^)sXp6~Kupq!n=55Pt-QgKSL+cu&x5r~rS9D7FLN_He>61gg zfkt9c5xIRsz7iM-IVpxN2?d$l_JyFRIdV~!Wj)qvx}whshZa!wnE=b}U`jF(ISga~ z947)cCh4vJV#$45r~(&x#kzbflw+&}n%2(@_t98tWUUL8|Ei=lKX;UsoJ58~)nLY0 z`jXE*H%vwZ35J$sdDAqpY?z~#J8atHwm%*mh5qnif&b7y9Nxq6{{bwTLhUlkgW~`I N002ovPDHLkV1kRC@PhyV literal 1035 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 literal 46754 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 M$S6x!NE!wHA1zOUhyVZp literal 41767 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 diff --git a/images/ic_unauth.png b/images/ic_unauth.png index 4f00665eddc8cec9e179bc3ddfbded97dd42de6c..3d7e84dcd09955484a70492e306a0d0d19b0a8e4 100644 GIT binary patch delta 1222 zcmV;%1UdVc5zh&b8Gi!+008vhk@)}s083CzR7C&)0N5S|*B%AcDgf9X2LJ#6+AJ3R z^6>DhqUUpD-$*s$Rz&#L(d>_d_|?$$$HDNbq59p=l}o!1awkPQvg-F1~;}?hX4QsFG)l}RCwC$*@14`Ab$`BV6q)xIAaWUvc3P4 zj@mevt4{HG&g7DU+b$pB@Sxw=UO*|q zgYvU3fI|?s@Ab#>!U8ganet&R7x@rO+sM4n!L2RI2pr`@ELV4^f@Qz?^YMZPApxc% zAL9Gms{%yadbC_W@D2zNKSI1N^&pvOKhR%A4Tz42u*QOv7x2@#w+w}1f;!g{&)4`m zX@i_#*niU8Xa2C@+oHLP34)FxEa@{Jr~;kYB?LLYbU(nF&%2iB&cwF}-ZdS9py1E> z;;ZpI-%Keae=A%$-gf@Iur;Cke*V0xb5wa^wiWs5RSNE z#qDQXIn;q<1&bZRiq8)ZQ}sM7n*j2w(S##D;(s&(s~{@CpOdbY9Q@Gy26&;fvWszl zTBUdhXB}wO2}A^bU7qPN_6`E> z8$d*mYyVxs9jBB0D%b!b0zVGu_n6Q8(L9w40VM8%`9uC*N=}gcc|HS334HP_Un4-y z3?L-9TlV*3N*{ZZk`y?~f4zzfAS#Hae53pC89-Pt0Oi*q1`riYrsgl^7)lHvDt}1) z6FUZw6|j5`kQWTl7Qkm>O8^%rY&P|3))T-5sy|2F`T@8=^{JZ#;O_*gSKayoNTB-FttWs4s%PE$ k0Z5?w)~y$S1gdxa0_|>nDZ=mR9RL6T07*qoM6N<$f|*=K9{>OV delta 2198 zcmV;H2x<4v36~L&8Gi-<006^2Vaosj00DDSM?wMF$t-^W000SaNLh0L01FcU01FcV z0GgZ_000O)NklyN(@26h&`>KY?&E5=2TuOuz>i|A65K#y`L#2MJOLAcP1a z5D^h61OpZb@v>xDAT!uPvMgDb*{wOFa#7Dyr~34r*;^|4F@N{=RQF!>K2^Qjo$2<` zwHs$?&-8Tq;pmyKPM+Ug+g$|_0zyCt2mv7=1Uo`N2zG>k5bO>gf}dY{ju4FMP$Bs7 zg=hDV@BFs^<&_r+!Ke-u0+|2gpT7x#g|-Sot(w1k>$N5bP-AF7Aq0-;_Zu(oADw)= zm^T6ezK`qRGk=(k zgkS?HhM;6Vgg(KHd=P?_6O2SJUd#prwUYnv%g@!rKYv0HX>ABFuD^SH^C{C?6;}JX zW`htYGy(xiFiPZ~@4R)9U~u^FhhKcQ|M#1(yUdRD==<;fHz@=N9{=&{a&4I(z~2dh zLMMYY0fu5Q1f|qkFh5t)@jFAIR$)z`)F=cqV1S{uYCeX5&B1`IAc&g@Buv&Ip~*m1 zjf5D0oPY2$K-4nT8$vK+IhhblNSFl53Dy4n58q#=cwuf21RNq7Xf^~j^U>i8mxS?u ztq{xtfDo)?KH7XK&GMaP8TcFmz#+{FMj4uz0Q6I|O~sXh;OvH9UE6#ZDhj_V5X8bY zd-H+52!@c_c?3c*$$Wec?S2Y?90Zz`K&fFy=6?+cfsy$zBm8U_^pUz&3;{Zez4-}$ z$4H-n5HzIwAH3IWepvnI0Ei(-mEuy>j-Q3Xuyh1&LQtw|&pK_b<|BpGKUC`A2?Qw3 zsq5rM4d?)dvY0(21euhp`cvj3#cKvIt8{%pkSoEt`GeHD#3%rSppekUhBJOS^Hb)G zgnxR45Xi6*DHdiMEdU?{m4tD3ZO9e_FuJ;j-x&*?MoY*Df#JhTNxNw@7g&Oyp^pH# zG;;`qAd)2nDQQB!OHoC=Kxv1Ggg}u}9W>0?S(y*@7%H7uZ8Jd#I#ay1FKVr-OXlO+ z7%{X05RYJLBN9Te8;3wPfuJS`;|E%5fq$C$J^8>QQ>>A#>x7^&p?yxZ(X~aJ($=wF z^GlOgTtI5nXidb!LXgo21gVw0lz&jF zu^lZnd4wvzwoR?H6NwNQNDD#fq!2LKRoA%Kzh z-Z(A}>qLl9l0E|Z3y@XSFF`1rF@J1S4+JnxHkMv&Fs+pGobggpAChQT1WIMk9_0L1PMoJ|&f^^yPT^^O{2wcbFR{#`_v9<`W3P zgcJszXaYT8Y^rp}0jE|SOG03n;t3_qHDpst3_+^-vC20f@b+dk&4eKAG=Gj5w47n^ z;B*;zNV5~4cw#-T;O)z*ngKz)ggk1H3?W5m0?@oj$5TEBNC<#J))2%)#*tonDu5&h zRO>M}1RxRLma6P;KQ=e}vDTR}j+VWQOTX!A-%6M_f`?(&JMw)|^L2H_y zOWx1);G~5>dhc5@p8zPOfne#mHw@ug&4+k65rNfr>SVLkzvs1XR( zGM@lUmIeYu6{BM)Q9L-13PGXTcMA{zXZ>_^?Ru{%sh3<>ZVM*>E6V}`0&w6Og@6ED z0*ydm@j6-puzvxKKtKR4iEb+((7fxA0Bl$q2nfI>(-t7`eg;=w-Vk`-Keh9P!28~* zb9q7Fecx0d4+y;PnToVF1m5>cCA204-uFsnv=#*3_emAB1_a*sNL4f&0`L2y8Z;9E z?|Y*fH46go`=UBD0|M`RqB>;_f%pAT3RyzneJ_+!R(}w9-v>1y3kbaLfg02(1m5|l z3^W3Pcit%@X(8~=H)SXd1m1b3jMWQ)cYdh}>Vd#Juhb;9Lg1ZGYNA>o@XjMOSv3f} z^GB_q5(M6PqgGN50`GiLD=Gzncb=$~6+_^iAId=?1m1a}oFou<=Yw(-An?uu<*fez YX@Dcmd=EWFX8-^I07*qoM6N<$g4S%&jQ{`u diff --git a/images/ic_unfavour.png b/images/ic_unfavour.png index 63d1fed762cec76009fdba21f51195cd27b843d3..0cbe712928d23c58dac8bd76216fc26900efa6c4 100644 GIT binary patch literal 676 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sbpbvhu0Xng0+64dPf&MZVIfvE zK=H!KNjrcp&?*V?3ugFtlJ)DG$M-UOn>&&q{RvX4!NxBeMMXk{??uK%U7e84`P27;nfDD*i_1cr z7~dY+xJY1+oA(Tn73VfRW3Y)|-7;lz;XQq(xQwX+T-$qeSHIpkucRgPU|f^w%@sy- z)mWzRR3|)~qy{3wOMt% zhdeqgD%6@T-#r`T#nrfYVt`PNPska&+={Ap>m|$ zr-k9fVIzT0av4DR@COqcANUCUzTt4f*~#nq+Jb6z6;1Y=k=MR=?%qFp$Bx_2H{1M` zD&@T@kh6m8mEjMk-B(0beXA*!Q2O&b`GmPZfZ4_R@?#6#?UhpA=X3tg_{U%zp?F67 T_h}JeWHWfW`njxgN@xNA^h_*s delta 1262 zcmVNklGL zhNL+?$*kndoa;X8-+S%7);ZI!U&%^VvXbSqWHNcHb8Z&A3*W;pu#@BUa2MOm0? zrH#yQ>?fl3H_LG9VVwKYV*hiP9-Kqeo$SA90)EvziPG0B!=Zuj3>=1wuo1=u=MgZ8 z{SPdJv@*?$(%&q@!BIH%8vFrG>@R_;;5?%v{v%QPn`JmV!@@=(au5gS zLjT~r<%Mr;N&NyQMCtGU3};4IeE((Pvx#+nVsM`Aa*oZlWmUQ0Lj(_r(&rn7BV|wp zjd0R>f3KEEdcPucoswHxd4S^=5{bl$-f~Di)jty+IzZS&y#!a{piMJC)|T!!X`3PY=elFfo{cov?67vLpWZyC4M;`#`rXlHD= zeT2)=$1HhigpR_C8YOr#gE`!x!MhnzU^;Rrsfc^I3(cJ-V{JsO28QBYbpsi6)OSG=N_$!r_HBbaTB0K`Ly#(>J>t2W2^*_ zH--{MN_5IQml2SRl>nTtr2V&@&pVgMQGYeD65xDg`>8#vmBMdIYy?;?(08MQ=Fjok z+S(DZ5n!KX^kVe0^QF!9y1KfYB}$(ZK)Zus9{jHOhqYRjVk3YFJRH)t0<|+Dbt?5^ zBf$AOXpQq3xGkMdKU&C5eMx|7ppWf2DyQ?WKz&I7>%FShyJ3&z0F~5ZVk3Yy2Y{Wo!g6c}IfUzG#zJlX=k12)H+gfbjdkvVw-T2&27W&VQEF7mH4M{scTw z=*^jLWRr6Uc;5N)w&*vqJkQnJ*Kp@c=a=C-i~Yah73M_#1Qu#&pX>TVq7~kU)gj)1 z9oDb}d^|#&PFhKFxVdt*fb(z=P z4DGJ#6OGD-6U>1I=ikN(|G4G+XFsvh=0J<}NN=NmaTM!YL33<8{tqnJ@sgFSWbw8C Y0FC8x_Ux+|@c;k-07*qoM6N<$g3-ov{Qv*} diff --git a/images/ic_user_default.png b/images/ic_user_default.png index ad8642e11ff7ab70a8dec7e11412716ed1a50c28..ef30c1ed0b6ed7af440479c4de5ecdef5b6dfc9c 100644 GIT binary patch literal 1222 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&%?a=caRt)1Z{NOk>lToNfIDCS z<00sK_wGG@{1~q0?%lgUHc%~G1w`XbFhCYWW<%6N^dgHx*bozdB*dbkL#u88-Dg}9 z! zHtO)1Y1_^wF6zp>%l2#2gm0xhpAJsZ8>qUOG0pY*f~6E4iH=yp?$ zJvICH`Wb$u7ZL@V&d9Uf4qFJ zGt^5yUD&G|A=0#XO2myOJ5$~O^9lI}KRHkF6DsVN3J6xvUUdJXgNN_L4ZXb!OqMO{ z+tR(?6!JzsRM<{mPrQa)!@>Z+@O?5rNTq`7g>>SWdWdgd%}wZK z#Peluj;qW(vv{KXsUQVUR`G{Fe)uStzf9S_hF49)x>fFMPu6;+n=6zj_Le!9Y^jd=u31S%`ZE5kD^9mv5ocQaK5^n6*MOC2 zKaYM9o4tI~jra!}Up)!*zOZTGr&Fp@XD&Ov7P>n3M#`<$zR$Vm*{+Ly?%W~o7%lKA zxK<-Y)^1Dn+*AXhpU#h$89iY>y32{%xSzj7Yw@yA%(-hQO-fUzh}jU&9V+1$Jedd?ZISlo8jvU{cSQ19sWAW*WT!| zUoidKz3?tW--^tP>~)72t{A&DcR%pdc$F}DiXN}FNo2{3fQB^nU6Y;N``1-SmZZqJ zKH0xm^34kuhFHef7tZ&4zo{Bb404-y(fQPg+p{h_{S`ltuWeC~+H{WYl{J62`N>9Y zaH?)*UTUT4@@vY>9z~Pc8}=^R-*V^exoOLiBLsbK9!p`#eir=ssdt3wi_(k-22G{6 zzfP^PS|7XPqVM~h5{tbD<`&Q7|9PW&licB*t6r-Y)=n@wd75?KxuW7%-{Y1af8VZh jHvHe4p5;I=t&VXchtsLpHz!Si8J@w@)z4*}Q$iB}+q{gv literal 3902 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 diff --git a/images/ic_video_default.png b/images/ic_video_default.png index c08dc2815c2f11b3b77c240cba3f895ad8907c8f..61e2562d7fa52831b4482c5fed0df514228198d8 100644 GIT binary patch literal 999 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&eF*RgaRt&EK%l0kp{`z{rlzH$ z0%WVJt81#OLl{6dP)Z#v2vPgt=-)H=a-0hIy~&=w#7IRH$8*gyxUt3LoEAj3*c?T(t-Ej6_QumcvVsjUVo zg18XwB#?d$RaI3TWo4j7pss9n^|R{gDQaq(nwnZ#S`Y)x)z$UX)z2|9umb(;QxfDC z%;3%K0O^cWtT8N^-VT6X*N=`pmJd@@yCONAWQ*FhzN~IEGZ*dOPc8&}|0+ z*XW`>rzVL@CZ9x4?O zI0}GJR5{8NPJN=LMywvuyclwdL38W&1Zf{%t*C&-7!j%ipC}Zb~xx+VcH7Cm;Ry z`F4i8v!}?PKgVam*3foUe#XDuC!Xb3GVuQe3;y6?XuNvg;BVaNXZ`OO_B{!zv$3{b zz{QZd`u~A1_v<$QG*5c_f5NB7H*YeYuJAPb)4r@;tw#${?ecRV#R7nM(2iEUKVO~S1UdxpM9Vrx%S9>o;@$tX4uP`nrbUN z*VSAi@!);n)o_p9zHYTUKb%_epwPmI>7S*L0Z>+;n!zGDj=3iN$+OSCGdfv38ldP* z)Oj0o;*^|KJfCY(|&fd?P9;I3eNtC+_0{K>BG@r wxu2oa+?usSM$q)2SNR)I5`ZKKM~8n5>syp(G`h840H$6BPgg&ebxsLQ0J>_7!2kdN literal 2437 zcmbtWS5%Yf7X6Y?g9;)Jh5-T$iXu{^gidf!3`mRAfPh385Tg{O5BUSmfT*aUS81V$ z5X4YIk>5LvpoFFp84$<}8bnHzfEWgFxc9!^xBGDR*=wD(*M2*D-*9!d-;Gv60|0gt zPTLW8HuUe2lGwrDtj`YsAbo~lXX_s4zf?lGrQ(6<`!>Azt5Sdl_R?RzOD~tF3#JaW zTu&iYekWt1r2p(XG2KmC`XD+er&hXf*+De&z`K@IciUaQoMn)Nch?_rAi!0-eFtNP z3;YR>%MX&IYMsU@7V8FcF|pmpCM|wiwtC!MGsg~?7%ZJL8y0<|3OSQgn3SXxPbkH| zTSpa%=gCQd9Yl*gNt*w^3Dk{@RPMQ%J}t@H`r>vxs#T%C`O>X|JMQ&k(vxNl7I?a5 zY>LRf^+xd9__MrVIf}ajrL_)5L#CN+dm|n@oxr?ON9$kl2YK)|_8Ry|*#u3;|0pJLCt$ky%^ zE-9a+0wD@mllR$k0&oVL&HR?-xsgoT`Gz$H1#!36U{b-__*a@Byg^W~@rQPD6yld4 zXhyrC=d~R9mQU&9@pF|VrnWqaf3J~589UvQFw*OD!pfF|yH!0;77v19?S{3+gfn!V zHd=$5pdcul>(rUFtP8(@2`4dM8@UOyEZ9VacS*Pu)LL)U9d@zQG?QsKRhBM7p-?w3 z`g}R@YEMM2=w?EqWOHMq72ul`ESRQWc6HcFj@orF@=|7bVGMLi=;Wu|=OXus9TMI= zn#cue{42Ms=Ur;h%XenicD)^AC9;C7N155gHdb(Qzzm(FV1+J=8rldsZj%v{5<1Eb z$`|d|!9y5AQ?Zbf!w(H07kl)Cjr04H@iyt;3k-$SDb z+D-1$j*%9aE#zbdk!`6lfe55I3K7cWz!vTXCM)*yU%v}X4XmG_?B2ASV8vH;v7o{? zhsal}*(T86`Rn7XR_u=YT1WJ}+{ldKxX>?P3UsaHSc1#&@3YbT z1O1-nxSq0U1`>t`NecnE{2mOajXk~cbaP)$b!=^q#%h*eQB?%Vfa zX{ls#YAl#9VucHRM>~x`y69+S*v1G;6uIdL2AP&EP45kxY{R#@V>klALT5&0fALCp zA49ZjGc~>Oe#f|c-y^ntkU2-ouV{uo4PGFi52qN}ds*A_cV;QSI=}I?Ml9I3Y};D! zy|i^vzLVd~pCDrq^4vDQTA=}eXn8axjg`N~V*LaJDq^O=@mv@-4 z$0cSkN$3)eQz19R{+2R@0*i=IIm4NIvB{H%yVxU$Kn!ArBhFuiehX23ebI`Wm$e%O zlQcdSc3mq;EDx72UP`a1ajl;kTeSRktD``sFW>R89ji4xrlB``5}`Adb-tt=k5MTz z^gQI@eMAj-Kfn6to+xREEv@uUI2$1i}i~ziuC*$oR z{9Q46BJN91$&+_&T&D{YJ;HPN8X5Jq!7^yz93-_^jzmIf)odLf5K&j1#ufvzPSHNi zfJbzajg|(gh5Y6V2$)f*%9jV0MuWl6k&vUY73Uy`3oRU=i-Ww23HgrT(}+>tK^dSs zwyK{8c;#Wbj^6>l2lM9})e!kI%2tPlk3XDM(gbhxv3|Cz8wtEwW_ z_{7K36a}bUw!&DAUpdNk{iDL&%ZTYD*Rt&&p>Ez>~6p40ihyaGX*Wu{i{hvE^5iAwLyUg`Jm=*J|G;%C7#(|LU|18Fa=&Uu zUqjuswtv0qwwzf*F)INh%~!8T7mp8aE=p9?Pcd|CvH%Z1n+N?QK`W&iC-!!w#=khN z4p`+MskEQhYnf7B1zo)e^>YJJ}| z!6=(n!TEvwr*ssD>TiE_Ew1m6_fOOiWwx)pXx*vszaAuMMUZmdDrzglN7p7M`woO| z>jtib|G6fnRbX#|(kj)sxS=}54Ov*M9kGCWu#($fgvD)f*IIvB@=(+P12iw{>DA}o zST*<8M{SW22Eu!|^pAQe=&gO4puA|hJsF`Ep(F+nW%C8o;_*rc+UI`K2{6a=jCOJt zT11`*!JFgzm(wLcZ@PAg9nO~Z?k*m%4(k2c`J8S1i;;-IpJ8|9H zROp#g9lnxVI*F*3*CecX=rd6xS$XcsRR8^P7`yLth((kKO%kx?!p^G{n($I8Lw-_Vvg-H{R$L5FyR;cZM45um7C{?)o%J}9g9eQLk1j+6 zjAc61xr4(eJ*jjw*pBmXU?A~Fnm4lC!Kc1@qV|5^aBu8>6%w-X&mqTW; zH!a4ry(}|Igc^>oW~o@A%23U{K~D9+qG=3obR53wGQP{^JaCL@ir9m9DvUQG8kVxo z_$Jh_mUTvC!$}3k8<7n&Sr=?%Xl2dNJusWqP9@+7qp!#YACV3H%;y3fW@)VeXYA7Pkm#kJzz;szzd179Rq*XRWvFf%;x$COLseBgo0 oGyaz`KGPSJUA^t(+Wp^{-S-}j7rnRcCD4Zqp00i_>zopr04~M{PXGV_ delta 796 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 literal 0 HcmV?d00001 diff --git a/images/ic_wait_pay.png b/images/ic_wait_pay.png new file mode 100644 index 0000000000000000000000000000000000000000..071d895715c8ac74c567dc5b74f2c446db2d4915 GIT binary patch literal 945 zcmeAS@N?(olHy`uVBq!ia0vp^?LgeX!3-qDY`PkNR9%2ih%1nOyuIP+_J(J>8lLZL ze7>jQ<<9zNyBeSEYyhGc+Z&$m0x_P0(c9h4FZZ`Xq(CCO8o}a?Ks8TyfJ}f$J=@vz zd}lL6BUA(=1vC?6EKt`opcP>A|5j@()N&f6X%J2 zJKmRlFaK|Dk*p?rYGz=hUtn3e?S9{y#WPN@Pgs_DzxlD$o;SRu=C&0N#NA}IjXa7v z;ub#A@>nrf`H9#46}_BGHox4d`fsViks}goX2=yA_Nm&6CCS`-oP70I#4B+Nt93e6 zM-FAw>^gt2f@|0L_Jr!20?W5EC~bba{#tQoH19#{yXkknZ0fc(QPZ`qd9?lgMMoi@ zlJ<8OWOq52Z?ITY7;MPBccT=`N!)y?S( zlkEP#Q~H*0*ah*QuY7qh=JYFrL%O?8EHkqD!!S2h{9B)QmtE1bzOC(bO4s=6+xNws z>tooP$`^lJhWSa2tT4}nyd73NJVno5MI=q&U)RUQ^ghE*^o`=CnO0>PIk8!aD-}Ct zSSfIqMti2L1hTTYXG6=rD zu{~k^n!^Wq-9y{ErPr9E@mA5UJt>9FO4 z%LfB*7`i`Rv|+JZ@;9aL)-!GRiIcx!Zs%I7!N zy1RU4`syA{!zkqOGh_@BC6=%4hI&^>bP0 Hl+XkKSVYf4 literal 0 HcmV?d00001 diff --git a/images/ic_wait_receipt.png b/images/ic_wait_receipt.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb56c2ee1c38a751dc38438a544af0c39a0afe6 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&RRs8ixB}^?+Z&$kYIw4};rXt{ zXFKbk?`(L!2gqmuA|U%Ikg*HOe!dGN0+E6%c($YI`L>p4+iF1?cY-v684YiCHG|kd zy*ohU>upUS21t7oP<#d(S1-_R^^zdJV1|bM4xz3mwVv+mHQc&>_0;yaw@Qk#R7E*2 zZ(2G(Qugb;1b+#E-!^{R&ebw7FqwL~IEGZ*dVA|;(JBX#)`zSoc$%c1Te$dM`@R1m z=YoZPBD*^8K0W*IUFrX_UVUd!)( zRgC|dub=y4`$aU^ZrfGPf*%o6mS6Z(nxY;r`(Wec=RWz#)n`hWs*VIiZ8-n(Btzc< zp$+Z}ig|au5ndF3@|a4&dsXqd3>Gu1)jLegA6EVCKRchf@0yTKWbudP4SSz2oV~tS zwBqcq#g~-|Kd(Q|_|R?Qyv&*%mfG1RoRKr_xgys5d^=%L@WLB+zv;$aT{QhWw@K++i|0TC|%Qwq0_!|PH4>c$4d&{81e6%K-ac%k0 zn%9gPqMz5YKkx-fmc9LRo#jCPt)Kdw4pwT91$kJv{FZXO{fQ?xI;?1J@U=$PxZlys zZg=v^AJe_z@x||_?<0xOKF_sR=U&(*vX?7rTbP{QG}VBP%&RF23ukZ6c;%cs<;j|z z&o)dF{rq%+GV`$=_VEs!6Br00Tg`0k8A2P3n%9YDYx;Dy+4aS4HZuFe|HgJpZm-?p zZ;{c)C=ma9se74Z}-DV(p#CUJ3xB-_mk8zh*23ePe*l(1T5k!E3sz321j@0pQ1 hxfNRkoJxMNYZ%pk`ZX_SGBC|Cc)I$ztaD0e0ssu?f`0%2 literal 0 HcmV?d00001 diff --git a/images/ic_yellow_bg.png b/images/ic_yellow_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..257a1a1010fc7b719a2207840179b37490088f12 GIT binary patch literal 1462 zcmeAS@N?(olHy`uVBq!ia0vp^&wzL$2Q!d-Fxlh-kYX$ja(809c~Yky$l)yTh%9Dc z;1&j9Muu5)B!CJO0(?STfs)U5Hjs^8tgXP*`+Rc^rXVhn=UZ!^?Wo5p`+QS1T>SZl zDmWXB@q8mrDHN4Ji(o!QHu*mT0}uhFAS7H3gfa7k(i~tIC6omD1v7ApN(MH`F)J>A z>&L?T^v|=2LR!*KY!6Bcl6YoRv2Yv}@M*um$!W{T!(w2%?DPNstX9U4l~&)G_bx3xe*gSO z`R|QqY1~?)BN&*=XJhKMX|WyuykAU#$?3)76|;7K4_LjmT)yI)yoHCZRmvn8vmKE( zM(*w}XZ#hM8@YJtv)bJ0>x7JzpRvBwGBi$#n*!pf z#ZG!BWSD&B^vUDe;Y+!Xo|O1}tE+LZlSJ~RQe)vW(w9;nrOv7RJgsDQhGhDs+?Qq- zjSg-}=6d$@H_PU^JlD$=<_i1l%68y?uJU;vt0kH1BE`6wQd;@X)Hga~t!S zWIb7D_HOYJr{m;9V}KE`>L<>#3J<~PI)%$MwD z^y>zEL3DM`?DCMj>JyYQDR%YSE9c2mI7|gEo`LsN|)yioQv)h0%Z$oL~ zCH9xoranG$#XiQ`@aubqyE9&2GF^SFcjZ4t>pY)Vp5NCC4`o-D({Cz2NP+5ZjpD#-Z;SBz?}_ zk4rT$?bqa4_AHmHedUkp2AOB#FE{;rXdqh8KjG*V>t!2eRFyaAsMStg_gY#m`0b2C z$*b-%ewuMR>bQv9=JlmM4-Gr_d5VAIp1$%6TeRBd^(E{lY-imseaEo#%)WE73e!F9 zmq=H)p1oojvw3Fi)WfE;cdq@UXkDZBcgnjrg8$wxJN58Z^U9B$+vI$DZ;SA!{hwZv zSy$7y?2!76Uk3m89}NoKGh_eK=*^FhUfIt4C3)5EgV*|hy8l}H=+2Gp6RMY}|D9Bk t_Qv|D?Wgj%@K@Y+URh^ediB1LHPx(I3cA&n0bDTyWoW0qoKv_jOxR(ZH>neNO^=RWOb&OI~dcRu#sdv*xZe9$zvA3gx15wLl$SSQ9O<{FhxDkn(-6B8=* z*w2$GO_(!${zP}A;ht7Y&k-}(Py}ph8Go0E*4cGaD|)V6_!&fU(4>sIt=a}5D# z_;^CtaWgw~FaRDDkk;?64ezq5Gh+d;;WDI^?`;gXS%Hwz000`4r0nI9x}qMl5HcJ9 z=K}Q#Ijefl%ku}!K*)RmNfMT>jck`wN zi#-S6&#OavHvM~j=L@;I4%QW5ZEo5N7`7fj(`rfAK3xGHfCCXwoCj1C5h{v+_CBDa z&)jA-Vx}-x+aci!0POXRj}i**P)*`u*3==8j&o*L0H`bmRxOVIS!?@A;M)^+_;_+1jsplt zs`uy4iht1G{s6XpB``WRwGbQ!urvfbb${~h#y7`-{k`#vo4i|rr6Iz|DA03O;L=rV zfE)!dBLKXzoWRvT*| zVDnxTz>;F%NGP-Lru09cmHOQXtmHTOK2HMu99@ZH@2i66if=Eec!#fY13ua|nmoVOG-c(O3 literal 0 HcmV?d00001 diff --git a/images/lib.png b/images/lib.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4104581c28978b37586c693564601381f04b11 GIT binary patch literal 925 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 diff --git a/images/mid-btn-3.png b/images/mid-btn-3.png deleted file mode 100644 index b8dca0c75c6154ba90ddfed0f8451beb409395a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3171 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 A<^TWy diff --git a/images/mid-btn-4.png b/images/mid-btn-4.png deleted file mode 100644 index 6f7d9a5bf14f8fa3f2d314d613a884ef6e258f5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3471 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%0DEhFt+zk6y zI_Q75)&Vlt-|?cgqcV>b9u?u$o1heu1N(skL`)DJg~Y^)Cm=x?si|kv5zV z=-Ln%c^BNa%$k7aeNerz?*Nt=VB&MuI#nM*%kPQ?0W^Sc6gisaj)=c7(F}E(Tk_x;OmjU51(vQjOj(u!JXa>$2Tj3 z7e#k+fIL}>oN2E{3F8l;<&beNX&8)~A3bM;S~&C;TsWB^1c;l_lA-MSG=2{$nUFIZ zQnT$rIZS@0LH8oS^dNj5w}%?3(N+V8-;JfEi$fsPU8(d6o{9+owH46#Lu_qb%>m&q zkDO-I2gCB!z?`o$_5{sbq1Gxw%l#n`>XPP%@jWCAD*#_=Z-=j5g7dW?;Olonuq#H` z*PD5ZfN(f610?rsi+7%bE9d(SINX4@35Yw~NP~j}cBoDax$_K2x)sS%_a96c9gbM)_DLGFvlc|lq( zocPKBEOO@xX!;ql?nz(*X0C^hvmonv*(mL7h1Mz25#q4-y+MEgXsb3{ zmv9fiHiv+eyj>R}!`w`g4i805uG}92cD>fm9=0>@eFDr=pBNIH9e8gH0TnNAppN$= z;0A&pjDYyo0!!C|_WTX*usE9!uG401e8JAB(wm}UB)Ds7DL&13t;_uLW4LwslcRax zyza|`Xm;$pw!0q;p3vrORCnE<Px&OG!jQRCr$Pn@>m-Q5?s=GrL8Bq(On1;VMM2B}rD>A!v&*FL?-S|7l4Fse=g} z>gFN46hWz%qDuy)f)rG{7NWUEkPsVDY;;I>9alm^{1b(1?Zg|KMK;};-5GXgX5X9! z-h01!zt8XYe)IdiH^U&uFDA$J2L&M40~~%!BOgPN-2N-}W5FZ#5Bl=^WI_|h%tvB@ zKKJ-DMe|rTSe6GkhDz@OXjJQ=O61IQi(t%5tJlS~D3K$Ml?#AZ<6&yZAOM7m;V<~= zB6pO^)Gq*{`5N|w&pG~F2?TuuU@&DinW~?*g9#gIav;0VMMPYr#Q5&*044RUzrx1Cp7(*3ukb9z@CBP@5u8S!rvZ0P&d2=`UN=_}BJ6#-q{eX&;3p3f2?=G4mt)f8y0Y z`4E=8UD&>%0^ot_;-FGNt5SB}8+AV%ju;qvZ#5CItu zK;jZ8TyMec1A|zMMN$8Hr(pH&!=q4g8m#FhkO-ivs18TBIAO`N;@q1G{QNyfh! zM#wtfkza}OjfW8W5yY3-cR0TFj4^{?CK4Y_#{dc-3j{Qk2V_BiS_`P@0qp>qvSCF9 z&+O>2k6n}+FY8NDBEo6Ak=*%bYG4b n*#P7S(_ { - console.log(res.data) var area = res.data.areaList + var scale = res.data.picturesTemplateWidth / self.data.windowWidth + res.data.picturesTemplateWidth = res.data.picturesTemplateWidth / scale + res.data.picturesTemplateHeight = res.data.picturesTemplateHeight / scale for (let i = 0; i < area.length; i++) { if (area[i].templateAreaFontCenter == '1') { area[i].templateAreaFontCenter = 'left' @@ -248,7 +247,14 @@ Page({ // area[i].templateAreaFontValue = area[i].templateAreaFontValue.substring(area[i].templateAreaFontLength, -1) // } // } - area[i].templateAreaFontSize = Math.floor(area[i].templateAreaFontSize * 750 / wx.getSystemInfoSync().windowWidth) + 'rpx' + // area[i].templateAreaFontSize = Math.floor(() + 'rpx' + area[i].templateAreaFontSize = area[i].templateAreaFontSize / scale + 'px' + area[i].templateAreaHeight = area[i].templateAreaHeight / scale + area[i].templateAreaWidth = area[i].templateAreaWidth / scale + area[i].templateAreaDown = area[i].templateAreaDown / scale + area[i].templateAreaTop = area[i].templateAreaTop / scale + area[i].templateAreaRight = area[i].templateAreaRight / scale + area[i].templateAreaLeft = area[i].templateAreaLeft / scale } self.setData({ cardInfo: res.data, @@ -258,36 +264,7 @@ Page({ .catch(err => { }) - // app.restAjax.get(app.restAjax.path('{cardUrl}app/cardtemplate/getcardtemplatebyid/' + self.data.cardId + queryInfo, [app.cardUrl]), {}, { - // headers: { - // token: app.globalData.token - // } - // }, function (code, data) { - // for (let i = 0; i < self.data.fontFamilyList.length; i++) { - // if (data.templateTypeface == self.data.fontFamilyList[i].id) { - // self.setData({ - // useFontFamily: self.data.fontFamilyList[i].name - // }) - // } - // } - // if (self.data.fromMine) { - // self.setData({ - // areaList: JSON.parse(data.content) - // }) - // } - // self.setData({ - // cardInfo: data - // }) - // var query = wx.createSelectorQuery() - // query.select('.card').boundingClientRect() - // query.exec(function (res) { - // self.setData({ - // cardHeight: res[0].height - // }) - // }) - // }, function (code, data) { - // app.dialog.msg(data.msg); - // }); + }, // 获取名片内容区域 getNameCradArea: function () { @@ -417,12 +394,6 @@ Page({ }, openPage() { - }, - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady: function () { - }, /** @@ -435,10 +406,4 @@ Page({ } }, - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - } }) \ No newline at end of file diff --git a/packagecard/cardDetail/cardDetail.wxml b/packagecard/cardDetail/cardDetail.wxml index 5df66e1..1636389 100644 --- a/packagecard/cardDetail/cardDetail.wxml +++ b/packagecard/cardDetail/cardDetail.wxml @@ -1,7 +1,6 @@ 创建名片 - @@ -10,7 +9,7 @@ wx:if="{{cardInfo.picturesTemplateBackgroundImage}}"> {{item.templateAreaFontValue}} diff --git a/packagecard/cardDetail/cardDetail.wxss b/packagecard/cardDetail/cardDetail.wxss index 5134022..62c44fa 100644 --- a/packagecard/cardDetail/cardDetail.wxss +++ b/packagecard/cardDetail/cardDetail.wxss @@ -3,7 +3,6 @@ height: 0; position: relative; box-sizing: border-box; - background: #fff; z-index: 100; /* text-align: center; */ } diff --git a/packagecard/cardList/cardList.js b/packagecard/cardList/cardList.js index ec17709..ff8b6b6 100644 --- a/packagecard/cardList/cardList.js +++ b/packagecard/cardList/cardList.js @@ -7,9 +7,70 @@ Page({ */ data: { imgUrl: app.urls.baseImgUrl, - cardList: [] + cardList: [], + currentIndex: 0, + optionsList: [], + isNeedPay: false, //是否需要交费 + needPayPrice: 0, //个人需要交费 + needPayTeamPrice: 0, //团体需要交费 + curTypeId: '', + isRefreshing: false, //是否在刷新 + isRefresh: false, + isShowCodeInput: false, //测试true + code: '', //邀请码 }, - getList: function () { + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + // this.getPayState() + }, + onShow() { + this.dorefreshList() + }, + //列表刷新 + dorefreshList() { + var _self = this + _self.setData({ + isRefresh: false, + isRefreshing: true, + cardList: [] + }) + _self.getPayState() + }, + //获取类型 + getOptionsList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getDictionaryList.format({ + dataParentId: '4bf68c60-eac5-480d-b5e1-15203d0282f9' + }), { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + if (res.data.length > 0) { + _self.setData({ + optionsList: res.data, + curTypeId: res.data[0].dataId, + currentIndex: 0 + }) + //根据第一条获取数据 + _self.getList() + } + }) + .catch(err => { + console.log(err) + _self.setData({ + isRefreshing: false + }) + }) + }, + getList() { var self = this wx.showLoading({ title: '加载中...', @@ -17,46 +78,105 @@ Page({ app.http.get(app.urls.getCardList, { header: { token: app.globalData.token + }, + data: { + templateType: self.data.curTypeId } }).then(res => { wx.hideLoading({}) - self.setData({ - cardList: res.data + res.data.forEach(it => { + if (it.picturesTemplateNumber > 1000 && it.picturesTemplateNumber < 10000) { + it.number = it.picturesTemplateNumber / 1000 + 'K+' + } else if (it.picturesTemplateNumber > 10000 && it.picturesTemplateNumber < 1000000) { + it.number = it.picturesTemplateNumber / 10000 + 'W+' + } else { + it.number = it.picturesTemplateNumber + } + }) + self.setData({ + cardList: res.data, + isRefreshing: false }) - wx.hideNavigationBarLoading() //完成停止加载 - wx.stopPullDownRefresh() //停止下拉刷新 }) .catch(err => { wx.hideLoading({}) - wx.hideNavigationBarLoading() //完成停止加载 - wx.stopPullDownRefresh() //停止下拉刷新 + self.setData({ + isRefreshing: false + }) }) }, + goDetail: function (e) { + var _self = this var id = e.currentTarget.dataset.id - console.log(id) - wx.navigateTo({ - url: '../cardDetail/cardDetail?id=' + id, - }) - }, - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - var self = this - wx.getStorage({ - key: 'token', - success: function (res) { - self.setData({ - token: res.data + var isPay = e.currentTarget.dataset.ispay //是否需要交费 + var price = e.currentTarget.dataset.price //价格 + var payState = e.currentTarget.dataset.paystate //交费转态 + if (_self.data.isNeedPay) { + wx.navigateTo({ + url: '/packagecard/paypage/paypage?price=' + _self.data.needPayPrice + '&teamprice=' + _self.data.needPayTeamPrice + '&displayTreaty=1&type=1', + }) + } else { + //已经支付过 + if (isPay == '1') { + //需要付款 + //判断是否交过费 + if (payState) { + wx.navigateTo({ + url: '../cardDetail/cardDetail?id=' + id, + }) + } else { + //交费 + wx.navigateTo({ + url: '/packagecard/paypage/paypage?price=' + price + '&type=2', + }) + } + } else { + //免费 + wx.navigateTo({ + url: '../cardDetail/cardDetail?id=' + id, }) - app.globalData.token = res.data - self.getList() } - }) + } }, - + onChange(e) { + var _self = this + _self.setData({ + currentIndex: e.detail.index, + curTypeId: _self.data.optionsList[e.detail.index].dataId, + cardList: [] + }) + //重置所有数据重新加载 + this.getList() + }, + //获取支付状态 + getPayState() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getPayState, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + //支付过跳转名片创建页面,没有支付跳转支付页面 + _self.setData({ + isNeedPay: res.data.cardCharge, //是否需要交费 + needPayPrice: res.data.cardChargePrice, //个人 + needPayTeamPrice: res.data.cardChargeDepartmentPrice, //团体 + }) + _self.getOptionsList() + }) + .catch(err => { + _self.setData({ + isRefreshing: false + }) + }) + }, /** * 页面相关事件处理函数--监听用户下拉动作 @@ -64,4 +184,35 @@ Page({ onPullDownRefresh: function () { this.getList() }, + onClose(e) { + this.setData({ + isShowCodeInput: false + }) + }, + inpuWatch(e) { + this.setData({ + code: e.detail.value + }) + }, + //邀请码创建 + codeCreate(e) { + var _self = this + if (_self.data.code == '') { + wx.showToast({ + title: '请输入邀请码', + icon: 'none' + }) + } else { + //未支付过跳转支付 + wx.navigateTo({ + url: '/packagecard/paypage/paypage?price=' + _self.data.needPayPrice + '&teamprice=' + _self.data.needPayTeamPrice + '&displayTreaty=1' + '&type=1&code=' + _self.data.code, + }) + } + }, + //无邀请码创建 + noCodeCreate(e) { + wx.navigateTo({ + url: '/packagecard/paypage/paypage?price=' + _self.data.needPayPrice + '&teamprice=' + _self.data.needPayTeamPrice + '&displayTreaty=1&type=1', + }) + } }) \ No newline at end of file diff --git a/packagecard/cardList/cardList.json b/packagecard/cardList/cardList.json index 7360326..8835af0 100644 --- a/packagecard/cardList/cardList.json +++ b/packagecard/cardList/cardList.json @@ -1,4 +1,3 @@ { - "usingComponents": {}, - "enablePullDownRefresh": true + "usingComponents": {} } \ No newline at end of file diff --git a/packagecard/cardList/cardList.wxml b/packagecard/cardList/cardList.wxml index 39c8ab7..1724f33 100644 --- a/packagecard/cardList/cardList.wxml +++ b/packagecard/cardList/cardList.wxml @@ -1,11 +1,58 @@ 模板列表 - - - - + + + + + + + + + + + + + + + + + + + + ¥ {{item.templatePrice}} + + + 免费 + + + + + + 使用次数:{{item.number}} + + + + - {{item.picturesTemplateTitle}} + + + - \ No newline at end of file + + + + + 邀请码 + + + + + + + + \ No newline at end of file diff --git a/packagecard/cardList/cardList.wxss b/packagecard/cardList/cardList.wxss index 39ebb50..91e3253 100644 --- a/packagecard/cardList/cardList.wxss +++ b/packagecard/cardList/cardList.wxss @@ -1,4 +1,3 @@ - .card { width: 100%; box-shadow: 0 0 20rpx #EEE; @@ -16,13 +15,110 @@ padding: 7.5rpx 0rpx 15rpx 0rpx; } -.card-img, -.card-img image { +.card-img { width: 100%; height: 400rpx; + position: relative; + margin-top: 15rpx; + border-radius: 10rpx; } .card-name { font-size: 36rpx; padding: 15rpx 0rpx 0rpx 15rpx; +} + +.price-box { + width: 128rpx; + height: 128rpx; + z-index: 3; + position: absolute; + left: 0rpx; + top: 0rpx; +} + +.price-box image { + width: 128rpx; + height: 128rpx; +} + +.price-text { + position: absolute; + z-index: 3; + top: 25%; + left: 45%; + transform: rotate(45deg); + font-size: 32rpx; + color: #ffffff; +} + +.price { + position: absolute; + z-index: 3; + top: -20rpx; + left: 65rpx; + transform: rotate(-45deg) translate(-50%, -50%); + font-size: 32rpx; + color: #ffff00; + width: 100%; +} + +.number-box { + width: 128rpx; + height: 128rpx; + position: absolute; + bottom: 0rpx; + right: 0rpx; +} + +.number-box image { + width: 100%; + height: 100%; + margin-top: 0rpx; + border-radius: 0rpx; +} + +.number-content { + width: 100%; + color: #fff; + position: absolute; + top: 30rpx; + right: -70rpx; + transform: rotate(-45deg) translate(-50%, -50%); + font-size: 18rpx; + text-align: center; +} + +.code-box { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.code-box input { + line-height: 80rpx; + height: 80rpx; + font-size: 28rpx; + text-align: center; + border: 1rpx solid #f2f2f2; + background-color: #f2f2f2; + border-radius: 10rpx; + width: 95%; +} + +.code-box .code-title { + font-size: 38rpx; + color: var(--yellowLight); + padding-bottom: 15rpx; + text-align: center; + margin-top: 15rpx; +} + +.code-box .btns { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; } \ No newline at end of file diff --git a/packagecard/lucre/historylucre.js b/packagecard/lucre/historylucre.js new file mode 100644 index 0000000..9775f69 --- /dev/null +++ b/packagecard/lucre/historylucre.js @@ -0,0 +1,66 @@ +// packagecard/lucre/historylucre.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/packagecard/lucre/historylucre.json b/packagecard/lucre/historylucre.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/lucre/historylucre.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/lucre/historylucre.wxml b/packagecard/lucre/historylucre.wxml new file mode 100644 index 0000000..ea42efa --- /dev/null +++ b/packagecard/lucre/historylucre.wxml @@ -0,0 +1,2 @@ + +packagecard/lucre/historylucre.wxml diff --git a/packagecard/lucre/historylucre.wxss b/packagecard/lucre/historylucre.wxss new file mode 100644 index 0000000..41a8800 --- /dev/null +++ b/packagecard/lucre/historylucre.wxss @@ -0,0 +1 @@ +/* packagecard/lucre/historylucre.wxss */ \ No newline at end of file diff --git a/packagecard/marketing/marketinginfo.js b/packagecard/marketing/marketinginfo.js new file mode 100644 index 0000000..e2ab9c1 --- /dev/null +++ b/packagecard/marketing/marketinginfo.js @@ -0,0 +1,59 @@ +// packagecard/marketing/marketinginfo.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + isRefreshing: false, //是否在刷新 + isLoadMore: true, //是否在加载中 + infoList: [], + hasMore: true, //是否有更多数据了 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var _self = this + }, + loadMore() { + var _self = this + if (_self.data.hasMore) { + if (_self.data.isLoadMore) { + return + } + console.log('加载更多') + this.setData({ + isLoadMore: true + }) + setTimeout(() => { + for (var i = 0; i < 20; i++) { + var item = {} + item['name'] = '新添加' + (i + 1) + _self.data.infoList.push(item) + } + _self.setData({ + infoList: _self.data.infoList, + isLoadMore: false + }) + }, 10000); + } + }, + dorefreshList() { + console.log('下拉刷新了') + var _self = this + this.setData({ + isRefreshing: true + }) + setTimeout(() => { + _self.setData({ + isRefreshing: false + }) + }, 2000); + }, + onReachBottom() { + // this.loadMore() + } +}) \ No newline at end of file diff --git a/packagecard/marketing/marketinginfo.json b/packagecard/marketing/marketinginfo.json new file mode 100644 index 0000000..f18b355 --- /dev/null +++ b/packagecard/marketing/marketinginfo.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "onReachBottomDistance": 50 +} \ No newline at end of file diff --git a/packagecard/marketing/marketinginfo.wxml b/packagecard/marketing/marketinginfo.wxml new file mode 100644 index 0000000..92efb31 --- /dev/null +++ b/packagecard/marketing/marketinginfo.wxml @@ -0,0 +1,112 @@ + + 营销资讯 + + + + + + + + + + 但是这个属性只支持单行文本的溢出显示省略 + + 来源 + 2021-06-29 + + + + + + + + + 但是这个属性只支持单行文本的溢出显示省略号,如果我们要实现多行文本溢出显示省略号呢 + + 来源 + 2021-06-29 + + + + + + + 但是这个属性只支持单行文本的溢出显示省略号,如果我们要实现多行文本溢出显示省略号呢 + + 来源 + 2021-06-29 + + + + + + + + + 但是这个属性只支持单行文本的溢出显示省略 + + + + 来源 + 2021-06-29 + + + + + + + 但是这个属性只支持单行文本的溢出显示省略 + + + + + + + 来源 + 2021-06-29 + + + + + + + 但是这个属性只支持单行文本的溢出显示省略 + + + + + + + 来源 + 2021-06-29 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packagecard/marketing/marketinginfo.wxss b/packagecard/marketing/marketinginfo.wxss new file mode 100644 index 0000000..3b2b1ff --- /dev/null +++ b/packagecard/marketing/marketinginfo.wxss @@ -0,0 +1,155 @@ +/* packagecard/marketing/marketinginfo.wxss */ +/* 横向 */ +.item-box-row { + display: flex; + flex-direction: row; + align-items: center; + background-color: #ffffff; + justify-content: flex-start; + width: 100%; + border-bottom: 1rpx solid #f3f3f3; + padding: 15rpx; +} + +/* 纵向 */ +.item-box-column { + display: flex; + flex-direction: column; + align-items: center; + background-color: #ffffff; + justify-content: flex-start; + width: 100%; + border-bottom: 1rpx solid #f3f3f3; + padding: 15rpx; +} + +.item-box-column .item-content { + width: 100%; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: space-between; +} + +.big-img { + width: 100%; + height: 300rpx; + border-radius: 5rpx; + margin-top: 15rpx; +} + +.movie-img-box { + width: 100%; + height: 300rpx; + border-radius: 5rpx; + margin-top: 15rpx; + position: relative; +} + +.movie-icon { + width: 96rpx; + height: 96rpx; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.img-box { + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: space-around; + width: 100%; + margin-top: 15rpx; +} + +.img-box image { + width: 32%; + height: 128rpx; + border-radius: 5rpx; +} + +.item-box-row image { + width: 214rpx; + height: 64px; + border-radius: 5rpx; +} + +/* 文本和底部 */ +.item-box-row .item-content { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 80%; + min-height: 128rpx; +} + +/* 文本内容 */ +.item-content .text { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + font-size: 30rpx; + color: #000000; + -webkit-line-clamp: 2; +} + + + + + + + +.item .content-box-row .text { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + font-size: 30rpx; + color: #000000; + -webkit-line-clamp: 2; +} + +.item .content-box-column { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + align-items: center; +} + +.item .content-box-column image { + width: 100%; + height: 100rpx; +} + +.item .content-box-column .text { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + font-size: 30rpx; + color: #000000; + -webkit-line-clamp: 2; +} + +.bottom-start { + display: flex; + flex-direction: row; + justify-content: flex-start; + width: 100%; + font-size: 24rpx; + margin-top: 15rpx; + color: #6b6b6b; + align-items: center; +} + +.bottom-end { + margin-top: 15rpx; + display: flex; + flex-direction: row; + justify-content: flex-end; + font-size: 24rpx; + color: #6b6b6b; + width: 100%; + align-items: center; +} \ No newline at end of file diff --git a/packagecard/marketing/marketingposter.js b/packagecard/marketing/marketingposter.js new file mode 100644 index 0000000..9dd1600 --- /dev/null +++ b/packagecard/marketing/marketingposter.js @@ -0,0 +1,470 @@ +// packagecard/marketing/marketingposter.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + posterTempleteList: [], + posterHistoryList: [], + currentIndex: 0, + currentPage: 1, + totalPage: 0, + isShowSel: false, + tabList: [{ + name: '营销模板', + }, { + name: '发布历史' + }], + isRefreshing: false, //是否刷新中 + isLoadMore: false, //是否在加载中 + hasMore: true, + imgUrl: app.urls.baseImgUrl, + isRefresh: false, + currentTypeIndex: 0, //当前选择的类型索引 + optionsList: [], //类型 + curTypeId: '', + isShowOptions: false, //是否显示选项 + curItemIndex: -1, //点击分享按钮弹出的 + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var _self = this + //获取类型 + _self.getOptionsList() + }, + //获取类型 + getOptionsList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getDictionaryList.format({ + dataParentId: '4bf68c60-eac5-480d-b5e1-15203d0282f9' + }), { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + if (res.data.length > 0) { + _self.setData({ + optionsList: res.data, + curTypeId: res.data[0].dataId + }) + //根据第一条获取数据 + _self.getTempleteList() + } + var tempItem = { + dataName: '我的收藏', + dataId: '1' + } + _self.data.optionsList.push(tempItem) + _self.setData({ + optionsList: _self.data.optionsList + }) + }) + .catch(err => { + console.log(err) + }) + }, + //显示类型选项 + showType() { + this.setData({ + isShowOptions: !this.data.isShowOptions + }) + }, + + //选择类型 + chooseType(e) { + var _self = this + var id = e.currentTarget.dataset.id + var idx = e.currentTarget.dataset.idx + _self.setData({ + currentTypeIndex: idx, + curTypeId: id, + posterHistoryList: [], + posterTempleteList: [], + isShowOptions: false + }) + if (_self.data.currentIndex == 0) { + if (_self.data.curTypeId == '1') { + _self.getFavorList() + } else { + _self.getTempleteList() + } + } else { + _self.getHistoryList() + } + }, + //收藏 + doFavor(e) { + var _self = this + var idx = e.currentTarget.dataset.idx + var id = e.currentTarget.dataset.id + var favor = e.currentTarget.dataset.favor + var msg = '' + if (favor) { + msg = '取消收藏...' + } else { + msg = '收藏中...' + } + wx.showLoading({ + title: msg, + }) + app.http.post(app.urls.doSaveCollect, { + header: { + token: app.globalData.token + }, + data: { + businessId: id, + projectId: 'poster' + } + }) + .then(res => { + wx.hideLoading({}) + _self.data.posterTempleteList[idx].cardCollect = !favor + _self.setData({ + posterTempleteList: _self.data.posterTempleteList + }) + }) + .catch(err => {}) + }, + //是否需要刷新 + onShow() { + var _self = this + if (_self.data.isRefresh) { + _self.dorefreshList() + } + }, + doShare(e) { + var _self = this + var idx = e.currentTarget.dataset.idx + _self.setData({ + curItemIndex: idx, + isShowSel: true + }) + }, + //分享 + onShareAppMessage(res) { + var _self = this + _self.setData({ + isShowSel: false + }) + wx.showShareMenu({ + withShareTicket: true, + success: function (res) { + console.log(res) + } + }) + var type = res.target.dataset.sharetype + var img = _self.data.imgUrl + _self.data.posterHistoryList[_self.data.curItemIndex].cardTemplateUsePhotoUrl + + if (type && type == '2') { + //转发个人动态 + + } else { + var param = '/pages/index/index?posterId=' + img; + return { + title: '活动', + path: param, + imageUrl: img + } + } + }, + //预览图片 + toImg() { + var _self = this + _self.setData({ + isShowSel: false + }) + var img = _self.data.imgUrl + _self.data.posterHistoryList[_self.data.curItemIndex].cardTemplateUsePhotoUrl + wx.previewImage({ + urls: [img], + }) + }, + //保存图片到相册 + toAlbum() { + var _self = this + _self.setData({ + isShowSel: false + }) + var img = _self.data.imgUrl + _self.data.posterHistoryList[_self.data.curItemIndex].cardTemplateUsePhotoUrl + wx.getSetting({ + success(res) { + if (res.authSetting['scope.writePhotosAlbum']) { + //已经授权相册权限 + _self.saveToAlbum(img) + } else if (res.authSetting['scope.writePhotosAlbum'] == undefined) { + wx.authorize({ + scope: 'scope.writePhotosAlbum', + success(res) { + _self.saveToAlbum(img) + }, + fail() { + wx.showToast({ + title: '您没有授权,无法保存', + icon: 'none' + }) + } + }) + } else { + wx.openSetting({ + success(res) { + if (res.authSetting['scope.writePhotosAlbum']) { + _self.saveToAlbum(img) + } else { + wx.showToast({ + title: '您没有授权,无法保存', + icon: 'none' + }) + } + } + }) + } + } + }) + }, + //保存图片到相册 + saveToAlbum(url) { + wx.showLoading({ + title: '保存中...', + }) + wx.downloadFile({ + url: url, + success(res) { + if (res.statusCode == 200) { + var path = res.tempFilePath + wx.saveImageToPhotosAlbum({ + filePath: path, + success(res) { + wx.hideLoading({}) + if (res.errMsg == 'saveImageToPhotosAlbum:ok') { + wx.showToast({ + title: '保存成功', + icon: 'success' + }) + } + }, + fail(err) { + wx.hideLoading({}) + wx.showToast({ + title: '保存失败,稍后重试', + icon: 'error' + }) + } + }) + } + }, + fail(err) { + wx.hideLoading({}) + wx.showToast({ + title: '保存失败,稍后重试', + icon: 'error' + }) + } + }) + }, + loadMore() { + var _self = this + if (_self.data.hasMore) { + if (_self.data.isLoadMore) { + return + } + this.setData({ + isLoadMore: true + }) + } + }, + dorefreshList() { + var _self = this + _self.setData({ + posterHistoryList: [], + posterTempleteList: [], + isRefreshing: true, + isLoadMore: false, + hasMore: true, + isRefresh: false + }) + if (_self.data.currentIndex == 0) { + //获取模板 + if (_self.data.curTypeId == '1') { + _self.getFavorList() + } else { + _self.getTempleteList() + } + } else { + _self.getHistoryList() + } + }, + //获取模板列表 + getTempleteList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getPosterTempleteList, { + header: { + token: app.globalData.token + }, + data: { + templateType: _self.data.curTypeId + } + }) + .then(res => { + wx.hideLoading({}) + res.data.forEach(it => { + if (it.picturesTemplateNumber < 100) { + //小于100次显示数值 + } else { + //大于100次 + if (it.picturesTemplateNumber > 100 && it.picturesTemplateNumber < 999) { + it.number = '一百+' + } + } + }) + _self.setData({ + isRefreshing: false, + isLoadMore: false, + posterTempleteList: res.data + }) + }) + .catch(err => { + console.log(err) + _self.setData({ + isRefreshing: false, + isLoadMore: false + }) + }) + }, + //获取收藏的列表 + getFavorList() { + var _self = this + _self.setData({ + posterTempleteList: [] + }) + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getPosterFavorList, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + _self.setData({ + isRefreshing: false, + isLoadMore: false, + posterTempleteList: res.data + }) + }) + .catch(err => { + _self.setData({ + isRefreshing: false, + isLoadMore: false + }) + }) + }, + + //获取历史发布列表 + getHistoryList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getPosterHistory, { + header: { + token: app.globalData.token + }, + data: { + mode: '2', + templateType: _self.data.curTypeId + } + }) + .then(res => { + wx.hideLoading({}) + _self.setData({ + posterHistoryList: res.data, + isRefreshing: false, + isLoadMore: false + }) + }) + .catch(err => { + _self.setData({ + isLoadMore: false, + isRefreshing: false + }) + console.log(err) + }) + }, + onReachBottom() { + // this.loadMore() + }, + onChange(e) { + var _self = this + if (_self.data.currentIndex != 0) { + var tempItem = { + dataName: '我的收藏', + dataId: '1' + } + _self.data.optionsList.push(tempItem) + } else { + _self.data.optionsList.splice(_self.data.optionsList.length - 1, 1) + } + _self.setData({ + optionsList: _self.data.optionsList + }) + _self.setData({ + currentIndex: e.detail.index + }) + //重置所有数据重新加载 + _self.dorefreshList() + }, + //去创建海报 + toCreate(e) { + var id = e.currentTarget.dataset.id + wx.navigateTo({ + url: '/packagecard/marketing/marketingpublish?posterId=' + id + }) + }, + //编辑海报 + toEdit(e) { + var id = e.currentTarget.dataset.id + wx.navigateTo({ + url: '/packagecard/marketing/posteredit?id=' + id, + }) + }, + // 生成随机id + buildId: function () { + var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + + var nums = ""; + + for (var i = 0; i < 36; i++) { + var id = parseInt(Math.random() * 61); + + nums += chars[id]; + } + return nums + }, + //隐藏弹框 + onClose(e) { + this.setData({ + isShowSel: false + }) + } + //分享到朋友圈 + // onShareTimeline(options) { + // var params = {} + // params['title'] = '分享朋友圈' + // params['imageUrl'] = 'https://img2.baidu.com/it/u=2645096297,1507428582&fm=26&fmt=auto&gp=0.jpg' + // return params + // } +}) \ No newline at end of file diff --git a/packagecard/marketing/marketingposter.json b/packagecard/marketing/marketingposter.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/marketing/marketingposter.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/marketing/marketingposter.wxml b/packagecard/marketing/marketingposter.wxml new file mode 100644 index 0000000..ca71c80 --- /dev/null +++ b/packagecard/marketing/marketingposter.wxml @@ -0,0 +1,103 @@ + + 营销海报 + + + + + + + + + + + + 筛选 + + + + + + + {{item.dataName}} + + + + + + + + + + + + + + + + + + + + 使用次数:{{item.picturesTemplateNumber > 999 ? '999+': + item.picturesTemplateNumber}} + + + + + + + 加载中... + + + + + + + + + + + + + + + + + + + + 加载中... + + + + + + + + + + + + \ No newline at end of file diff --git a/packagecard/marketing/marketingposter.wxss b/packagecard/marketing/marketingposter.wxss new file mode 100644 index 0000000..e617a8e --- /dev/null +++ b/packagecard/marketing/marketingposter.wxss @@ -0,0 +1,117 @@ +/* packagecard/marketing/marketingposter.wxss */ +page { + height: 100%; +} + +.tab { + position: fixed; + display: flex; + left: 0; + right: 0; + background: #fff; + flex-direction: column; + z-index: 100; + width: 100%; +} + +.tab-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; +} + + +.img-box { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + flex-wrap: wrap; + margin: 15rpx; + position: relative; +} + +.img-box .start { + position: absolute; + top: 25rpx; + left: 25rpx; + z-index: 2; + font-size: 60rpx; +} + +.img-box image { + width: 350rpx; + margin-top: 15rpx; + border-radius: 10rpx; +} + +.number-box { + width: 128rpx; + height: 128rpx; + position: absolute; + bottom: 7rpx; + right: 0rpx; +} + +.number-box image { + width: 100%; + height: 100%; + margin-top: 0rpx; + border-radius: 0rpx; +} + +.number-content { + width: 100%; + color: #fff; + position: absolute; + top: 30rpx; + right: -70rpx; + transform: rotate(-45deg) translate(-50%, -50%); + font-size: 20rpx; + text-align: center; +} + +.img-box .item { + width: 350rpx; + margin-top: 15rpx; + border-radius: 10rpx; + position: relative; +} + +.item-box .btn { + width: 0rpx; + padding: 0rpx; + margin: 0rpx; + background-color: #2222ff; + position: absolute; + bottom: 5rpx; +} + +.share-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 0rpx 15rpx 15rpx 15rpx; + margin: 15rpx; +} + +.share-item:active { + background-color: #f3f3f3; +} + +.share-item:nth-child(1) { + padding: 15rpx 15rpx 15rpx 15rpx; +} + +.share-item image { + width: 80rpx; + height: 80rpx; +} + +.share-item text { + margin-left: 15rpx; + font-size: 32rpx; +} \ No newline at end of file diff --git a/packagecard/marketing/marketingpublish.js b/packagecard/marketing/marketingpublish.js new file mode 100644 index 0000000..15dee6e --- /dev/null +++ b/packagecard/marketing/marketingpublish.js @@ -0,0 +1,258 @@ +//发布营销图片 + +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + posterId: '', //模板Id + imgUrl: app.urls.baseImgUrl, //图片基础路径 + areaList: [], //模板内容 + cardInfo: {}, //模板内容 + windowWidth: app.globalData.windowWidth, //屏幕宽度 + scale: 1, //缩放 + imgTempSrc: '', + currentIndex: 0, + isShowPoster: false, //生成海报后展示海报 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + posterId: options.posterId + }) + this.getPosterDetail() + }, + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + if (this.data.imgTempSrc != '') { + this.doUploadImg(this.data.imgTempSrc) + } + }, + //获取海报详情 + getPosterDetail() { + var _self = this; + app.http.get(app.urls.getCardDetail.format({ + cardTemplateId: _self.data.posterId + }), { + header: { + token: app.globalData.token + }, + }).then(res => { + var area = res.data.areaList + var scale = res.data.picturesTemplateWidth / _self.data.windowWidth + res.data.picturesTemplateWidth = res.data.picturesTemplateWidth / scale + res.data.picturesTemplateHeight = res.data.picturesTemplateHeight / scale + for (let i = 0; i < area.length; i++) { + if (area[i].templateAreaFontCenter == '1') { + area[i].templateAreaFontCenter = 'left' + } else if (area[i].templateAreaFontCenter == '2') { + area[i].templateAreaFontCenter = 'center' + } else { + area[i].templateAreaFontCenter = 'right' + } + if (area[i].templateAreaFontBold == '0') { + area[i].templateAreaFontBold = 'normal' + } else if (area[i].templateAreaFontBold == '1') { + area[i].templateAreaFontBold = 'bold' + } else { + area[i]['templateAreaFontStyle'] = 'italic' + } + area[i].templateAreaFontSize = area[i].templateAreaFontSize / scale + 'px' + area[i].templateAreaHeight = area[i].templateAreaHeight / scale + area[i].templateAreaWidth = area[i].templateAreaWidth / scale + area[i].templateAreaDown = area[i].templateAreaDown / scale + area[i].templateAreaTop = area[i].templateAreaTop / scale + area[i].templateAreaRight = area[i].templateAreaRight / scale + area[i].templateAreaLeft = area[i].templateAreaLeft / scale + } + _self.setData({ + cardInfo: res.data, + areaList: area + }) + }) + .catch(err => { + + }) + }, + // 生成海报 + createPoster() { + var self = this + wx.showLoading({ + title: '生成中...', + success() { + self.setData({ + isLoading: true + }) + } + }) + var content = { + pictureTemplateId: self.data.posterId, + cardTemplateUseAreaList: [] + } + for (let i = 0; i < self.data.areaList.length; i++) { + if (self.data.areaList[i].templateAreaType != '1') { + var info = { + cardTemplateUseId: "", + picturesTemplateAreaId: self.data.areaList[i].picturesTemplateAreaId, + templateAreaFile: self.data.areaList[i].templateAreaFile, + templateAreaFontValue: self.data.areaList[i].templateAreaFontValue + } + content.cardTemplateUseAreaList.push(info) + } + } + app.http.post(app.urls.creatCard, { + data: content, + header: { + token: app.globalData.token + } + }).then(res => { + if (res.statusCode == '200') { + self.setData({ + isLoading: false, + }) + //获取海报 + wx.showToast({ + title: '海报生成成功', + success(res) { + setTimeout(() => { + wx.navigateBack({}) + }, 1000) + } + }) + } + }).catch(res => { + self.setData({ + isLoading: false, + showHide: false + }) + }) + }, + //输入框失去焦点 + inputBlur(e) { + var _self = this + // templateAreaFontLength + var value = e.detail.value + var index = e.currentTarget.dataset.num + var item = e.currentTarget.dataset.item + //计算限制长度 + //最大长度 + var maxLength = item.templateAreaFontLength + if (value != '' && maxLength > 0) { + value = value.substr(0, maxLength) + //重新设置 + _self.data.areaList[index].templateAreaFontValue = value + _self.data.areaList[index].focus = false + _self.setData({ + areaList: _self.data.areaList + }) + } + //生成二维码图片 + if (item.templateAreaServerLink != '1') { + _self.getFileId(index) + } + }, + // 选择图片 + choosePhoto: function (e) { + var self = this + var cur = e.currentTarget.dataset.cur + var item = e.currentTarget.dataset.item + console.log(cur) + self.setData({ + currentIndex: cur + }) + //宽高比 + var scale = item.templateAreaWidth / item.templateAreaHeight + wx.chooseImage({ + count: 1, + sourceType: ['album', 'camera'], + success: function (res) { + wx.navigateTo({ + url: '/packagecard/common/corpperimg/cropperimg?imgSrc=' + res.tempFiles[0].path + '&scale=' + scale, + }) + } + }) + }, + doUploadImg(path) { + var _self = this + wx.showLoading({ + title: '上传中...', + }) + app.http.upload(app.urls.doUploadImg, { + path: path, + name: 'image', + header: { + token: app.globalData.token + } + }).then(res => { + wx.hideLoading({}) + res = JSON.parse(res) + var change = 'areaList[' + _self.data.currentIndex + '].templateAreaFile' + _self.setData({ + [change]: res.data + }) + wx.showToast({ + title: '上传成功', + duration: 1500 + }) + _self.setData({ + imgTempSrc: '', + currentIndex: 0 + }) + }).catch(res => { + _self.setData({ + imgTempSrc: '', + currentIndex: 0 + }) + }) + }, + // 编辑信息 + editInfo: function (e) { + var cur = e.currentTarget.dataset.num + var text = e.detail.value + var item = 'areaList[' + cur + '].templateAreaFontValue' + this.setData({ + [item]: text + }) + }, + // 点击内容区域获取input焦点 + giveFocus: function (e) { + var cur = e.currentTarget.dataset.cur + var item = 'areaList[' + cur + '].focus' + this.setData({ + [item]: true + }) + }, + // 非文字、图片区域换取fileid + getFileId(e) { + var self = this + var cur = e + var content = self.data.areaList[cur].templateAreaFontValue + var areaId = self.data.areaList[cur].picturesTemplateAreaId + app.http.get(app.urls.getFileId.format({ + picturesTemplateAreaId: areaId + }), { + header: { + token: app.globalData.token + }, + data: { + content: content + } + }).then(res => { + var change = 'areaList[' + cur + '].templateAreaFile' + self.setData({ + [change]: res.data.data + }) + }) + .catch(err => { + + }) + }, + +}) \ No newline at end of file diff --git a/packagecard/marketing/marketingpublish.json b/packagecard/marketing/marketingpublish.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/marketing/marketingpublish.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/marketing/marketingpublish.wxml b/packagecard/marketing/marketingpublish.wxml new file mode 100644 index 0000000..2e21e57 --- /dev/null +++ b/packagecard/marketing/marketingpublish.wxml @@ -0,0 +1,78 @@ + + 创建海报 + + + + + + + + {{item.templateAreaFontValue}} + + + + + + + + + + {{item.templateAreaFontValue}} + + + + + + 适用行业:{{cardInfo.templateIndustryName}} + + + + + + {{item.templateAreaName}} + + 最多输入{{item.templateAreaFontLength}}个字符 + + + + + + + + + + + + {{item.templateAreaName}} + 最多输入1张图片 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packagecard/marketing/marketingpublish.wxss b/packagecard/marketing/marketingpublish.wxss new file mode 100644 index 0000000..6985ae5 --- /dev/null +++ b/packagecard/marketing/marketingpublish.wxss @@ -0,0 +1,210 @@ +.card { + width: 100%; + height: 0; + position: relative; + box-sizing: border-box; + z-index: 100; + /* text-align: center; */ + } + + .card-bgImg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + + .area-box { + white-space: nowrap; + background: none !important; + z-index: 111; + } + + .area-box image { + width: 100%; + height: 100%; + } + + .card-info { + padding-bottom: 100rpx; + width: 100%; + margin-top: 15rpx; + } + + .card-title { + font-size: 30rpx; + background: #ffffff; + width: 100%; + padding: 15rpx; + } + + .row { + display: flex; + border-bottom: 1px solid #EEE; + background: #ffffff; + border-bottom: 1rpx solid #f5f5f5; + } + + .row-ver { + display: flex; + border-bottom: 1px solid #EEE; + border-bottom: 1rpx solid #f5f5f5; + flex-direction: column; + background-color: #ffffff; + padding: 15rpx; + } + + .row-ver:nth-child(1) { + padding: 15rpx 15rpx 7.5rpx 15rpx; + } + + .row-ver:last-child { + padding: 7.5rpx 15rpx 15rpx 15rpx; + } + + .item-title { + flex: 1; + font-size: 32rpx; + line-height: 50rpx; + color: #808080; + } + + .item-title-box { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-top: 7.5rpx; + } + + .item-input { + flex: 4; + box-sizing: border-box; + display: flex; + align-items: center; + margin-top: 15rpx; + } + + .item-input input { + width: 100%; + text-align: left; + height: 50rpx; + font-size: 32rpx; + color: #333; + } + + .item-input image { + max-width: 70%; + /* max-height: 120rpx; */ + } + + .item-code-input image { + max-width: 35%; + max-height: 160rpx; + } + + + + + .hide-link { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 1000; + } + + .hide { + position: absolute; + top: 50%; + left: 50%; + width: 60%; + transform: translate(-50%, -50%); + border-radius: 10rpx; + background: #fff; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .hide-btn { + display: flex; + width: 50%; + height: 60rpx; + background: #1d7ff0; + color: #fff; + font-size: 30rpx; + justify-content: center; + align-items: center; + border-bottom-left-radius: 10rpx; + border-bottom-right-radius: 10rpx; + } + + .hide-btn:nth-child(1) { + background: #E6B980; + border-bottom-left-radius: 10rpx; + border-bottom-right-radius: 0rpx; + } + + .hide-btn:last-child { + border-bottom-left-radius: 0rpx; + border-bottom-right-radius: 10rpx; + } + + .hide-text { + font-size: 36rpx; + color: #000; + padding: 50rpx 30rpx; + } + + .hide-title { + font-size: 43rpx; + color: #ffC107; + padding: 10rpx; + } + + .hide-btn-box { + display: flex; + width: 100%; + justify-content: space-between; + } + + .input-box { + width: 100%; + } + + .content-box { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 15rpx; + } + + .cuIcon-cameraadd { + font-size: 60rpx; + } + + .card-img-box { + display: flex; + flex-direction: row; + align-items: center; + margin-right: 40rpx; + justify-content: space-between; + } + + .card-img-box image { + width: 200rpx; + height: 200rpx; + } + + .hint-txt { + text-align: right; + color: #fd9494; + font-size: 24rpx; + } \ No newline at end of file diff --git a/packagecard/marketing/posteredit.js b/packagecard/marketing/posteredit.js new file mode 100644 index 0000000..77ff4a5 --- /dev/null +++ b/packagecard/marketing/posteredit.js @@ -0,0 +1,318 @@ +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + preview: '', + showHide: false, + isLoading: false, + isMain: '', + cardPersonId: '', + choose_index: 0, + active: 0, + cardUrl: app.urls.baseImgUrl, + areaList: [], + cardInfo: {}, + bgImg: '', + fontFamilyList: [], + useFontFamily: '', + cardId: '', + cardHeight: '', + shareTicket: '', + encryptedData: '', + iv: '', + isFromOut: false, + token: '', + oldToken: '', + imgTempSrc: '', + currentIndex: 0, + windowWidth: app.globalData.windowWidth + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this + this.setData({ + cardId: options.id, + token: app.globalData.token + }) + this.getPosterDetail() + }, + onShow(e) { + if (this.data.imgTempSrc != '') { + this.doUploadImg(this.data.imgTempSrc) + } + }, + // 删除海报 + deleteCard() { + var self = this + wx.showModal({ + cancelColor: '#000', + title: '提示', + content: '确定要删除该海报吗?', + success: function (res) { + if (res.confirm) { + wx.showLoading({ + title: '删除中...', + }) + app.http.delete(app.urls.deleteCard.format({ + ids: self.data.cardId + }), { + header: { + token: self.data.token + } + }).then(res => { + wx.hideLoading({}) + if (res.statusCode == '200') { + wx.showToast({ + title: '删除成功', + icon: 'success', + success() { + setTimeout(() => { + let arr = getCurrentPages() + let lastPage = (arr.length >= 2) ? arr[arr.length - 2] : undefined + var isDel = self.data.cardInfo.cardTemplateUseDefault == '1' + lastPage.setData({ + isRefresh: true, + isDelPage: isDel + }) + wx.navigateBack({}) + }, 500); + } + }) + } + }).catch(res => { + + }) + } + } + }) + + }, + // 更新海报 + updateCard(e) { + wx.showLoading({ + title: '修改中...', + }) + var self = this + var area = [] + for (let i = 0; i < self.data.areaList.length; i++) { + var info = { + cardTemplateUseId: self.data.areaList[i].cardTemplateUseId, + cardTemplateUseAreaId: self.data.areaList[i].cardTemplateUseAreaId, + templateAreaFile: self.data.areaList[i].templateAreaFile, + templateAreaFontValue: self.data.areaList[i].templateAreaFontValue + } + area.push(info) + } + + var postInfo = { + cardTemplateUseAreaList: area, + cardTemplateUseDefault: self.data.cardInfo.cardTemplateUseDefault, + cardTemplateUsePassword: self.data.cardInfo.cardTemplateUsePassword, + cardTemplateUseSwitch: self.data.cardInfo.cardTemplateUseSwitch, + cardTemplateUseId: self.data.cardInfo.cardTemplateUseId + } + app.http.put(app.urls.updateMyCard.format({ + cardTemplateUseId: self.data.cardId + }), { + header: { + token: app.globalData.token + }, + data: postInfo + }).then(res => { + wx.hideLoading({}) + if (res.statusCode == '200') { + wx.showToast({ + title: '修改成功', + icon: 'success', + success() { + setTimeout(() => { + let arr = getCurrentPages() + let lastPage = (arr.length >= 2) ? arr[arr.length - 2] : undefined + lastPage.setData({ + isRefresh: true + }) + wx.navigateBack({}) + }, 500) + } + }) + } + }) + .catch(err => { + + }) + }, + + //输入框失去焦点 + inputBlur(e) { + var _self = this + // templateAreaFontLength + var value = e.detail.value + var index = e.currentTarget.dataset.num + var item = e.currentTarget.dataset.item + //计算限制长度 + //最大长度 + var maxLength = item.templateAreaFontLength + if (value != '' && maxLength > 0) { + value = value.substr(0, maxLength) + //重新设置 + _self.data.areaList[index].templateAreaFontValue = value + _self.data.areaList[index].focus = false + _self.setData({ + areaList: _self.data.areaList + }) + } + //生成二维码图片 + if (item.templateAreaServerLink != '1') { + _self.getFileId(index) + } + }, + // 选择图片 + choosePhoto: function (e) { + var self = this + var cur = e.currentTarget.dataset.cur + var item = e.currentTarget.dataset.item + self.setData({ + currentIndex: cur + }) + //宽高比 + var scale = item.templateAreaWidth / item.templateAreaHeight + wx.chooseImage({ + count: 1, + sourceType: ['album', 'camera'], + success: function (res) { + wx.navigateTo({ + url: '/packagecard/common/corpperimg/cropperimg?imgSrc=' + res.tempFiles[0].path + '&scale=' + scale, + }) + } + }) + }, + doUploadImg(path) { + var _self = this + wx.showLoading({ + title: '上传中...', + }) + app.http.upload(app.urls.doUploadImg, { + path: path, + name: 'image', + header: { + token: app.globalData.token + } + }).then(res => { + wx.hideLoading({}) + res = JSON.parse(res) + var change = 'areaList[' + _self.data.currentIndex + '].templateAreaFile' + _self.setData({ + [change]: res.data + }) + wx.showToast({ + title: '上传成功', + duration: 1500 + }) + _self.setData({ + imgTempSrc: '', + currentIndex: 0 + }) + }).catch(res => { + _self.setData({ + imgTempSrc: '', + currentIndex: 0 + }) + }) + }, + // 获取海报信息 + getPosterDetail() { + var self = this; + app.http.get(app.urls.getMyCardDetail.format({ + cardTemplateUseId: self.data.cardId + }), { + header: { + token: app.globalData.token + }, + data: {} + }).then(res => { + var area = res.data.areaList + var scale = res.data.cardTemplateUseWidth / self.data.windowWidth + res.data.cardTemplateUseWidth = res.data.cardTemplateUseWidth / scale + res.data.cardTemplateUseHeight = res.data.cardTemplateUseHeight / scale + for (let i = 0; i < area.length; i++) { + area[i].templateAreaFontSize = area[i].templateAreaFontSize / scale + 'px' + area[i].templateAreaHeight = area[i].templateAreaHeight / scale + area[i].templateAreaWidth = area[i].templateAreaWidth / scale + area[i].templateAreaDown = area[i].templateAreaDown / scale + area[i].templateAreaTop = area[i].templateAreaTop / scale + area[i].templateAreaRight = area[i].templateAreaRight / scale + area[i].templateAreaLeft = area[i].templateAreaLeft / scale + if (area[i].templateAreaFontCenter == '1') { + area[i].templateAreaFontCenter = 'left' + } else if (area[i].templateAreaFontCenter == '2') { + area[i].templateAreaFontCenter = 'center' + } else { + area[i].templateAreaFontCenter = 'right' + } + if (area[i].templateAreaFontBold == '0') { + area[i].templateAreaFontBold = 'normal' + } else if (area[i].templateAreaFontBold == '1') { + area[i].templateAreaFontBold = 'bold' + } else { + area[i]['templateAreaFontStyle'] = 'italic' + } + } + self.setData({ + cardInfo: res.data, + areaList: area + }) + }) + .catch(err => { + + }) + }, + // 编辑信息 + editInfo: function (e) { + var cur = e.currentTarget.dataset.num + var text = e.detail.value + var item = 'areaList[' + cur + '].templateAreaFontValue' + this.setData({ + [item]: text + }) + }, + // 点击内容区域获取input焦点 + giveFocus(e) { + var cur = e.currentTarget.dataset.cur + var item = 'areaList[' + cur + '].focus' + this.setData({ + [item]: true + }) + }, + // 非文字、图片区域换取fileid + getFileId(index) { + var self = this + var cur = index + var content = self.data.areaList[cur].templateAreaFontValue + var areaId = self.data.areaList[cur].picturesTemplateAreaId + app.http.get(app.urls.getFileId.format({ + picturesTemplateAreaId: areaId + }), { + header: { + token: app.globalData.token + }, + data: { + content: content + } + }).then(res => { + console.log(res.data) + var change = 'areaList[' + cur + '].templateAreaFile' + self.setData({ + [change]: res.data.data + }) + }) + .catch(err => { + + }) + }, + +}) \ No newline at end of file diff --git a/packagecard/marketing/posteredit.json b/packagecard/marketing/posteredit.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/marketing/posteredit.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/marketing/posteredit.wxml b/packagecard/marketing/posteredit.wxml new file mode 100644 index 0000000..1701d55 --- /dev/null +++ b/packagecard/marketing/posteredit.wxml @@ -0,0 +1,82 @@ + + 海报 + + + + + + + + {{item.templateAreaFontValue}} + + + + + + + + + + + {{item.templateAreaFontValue}} + + + + + + + 适用行业:{{cardInfo.templateIndustryName}} + + + + + + {{item.templateAreaName}} + + 最多输入{{item.templateAreaFontLength}}个字符 + + + + + + + + + + + {{item.templateAreaName}} + 最多输入1张图片 + + + + + + + + + + + \ No newline at end of file diff --git a/packagecard/marketing/posteredit.wxss b/packagecard/marketing/posteredit.wxss new file mode 100644 index 0000000..89ac72d --- /dev/null +++ b/packagecard/marketing/posteredit.wxss @@ -0,0 +1,220 @@ +.card { + width: 100%; + height: 0; + position: relative; + box-sizing: border-box; + z-index: 100; + /* text-align: center; */ + } + + .card-bgImg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + + .area-box { + white-space: nowrap; + background: none !important; + z-index: 111; + } + + .area-box image { + width: 100%; + height: 100%; + } + + .card-info { + padding-bottom: 100rpx; + width: 100%; + margin-top: 15rpx; + } + + .card-title { + font-size: 30rpx; + background: #ffffff; + width: 100%; + padding: 15rpx; + } + + .row { + display: flex; + border-bottom: 1px solid #EEE; + background: #ffffff; + border-bottom: 1rpx solid #f5f5f5; + } + + .row-ver { + display: flex; + border-bottom: 1px solid #EEE; + border-bottom: 1rpx solid #f5f5f5; + flex-direction: column; + background-color: #ffffff; + padding: 15rpx; + } + + .row-ver:nth-child(1) { + padding: 15rpx 15rpx 7.5rpx 15rpx; + } + + .row-ver:last-child { + padding: 7.5rpx 15rpx 15rpx 15rpx; + } + + .item-title { + flex: 1; + font-size: 32rpx; + line-height: 50rpx; + color: #808080; + } + + .item-title-box { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-top: 7.5rpx; + } + + .item-input { + flex: 4; + box-sizing: border-box; + display: flex; + align-items: center; + margin-top: 15rpx; + } + + .item-input input { + width: 100%; + text-align: left; + height: 50rpx; + font-size: 32rpx; + color: #333; + } + + .item-input image { + max-width: 70%; + /* max-height: 120rpx; */ + } + + .item-code-input image { + max-width: 35%; + max-height: 160rpx; + } + + + + + .hide-link { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 1000; + } + + .hide { + position: absolute; + top: 50%; + left: 50%; + width: 90%; + transform: translate(-50%, -50%); + border-radius: 10rpx; + background: #fff; + } + + .hide-btn { + display: flex; + width: 49%; + height: 60rpx; + background: #1296db; + color: #fff; + font-size: 30rpx; + border-radius: 10rpx; + justify-content: center; + align-items: center; + } + + .hide-text { + font-size: 30rpx; + color: #000; + } + + .hide-btn-box { + display: flex; + justify-content: space-between; + } + + .input-box { + width: 100%; + } + + .content-box { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 15rpx; + } + + .cuIcon-cameraadd { + font-size: 60rpx; + } + + .card-img-box { + display: flex; + flex-direction: row; + align-items: center; + margin-right: 40rpx; + justify-content: space-between; + } + + .card-img-box image { + width: 200rpx; + height: 200rpx; + } + + .hint-txt { + text-align: right; + color: #fd9494; + font-size: 24rpx; + } + + .share { + padding: 15rpx 15rpx; + text-align: center; + position: fixed; + bottom: 0; + left: 0; + right: 0; + background: #fff; + z-index: 1000; + } + + .share .btn { + display: inline-block; + width: 32% !important; + background: #0054bd; + color: #fff; + margin-right: 2%; + font-size: 28rpx; + font-weight: normal; + height: 70rpx; + line-height: 70rpx; + text-align: center; + border-radius: 10rpx; + } + + .share .btn:nth-child(1) { + background: coral; + } + + .share .btn:last-child { + margin-right: 0; + background: #ff2525; + } \ No newline at end of file diff --git a/packagecard/moments/edit/momentedit.js b/packagecard/moments/edit/momentedit.js index bec35b4..2d2c2d7 100644 --- a/packagecard/moments/edit/momentedit.js +++ b/packagecard/moments/edit/momentedit.js @@ -35,6 +35,7 @@ Page({ isShowAudio: false, //录音弹窗 isShowVideo: false, //视频弹窗 isShowTags: false, //多选 + isShowType: false, tempText: '', tempDesc: '', linkStr: '', @@ -48,7 +49,24 @@ Page({ isAuthAudio: false, title: '栏目内容修改', curLat: 0.00, - curLng: 0.00 + curLng: 0.00, + isRecording: false, + maxDuration: 60, //上传视频大小限制 + displayType: [{ + name: '九宫格', + id: 1 + }, { + name: '轮播', + id: 2 + }, { + name: '轮播(自动)', + id: 3 + }, { + name: '平铺', + id: 4 + }, ], //图片展示方式 + selDisplayType: 1, //图片展示方式 + displayTypeStr: '九宫格', }, /** @@ -101,7 +119,36 @@ Page({ data.list.forEach(it => { switch (it.dataType) { case '2': //图片 - var items = it.value.split(',') + var photoIds = it.value.split('@') + var items = photoIds[0].split(',') + if (photoIds.length > 1) { + switch (photoIds[1]) { + case '1': //九宫格 + _self.setData({ + selDisplayType: '1', //图片展示方式 + displayTypeStr: '九宫格', + }) + break + case '2': //轮播 + _self.setData({ + selDisplayType: '2', //图片展示方式 + displayTypeStr: '轮播', + }) + break + case '3': //轮播自动 + _self.setData({ + selDisplayType: '3', //图片展示方式 + displayTypeStr: '轮播(自动)', + }) + break + case '4': //平铺 + _self.setData({ + selDisplayType: '4', //图片展示方式 + displayTypeStr: '平铺', + }) + break + } + } var tempList = [] items.forEach(item => { if (item.length > 0) { @@ -138,14 +185,27 @@ Page({ var tempList = [] items.forEach(item => { if (item.length > 0) { + var ss = item.split('&') + var totalStr = '00:00' + var duration = 100 + if (ss.length > 1) { + var dur = ss[1] + duration = dur + var tM = parseInt(dur / 60) //分钟 + var tS = parseInt(dur % 60) //秒 + var totalMStr = tM > 9 ? tM : '0' + tM + var totalSStr = +tS > 9 ? tS : '0' + tS + totalStr = totalMStr + ':' + totalSStr + } + var tempItem = { - id: item, //id - path: app.urls.baseImgUrl + item, //地址 + id: ss[0], //id + path: app.urls.baseImgUrl + ss[0], //地址 isPlay: false, //是否播放中 - duration: 100, //时长 + duration: duration, //时长 curDuation: 0, curDurationStr: '00:00', - totalDurationStr: '00:00' + totalDurationStr: totalStr } tempList.push(tempItem) } @@ -303,7 +363,14 @@ Page({ maxDuration: 60, success: (res) => { if (res.tempFiles.length > 0) { - _self.doUploadVideo(index, res.tempFiles, _self.data.uploadVideoCount) + if (res.tempFiles[0].duration <= _self.data.maxDuration) { + _self.doUploadVideo(index, res.tempFiles, _self.data.uploadVideoCount) + } else { + wx.showToast({ + title: '视频最长60秒', + icon: 'none' + }) + } } }, fail: (err) => { @@ -564,6 +631,24 @@ Page({ } }) }, + //确定选择图片展示方式 + confirmSel(e) { + const { + piacker, + value + } = e.detail + this.setData({ + selDisplayType: value.id, + displayTypeStr: value.name, + isShowType: false + }) + }, + //取消选择展示方式 + cancelSel(e) { + this.setData({ + isShowType: false + }) + }, //监听输入的文字 textInput(e) { this.setData({ @@ -1059,7 +1144,6 @@ Page({ }) }) .catch(err => { - wx.hideLoading({}) console.log(err) }) } @@ -1117,16 +1201,34 @@ Page({ field.valueList.forEach(it => { ids += it.id + '&' + it.thumbId + ',' }) + } else if (field.dataType == '3') { + field.valueList.forEach(it => { + ids += it.id + '&' + it.duration + ',' + }) + } else if (field.dataType == '2') { //图片 + field.valueList.forEach(it => { + ids += it.id + ',' + }) + ids = ids.substr(0, ids.length - 1) + ids += '@' + _self.data.selDisplayType } else { field.valueList.forEach(it => { ids += it.id + ',' }) } - ids = ids.substr(0, ids.length - 1) + if (field.dataType != '2') { + ids = ids.substr(0, ids.length - 1) + } params[field.name] = ids } } } return params - } + }, + //显示图片展示方式 + showDisplayType(e) { + this.setData({ + isShowType: true + }) + }, }) \ No newline at end of file diff --git a/packagecard/moments/edit/momentedit.wxml b/packagecard/moments/edit/momentedit.wxml index 639cae4..863a1d3 100644 --- a/packagecard/moments/edit/momentedit.wxml +++ b/packagecard/moments/edit/momentedit.wxml @@ -34,10 +34,15 @@ - {{item.comment}} + {{item.comment}}{{item.valueList.length}}/{{item.maxCount}} + + + + + {{displayTypeStr}} - {{item.valueList.length}}/{{item.maxCount}} + @@ -230,7 +235,7 @@ style="padding-bottom:180rpx;"> - 00:{{speck_time>9 ? speck_time : '0'+ speck_time}} + + + + + + \ No newline at end of file diff --git a/packagecard/moments/list/momentslist.js b/packagecard/moments/list/momentslist.js index 84f6fba..9f651f7 100644 --- a/packagecard/moments/list/momentslist.js +++ b/packagecard/moments/list/momentslist.js @@ -53,6 +53,9 @@ Page({ }), { header: { token: app.globalData.token + }, + data: { + backSystem: 'backSystem' } }) .then(res => { @@ -63,7 +66,14 @@ Page({ it.list.forEach(item => { switch (item.dataType) { case '2': //图片 - var items = item.value.split(',') + var photoIds = item.value.split('@') + var items = photoIds[0].split(',') + if (photoIds.length > 1) { + item.dataMode = photoIds[1] + } else { + item.dataMode = '1' + } + // var items = item.value.split(',') var tempList = [] for (var i = 0; i < items.length; i++) { if (items[i] != '') { @@ -115,14 +125,24 @@ Page({ var tempList = [] for (var i = 0; i < items.length; i++) { if (items[i] != '') { - var urls = _self.data.imgUrl + items[i] + var ss = items[i].split('&') + var totalStr = '00:00' + if (ss.length > 1) { + var dur = ss[1] + var tM = parseInt(dur / 60) //分钟 + var tS = parseInt(dur % 60) //秒 + var totalMStr = tM > 9 ? tM : '0' + tM + var totalSStr = +tS > 9 ? tS : '0' + tS + totalStr = totalMStr + ':' + totalSStr + } + var urls = _self.data.imgUrl + ss[0] var tempItem = { path: urls, //地址 isPlay: false, //是否播放中 duration: 100, //时长 curDuation: 0, curDurationStr: '00:00', - totalDurationStr: '00:00' + totalDurationStr: totalStr } tempList.push(tempItem) } diff --git a/packagecard/moments/list/momentslist.wxml b/packagecard/moments/list/momentslist.wxml index 783d740..0c2c7f6 100644 --- a/packagecard/moments/list/momentslist.wxml +++ b/packagecard/moments/list/momentslist.wxml @@ -11,6 +11,13 @@ + + + 该条数据存在违规内容,请修改后重新发布. + 违规描述:{{item.checkRemark}} + + @@ -28,7 +35,7 @@ - + diff --git a/packagecard/moments/list/momentsshowlist.js b/packagecard/moments/list/momentsshowlist.js index 27ec0e8..9c95fab 100644 --- a/packagecard/moments/list/momentsshowlist.js +++ b/packagecard/moments/list/momentsshowlist.js @@ -1,11 +1,12 @@ // pages/moments/list/momentsshowlist.js +const app = getApp() Page({ /** * 页面的初始数据 */ data: { - + url: 'https://cbc.wgink.ink/systemcard/app/cardconfigarticle/listrelease?token=' + app.globalData.token }, /** @@ -15,52 +16,4 @@ Page({ }, - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady: function () { - - }, - - /** - * 生命周期函数--监听页面显示 - */ - onShow: function () { - - }, - - /** - * 生命周期函数--监听页面隐藏 - */ - onHide: function () { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload: function () { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh: function () { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom: function () { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - } }) \ No newline at end of file diff --git a/packagecard/moments/list/momentsshowlist.wxml b/packagecard/moments/list/momentsshowlist.wxml index 455f722..8f7ecf7 100644 --- a/packagecard/moments/list/momentsshowlist.wxml +++ b/packagecard/moments/list/momentsshowlist.wxml @@ -1,2 +1,7 @@ -pages/moments/list/momentsshowlist.wxml + + 详情 + + + + diff --git a/packagecard/moments/momentsdetail/momentsdetail.js b/packagecard/moments/momentsdetail/momentsdetail.js index 2bb86b5..085aa09 100644 --- a/packagecard/moments/momentsdetail/momentsdetail.js +++ b/packagecard/moments/momentsdetail/momentsdetail.js @@ -88,14 +88,24 @@ Page({ var tempList = [] items.forEach(item => { if (item.length > 0) { + var ss = item.split('&') + var totalStr = '00:00' + if (ss.length > 1) { + var dur = ss[1] + var tM = parseInt(dur / 60) //分钟 + var tS = parseInt(dur % 60) //秒 + var totalMStr = tM > 9 ? tM : '0' + tM + var totalSStr = +tS > 9 ? tS : '0' + tS + totalStr = totalMStr + ':' + totalSStr + } var tempItem = { - id: item, //id - path: app.urls.baseImgUrl + item, //地址 + id: ss[0], //id + path: app.urls.baseImgUrl + ss[0], //地址 isPlay: false, //是否播放中 duration: 100, //时长 curDuation: 0, curDurationStr: '00:00', - totalDurationStr: '00:00' + totalDurationStr: totalStr } tempList.push(tempItem) } @@ -632,27 +642,27 @@ Page({ /** * 用户点击右上角分享 */ - onShareAppMessage: function (res) { - console.log(res) - var self = this - wx.showShareMenu({ - withShareTicket: true, - success: function (res) { - console.log(res) - } - }) + // onShareAppMessage: function (res) { + // console.log(res) + // var self = this + // wx.showShareMenu({ + // withShareTicket: true, + // success: function (res) { + // console.log(res) + // } + // }) - if (res.from == 'button') { - var postId = self.buildId() - self.shareRecord(postId) + // if (res.from == 'button') { + // var postId = self.buildId() + // self.shareRecord(postId) - var param = '/pages/sharePage/sharePage?cardTemplateDispatchId=' + postId; - return { - title: '名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享', - path: param, - imageUrl: self.data.shareImgUrl - } - // return返回 title 转发标题 path 路径 imageUrl 自定义图片,可以本地路径 代码包文件路径 支持png jpg 显示长宽比5:4 - } - }, + // var param = '/pages/sharePage/sharePage?cardTemplateDispatchId=' + postId; + // return { + // title: '名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享名片分享', + // path: param, + // imageUrl: self.data.shareImgUrl + // } + // // return返回 title 转发标题 path 路径 imageUrl 自定义图片,可以本地路径 代码包文件路径 支持png jpg 显示长宽比5:4 + // } + // }, }) \ No newline at end of file diff --git a/packagecard/moments/publish/momentpublish.js b/packagecard/moments/publish/momentpublish.js index 1215a15..601a3fb 100644 --- a/packagecard/moments/publish/momentpublish.js +++ b/packagecard/moments/publish/momentpublish.js @@ -4,10 +4,10 @@ var innerAudioContext = wx.createInnerAudioContext() const chooseLocation = requirePlugin('chooseLocation'); const key = 'Y6FBZ-GLQC3-6273Q-3DRTL-W43G5-G6BXN'; //使用在腾讯位置服务申请的key const referer = '名片-小程序'; //调用插件的app的名称 -const location = JSON.stringify({ - latitude: 39.89631551, - longitude: 116.323459711 -}); +var location = { + latitude: 39.90877, + longitude: 116.39695 +}; //默认坐标点 const category = '生活服务,娱乐休闲'; Page({ @@ -15,34 +15,59 @@ Page({ * 页面的初始数据 */ data: { - uploadCount: 0, - uploadVideoCount: 0, - columnId: '', //栏目Id - fieldList: [], //栏目字段 - textList: [], //文本添加内容 - textareaList: [], //文本域添加内容 - audioList: [], //音频添加内容 - videoList: [], //视频添加内容 - photoList: [], //视频添加内容 - linkList: [], //连接添加内容 - locationList: [], //定位添加内容 - isShowText: false, //文本弹窗开关 - isShowDesc: false, //文本域弹窗开关 - isShowPhoto: false, //图片选择弹框 - isShowLink: false, //链接弹窗 - isShowAudio: false, //录音弹窗 - isShowVideo: false, //视频弹窗 - tempText: '', - tempDesc: '', - linkStr: '', - map: null, - waitFlag: false, - isStartRecord: false, //是否录音中 - speck_time: 0, - speedStep: 5, //快进快退秒数 - setInter: '', //定时器 - currentItem: undefined, - isAuthAudio: false + maringHeight: app.globalData.CustomBar, + fieldList: [{ + type: 'text' + }, { + type: 'video' + }, { + type: 'audio' + }, { + type: 'map' + }, { + type: 'select' + }, { + type: 'textarea' + }, { + type: 'link' + }, { + type: 'photo' + }, ], //允许发布的字段列表 + valueList: [], //当前添加的内容列表 + isShowInput: false, //是否显示文本输入 + isShowPhoto: false, //是否显示图片编辑框 + isShowVideo: false, //是否显示视频编辑框 + isShowLink: false, //是否显示链接输入框 + isShowSelect: false, //是否显示选项弹框 + curTextValue: '', //当前输入的文本内容 + curLinkText: '', //当前链接输入的文本内容 + isShowEdit: false, //是否显示编辑 + currentIndex: -1, //当前点击的条目索引 + photoList: [], //当前选择的图片列表 + videoList: [], //当前选择的视频列表 + curSelPhotoDisplay: '1', //图片的显示方式 1.九宫格 2.轮播 3.轮播(自动) 4.平铺 + curVideoDisplay: '1', //视频展示方式 1.九宫格 2.平铺 + curTextAlign: '1', //文字显示排列 1.居左 2.居中 3.居右 + curFieldType: '0', //编辑选择的文件类型 + selDirection: '1', //选中的插入方向 1.插入到下面 2.插入的上面 + isInsert: false, //是否显示插入选项 + topBoxHeight: 100, //顶部类型选择框的高度 + optionsList: [{ + id: '1', + name: '选项一' + }, { + id: '2', + name: '选项二' + }, { + id: '3', + name: '选项三' + }, { + id: '4', + name: '选项四' + }, { + id: '5', + name: '选项五' + }], //选项 }, /** @@ -53,30 +78,329 @@ Page({ columnId: options.id }) this.checkPermission() - this.getFieldList() - }, - getFieldList() { - wx.showLoading({ - title: '加载中...', + wx.getLocation({ + success(res) { + location.latitude = res.latitude + location.longitude = res.longitude + } }) + this.countBoxHeight() + }, + countBoxHeight() { var _self = this - app.http.get(app.urls.getMomentsField.format({ - configColumnId: _self.data.columnId - }), { - header: { - token: app.globalData.token - } + var query = wx.createSelectorQuery() + query.select('#top-box').boundingClientRect() + query.exec(res => { + _self.setData({ + topBoxHeight: res[0].height + 7 }) - .then(res => { - wx.hideLoading({}) + }) + }, + onShow() { + var _self = this + if (chooseLocation.getLocation() != null) { + var item = chooseLocation.getLocation() + var tempItem = {} + tempItem['type'] = 'map' + tempItem['value'] = item + _self.data.valueList.push(tempItem) + _self.setData({ + valueList: _self.data.valueList + }) + } + wx.getSetting({ + withSubscriptions: true, + success(res) { + var isAuth = res.authSetting['scope.record'] _self.setData({ - fieldList: res.data + isAuthAudio: isAuth }) + } + }) + + }, + showType(e) { + var type = e.currentTarget.dataset.type + var _self = this + switch (type) { + case 'text': + case 'textarea': //文本域 + this.setData({ + isShowInput: true + }) + break + case 'video': //视频 + _self.chooseVideo() + break + case 'audio': //音频 + break + case 'photo': //图片 + _self.chooseImg() + break + case 'map': //地图 + _self.doChooseLocation() + break + case 'select': //选项 + break + case 'link': //链接 + _self.setData({ + isShowLink: true + }) + break + } + }, + //去选择图片 + chooseImg() { + var _self = this + wx.chooseImage({ + count: 9, + sourceType: ['album', 'camera'], + success: (res) => { + // _self.doUploadImg(index, res.tempFilePaths, _self.data.uploadCount) + //构建数据 + console.log(res) + res.tempFilePaths.forEach(it => { + var tempItem = {} + tempItem['path'] = it + _self.data.photoList.push(tempItem) + }) + _self.setData({ + photoList: _self.data.photoList, + isShowPhoto: true + }) + }, + fail: (err) => { + if (err.errMsg.indexOf('fail cancel') == -1) { + wx.showToast({ + title: '请重新选择', + icon: 'error' + }) + } + } + }) + }, + //去选择视频 + chooseVideo() { + var _self = this + wx.chooseMedia({ + count: 9, + mediaType: ['video'], + sourceType: ['album', 'camera'], + maxDuration: 60, + success(res) { + res.tempFiles.forEach(it => { + var tempItem = {} + tempItem['path'] = it.tempFilePath + tempItem['coverPath'] = it.thumbTempFilePath + _self.data.videoList.push(tempItem) + }) + _self.setData({ + videoList: _self.data.videoList, + isShowVideo: true + }) + }, + fail(err) { + if (err.errMsg.indexOf('fail cancel') == -1) { + wx.showToast({ + title: '请重新选择', + icon: 'error' + }) + } + } + }) + }, + //控制显示 + showEditBox(e) { + var index = e.currentTarget.dataset.idx + var _self = this + if (_self.data.currentIndex == index) { + this.setData({ + currentIndex: -1, }) - .catch(err => { - wx.hideLoading({}) - console.log(err) + } else { + this.setData({ + currentIndex: index }) + } + }, + //选择插入的方向 + chooseDirection(e) { + var idx = e.currentTarget.dataset.idx + this.setData({ + selDirection: idx + }) + }, + //选择图片的显示方式 + choosePhotoDisplay(e) { + var type = e.currentTarget.dataset.type + this.setData({ + curSelPhotoDisplay: type + }) + }, + //选择视频的显示方式 + chooseVideoDisplay(e) { + var type = e.currentTarget.dataset.type + this.setData({ + curVideoDisplay: type + }) + }, + //选择文字排列方式 + chooseTextAlign(e) { + var type = e.currentTarget.dataset.type + this.setData({ + curTextAlign: type + }) + }, + //编辑选择出入的类型 + chooseFieldType(e) { + var type = e.currentTarget.dataset.type + this.setData({ + curFieldType: type + }) + }, + //确定选择的图片 + confirmPhoto() { + var _self = this + if (_self.data.photoList.length > 0) { + //上传图片 + var tempList = [] + _self.data.photoList.forEach(it => { + var item = {} + item['path'] = it.path + tempList.push(item) + }) + var tempPhoto = {} + tempPhoto['type'] = 'photo' + tempPhoto['valueList'] = tempList + tempPhoto['displayType'] = _self.data.curSelPhotoDisplay + _self.data.valueList.push(tempPhoto) + _self.setData({ + valueList: _self.data.valueList, + photoList: [], + curSelPhotoDisplay: 1, + isShowPhoto: false + }) + } else { + wx.showToast({ + title: '请选择图片', + icon: 'error' + }) + } + }, + //确定选择的视频 + confirmVideo() { + var _self = this + if (_self.data.videoList.length > 0) { + var tempList = [] + _self.data.videoList.forEach(it => { + var item = {} + item['path'] = it.path + item['coverPath'] = it.coverPath + tempList.push(item) + }) + var tempVideo = {} + tempVideo['type'] = 'video' + tempVideo['valueList'] = tempList + tempVideo['displayType'] = _self.data.curVideoDisplay + _self.data.valueList.push(tempVideo) + _self.setData({ + valueList: _self.data.valueList, + videoList: [], + curVideoDisplay: 1, + isShowVideo: false + }) + } else { + wx.showToast({ + title: '请选择视频', + icon: 'error' + }) + } + }, + //确定插入数据 + doInsert() { + //根据选择的类型与方向插入数据 + }, + hideEditBox() { + //隐藏编辑框 + this.setData({ + currentIndex: -1 + }) + }, + onClose() { + this.setData({ + isShowInput: false, + isShowLink: false + }) + }, + //输入框监听 + inputWatch(e) { + var _self = this + _self.setData({ + curTextValue: e.detail.value + }) + }, + //链接输入框监听 + inputLink(e) { + var _self = this + _self.setData({ + curLinkText: e.detail.value + }) + }, + //保存输入的链接 + doConfirmLink() { + var _self = this + if (_self.data.curLinkText == '') { + wx.showToast({ + title: '请输入链接', + icon: 'error' + }) + } else { + //保存 + var tempText = {} + tempText['type'] = 'link' + tempText['value'] = _self.data.curLinkText + _self.data.valueList.push(tempText) + _self.setData({ + valueList: _self.data.valueList, + curLinkText: '', + isShowLink: false + }) + } + }, + //保存输入的文本 + doConfirmInput() { + var _self = this + if (_self.data.curTextValue == '') { + wx.showToast({ + title: '请输入内容', + icon: 'error' + }) + } else { + //保存 + var tempText = {} + tempText['type'] = 'text' + tempText['value'] = _self.data.curTextValue + var textAlign = 'left' + console.log(_self.data.curTextAlign) + switch (_self.data.curTextAlign) { + case '1': + textAlign = 'left' + break + case '2': + textAlign = 'center' + break + case '3': + textAlign = 'right' + break + } + tempText['textAlign'] = textAlign + _self.data.valueList.push(tempText) + _self.setData({ + valueList: _self.data.valueList, + curTextValue: '', + isShowInput: false + }) + } }, //申请录音权限 checkPermission() { @@ -119,311 +443,16 @@ Page({ } }) }, - onShow() { - if (chooseLocation.getLocation() != null) { - if (this.data.locationList.length < this.data.currentItem.count) { - this.data.locationList.push(chooseLocation.getLocation()) - this.setData({ - locationList: this.data.locationList - }) - } - } - var _self = this - wx.getSetting({ - withSubscriptions: true, - success(res) { - var isAuth = res.authSetting['scope.record'] - _self.setData({ - isAuthAudio: isAuth - }) - } - }) - - }, - onUnload() { - chooseLocation.setLocation(null) - this.setData({ - map: null - }) - }, - //选择视频来源 - chooseVideo(e) { - var _self = this - var countNum = _self.data.currentItem.count - _self.data.videoList.length - console.log(countNum) - var type = e.currentTarget.dataset.type - wx.chooseMedia({ - count: Number.parseInt(countNum), - mediaType: ['video'], - sourceType: [type], - maxDuration: 60, - success: (res) => { - if (res.tempFiles.length > 0) { - _self.doUploadVideo(1, res.tempFiles, _self.data.uploadVideoCount) - } - }, - fail: (err) => { - // console.log(err) - // wx.showToast({ - // title: '选取视频失败,(拍摄时长:60秒)', - // icon: 'none' - // }) - } - }) - }, - //上传视频 - doUploadVideo(type, paths, curIndex) { - console.log(paths) - wx.showLoading({ - title: '上传中...', - }) - let _self = this - var count = paths.length //几次 - if (_self.data.uploadVideoCount < count) { - app.http.upload(app.urls.doUploadVideo, { - path: paths[_self.data.uploadVideoCount].tempFilePath, - name: 'video', - header: { - token: app.globalData.token - } - }) - .then(res => { - wx.hideLoading({}) - //插入到集合中 - var id = JSON.parse(res).data - var pathStr = app.urls.baseImgUrl + id - var item = { - id: id, - path: pathStr, - imgPath: paths[_self.data.uploadVideoCount].thumbTempFilePath - } - _self.data.videoList.push(item) - _self.setData({ - videoList: _self.data.videoList - }) - _self.setData({ - uploadVideoCount: ++_self.data.uploadVideoCount - }) - _self.doUploadVideo(1, paths, _self.data.uploadVideoCount) - }) - .catch(err => { - wx.hideLoading({}) - _self.setData({ - uploadVideoCount: ++_self.data.uploadVideoCount - }) - _self.doUploadVideo(1, paths, _self.data.uploadVideoCount) - }) - } else { - wx.hideLoading({}) - _self.setData({ - uploadVideoCount: 0 - }) - } - }, - //预览视频 - viewVideo(e) { - var tempList = [{ - url: e.currentTarget.dataset.url, - type: 'video' - }] - wx.previewMedia({ - sources: tempList, - current: 0, - showmenu: false - }) - }, - //删除视频 - delVideo(e) { - let _self = this - wx.showModal({ - title: '提示', - content: '确定要删除该视频吗?', - cancelText: '取消', - confirmText: '确定', - success: res => { - if (res.confirm) { - _self.data.videoList.splice(e.currentTarget.dataset.index, 1) - _self.setData({ - videoList: _self.data.videoList - }) - } - } - }) - }, - //添加链接 - addLink() { - var _self = this - var item = null - for (var i = 0; i < _self.data.items.length; i++) { - if (_self.data.items[i].type == 'LINK') { - item = _self.data.items[i] - break - } - } - if (_self.data.linkList.length < item.count) { - if (_self.data.linkStr == '') { - wx.showToast({ - title: '请输入文字内容', - icon: 'error' - }) - return - } - _self.data.linkList.push(_self.data.linkStr) - _self.setData({ - linkList: _self.data.linkList, - linkStr: '' - }) - if (_self.data.linkList.length == item.count) { - _self.setData({ - isShowLink: false - }) - } - } - }, - //文本域添加输入的文字 - addDesc() { - var _self = this - var item = null - for (var i = 0; i < _self.data.items.length; i++) { - if (_self.data.items[i].type == 'TEXTAREA') { - item = _self.data.items[i] - break - } - } - if (_self.data.textareaList.length < item.count) { - if (_self.data.tempDesc == '') { - wx.showToast({ - title: '请输入文字内容', - icon: 'error' - }) - return - } - _self.data.textareaList.push(_self.data.tempDesc) - _self.setData({ - textareaList: _self.data.textareaList, - tempDesc: '' - }) - if (_self.data.textareaList.length == item.count) { - _self.setData({ - isShowDesc: false - }) - } - } - }, - //添加输入的文字 - addStr() { - var _self = this - var item = null - for (var i = 0; i < _self.data.items.length; i++) { - if (_self.data.items[i].type == 'TEXT') { - item = _self.data.items[i] - break - } - } - if (_self.data.textList.length < item.count) { - if (_self.data.tempText == '') { - wx.showToast({ - title: '请输入文字内容', - icon: 'error' - }) - return - } - _self.data.textList.push(_self.data.tempText) - _self.setData({ - textList: _self.data.textList, - tempText: '' - }) - if (_self.data.textList.length == item.count) { - _self.setData({ - isShowText: false - }) - } - } - }, - //删除 - delText(e) { - wx.showModal({ - title: '提示', - content: '确定要删除该条数据吗?', - cancelText: '取消', - confirmText: '确定', - success: res => { - if (res.confirm) { - this.data.textList.splice(e.currentTarget.dataset.index, 1) - this.setData({ - textList: this.data.textList - }) - } - } - }) - }, - delLink(e) { - wx.showModal({ - title: '提示', - content: '确定要删除该条数据吗?', - cancelText: '取消', - confirmText: '确定', - success: res => { - if (res.confirm) { - this.data.linkList.splice(e.currentTarget.dataset.index, 1) - this.setData({ - linkList: this.data.linkList - }) - } - } - }) - }, - delDesc(e) { - wx.showModal({ - title: '提示', - content: '确定要删除该条数据吗?', - cancelText: '取消', - confirmText: '确定', - success: res => { - if (res.confirm) { - this.data.textareaList.splice(e.currentTarget.dataset.index, 1) - this.setData({ - textareaList: this.data.textareaList - }) - } - } - }) - }, - //监听输入的文字 - textInput(e) { - this.setData({ - [e.currentTarget.id]: e.detail.value - }) - }, - //关闭弹窗 - onHide(e) { - this.setData({ - isShowText: false, - isShowDesc: false, - isShowPhoto: false, - isShowLink: false, - isShowAudio: false, - isShowVideo: false - }) - }, - //选择图片 - choosePhoto(e) { - var _self = this - var countNum = _self.data.currentItem.count - _self.data.photoList.length - var type = e.currentTarget.dataset.type - wx.chooseImage({ - count: Number.parseInt(countNum), - sourceType: [type], - success: (res) => { - _self.doUploadImg(1, res.tempFilePaths, _self.data.uploadCount) - }, - fail: (err) => { - - } + //预览图片 + viewPhoto(e) { + var url = e.currentTarget.dataset.url + wx.previewImage({ + urls: [url], }) }, //删除图片 - delImg(e) { + delPhoto(e) { + var _self = this wx.showModal({ title: '提示', content: '确定要删除该图片吗?', @@ -431,403 +460,63 @@ Page({ confirmText: '确定', success: res => { if (res.confirm) { - this.data.photoList.splice(e.currentTarget.dataset.index, 1) - this.setData({ - photoList: this.data.photoList - }) - } - } - }) - }, - //预览图片 - viewImg(e) { - var tempList = [e.currentTarget.dataset.url] - wx.previewImage({ - urls: tempList, - current: e.currentTarget.dataset.url - }); - }, - doUploadImg(type, paths, curIndex) { - wx.showLoading({ - title: '上传中...', - }) - let _self = this - var count = paths.length //几次 - if (_self.data.uploadCount < count) { - app.http.upload(app.urls.doUploadImg, { - path: paths[_self.data.uploadCount], - name: 'image', - header: { - token: app.globalData.token - } - }) - .then(res => { - wx.hideLoading({}) - //插入到集合中 - var id = JSON.parse(res).data - var pathStr = app.urls.baseImgUrl + id - var item = { - id: id, - path: pathStr - } - _self.data.photoList.push(item) + _self.data.photoList.splice(e.currentTarget.dataset.index, 1) _self.setData({ photoList: _self.data.photoList }) - _self.setData({ - uploadCount: ++_self.data.uploadCount - }) - _self.doUploadImg(1, paths, _self.data.uploadCount) - }) - .catch(err => { - wx.hideLoading({}) - _self.setData({ - uploadCount: ++_self.data.uploadCount - }) - _self.doUploadImg(1, paths, _self.data.uploadCount) - }) - } else { - wx.hideLoading({}) - _self.setData({ - uploadCount: 0 - }) - } - }, - //地图选点 - chooseLocation() { - this.data.items.forEach(it => { - if (it.type == 'LOCATION') { - this.setData({ - currentItem: it - }) + } } }) + }, + //选择定位点 + doChooseLocation(e) { + // var index = e.currentTarget.dataset.index + // this.setData({ + // curMapIndex: index + // }) + var curLoc = JSON.stringify(location) wx.navigateTo({ - url: `plugin://chooseLocation/index?key=${key}&referer=${referer}&location=${location}&category=${category}` + url: `plugin://chooseLocation/index?key=${key}&referer=${referer}&location=${curLoc}&category=${category}` }); }, - delMap(e) { + //编辑条目 + editItem(e) { + + }, + //插入条目 + insertItem(e) { + var _self = this + _self.setData({ + isInsert: !_self.data.isInsert + }) + }, + //删除条目 + delItem(e) { wx.showModal({ title: '提示', content: '确定要删除该条数据吗?', - cancelText: '取消', - confirmText: '确定', - success: res => { - if (res.confirm) { - this.data.locationList.splice(e.currentTarget.dataset.index, 1) - this.setData({ - locationList: this.data.locationList - }) - } - } - }) - }, - //删除视频 - delAudio(e) { - let _self = this - wx.showModal({ - title: '提示', - content: '确定要删除该音频吗?', - cancelText: '取消', - confirmText: '确定', - success: res => { - if (res.confirm) { - _self.data.audioList.splice(e.currentTarget.dataset.index, 1) - _self.setData({ - audioList: _self.data.audioList - }) - } - } - }) - }, - doStartRecord() { - var _self = this - wx.getSetting({ success(res) { - if (!res.authSetting['scope.record']) { - wx.authorize({ - scope: 'scope.record', - success() { - _self.startRecord() - } - }) - } else { - _self.startRecord() + if (res.confirm) { + } } }) }, - startRecord() { - var that = this - that.data.setInter = setInterval( - function () { - var speck_time = parseInt(that.data.speck_time + 1); - that.setData({ - speck_time: parseInt(speck_time), - isStartRecord: true - }); - if (that.data.speck_time > 0 && that.data.speck_time <= 59) { - that.start(); - } else { - clearInterval(that.data.setInter); - // 获取到结束时间 - that.stop(); - wx.showToast({ - title: '录音最长60S哦!', - duration: 2000, - icon: "none" - }) - } - }, 1000); - }, - doEndRecord() { - var _self = this; - clearInterval(_self.data.setInter); - // 获取到结束时间 - if (_self.data.speck_time > 3) { - //清除计时器 即清除setInter - clearInterval(_self.data.setInter); - // 获取到结束时间 - _self.stop(true); - _self.setData({ - speck_time: "0", - isStartRecord: false - }) - } else { - //清除计时器 即清除setInter - clearInterval(_self.data.setInter); - // 获取到结束时间 - _self.stop(false); - wx.showToast({ - title: '录制时间过短', - duration: 2000, - icon: "none" - }) - _self.setData({ - speck_time: "0", - isStartRecord: false - }) - } - }, - //开始录音的时候 - start() { - const options = { - duration: 60000, - format: 'mp3', //音频格式,有效值 aac/mp3 - } - //开始录音 - recorderManager.start(options); - recorderManager.onStart(() => { - console.log('recorder start') - }); - //错误回调 - recorderManager.onError((res) => { - console.log(res); - _self.stop(false); - }) - }, - //停止录音 - stop(success) { - var _self = this - recorderManager.stop(); - recorderManager.onStop((res) => { - if (success) { - //进行录音文件上传 - _self.doUploadAudio(res) - } - }) - }, - doUploadAudio(audio) { - wx.showLoading({ - title: '上传中...', - }) - let _self = this - app.http.upload(app.urls.doUploadAudio, { - path: audio.tempFilePath, - name: 'audio', - header: { - token: app.globalData.token - } - }) - .then(res => { - wx.hideLoading({}) - if (_self.data.audioList.length < _self.data.currentItem.count) { - wx.hideLoading({}) - //插入到集合中 - var id = JSON.parse(res).data - var pathStr = app.urls.baseImgUrl + id - //计算时长 - var dur = parseInt(audio.duration / 1000) - var tM = parseInt(dur / 60) //分钟 - var tS = parseInt(dur % 60) //秒 - var totalMStr = tM > 9 ? tM : '0' + tM - var totalSStr = +tS > 9 ? tS : '0' + tS - var totalStr = totalMStr + ':' + totalSStr - var item = { - id: id, //id - path: pathStr, //地址 - isPlay: false, //是否播放中 - duration: dur, //时长 - curDuation: 0, - curDurationStr: '00:00', - totalDurationStr: totalStr - } - _self.data.audioList.push(item) - _self.setData({ - audioList: _self.data.audioList - }) - console.log(_self.data.audioList) - if (_self.data.audioList.length == _self.data.currentItem.count) { - _self.setData({ - isShowAudio: false - }) - } - } - }) - .catch(err => {}) - }, - play(e) { - - //进行播放 - var index = e.currentTarget.dataset.index - var item = e.currentTarget.dataset.item - var _self = this - _self.data.audioList.forEach(it => { - if (it.isPlay) { - innerAudioContext.stop() - } - it.isPlay = false - it.curDuation = 0 - it.curDuationStr = '00:00' - }) - if (!item.isPlay) { - // innerAudioContext.stop() - //找到该文件 - innerAudioContext = wx.createInnerAudioContext() - // 播放音频文件 - innerAudioContext.src = _self.data.audioList[index].path - innerAudioContext.autoplay = true - } - //先需要停止其他录音文件的播放 - - innerAudioContext.onPlay(() => { - _self.data.audioList[index].isPlay = true - _self.setData({ - audioList: _self.data.audioList - }) - }); - - innerAudioContext.onCanplay((res) => { - if (_self.data.waitFlag) { - innerAudioContext.play() - _self.setData({ - waitFlag: false - }) - } - }) - innerAudioContext.onStop((res) => { - _self.data.audioList[index].isPlay = false - _self.data.audioList[index].curDuration = 0 - _self.data.audioList[index].curDurationStr = '00:00' - _self.setData({ - audioList: _self.data.audioList, - }) - }) - innerAudioContext.onEnded((res) => { - _self.data.audioList[index].isPlay = false - _self.data.audioList[index].curDuration = 0 - _self.data.audioList[index].curDurationStr = '00:00' - _self.setData({ - audioList: _self.data.audioList, - }) - }) - innerAudioContext.onError((res) => { - _self.data.audioList[index].isPlay = false - _self.data.audioList[index].curDuration = 0 - _self.data.audioList[index].curDurationStr = '00:00' - _self.setData({ - audioList: _self.data.audioList, - }) - }) - innerAudioContext.onSeeking(() => { - console.log(innerAudioContext.currentTime) - }) - innerAudioContext.onWaiting(() => { - innerAudioContext.pause() - _self.setData({ - waitFlag: true - }) - }) - innerAudioContext.onTimeUpdate(() => { - if (innerAudioContext.duration != Infinity) { - _self.data.audioList[index].curDuration = parseInt(innerAudioContext.currentTime) - _self.data.audioList[index].duration = parseInt(innerAudioContext.duration) - console.log(innerAudioContext.duration) - var curM = parseInt(innerAudioContext.currentTime / 60) //分钟 - var curS = parseInt(innerAudioContext.currentTime % 60) //秒 - var tM = parseInt(innerAudioContext.duration / 60) //分钟 - var tS = parseInt(innerAudioContext.duration % 60) //秒 - var curMStr = curM > 9 ? curM : '0' + curM - var curSStr = curS > 9 ? curS : '0' + curS - var totalMStr = tM > 9 ? tM : '0' + tM - var totalSStr = +tS > 9 ? tS : '0' + tS - _self.data.audioList[index].curDurationStr = curMStr + ':' + curSStr - _self.data.audioList[index].totalDurationStr = totalMStr + ':' + totalSStr - _self.setData({ - audioList: _self.data.audioList - }) - } - }) - }, - //倒退5秒 - rewind(e) { - var _self = this - var index = e.currentTarget.dataset.index - var item = e.currentTarget.dataset.item - if (item.isPlay) { - _self.data.audioList[index].curDuration = _self.data.audioList[index].curDuration - _self.data.speedStep - innerAudioContext.seek(_self.data.audioList[index].curDuration) - _self.setData({ - audioList: _self.data.audioList - }) - } + onHide() { }, - //快进5秒 - speed(e) { - var _self = this - var index = e.currentTarget.dataset.index - var item = e.currentTarget.dataset.item - if (item.isPlay) { - _self.data.audioList[index].curDuration = _self.data.audioList[index].curDuration + _self.data.speedStep - innerAudioContext.seek(_self.data.audioList[index].curDuration) - _self.setData({ - audioList: _self.data.audioList - }) - } - }, - slider4change(e) { - var index = e.currentTarget.dataset.index - var item = e.currentTarget.dataset.item - if (item.isPlay) { - innerAudioContext.seek(e.detail.value) - } - }, - //显示弹框 - showDialog(e) { - var type = e.currentTarget.dataset.type - var keyType = e.currentTarget.dataset.keytype - console.log(e) - this.data.items.forEach(it => { - if (it.type == type) { - this.setData({ - currentItem: it - }) - return - } - }) + //隐藏各类弹框 + closePop() { this.setData({ - [keyType]: true + isShowPhoto: false, + isShowEdit: false, + isShowVideo: false + }) + }, + onUnload() { + chooseLocation.setLocation(null) + this.setData({ + map: null }) } }) \ No newline at end of file diff --git a/packagecard/moments/publish/momentpublish.wxml b/packagecard/moments/publish/momentpublish.wxml index 21a0821..e79169f 100644 --- a/packagecard/moments/publish/momentpublish.wxml +++ b/packagecard/moments/publish/momentpublish.wxml @@ -1,259 +1,247 @@ 内容发布 - - - - - - - - {{item.comment}} - - - - - - {{txt}} - - - - - - - - - - 用一段话,向名片访客介绍自己吧 - - - - 点击添加 - - - - - - - {{item.comment}} - - - - - - {{txt}} - - - - - - - - - - 用一段话,向名片访客介绍自己吧 - - - 点击添加 - - - - - - - {{item.comment}} - - - - {{'数量'+'('+photoList.length+'/'+ currentItem.maxCount+')'}} - - - - - - - - - - - - - - - - 用一段话,向名片访客介绍自己吧 - - - 点击添加 - - - - - - - {{item.comment}} - - - - - - - - - {{audio.curDurationStr}} - - {{audio.totalDurationStr}} - - - - - - - - - - - - - - - - - - - 语音,可以给名片访客留下更深的印象 - - - 点击添加 - - - - - - - {{item.comment}} - - - - {{'数量'+'('+videoList.length+'/'+ currentItem.maxCount+')'}} - - - - - - - - - - - - - - - - 用一段话,向名片访客介绍自己吧 - - - 点击添加 - - - - - - - - {{item.comment}} - - - - - - {{txt}} - - - - - - - - - - 用一段话,向名片访客介绍自己吧 - - - - 点击添加 - - - - - - - {{item.comment}} - - - - - - - {{m.name}}-{{m.address}} - - - - - - - - - - - - - - - 在地图上选取一个地点 - - - - 点击添加 - + + + + 本栏目可以发布 + + + + + 文本 + + + + 图片 + + + + 视频 + + + + 音频 + + + + 选项 + + + + 定位 + + + + 链接 + + + + + + + + + + + + + {{item.value}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.value.name}}-{{item.value.address}} + + + + + + + + + + + {{item.value}} + + + + + + + + + + 编辑 + + + + 插入 + + + + 删除 + + + + + + 方向: + + + + + + + 插入到下面 + + + + + + + + 插入到上面 + + + + + + 类型: + + + + + {{item.type}} + + + + + + + + + + + + - - - + + + + + + + 文本 + + + + + 文字居左 + + + + 文字居中 + + + + 文字居右 + + + + + + + + + + + + + 链接 + + + + + + + - @@ -274,52 +262,115 @@ - - - - - 点击添加 - - - - - - - 点击添加 - - - - - - - 相册 + + + + + + + 图片 {{photoList.length}}/9 + + + + - - 相机 + + + + 九宫格 + + + + 轮播 + + + + 轮播(自动) + + + + 平铺 + - - - - - - - 相册 + + + + + + + + + + + + - - 相机 - - + - - + + + + + + 视频 {{videoList.length}}/9 + + + + + + + + + 九宫格 + + + + 平铺 + + + + + + + + + + + + + + + + + + + + - - 点击添加 + + + + {{item.name}} + + + \ No newline at end of file diff --git a/packagecard/moments/publish/momentpublish.wxss b/packagecard/moments/publish/momentpublish.wxss index b904865..2604550 100644 --- a/packagecard/moments/publish/momentpublish.wxss +++ b/packagecard/moments/publish/momentpublish.wxss @@ -1,5 +1,13 @@ /* pages/moments/publish/momentpublish.wxss */ +.page-box-2 { + margin: 15rpx; + padding: 15rpx; + background-color: #ffffff; + display: flex; + flex-direction: column; + align-items: flex-start; +} van-action-sheet input { border: 1px solid rgb(194, 194, 194); @@ -46,4 +54,165 @@ van-action-sheet .line:active { van-action-sheet .noline:active { color: black; background-color: #f5f5f5; +} + +.type-box { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + width: 100%; + flex-wrap: wrap; +} + +.type-box .item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.type-box image { + width: 84rpx; + height: 84rpx; +} + +.input-box { + display: flex; + width: 100%; + flex-direction: column; + align-items: flex-start; + justify-content: center; + padding: 15rpx; +} + +.input-box .title { + font-size: 32rpx; + color: #000; +} + +.input-box textarea { + font-size: 28rpx; + color: #000; + width: 100%; + border: 1rpx solid #f5f5f5; + padding: 15rpx; + margin-top: 15rpx; + height: 200rpx; +} + +.control-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-around; + padding: 15rpx; + border: 1rpx solid #f5f5f5; + margin-top: 15rpx; +} + +.control-box .item { + font-size: 32rpx; + flex-grow: 1; + text-align: center; +} + +.item-input { + line-height: 80rpx; + height: 80rpx; + width: 100%; + background-color: #f5f5f5; + text-align: left; + padding-left: 15rpx; + margin-top: 15rpx; + border-radius: 10rpx; +} + +.control-box .item:active { + background-color: #f5f5f5; +} + +.control-box .item:nth-child(2) { + font-size: 32rpx; + border-left: 1rpx solid #f5f5f5; + border-right: 1rpx solid #f5f5f5; + padding: 0rpx 15rpx; + margin-right: 15rpx; +} + +.item-box { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + width: 100%; +} + +.movie-box { + display: flex; + width: 100%; + border-radius: 10rpx; + height: 350rpx; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.movie-box image { + border-radius: 10rpx; + width: 100%; + height: 350rpx; +} + +.choose-box { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + justify-content: flex-start; + font-size: 32rpx; + flex-wrap: wrap; + width: 100%; +} + +.choose-box .item-text { + margin-left: 15rpx; +} + +.choose-box .item-text:nth-child(1) { + margin-left: 0rpx; +} + +.choose-item:nth-child(1) { + margin-left: 0rpx; +} + +.choose-box .item { + margin-left: 15rpx; + padding: 8rpx; +} + +.choose-box .item:nth-child(1) { + margin-left: 0rpx; +} + +.dir-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + width: 100%; +} + +.dir-parent-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + width: 100%; + margin-top: 15rpx; +} + +.dir-parent-box .title { + width: 120rpx; } \ No newline at end of file diff --git a/packagecard/moments/publish/momentpublishline.js b/packagecard/moments/publish/momentpublishline.js index bb65b94..e64cb4b 100644 --- a/packagecard/moments/publish/momentpublishline.js +++ b/packagecard/moments/publish/momentpublishline.js @@ -34,6 +34,7 @@ Page({ isShowAudio: false, //录音弹窗 isShowVideo: false, //视频弹窗 isShowTags: false, //多选弹窗 + isShowType: false, //图片展示方式 tempText: '', tempDesc: '', linkStr: '', @@ -47,6 +48,22 @@ Page({ isAuthAudio: false, title: '栏目内容发布', curMutliIndex: 0, //多选 + displayType: [{ + name: '九宫格', + id: 1 + }, { + name: '轮播', + id: 2 + }, { + name: '轮播(自动)', + id: 3 + }, { + name: '平铺', + id: 4 + }, ], //图片展示方式 + selDisplayType: 1, //图片展示方式 + displayTypeStr: '九宫格', + maxDuration: 60, //上传视频大小限制 }, /** @@ -82,7 +99,8 @@ Page({ }) .then(res => { wx.hideLoading({}) - res.data.forEach(it => { + res.data.forEach((it, index) => { + it.order = index // 2:照片,3:音频,4:视频,5:链接,6:定位 switch (it.dataType) { case '2': @@ -116,11 +134,21 @@ Page({ }, inputText(e) { var index = e.currentTarget.dataset.index - var _self = this - _self.data.fieldList[index].value = e.detail.value - _self.setData({ - fieldList: _self.data.fieldList - }) + var type = e.currentTarget.dataset.type + if (type != 1) { + var _self = this + _self.data.fieldList[index].value = e.detail.value + _self.setData({ + fieldList: _self.data.fieldList + }) + } else { + var _self = this + _self.data.fieldList[index].order = e.detail.value + _self.setData({ + fieldList: _self.data.fieldList + }) + } + }, //申请录音权限 checkPermission() { @@ -196,6 +224,24 @@ Page({ fieldList: _self.data.fieldList }) }, + //确定选择图片展示方式 + confirmSel(e) { + const { + piacker, + value + } = e.detail + this.setData({ + selDisplayType: value.id, + displayTypeStr: value.name, + isShowType: false + }) + }, + //取消选择展示方式 + cancelSel(e) { + this.setData({ + isShowType: false + }) + }, onUnload() { chooseLocation.setLocation(null) this.setData({ @@ -214,17 +260,19 @@ Page({ sourceType: ['camera', 'album'], maxDuration: 60, success: (res) => { + console.log(res) if (res.tempFiles.length > 0) { - _self.doUploadVideo(index, res.tempFiles, _self.data.uploadVideoCount) + if (res.tempFiles[0].duration <= _self.data.maxDuration) { + _self.doUploadVideo(index, res.tempFiles, _self.data.uploadVideoCount) + } else { + wx.showToast({ + title: '视频最长60秒', + icon: 'none' + }) + } } }, - fail: (err) => { - // console.log(err) - // wx.showToast({ - // title: '选取视频失败,(拍摄时长:60秒)', - // icon: 'none' - // }) - } + fail: (err) => {} }) }, //上传视频 @@ -491,7 +539,8 @@ Page({ isShowLink: false, isShowAudio: false, isShowVideo: false, - isShowTags: false + isShowTags: false, + isShowType: false }) }, chooseTags(e) { @@ -715,7 +764,7 @@ Page({ // 获取到结束时间 _self.stop(false); wx.showToast({ - title: '录制时间过短', + title: '时间需大于10秒', duration: 2000, icon: "none" }) @@ -939,6 +988,12 @@ Page({ currentIndex: e.currentTarget.dataset.index }) }, + //显示图片展示方式 + showDisplayType(e) { + this.setData({ + isShowType: true + }) + }, showMutliSel(e) { this.setData({ isShowTags: true, @@ -953,6 +1008,7 @@ Page({ title: '保存中...', }) var params = _self.buildParams() + console.log(params) app.http.post(app.urls.doSaveMoments.format({ configColumnId: _self.data.columnId }), { @@ -973,7 +1029,7 @@ Page({ }) }) .catch(err => { - wx.hideLoading({}) + // wx.hideLoading({}) console.log(err) }) } @@ -1029,12 +1085,25 @@ Page({ field.valueList.forEach(it => { ids += it.id + '&' + it.thumbId + ',' }) + } else if (field.dataType == '3') { //音频 + field.valueList.forEach(it => { + ids += it.id + '&' + it.duration + ',' + }) + } else if (field.dataType == '2') { //图片 + field.valueList.forEach(it => { + ids += it.id + ',' + }) + ids = ids.substr(0, ids.length - 1) + ids += '@' + _self.data.selDisplayType } else { field.valueList.forEach(it => { ids += it.id + ',' }) } - ids = ids.substr(0, ids.length - 1) + + if (field.dataType != '2') { + ids = ids.substr(0, ids.length - 1) + } params[field.name] = ids } } diff --git a/packagecard/moments/publish/momentpublishline.wxml b/packagecard/moments/publish/momentpublishline.wxml index 74d4c91..0d51c72 100644 --- a/packagecard/moments/publish/momentpublishline.wxml +++ b/packagecard/moments/publish/momentpublishline.wxml @@ -33,10 +33,15 @@ - {{item.comment}} + {{item.comment}}{{item.valueList.length}}/{{item.maxCount}} + + + + + {{displayTypeStr}} - {{item.valueList.length}}/{{item.maxCount}} + @@ -213,6 +218,11 @@ + @@ -308,4 +318,11 @@ + + + + + + \ No newline at end of file diff --git a/packagecard/moments/showlist/showlist.js b/packagecard/moments/showlist/showlist.js index a8ce603..fb96713 100644 --- a/packagecard/moments/showlist/showlist.js +++ b/packagecard/moments/showlist/showlist.js @@ -95,7 +95,14 @@ Page({ it.list.forEach(iem => { switch (iem.dataType) { case '2': //图片 - var items = iem.value.split(',') + var photoIds = iem.value.split('@') + if (photoIds.length > 1) { + //展示方式 + iem.dataMode = photoIds[1] + } else { + iem.dataMode = '1' + } + var items = photoIds[0].split(',') var tempList = [] items.forEach(item => { if (item.length > 0) { @@ -113,14 +120,24 @@ Page({ var tempList = [] items.forEach(item => { if (item.length > 0) { + var ss = item.split('&') + var totalStr = '00:00' + if (ss.length > 1) { + var dur = ss[1] + var tM = parseInt(dur / 60) //分钟 + var tS = parseInt(dur % 60) //秒 + var totalMStr = tM > 9 ? tM : '0' + tM + var totalSStr = +tS > 9 ? tS : '0' + tS + totalStr = totalMStr + ':' + totalSStr + } var tempItem = { - id: item, //id - path: app.urls.baseImgUrl + item, //地址 + id: ss[0], //id + path: app.urls.baseImgUrl + ss[0], //地址 isPlay: false, //是否播放中 duration: 100000, //时长 curDuration: 0, curDurationStr: '00:00', - totalDurationStr: '00:00' + totalDurationStr: totalStr } tempList.push(tempItem) } @@ -186,9 +203,21 @@ Page({ }, //预览图片 viewImg(e) { - wx.previewImage({ - urls: [e.currentTarget.dataset.url], + var imgPaths = [] + var imgs = e.currentTarget.dataset.values + this.setData({ + isNeedRefresh: false }) + imgs.forEach(it => { + imgPaths.push(it.path) + }) + wx.previewImage({ + urls: imgPaths, + current: e.currentTarget.dataset.cur + }) + // wx.previewImage({ + // urls: [e.currentTarget.dataset.url], + // }) }, //预览视频 viewVideo(e) { diff --git a/packagecard/moments/showlist/showlist.wxml b/packagecard/moments/showlist/showlist.wxml index 9f5d833..caa1e51 100644 --- a/packagecard/moments/showlist/showlist.wxml +++ b/packagecard/moments/showlist/showlist.wxml @@ -78,32 +78,31 @@ - + - + data-values="{{child.valueList}}" catchtap="viewImg" data-cur="{{photo.path}}"> + - + + autoplay="{{child.dataMode=='3'}}"> - + + src="{{photo.path}}" mode="aspectFill"> - + diff --git a/packagecard/paypage/paypage.js b/packagecard/paypage/paypage.js new file mode 100644 index 0000000..82cad3d --- /dev/null +++ b/packagecard/paypage/paypage.js @@ -0,0 +1,298 @@ +// packagecard/paypage/paypage.js +const app = getApp() +const utils = require('../../utils/util') +const RSA = require('../../utils/rsa') +Page({ + + /** + * 页面的初始数据 + */ + data: { + nodes: [{ + name: 'div', + children: [{ + type: 'text', + text: ' ' + }] + }], + inviteCode: '', //邀请码 + dispatchCode: '', //人员码 + price: 0, //价格 + orderNumber: '00001', + orderDate: '2020-20-20', + orderGoodsName: '', + hintMsg: '', //提示信息 + isInput: true, //是否是手动输入金额 + isChecked: false, //勾选用户协议 + isShowTreaty: false, //是否显示协议 + treatyStr: '', //协议内容 + isDisplayTreaty: false, //是否需要勾选用户协议 + isShowHint: false, //是否显示提示内容 + type: 1, //1.支付总20 2.支付单个 + isShowUseDeal: false, //使用协议 + isShowServiceTreaty: false, //会员服务协议 + isShowIntimacyTreaty: false, //隐私政策 + typeList: [], //开通的类型列表 + selTypeIndex: 0, //当前选中的类型列表 + selTypeId: '', //当前选中的类型id + selType: '', //选中的类型type + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + orderGoodsName: '会员服务费', + hintMsg: '您本次支付的费用为会员服务费,本次支付成功后可以使用免费模板来创建名片', + isShowHint: true + }) + this.getPayTypeList() + }, + //获取开通类型列表 + getPayTypeList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getMemberTypeList, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + if (res.data.length > 0) { + res.data.sort((a, b) => { + return b.cardChargeRoleStatus - a.cardChargeRoleStatus + }) + _self.setData({ + typeList: res.data, + selTypeIndex: 0, + selTypeId: res.data[0].cardChargeRoleId, + price: res.data[0].cardChargeRolePrice, + orderGoodsName: res.data[0].cardChargeRoleName, + selType: res.data[0].cardChargeRoleType + }) + } + }) + .catch(err => { + + }) + }, + //获取总使用权限的订单预支付信息 + getUsePayOrder() { + wx.showLoading({ + title: '加载中...', + }) + }, + changeCheck(e) { + this.setData({ + isChecked: !this.data.isChecked + }) + }, + inputWatch(e) { + this.setData({ + inviteCode: e.detail.value + }) + }, + //显示协议 + showTreaty() { + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getTreaty, { + header: { + token: app.globalData.token + } + }) + .then(res => { + console.log(res.data) + wx.hideLoading({}) + this.setData({ + treatyStr: res.data, + isShowTreaty: true + }) + }) + .catch(err => { + + }) + }, + onClose() { + this.setData({ + isShowUseDeal: false, //使用协议 + isShowServiceTreaty: false, //会员服务协议 + isShowIntimacyTreaty: false //隐私政策 + }) + }, + //提交支付 + doPay() { + var _self = this + if (_self.data.isChecked) { + _self.wxPay() + } else { + wx.showToast({ + title: '请勾选使用协议', + icon: 'error', + success(res) { + setTimeout(() => { + _self.useDeal() + }, 800) + } + }) + } + }, + + //微信支付 + wxPay() { + wx.showLoading({ + title: '支付中...', + }) + if (this.data.type == 1) { + this.doPayUseOrder() + } else if (this.data.type == 2) { + this.doPaySingleOrder() + } + }, + //支付单一名片 + doPaySingleOrder() { + + }, + //选中开通的 + chooseType(e) { + var item = e.currentTarget.dataset.item + var idx = e.currentTarget.dataset.idx + var _self = this + if (item.cardChargeRoleStatus == 1) { + _self.setData({ + selTypeIndex: idx, + selTypeId: item.cardChargeRoleId, + price: item.cardChargeRolePrice, + orderGoodsName: item.cardChargeRoleName, + selType: item.cardChargeRoleType + }) + } + }, + //支付总的金额 + doPayUseOrder() { + var _self = this + app.http.post(app.urls.getCardPayState.format({ + mode: _self.data.selType + }), { + header: { + token: app.globalData.token + }, + data: { + cardChargeInvitationUserId: _self.data.inviteCode != '' ? _self.data.inviteCode : app.globalData.showUserId, + cardChargeRole: _self.data.selTypeId + } + }) + .then(res => { + wx.hideLoading({}) + if (res.statusCode == 200) { + var tempId = res.data.prepayId + wx.requestPayment({ + nonceStr: res.data.nonceStr, + package: 'prepay_id=' + res.data.prepayId, + paySign: res.data.paySign, + signType: 'RSA', + timeStamp: res.data.timestamp, + success(res) { + if (res.errMsg == 'requestPayment:ok') { + //支付成功 + wx.redirectTo({ + url: '/pages/mine/order/ordersuccess?type=' + 2 + '&msg=支付成功&fMsg=去创建名片&price=' + _self.data.price + '&prepayId=' + tempId, + }) + } + }, + fail(err) { + if (err.errMsg == 'requestPayment:fail cancel') { + //支付取消 + wx.showToast({ + title: '您取消了支付', + icon: 'error' + }) + } else { + wx.showToast({ + title: '支付失败,请稍后重试', + icon: 'none' + }) + } + } + }) + } + }) + .catch(err => { + wx.showToast({ + title: '获取订单失败', + icon: 'err' + }) + }) + }, + //用户协议 + useDeal() { + wx.showLoading({ + title: '加载中...', + }) + this.setData({ + treatyStr: '' + }) + app.http.get(app.urls.getTreaty.format({ + key: 'cardCreateTemplateUse' + }), {}) + .then(res => { + wx.hideLoading({}) + this.setData({ + treatyStr: res.data.data, + isShowUseDeal: true + }) + }) + .catch(err => { + + }) + }, + //会员服务协议 + serviceDeal() { + wx.showLoading({ + title: '加载中...', + }) + this.setData({ + treatyStr: '' + }) + app.http.get(app.urls.getTreaty.format({ + key: 'cardCreateTreaty' + }), {}) + .then(res => { + wx.hideLoading({}) + this.setData({ + treatyStr: res.data.data, + isShowUseDeal: true + }) + }) + .catch(err => { + + }) + }, + //隐私政策 + useIntimacy() { + wx.showLoading({ + title: '加载中...', + }) + this.setData({ + treatyStr: '' + }) + app.http.get(app.urls.getTreaty.format({ + key: 'privacyPolicy' + }), {}) + .then(res => { + wx.hideLoading({}) + this.setData({ + treatyStr: res.data.data, + isShowIntimacyTreaty: true + }) + }) + .catch(err => { + + }) + } +}) \ No newline at end of file diff --git a/packagecard/paypage/paypage.json b/packagecard/paypage/paypage.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/paypage/paypage.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/paypage/paypage.wxml b/packagecard/paypage/paypage.wxml new file mode 100644 index 0000000..0d1c484 --- /dev/null +++ b/packagecard/paypage/paypage.wxml @@ -0,0 +1,73 @@ + + 会员服务 + + + + + 会员服务费 + {{(orderGoodsName)}} + + + + + + {{price}} + + + + 付款提示: + {{hintMsg}} + + + + 邀请码 (选填) + + + + + + + + + {{item.cardChargeRoleName}} + + ¥{{item.cardChargeRolePrice}} + + + + + + + + + + 已阅读并同意《使用协议》&《会员服务协议》&《隐私政策》 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packagecard/paypage/paypage.wxss b/packagecard/paypage/paypage.wxss new file mode 100644 index 0000000..02c0580 --- /dev/null +++ b/packagecard/paypage/paypage.wxss @@ -0,0 +1,195 @@ +/* packagecard/paypage/paypage.wxss */ +.pay-info { + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; + width: 100%; + padding: 15rpx; + border-radius: 5rpx; + +} + +.info-box { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-color: #ffffff; + border-bottom-left-radius: 15rpx; + border-bottom-right-radius: 15rpx; + box-shadow: 0 4rpx 4rpx 0 rgba(52, 52, 55, 0.05), 0 6rpx 5px 0 rgba(52, 52, 55, 0.19); +} + +.input-box { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + background-color: #ffffff; + border-bottom-left-radius: 15rpx; + border-bottom-right-radius: 15rpx; + box-shadow: 0 4rpx 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.pay-info-item { + font-size: 28rpx; + width: 100%; + text-align: center; + padding: 7.5rpx 0rpx 7.5rpx 0rpx; +} + +.pay-info-item:nth-child(1) { + padding: 0rpx 0rpx 7.5rpx 0rpx; + color: #999999; + font-size: 30rpx; +} + +.order-price-box { + display: flex; + flex-direction: row; + justify-content: center; + align-content: center; + width: 100%; + margin: 15rpx; +} + +.hint-msg { + width: 100%; + font-size: 25rpx; + color: #9c9a9a; + text-align: center; + line-height: 50rpx; + justify-content: center; +} + +.order-price-box .icon { + font-size: 45rpx; + text-align: center; + line-height: 80rpx; +} + +.order-price-box .price { + font-size: 90rpx; + text-align: center; + line-height: 60rpx; +} + +.price-input { + font-size: 45rpx; + text-align: center; + align-self: center; + border: 1rpx solid #5f5f5f; + padding: 15rpx; + margin-left: 15rpx; + height: 70rpx; + border-radius: 10rpx; +} + +.code-box { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 100%; + font-size: 28rpx; + background-color: #ffffff; + box-shadow: 0 4rpx 4rpx 0 rgba(52, 52, 55, 0.05), 0 6rpx 5px 0 rgba(52, 52, 55, 0.19); + margin-top: 15rpx; + padding: 15rpx 0rpx; + color: #050505; +} + +.code-box .title { + text-align: center; + font-weight: normal; +} + +.code-input { + text-align: right; + align-self: center; + padding: 15rpx; + margin-left: 15rpx; + height: 70rpx; + border-radius: 10rpx; + width: 70%; +} + +.treaty-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + margin-bottom: 40rpx; + font-size: 28rpx; + margin-top: 15rpx; +} + +.treaty-content-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 15rpx; +} + +.treaty-content-box .title { + font-size: 36rpx; + color: #000; +} + +.treaty-content-box .content { + font-size: 28rpx; + color: #000; + margin-top: 15rpx; +} + +.code-msg { + width: 66%; + font-size: 24rpx; + color: #9c9a9a; + text-align: center; + justify-content: center; +} + +.type-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + padding: 15rpx; + margin-bottom: 210rpx; + box-shadow: 0 4rpx 4rpx 0 rgba(52, 52, 55, 0.05), 0 6rpx 5px 0 rgba(52, 52, 55, 0.19); + margin-top: 15rpx; + background-color: #ffffff; +} + +.type-item { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 30rpx 15rpx 0rpx 15rpx; + font-size: 28rpx; + +} + +.type-item:nth-child(1) { + padding: 0rpx 15rpx 0rpx 15rpx; +} + +.yellow-text { + color: #E6B980; +} + +.gray-text { + color: #c7c7c7; +} + +.black-text { + color: #0f0f0f; +} \ No newline at end of file diff --git a/packagecard/paypage/paystate.js b/packagecard/paypage/paystate.js new file mode 100644 index 0000000..a342a93 --- /dev/null +++ b/packagecard/paypage/paystate.js @@ -0,0 +1,66 @@ +// packagecard/paypage/paystate.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/packagecard/paypage/paystate.json b/packagecard/paypage/paystate.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/paypage/paystate.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/paypage/paystate.wxml b/packagecard/paypage/paystate.wxml new file mode 100644 index 0000000..2213f5f --- /dev/null +++ b/packagecard/paypage/paystate.wxml @@ -0,0 +1,6 @@ + + 订单状态 + + + 当前支付结果后台正在处理中,请您耐心等待.如半个小时后任未处理完成 + \ No newline at end of file diff --git a/packagecard/paypage/paystate.wxss b/packagecard/paypage/paystate.wxss new file mode 100644 index 0000000..ab95c9e --- /dev/null +++ b/packagecard/paypage/paystate.wxss @@ -0,0 +1 @@ +/* packagecard/paypage/paystate.wxss */ \ No newline at end of file diff --git a/packagecard/purse/recordlist.js b/packagecard/purse/recordlist.js new file mode 100644 index 0000000..2a9ce88 --- /dev/null +++ b/packagecard/purse/recordlist.js @@ -0,0 +1,89 @@ +// pages/mine/vip/vipcenter.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + curPage: 1, + isRefreshing: false, //是否在刷新中 + hasMore: true, //是否有更多数据 + isLoadMore: false, //是否正在加载更多 + recordList: [], + isDredge: true, //是否开通过会员 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) {}, + onShow(e) { + wx.startPullDownRefresh({}) + }, + //获取提现记录列表 + getRecordList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getTakeCashList, { + header: { + token: app.globalData.token + }, + data: { + page: _self.data.curPage, + rows: '10' + } + }) + .then(res => { + wx.stopPullDownRefresh({}) + wx.hideLoading({}) + _self.data.recordList = _self.data.recordList.concat(res.data.rows) + var more = _self.data.recordList.length < res.data.total + _self.setData({ + recordList: _self.data.recordList, + isRefreshing: false, + isLoadMore: false, + hasMore: more + }) + }) + .catch(err => { + wx.stopPullDownRefresh({}) + _self.setData({ + isRefreshing: false, + isLoadMore: false, + hasMore: true + }) + }) + }, + + //加载更多 + doLoadMore() { + var _self = this + if (_self.data.hasMore) { + if (_self.data.isLoadMore) { + return + } + this.setData({ + isLoadMore: true, + curPage: ++_self.data.curPage + }) + this.getRecordList() + } + }, + onReachBottom() { + this.doLoadMore() + }, + //下拉刷新 + onPullDownRefresh() { + this.setData({ + isLoadMore: false, + isRefreshing: true, + hasMore: true, + recordList: [], + curPage: 1 + }) + this.getRecordList() + } +}) \ No newline at end of file diff --git a/packagecard/purse/recordlist.json b/packagecard/purse/recordlist.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/packagecard/purse/recordlist.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/packagecard/purse/recordlist.wxml b/packagecard/purse/recordlist.wxml new file mode 100644 index 0000000..d7ddffe --- /dev/null +++ b/packagecard/purse/recordlist.wxml @@ -0,0 +1,37 @@ + + 提现记录 + + + + + + + 申请时间:{{item.accountWithdrawApplyTime}} + + 提现金额:¥{{item.accountWithdrawMoney/100}} + + + 未通过原因:{{item.accountWithdrawCheckRemark}} + + + + + + + 未通过 + + + 审核中 + + + 已通过 + + + + + 加载中... + + + + \ No newline at end of file diff --git a/packagecard/purse/recordlist.wxss b/packagecard/purse/recordlist.wxss new file mode 100644 index 0000000..d2b5f5c --- /dev/null +++ b/packagecard/purse/recordlist.wxss @@ -0,0 +1,121 @@ +/* pages/mine/vip/vipcenter.wxss */ + + +.info-box { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + align-self: center; + box-shadow: 0rpx 4rpx 8rpx 0rpx #efd9be, 0rpx 6rpx 20rpx 0rpx #efd9be; + border-radius: 10rpx; + padding: 10rpx 0rpx; +} + +.base-info { + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + padding: 15rpx; +} + +.base-info .user-icon { + width: 128rpx; + height: 128rpx; + border-radius: 50%; + border: 6rpx solid #ffbc00; +} + +.base-info-text-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 15rpx; +} + +.name-box { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.name-box .name { + font-size: 32rpx; + color: #ffffff; + line-height: 10rpx; +} + +.name-box image { + width: 48rpx; + height: 48rpx; + margin-left: 15rpx; +} + +.item { + display: flex; + flex-direction: row; + position: relative; + justify-content: flex-start; + align-items: center; + background-color: #ffffff; + width: 100%; + padding: 15rpx; + margin-top: 15rpx; +} + +.item:nth-child(1) { + margin-top: 0rpx; +} + +.subscript { + width: 96rpx; + height: 96rpx; + position: absolute; + right: 0rpx; + bottom: 0rpx; +} + +.subscript image { + width: 100%; + height: 100%; +} + +.state { + position: absolute; + transform: rotate(-45deg) translate(-50%, -50%); + font-size: 22rpx; + width: 100%; + height: 100%; + top: 28%; + left: 112%; + color: #ffffff; +} + +.item .icon { + width: 96rpx; + height: 96rpx; + border-radius: 50%; +} + +.item .content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 15rpx; + width: 85%; +} + +.title { + font-size: 32rpx; + color: #E6B980; +} + +.hint-msg { + font-size: 28rpx; + color: #333333; +} \ No newline at end of file diff --git a/packagecard/purse/takecash.js b/packagecard/purse/takecash.js new file mode 100644 index 0000000..4feb52b --- /dev/null +++ b/packagecard/purse/takecash.js @@ -0,0 +1,110 @@ +// packagecard/purse/takecash.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + selType: '1', + accountInfo: {}, + takeValue: 0, //提现的金额 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getAccount() + }, + //获取账户信息 + getAccount() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getMyAccount, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + _self.setData({ + accountInfo: res.data + }) + }) + .catch(err => { + console.log(err) + }) + }, + //全部提现 + takeAll() { + this.setData({ + takeValue: this.data.accountInfo.accountMoney / 100 + }) + }, + //监听输入框 + inputWatch(e) { + this.setData({ + takeValue: e.detail.value + }) + }, + //提交提现申请 + doCash(e) { + //判断输入的值是否大于账户中的数量 + var _self = this + if (_self.data.takeValue == 0) { + wx.showToast({ + title: '请输入提现金额', + icon: 'error' + }) + return + } + if (_self.data.takeValue > (_self.data.accountInfo.accountMoney / 100)) { + wx.showToast({ + title: '超过零钱余额', + icon: 'error' + }) + return + } + //提现 + _self.toCash() + }, + toCash() { + var _self = this + wx.showLoading({ + title: '申请中...', + }) + app.http.post(app.urls.doTakeCash, { + header: { + token: app.globalData.token + }, + data: { + accountWithdrawMoney: _self.data.takeValue * 100 + } + }) + .then(res => { + + wx.hideLoading({}) + wx.showToast({ + title: '申请成功', + icon: 'success', + success(res) { + setTimeout(() => { + wx.navigateBack({}) + }, 800) + } + }) + }) + .catch(err => { + console.log(err) + }) + }, + //提现记录 + toRecord() { + wx.navigateTo({ + url: '/packagecard/purse/recordlist', + }) + } +}) \ No newline at end of file diff --git a/packagecard/purse/takecash.json b/packagecard/purse/takecash.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/purse/takecash.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/purse/takecash.wxml b/packagecard/purse/takecash.wxml new file mode 100644 index 0000000..e8b9bba --- /dev/null +++ b/packagecard/purse/takecash.wxml @@ -0,0 +1,27 @@ + + 立即提现 + + + + + + ¥ + {{accountInfo.accountMoney/100}} + + 最低提现金额1.00元 + + + + 提现金额 + + ¥ + + 全部提现 + + + + + + + \ No newline at end of file diff --git a/packagecard/purse/takecash.wxss b/packagecard/purse/takecash.wxss new file mode 100644 index 0000000..f957d88 --- /dev/null +++ b/packagecard/purse/takecash.wxss @@ -0,0 +1,53 @@ +/* packagecard/purse/takecash.wxss */ +.content-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + background-color: #E6B980; + text-align: center; + min-height: 400rpx; +} + +.content-box .money { + color: #fff; +} + +.content-box .hint { + font-size: 28rpx; + margin-top: 15rpx; + color: #fff; +} + +.cash-box { + padding: 15rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + width: 90%; + background-color: #fff; + border-radius: 15rpx; + min-height: 200rpx; + position: absolute; + top: 450rpx; + box-shadow: 0 4rpx 8rpx 0 #DFDBDB, 0 6rpx 20rpx 0 #DFDBDB; +} + +.cash-box .title { + font-size: 32rpx; +} + +.input-box { + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} + +.input-box input { + padding-left: 15rpx; + width: 100%; +} \ No newline at end of file diff --git a/packagecard/sharePage/cardcode.js b/packagecard/sharePage/cardcode.js new file mode 100644 index 0000000..ef4e54d --- /dev/null +++ b/packagecard/sharePage/cardcode.js @@ -0,0 +1,67 @@ +// packagecard/sharePage/cardcode.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + imgUrl: app.urls.baseImgUrl, + animationData: {}, + cardImg: '', + id: '', + contentHeight: app.globalData.windowHeight, + translateUp: {}, //上平移 + translateDown: {}, //下移 + animDuration: 800, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + cardImg: options.cardImg, + id: options.id + }) + + }, + onReady() { + var _self = this + this.setData({ + animationData: {}, + translateDown: {}, + translateUp: {} + }) + var rotate = wx.createAnimation({ + duration: _self.data.animDuration, + timingFunction: 'linear', + transformOrigin: '50% 50% 0' + }) + rotate.rotate(180).step() + //上移 + var trUp = wx.createAnimation({ + duration: _self.data.animDuration, + timingFunction: 'linear', + transformOrigin: '50% 50% 0' + }) + trUp.translateY(160).step() + //下移 + var trDown = wx.createAnimation({ + duration: _self.data.animDuration, + timingFunction: 'linear', + transformOrigin: '50% 50% 0' + }) + trDown.translateY(-160).step() + this.setData({ + animationData: rotate.export(), + }) + + setTimeout(() => { + _self.setData({ + translateUp: trUp.export(), + translateDown: trDown.export() + }) + }, _self.data.time); + } +}) \ No newline at end of file diff --git a/packagecard/sharePage/cardcode.json b/packagecard/sharePage/cardcode.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/packagecard/sharePage/cardcode.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/packagecard/sharePage/cardcode.wxml b/packagecard/sharePage/cardcode.wxml new file mode 100644 index 0000000..0637c23 --- /dev/null +++ b/packagecard/sharePage/cardcode.wxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packagecard/sharePage/cardcode.wxss b/packagecard/sharePage/cardcode.wxss new file mode 100644 index 0000000..2734a2a --- /dev/null +++ b/packagecard/sharePage/cardcode.wxss @@ -0,0 +1,38 @@ +/* packagecard/sharePage/cardcode.wxss */ + + +.content-box { + border-radius: 10rpx; + min-width: 100%; + display: flex; + flex-direction: column; + background: #ffffff; + align-items: center; + justify-content: center; +} + +.image1 { + width: 70%; + height: 70%; + /* box-shadow: 10rpx 10rpx 40rpx #dadada; */ + align-self: center; + /* border-radius: 50%; */ +} + +.box { + width: 95%; + /* box-shadow: 10rpx 10rpx 40rpx #dadada; */ + position: absolute; + z-index: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 15rpx; +} + +.image2 { + width: 95%; + box-shadow: 1rpx 1rpx 5rpx #f5f5f5; + position: absolute; + z-index: 2; +} \ No newline at end of file diff --git a/packagecard/shop/index/shop.js b/packagecard/shop/index/shop.js index c594bc8..fa61260 100644 --- a/packagecard/shop/index/shop.js +++ b/packagecard/shop/index/shop.js @@ -109,12 +109,6 @@ Page({ }, - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - }, clickT: function () { } diff --git a/packagecard/shop/shopingcart/cart.js b/packagecard/shop/shopingcart/cart.js index 65752b8..8a74a4a 100644 --- a/packagecard/shop/shopingcart/cart.js +++ b/packagecard/shop/shopingcart/cart.js @@ -56,11 +56,4 @@ Page({ onReachBottom: function () { }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - } }) \ No newline at end of file diff --git a/pages/index/index.js b/pages/index/index.js index f81538e..b1e3c0b 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -36,7 +36,15 @@ Page({ count: 3, isMine: 1, //1 自己 2 其他 isDefault: true, - animationData: {} + animationData: {}, + isShowBtn: false, + isShowPhone: false, + isBindPhone: false, + isNeedRefresh: true, + isShowComment: false, //是否显示评论弹框 + posterId: '', //分享过来的海报图片 + isShowPoster: false, + defaultBtnIcon: '/images/ic_share_img.png' }, onLoad(options) { var self = this @@ -49,6 +57,13 @@ Page({ } self.buildId() self.doLogin() + if (options.posterId) { + //展示图片 + self.setData({ + posterId: options.posterId, + isShowPoster: true + }) + } }, // 登录 doLogin() { @@ -66,11 +81,16 @@ Page({ .then(res => { wx.hideLoading({}) var token = res.data.data.split('_')[0] + var isBind = res.data.data.split('_')[1] + self.setData({ + isBindPhone: isBind + }) wx.setStorageSync('token', token) - wx.setStorageSync('bindPhone', res.data.data.split('_')[1]) + wx.setStorageSync('bindPhone', isBind) app.globalData.token = token //保存用户名和头像 self.doSaveUserInfo() + self.getInfo() //获取用户基本信息 if (self.data.isMine == 2) { if (self.data.cardTemplateDispatchId != '') { self.getCardId() //获取分享过来的名片 @@ -79,7 +99,7 @@ Page({ self.getDefault() //获取自己的名片 } self.getOtherCard(2) - + self.getBtnIcon() //获取首页按钮图片 }) .catch(err => { wx.hideLoading({}) @@ -87,6 +107,25 @@ Page({ } }) }, + //首页按钮图片 + getBtnIcon() { + var _self = this + app.http.get(app.urls.getIndexIcon, { + header: { + token: app.globalData.token + } + }) + .then(res => { + if (res.data.data) { + _self.setData({ + defaultBtnIcon: _self.data.imgUrl + res.data.data + }) + } + }) + .catch(err => { + // console.error(err) + }) + }, //保存用户头像及微信昵称 doSaveUserInfo() { try { @@ -151,6 +190,9 @@ Page({ }) .then(res => { if (res.data.length > 0) { + _self.setData({ + isShowBtn: true + }) res.data[0].list.forEach(it => { switch (it.name) { case 'phone': @@ -175,12 +217,21 @@ Page({ break } }) + } else { + _self.setData({ + isShowBtn: false + }) } }) .catch(err => { console.log(err) }) }, + onClose() { + this.setData({ + isShowPoster: false + }) + }, //获取首页栏目数据 getMainMoment(datas, userid, index) { var _self = this @@ -198,6 +249,10 @@ Page({ }) .then(res => { if (res.data.length > 0) { + // collectSwitch: datas[_self.data.curIndex].configColumnCollect, //收藏开关 + // commentSwitch: datas[_self.data.curIndex].configColumnComment, //评论开关 + // shareSwitch: datas[_self.data.curIndex].configColumnDispatch, //转发开关 + // likeSwitch: datas[_self.data.curIndex].configColumnLike, //点赞开关 var tempItem = { cId: datas[_self.data.curIndex].configColumnId, type: datas[_self.data.curIndex].configColumnType, @@ -235,7 +290,14 @@ Page({ item.list.forEach(iem => { switch (iem.dataType) { case '2': //图片 - var items = iem.value.split(',') + var photoIds = iem.value.split('@') + if (photoIds.length > 1) { + //展示方式 + iem.dataMode = photoIds[1] + } else { + iem.dataMode = '1' + } + var items = photoIds[0].split(',') var tempList = [] items.forEach(item => { if (item != '') { @@ -253,14 +315,24 @@ Page({ var tempList = [] items.forEach(item => { if (item != '') { + var ss = item.split('&') + var totalStr = '00:00' + if (ss.length > 1) { + var dur = ss[1] + var tM = parseInt(dur / 60) //分钟 + var tS = parseInt(dur % 60) //秒 + var totalMStr = tM > 9 ? tM : '0' + tM + var totalSStr = +tS > 9 ? tS : '0' + tS + totalStr = totalMStr + ':' + totalSStr + } var tempItem = { - id: item, //id - path: app.urls.baseImgUrl + item, //地址 + id: ss[0], //id + path: app.urls.baseImgUrl + ss[0], //地址 isPlay: false, //是否播放中 duration: 100000, //时长 curDuration: 0, curDurationStr: '00:00', - totalDurationStr: '00:00' + totalDurationStr: totalStr } tempList.push(tempItem) } @@ -332,6 +404,9 @@ Page({ if (item.mode == '2') { var userid = e.currentTarget.dataset.userid var idx = e.currentTarget.dataset.idx + this.setData({ + isNeedRefresh: false + }) wx.navigateTo({ url: '/packagecard/moments/showlist/showlist?id=' + item.cId + '&userId=' + userid + '&index=' + idx, }) @@ -339,6 +414,9 @@ Page({ }, onPullDownRefresh() { if (app.globalData.token != '') { + this.setData({ + isNeedRefresh: true, + }) if (this.data.isMine == 2) { if (this.data.cardTemplateUseId != '') { this.setData({ @@ -351,19 +429,33 @@ Page({ } else { this.getDefault() } + this.getOtherCard(2) + this.getBtnIcon() } else { this.doLogin() } }, //预览图片 viewImg(e) { + var imgPaths = [] + var imgs = e.currentTarget.dataset.values + this.setData({ + isNeedRefresh: false + }) + imgs.forEach(it => { + imgPaths.push(it.path) + }) wx.previewImage({ - urls: [e.currentTarget.dataset.url], + urls: imgPaths, + current: e.currentTarget.dataset.cur }) }, //预览视频 viewVideo(e) { var url = e.currentTarget.dataset.url + this.setData({ + isNeedRefresh: false + }) wx.previewMedia({ sources: [{ url: url, @@ -475,7 +567,13 @@ Page({ }, // 跳转模板列表 + //判断是否绑定手机 + //绑定过 goList: function () { + //TODO 测试 + // wx.navigateTo({ + // url: '/packagecard/paypage/paypage', + // }) wx.navigateTo({ url: '/packagecard/cardList/cardList', }) @@ -510,9 +608,28 @@ Page({ app.dialog.msg(data.msg); }); }, + //获取 + getInfo() { + app.http.get(app.urls.getUserBaseInfo, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.setStorageSync('usercode', res.data.userCode) + }) + .catch(err => { + console.log(err) + }) + }, // 获取默认名片 getDefault: function () { var self = this + app.globalData.showUserId = '' + self.setData({ + cardInfo: {}, + areaList: [] + }) app.http.get(app.urls.getDefaultCard, { header: { token: app.globalData.token @@ -533,7 +650,6 @@ Page({ areaList: area, dataList: [] }) - if (res.data) { self.toSaveLocalImg(res.data.cardTemplateUseDispatchPhoto) self.getBrowCardUserList(res.data.cardTemplateUseId) @@ -614,6 +730,12 @@ Page({ phoneNumber: phone, }) } + // wx.navigateTo({ + // url: '/packagecard/moments/publish/momentpublish', + // }) + // wx.navigateTo({ + // url: '/packagecard/moments/list/momentsshowlist', + // }) }, // 获取浏览数 getViewCount: function () { @@ -693,8 +815,10 @@ Page({ }, //获取手机号进行绑定 getPhoneNumber(e) { + var _self = this var iv = e.detail.iv var encryptedData = e.detail.encryptedData + console.log(encryptedData) if (encryptedData) { wx.showLoading({ title: '绑定中...', @@ -710,14 +834,23 @@ Page({ }) .then(res => { wx.hideLoading({}) + //保存绑定状态 + wx.setStorageSync('token', res.data.data) + wx.setStorageSync('bindPhone', 0) + _self.setData({ + isBindPhone: true + }) + app.globalData.token = res.data.data wx.showToast({ title: '绑定成功', + success(e) { + wx.navigateTo({ + url: '/packagecard/cardList/cardList', + }) + } }) }) - .catch(err => { - console.log(err) - wx.hideLoading({}) - }) + .catch(err => {}) } }, getUserProfile(e) { @@ -744,7 +877,7 @@ Page({ fail(err) { //判断是否绑定手机号 wx.showToast({ - title: '获取个人信息失败', + title: '获取信息失败', icon: 'error', }) } @@ -766,19 +899,11 @@ Page({ // 展示名片码 showBarCode: function () { this.setData({ - isShowBarCode: true, - animationData: {} + isNeedRefresh: false }) - - wx.hideTabBar() - var anim = wx.createAnimation({ - duration: 1200, - timingFunction: 'linear', - transformOrigin: '50% 50% 0' - }) - anim.rotate(180).step() - this.setData({ - animationData: anim.export() + var _self = this + wx.navigateTo({ + url: '/packagecard/sharePage/cardcode?cardImg=' + _self.data.cardInfo.cardTemplateUsePhotoUrl + '&id=' + _self.data.cardInfo.cardTemplateUseBarcode, }) }, // 隐藏名片码 @@ -810,6 +935,7 @@ Page({ * 用户点击右上角分享 */ onShareAppMessage: function (res) { + console.log(res) var self = this wx.showShareMenu({ withShareTicket: true, @@ -817,18 +943,19 @@ Page({ console.log(res) } }) + var type = res.target.dataset.sharetype + if (type && type == '2') { + //转发个人动态 - if (res.from == 'button') { + } else { var postId = self.buildId() self.shareRecord(postId) - var param = '/pages/index/index?cardTemplateDispatchId=' + postId; return { - title: '名片分享', + title: '您好,这是我的电子名片,请查看.', path: param, imageUrl: self.data.shareImgUrl } - // return返回 title 转发标题 path 路径 imageUrl 自定义图片,可以本地路径 代码包文件路径 支持png jpg 显示长宽比5:4 } }, //将分享的Base64图片保存至本地 @@ -885,6 +1012,7 @@ Page({ token: app.globalData.token } }).then(res => { + app.globalData.showUserId = res.data.creator wx.stopPullDownRefresh({}) var area = res.data.areaList area.forEach(it => { @@ -935,7 +1063,8 @@ Page({ }, onHide(e) { this.setData({ - isShowCard: false + isShowCard: false, + isShowPhone: false }) if (innerAudioContext) { innerAudioContext.stop() @@ -955,13 +1084,17 @@ Page({ // 获取浏览历史 getOtherCard(type) { var self = this + self.setData({ + otherCardList: [] + }) app.http.get(app.urls.getBrowseHistoryList, { header: { token: app.globalData.token }, data: { page: 1, - rows: 30 + rows: 7, + homePage: 1 } }).then(res => { var curArr @@ -978,16 +1111,9 @@ Page({ }, changeCard(e) { var item = e.currentTarget.dataset.item + var type = e.currentTarget.dataset.type var _self = this - if (item) { - this.setData({ - cardTemplateUseId: item.cardTemplateUseId, - isShowCard: false, - isMine: 2, - isDefault: true - }) - this.getCard() - } else { + if (type == 1) { this.setData({ cardTemplateDispatchId: '', cardTemplateUseId: '', @@ -996,6 +1122,22 @@ Page({ isDefault: false }) this.getDefault() + } else if (type == 2) { + this.setData({ + cardTemplateUseId: '', + isShowCard: false, + isMine: 2, + isDefault: true + }) + this.getCard() + } else { + this.setData({ + cardTemplateUseId: item.cardTemplateUseId, + isShowCard: false, + isMine: 2, + isDefault: true + }) + this.getCard() } }, //重新构建浏览历史数据 @@ -1025,7 +1167,33 @@ Page({ }, onShow(e) { if (app.globalData.token != '') { - wx.startPullDownRefresh({}) + if (this.data.isMine != 2) { + if (this.data.isNeedRefresh) { + wx.startPullDownRefresh({}) + } + } } + this.setData({ + isNeedRefresh: true + }) + }, + onCloseDialog() { + this.setData({ + isShowComment: false + }) + }, + //显示评论 + showComment(e) { + this.setData({ + isShowComment: true + }) + }, + //点赞 + doLike(e) { + + }, + //收藏 + doCollect(e) { + } }) \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml index 74f9c12..361557f 100644 --- a/pages/index/index.wxml +++ b/pages/index/index.wxml @@ -1,7 +1,7 @@ - - {{nameTxt}} + + {{nameTxt}} @@ -9,17 +9,13 @@ - + - + - - - - @@ -47,29 +43,29 @@ 名片码 - - + + 拨打电话 {{phoneTxt}} - + 添加微信 {{wechateTxt}} - + 邮箱 {{emailTxt}} - + 地址 @@ -176,32 +172,34 @@ - + - + catchtap="viewImg" data-url="{{photo.path}}" data-values="{{child.valueList}}" + data-cur="{{photo.path}}"> + - + + autoplay="{{child.dataMode=='3'}}"> + data-values="{{child.valueList}}" catchtap="viewImg" data-cur="{{photo.path}}" + mode="aspectFill"> - + - + @@ -212,7 +210,7 @@ - + @@ -308,30 +306,39 @@ - - - + + + @@ -346,8 +353,16 @@ - - + + + + + + + + @@ -366,7 +381,7 @@ - + 我的 @@ -374,12 +389,12 @@ + style="margin: 15rpx;" data-item="{{item}}" bindtap="changeCard" data-type="3"> - + {{item.name}} - + 电话:{{item.phone}} @@ -394,4 +409,42 @@ - \ No newline at end of file + + + + + + + 创建名片需要绑定您的手机号,请授权 + + + + + + + + + + 图片或视频 + + + 发布 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/index/index.wxss b/pages/index/index.wxss index 5e168c9..5811671 100644 --- a/pages/index/index.wxss +++ b/pages/index/index.wxss @@ -9,7 +9,6 @@ .card { width: 100%; box-sizing: border-box; - background: #fff; position: relative; overflow: hidden; /* text-align: center; */ @@ -349,7 +348,23 @@ z-index: 100; } -.creat-card image { +.creat-card-box { + position: fixed; + right: 20rpx; + bottom: 20rpx; + /* padding: 20rpx; */ + /* background: #E6B980; */ + border-radius: 50%; + box-sizing: border-box; + align-items: center; + justify-content: center; + flex-direction: column; + width: 140rpx; + height: 140rpx; + z-index: 100; +} + +.creat-card-box button { width: 80rpx; height: 60rpx; position: absolute; @@ -358,6 +373,12 @@ transform: translate(-50%, -50%); } +.creat-card-box image { + width: 100%; + height: 100%; + border-radius: 50%; +} + .share-save { text-align: center; display: flex; @@ -419,7 +440,6 @@ } .top-box { - background-color: #F7F7F7; width: 100%; } @@ -732,7 +752,7 @@ flex-direction: row; justify-content: space-between; align-items: center; - margin-top: 10rpx; + padding: 15rpx; } .func-item { @@ -741,6 +761,18 @@ justify-content: center; align-items: center; flex: 1; + color: #000; + width: 23%; + border-right: 1rpx solid #d8d8d8; +} + +.func-item:last-child { + border-right: 0rpx; +} + +.func-item:active { + background-color: #f3f3f3; + color: #dfdfdf; } .func-item image { diff --git a/pages/mine/income/incomelist.js b/pages/mine/income/incomelist.js new file mode 100644 index 0000000..7722442 --- /dev/null +++ b/pages/mine/income/incomelist.js @@ -0,0 +1,85 @@ +// pages/mine/income/incomelist.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + curPage: 1, + isRefreshing: false, //是否在刷新中 + hasMore: true, //是否有更多数据 + isLoadMore: false, //是否正在加载更多 + recordList: [] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getList() + }, + getList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getIncomeList, { + header: { + token: app.globalData.token + }, + data: { + page: _self.data.curPage, + rows: '10' + } + }) + .then(res => { + wx.stopPullDownRefresh({}) + wx.hideLoading({}) + _self.data.recordList = _self.data.recordList.concat(res.data.rows) + var more = _self.data.recordList.length < res.data.total + _self.setData({ + recordList: _self.data.recordList, + isRefreshing: false, + isLoadMore: false, + hasMore: more + }) + }) + .catch(err => { + wx.stopPullDownRefresh({}) + _self.setData({ + isRefreshing: false, + isLoadMore: false, + hasMore: true + }) + }) + }, + //加载更多 + doLoadMore() { + var _self = this + if (_self.data.hasMore) { + if (_self.data.isLoadMore) { + return + } + this.setData({ + isLoadMore: true, + curPage: ++_self.data.curPage + }) + this.getList() + } + }, + onReachBottom() { + this.doLoadMore() + }, + //下拉刷新 + onPullDownRefresh() { + this.setData({ + isLoadMore: false, + isRefreshing: true, + hasMore: true, + recordList: [], + curPage: 1 + }) + this.getList() + } +}) \ No newline at end of file diff --git a/pages/mine/income/incomelist.json b/pages/mine/income/incomelist.json new file mode 100644 index 0000000..2a7b263 --- /dev/null +++ b/pages/mine/income/incomelist.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "onReachBottomDistance": 50 +} \ No newline at end of file diff --git a/pages/mine/income/incomelist.wxml b/pages/mine/income/incomelist.wxml new file mode 100644 index 0000000..6de1dca --- /dev/null +++ b/pages/mine/income/incomelist.wxml @@ -0,0 +1,21 @@ + + 会员中心 + + + + + + {{item.accountItemDescription}} + 收益到账:{{item.gmtCreate}} + 收益金额:¥{{item.accountItemSysMoney/100}} + + + + + {{item.accountItemType}} + + + + 加载中... + \ No newline at end of file diff --git a/pages/mine/income/incomelist.wxss b/pages/mine/income/incomelist.wxss new file mode 100644 index 0000000..a881a7c --- /dev/null +++ b/pages/mine/income/incomelist.wxss @@ -0,0 +1,121 @@ +/* pages/mine/vip/vipcenter.wxss */ + + +.info-box { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + align-self: center; + box-shadow: 0rpx 4rpx 8rpx 0rpx #efd9be, 0rpx 6rpx 20rpx 0rpx #efd9be; + border-radius: 10rpx; + padding: 10rpx 0rpx; +} + +.base-info { + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + padding: 15rpx; +} + +.base-info .user-icon { + width: 128rpx; + height: 128rpx; + border-radius: 50%; + border: 6rpx solid #ffbc00; +} + +.base-info-text-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 15rpx; +} + +.name-box { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.name-box .name { + font-size: 32rpx; + color: #ffffff; + line-height: 10rpx; +} + +.name-box image { + width: 48rpx; + height: 48rpx; + margin-left: 15rpx; +} + +.item { + display: flex; + flex-direction: row; + position: relative; + justify-content: flex-start; + align-items: center; + background-color: #ffffff; + width: 100%; + padding: 15rpx; + margin-top: 15rpx; +} + +.item:nth-child(1) { + margin-top: 0rpx; +} + +.subscript { + width: 96rpx; + height: 96rpx; + position: absolute; + right: 0rpx; + bottom: 0rpx; +} + +.subscript image { + width: 100%; + height: 100%; +} + +.state { + position: absolute; + transform: rotate(-45deg) translate(-50%, -50%); + font-size: 22rpx; + width: 100%; + height: 100%; + top: 30%; + left: 110%; + color: #ffffff; +} + +.item .icon { + width: 96rpx; + height: 96rpx; + border-radius: 50%; +} + +.item .content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 15rpx; + width: 85%; +} + +.title { + font-size: 32rpx; + color: #E6B980; +} + +.hint-msg { + font-size: 28rpx; + color: #333333; +} \ No newline at end of file diff --git a/pages/mine/index/index.js b/pages/mine/index/index.js index a14bc9a..707936e 100644 --- a/pages/mine/index/index.js +++ b/pages/mine/index/index.js @@ -8,10 +8,17 @@ Page({ data: { nickName: '昵称', name: '用户名称', - userIcon: '../../../images/ic_user_default.png', + userIcon: '/images/ic_user_default.png', menuList: [], imgUrl: app.urls.baseImgUrl, Height: 0, + isShow: true, + isBindPhone: false, + isPay: true, //是否需要交费 + code: '', + isOpen: true, + payState: {}, + accountInfo: undefined }, /** * 生命周期函数--监听页面加载 @@ -22,7 +29,92 @@ Page({ nickName: app.globalData.userInfo.name, name: app.globalData.userInfo.name }) + try { + var isBind = wx.getStorageSync('bindPhone') + var code = wx.getStorageSync('usercode') + if (code && code.length > 0) { + _self.setData({ + code: code + }) + } + _self.setData({ + isBindPhone: isBind != 0 + }) + } catch (err) { + console.log(err) + } }, + //获取我的账户信息 + getAccountInfo() { + var _self = this + app.http.get(app.urls.getMyAccount, { + header: { + token: app.globalData.token + } + }) + .then(res => { + _self.setData({ + accountInfo: res.data + }) + }) + .catch(err => { + console.log(err) + }) + }, + //获取支付状态 + getPayState() { + wx.showLoading({ + title: '加载中...', + }) + var _self = this + app.http.get(app.urls.getPayState, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + //支付过跳转名片创建页面,没有支付跳转支付页面 + if (res.data.cardChargeEnd && res.data.cardChargeEnd.length > 0) { + res.data.cardChargeEnd = _self.formatDate(res.data.cardChargeEnd) + } + _self.setData({ + isPay: res.data.cardCharge, + payState: res.data + }) + }) + .catch(err => { + + }) + }, + formatDate(date) { + var d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) month = '0' + month; + if (day.length < 2) day = '0' + day; + return [year, month, day].join('-'); + }, + //获取菜单状态 + getMenuState() { + var _self = this + app.http.get(app.urls.getMenuState, { + header: { + token: app.globalData.token + } + }) + .then(res => { + _self.setData({ + isOpen: res.data + }) + }) + .catch(err => { + + }) + }, + //获取菜单 getItemList() { wx.showLoading({ title: '加载中...', @@ -37,11 +129,16 @@ Page({ var data = res.data wx.stopPullDownRefresh({}) wx.hideLoading({}) + var is = true data.forEach(it => { it.configColumnList.sort((a, b) => a.configColumnGroupOrder - b.configColumnGroupOrder) + if (it.configColumnGroupName == '创建名片') { + is = false + } }) _self.setData({ - menuList: data + menuList: data, + isShow: is }) }) .catch(err => { @@ -121,7 +218,10 @@ Page({ userIcon: userIcon }) } + // this.getMenuState() this.getItemList() + this.getPayState() + this.getAccountInfo() }, //item 状态 1 待付款 2待发货 3待收货 4售后/退款 showOrder(e) { @@ -156,6 +256,8 @@ Page({ }, onPullDownRefresh() { this.getItemList() + this.getPayState() + this.getAccountInfo() }, //跳转到二级栏目页面 goColumnList(e) { @@ -211,8 +313,126 @@ Page({ path = it.configColumnGroupTargetUrl } }) + if (path.indexOf('/cardList/cardList') != -1) { + if (_self.data.isPay) { + wx.navigateTo({ + url: '/packagecard/cardList/cardList', + }) + } else { + wx.navigateTo({ + url: '/packagecard/paypage/paypage?displayTreaty=1', + }) + } + } else { + wx.navigateTo({ + url: path, + }) + } + }, + //获取手机号进行绑定 + getPhoneNumber(e) { + var _self = this + var iv = e.detail.iv + var encryptedData = e.detail.encryptedData + if (encryptedData) { + wx.showLoading({ + title: '绑定中...', + }) + app.http.put(app.urls.doUpdatePhone, { + header: { + token: app.globalData.token + }, + data: { + iv: iv, + encryptedData: encryptedData + } + }) + .then(res => { + wx.hideLoading({}) + //保存绑定状态 + wx.setStorageSync('token', res.data.data) + wx.setStorageSync('bindPhone', 1) + _self.setData({ + isBindPhone: true + }) + app.globalData.token = token + wx.showToast({ + title: '绑定成功', + success(e) { + wx.navigateTo({ + url: '/packagecard/cardList/cardList', + }) + } + }) + }) + .catch(err => {}) + } + }, + //复制邀请码 + copyCode() { + var _self = this + if (_self.data.code != '') { + wx.setClipboardData({ + data: _self.data.code, + success: function () {} + }) + } else { + wx.showToast({ + title: '无邀请码', + icon: 'error' + }) + } + }, + //营销资讯 + toInformation() { wx.navigateTo({ - url: path, + url: '/packagecard/marketing/marketinginfo', }) + }, + //营销海报 + toReport() { + wx.navigateTo({ + url: '/packagecard/marketing/marketingposter', + }) + }, + //收益统计 + toStatistics() { + wx.navigateTo({ + url: '/pages/mine/income/incomelist', + }) + }, + //去提现 + toCash() { + + }, + //会员中心 + vipCenter() { + wx.navigateTo({ + url: '/pages/mine/vip/vipcenter', + }) + }, + //扫码 + toScan() { + wx.scanCode({ + success(res) { + + } + }) + }, + //订单页面跳转 + showOrder(e) { + var type = e.currentTarget.dataset.type + // 0待付款 1待发货 2待收货 3全部 + wx.navigateTo({ + url: '/pages/mine/order/orderlist?status=' + type, + }) + }, + doCash(e) { + wx.navigateTo({ + url: '/packagecard/purse/takecash', + }) + // wx.navigateTo({ + // url: '/packagecard/paypage/paypage?price=0.01&teamprice=100&displayTreaty=1&type=1&code=111', + // }) } }) \ No newline at end of file diff --git a/pages/mine/index/index.wxml b/pages/mine/index/index.wxml index d2f2f6a..6a94313 100644 --- a/pages/mine/index/index.wxml +++ b/pages/mine/index/index.wxml @@ -1,15 +1,141 @@ - + + + 会员中心 + + + + {{payState.cardChargeEnd=='' ? '去开通会员':'会员已到期'}} + + + {{'到期时间:'+payState.cardChargeEnd}} + + + + + + + + + + + 待付款 + + + + 待发货 + + + + 待收货 + + + + 全部 + + + + + + + 边玩边赚 + + + 收益统计 + + + + + + + + {{accountInfo.dayMoney/100}} + + + 今日预估 + + + + + {{accountInfo.monthMoney/100}} + + + 本月预估 + + + + + ¥ + {{accountInfo.sysMoney/100}} + + + 累计收益 + + + + + + + + + + 钱包 + + + ¥{{accountInfo.accountMoney/100}} + 余额 + + + + + 去提现 + + + + + + + + + + + 智能营销 + + + + + + + 营销资讯 + + + + + + 营销海报 + + - @@ -54,24 +180,33 @@ {{group.configColumnGroupName}} - + class="flex align-center justify-center" style="width:100%;"> + - + + - + + mode="widthFix" wx:if="{{isBindPhone}}" bindtap="toFunction"> + diff --git a/pages/mine/index/index.wxss b/pages/mine/index/index.wxss index d165f24..7a9e772 100644 --- a/pages/mine/index/index.wxss +++ b/pages/mine/index/index.wxss @@ -1,17 +1,17 @@ /* pages/mine/index/index.wxss */ .UCenter-bg { - background-size: cover; height: 400rpx; display: flex; justify-content: center; overflow: hidden; + position: relative; flex-direction: column; align-items: flex-start; color: #fff; font-weight: 300; top: 0; - text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); + /* text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); */ width: 100%; } @@ -31,6 +31,33 @@ border-radius: 50%; } +.vip-box { + position: absolute; + top: 300rpx; + left: 80rpx; + color: #fff; +} + +.vip-box .title { + font-size: 32rpx; + font-weight: bold; +} + +.vip-box .msg { + font-size: 28rpx; +} + +.sign-txt { + position: absolute; + top: 280rpx; + width: 80%; + align-self: center; + display: flex; + color: white; + font-size: 28rpx; + font-weight: bold; +} + .user-content { display: flex; flex-direction: column; @@ -42,13 +69,14 @@ font-size: 38rpx; color: #fff; font-weight: bold; + margin-bottom: 15rpx; } + .user-content .des { - font-size: 28rpx; + font-size: 32rpx; + margin-top: 15rpx; color: #fff; - background-color: #3175c9; - text-align: center; } .UCenter-bg image { @@ -59,10 +87,13 @@ .UCenter-bg .icon { width: 48rpx; height: 48rpx; + +} + +.UCenter-bg .icons { z-index: 10; - top: 200rpx; position: absolute; - right: 48rpx; + right: 15rpx; } .scroll-content { @@ -131,6 +162,201 @@ map, z-index: 100; } +.order-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + margin: 15rpx; + padding: 15rpx; + background-color: #fff; +} + +.order-item { + width: 128rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.order-item image { + width: 64rpx; + height: 64rpx; +} + +.order-item text { + margin-top: 15rpx; +} + +.purse-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-color: #fff; + margin: 0rpx 15rpx 15rpx 15rpx; + padding: 15rpx; +} + +.purse-title { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.purse-title .title { + font-size: 32rpx; + color: #000; +} + +.purse-title .hint { + font-size: 28rpx; + color: #5f5f5f; +} + +.purse-content-box { + display: flex; + flex-direction: row; + width: 100%; + font-size: 28rpx; + color: #000; + align-items: center; + justify-content: space-around; +} + +.purse-content-box .item { + display: flex; + flex-direction: column; + width: 100%; + font-size: 28rpx; + color: #000; + align-items: center; + justify-content: center; +} + +.purse-content-box .item:nth-child(2) { + border-left: 1rpx solid #dfdfdf; + border-right: 1rpx solid #dfdfdf; +} + +.marketing-box { + display: flex; + flex-direction: row; + width: 100%; + font-size: 28rpx; + color: #000; + align-items: center; + justify-content: space-around; + margin-top: 15rpx; +} + +.marketing-box .item { + display: flex; + flex-direction: row; + width: 100%; + font-size: 28rpx; + color: #000; + align-items: center; + justify-content: center; + background-color: #f5f5f5; + border-radius: 10rpx; +} + +.marketing-box .item:active { + color: #000; + background-color: #fcfcfc; +} + +.marketing-box .item:nth-child(2) { + margin-left: 15rpx; +} + +.price { + font-size: 32rpx; + color: #000; +} + +.img-48 { + width: 48rpx; + height: 48rpx; +} + +.money-box { + display: flex; + flex-direction: row; + justify-content: space-around; + align-items: center; + width: 66%; + background-color: #f5f5f5; +} + +.moeny-box-2 { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 33%; + height: 145rpx; +} + +.money-box .item { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + height: 145rpx; + z-index: 2; + padding: 15rpx; +} + +.img-bg-128 { + position: absolute; + height: 145rpx; + width: 33%; +} + +.item-white { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + height: 145rpx; + padding: 15rpx; + z-index: 2; + color: #fff; + font-size: 28rpx; +} + +.money-box .item image { + width: 64rpx; + height: 64rpx; +} + +.bg-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-around; + width: 100%; + background-color: #f5f5f5; + border-radius: 10rpx; + margin-top: 15rpx; +} + +.img-64 { + width: 64rpx; + height: 64rpx; +} + +.text-28 { + font-size: 28rpx; + color: #000; + margin-top: 15rpx; +} + .creat-card image { width: 80rpx; height: 60rpx; @@ -165,12 +391,14 @@ map, } .group-box { - margin-left: 15rpx; - margin-right: 15rpx; - margin-top: 15rpx; + margin: 5rpx 15rpx 0rpx 15rpx; background-color: #ffffff; } +.group-box:nth-child(1) { + margin: 0rpx 15rpx 0rpx 15rpx; +} + .ver-box { display: flex; flex-direction: column; diff --git a/pages/mine/myCard/myCard.js b/pages/mine/myCard/myCard.js index 8acf3a0..9fcc858 100644 --- a/pages/mine/myCard/myCard.js +++ b/pages/mine/myCard/myCard.js @@ -19,7 +19,35 @@ Page({ }, topHeight: app.globalData.CustomBar, isRefresh: false, - isDelPage: false + isDelPage: false, + // 我的名片 + // 他人名片 + // 浏览历史 + tabList: [{ + name: '我的名片' + }, { + name: '他人名片' + }, { + name: '浏览历史' + }] + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + token: app.globalData.token + }) + this.getList() + }, + + onShow: function () { + if (this.data.isRefresh) { + this.setData({ + isRefresh: false + }) + wx.startPullDownRefresh({}) + } }, // 我的名片列表 getList: function () { @@ -113,8 +141,9 @@ Page({ historyList: curArr }) } else { + let key = `_self.data.page.page` _self.setData({ - [page.page]: _self.data.page.page - 1 + [key]: _self.data.page.page - 1 }) } }) @@ -125,8 +154,8 @@ Page({ }) }, // 切换 - changeTab: function (e) { - var cur = e.currentTarget.dataset.tab + changeTab(e) { + var cur = e.detail.index if (this.data.tab != cur) { this.setData({ tab: cur @@ -190,26 +219,8 @@ Page({ self.getOtherCard() }) }, - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - this.setData({ - token: app.globalData.token - }) - this.getList() - }, - onShow: function () { - if (this.data.isRefresh) { - this.setData({ - isRefresh: false - }) - wx.startPullDownRefresh({}) - } - }, - /** * 页面相关事件处理函数--监听用户下拉动作 */ diff --git a/pages/mine/myCard/myCard.wxml b/pages/mine/myCard/myCard.wxml index 3da2616..180aba4 100644 --- a/pages/mine/myCard/myCard.wxml +++ b/pages/mine/myCard/myCard.wxml @@ -2,9 +2,14 @@ 我的名片 - 我的名片 - 他人名片 - 浏览历史 + + + + + + + diff --git a/pages/mine/myCard/myCard.wxss b/pages/mine/myCard/myCard.wxss index c9f6f1d..01948d0 100644 --- a/pages/mine/myCard/myCard.wxss +++ b/pages/mine/myCard/myCard.wxss @@ -37,6 +37,7 @@ .card-name-sm { font-size: 25rpx; align-items: center; + margin-top: 15rpx; } .main { @@ -85,8 +86,8 @@ } .tab-box.active { - color: #055fe6; - border-bottom: 2px solid #055fe6; + color: #E6B980; + border-bottom: 2px solid #E6B980; box-sizing: border-box; } diff --git a/pages/mine/myCardDetail/myCardDetail.js b/pages/mine/myCardDetail/myCardDetail.js index 58bedd1..3ee8ece 100644 --- a/pages/mine/myCardDetail/myCardDetail.js +++ b/pages/mine/myCardDetail/myCardDetail.js @@ -27,7 +27,8 @@ Page({ token: '', oldToken: '', imgTempSrc: '', - currentIndex: 0 + currentIndex: 0, + windowWidth: app.globalData.windowWidth }, // 删除名片 deleteCard: function () { @@ -220,13 +221,18 @@ Page({ data: {} }).then(res => { var area = res.data.areaList + var scale = res.data.cardTemplateUseWidth / self.data.windowWidth + console.log(scale + '===' + self.data.windowWidth) + res.data.cardTemplateUseWidth = res.data.cardTemplateUseWidth / scale + res.data.cardTemplateUseHeight = res.data.cardTemplateUseHeight / scale for (let i = 0; i < area.length; i++) { - // if (area[i].templateAreaServerLink == '1') { - // if (area[i].templateAreaFontValue.length > area[i].templateAreaFontLength) { - // area[i].templateAreaFontValue = area[i].templateAreaFontValue.substring(area[i].templateAreaFontLength, -1) - // } - // } - area[i].templateAreaFontSize = Math.floor(area[i].templateAreaFontSize * 750 / wx.getSystemInfoSync().windowWidth) + 'rpx' + area[i].templateAreaFontSize = area[i].templateAreaFontSize / scale + 'px' + area[i].templateAreaHeight = area[i].templateAreaHeight / scale + area[i].templateAreaWidth = area[i].templateAreaWidth / scale + area[i].templateAreaDown = area[i].templateAreaDown / scale + area[i].templateAreaTop = area[i].templateAreaTop / scale + area[i].templateAreaRight = area[i].templateAreaRight / scale + area[i].templateAreaLeft = area[i].templateAreaLeft / scale if (area[i].templateAreaFontCenter == '1') { area[i].templateAreaFontCenter = 'left' } else if (area[i].templateAreaFontCenter == '2') { diff --git a/pages/mine/myCardDetail/myCardDetail.wxml b/pages/mine/myCardDetail/myCardDetail.wxml index 56fa146..ff4b050 100644 --- a/pages/mine/myCardDetail/myCardDetail.wxml +++ b/pages/mine/myCardDetail/myCardDetail.wxml @@ -9,14 +9,14 @@ wx:if="{{cardInfo.cardTemplateUseBackgroundImage}}"> {{item.templateAreaFontValue}} - diff --git a/pages/mine/myCardDetail/myCardDetail.wxss b/pages/mine/myCardDetail/myCardDetail.wxss index 0c0cea2..2cba944 100644 --- a/pages/mine/myCardDetail/myCardDetail.wxss +++ b/pages/mine/myCardDetail/myCardDetail.wxss @@ -3,7 +3,6 @@ height: 0; position: relative; box-sizing: border-box; - background: #fff; z-index: 100; /* text-align: center; */ } diff --git a/pages/mine/order/orderlist.js b/pages/mine/order/orderlist.js index 41bea49..6c7b72d 100644 --- a/pages/mine/order/orderlist.js +++ b/pages/mine/order/orderlist.js @@ -17,37 +17,52 @@ Page({ hasMore: true, isLoadMore: false, contentHeight: app.globalData.windowHeight - app.globalData.CustomBar, - imgUrl: app.urls.baseImgUrl + imgUrl: app.urls.baseImgUrl, + tabList: [{ + name: '待付款' + }, { + name: '待发货' + }, { + name: '待收货' + }, { + name: '全部' + }] }, - changeTab: function (e) { - var cur = e.currentTarget.dataset.tab - if (this.data.tab != cur) { - this.setData({ - tab: cur, - currentType: cur, - currentPage: 1, - orderList: [] - }) - this.getOrderList() - } + onChange(e) { + this.setData({ + tab: e.detail.index + }) + // var cur = e.currentTarget.dataset.tab + // if (this.data.tab != cur) { + // this.setData({ + // tab: cur, + // currentType: cur, + // currentPage: 1, + // orderList: [] + // }) + // this.getOrderList() + // } }, /** * 生命周期函数--监听页面加载 */ - onLoad: function (options) { + onLoad(options) { var state = options.status - if (state == 5) { - this.setData({ - currentType: '', - tab: 4 - }) - } else { - this.setData({ - currentType: state, - tab: state - }) - } - this.getOrderList() + this.setData({ + tab: Number.parseInt(state) + }) + // if (state == 5) { + // this.setData({ + // currentType: '', + // tab: 4 + // }) + // } else { + // this.setData({ + // currentType: state, + // tab: state + // }) + // } + // this.getOrderList() }, //获取订单列表 getOrderList() { diff --git a/pages/mine/order/orderlist.wxml b/pages/mine/order/orderlist.wxml index 0f76788..21d398e 100644 --- a/pages/mine/order/orderlist.wxml +++ b/pages/mine/order/orderlist.wxml @@ -2,13 +2,18 @@ 我的订单 + - 待付款 - 交易中 - 已完成 - 售后/退款 - 全部 + + + + + + + + { + wx.hideLoading({}) + }) + .catch(err => { + + }) }, toShowOrderDetail() { - wx.redirectTo({ - url: './orderdetail?shopId=' + this.data.shopId + '&orderId=' + this.data.orderId, - }) + var _self = this + if (_self.data.type == 1) { + //商品订单 + wx.redirectTo({ + url: './orderdetail?shopId=' + this.data.shopId + '&orderId=' + this.data.orderId, + }) + } else if (_self.data.type == 2) { + //名片订单 + let arr = getCurrentPages() + let lastPage = (arr.length >= 2) ? arr[arr.length - 2] : undefined + lastPage.setData({ + isRefresh: true + }) + wx.navigateBack({}) + } } }) \ No newline at end of file diff --git a/pages/mine/order/ordersuccess.wxml b/pages/mine/order/ordersuccess.wxml index fb7803a..d20d00e 100644 --- a/pages/mine/order/ordersuccess.wxml +++ b/pages/mine/order/ordersuccess.wxml @@ -4,9 +4,9 @@ - 商品下单成功 - 订单金额:¥{{totalPrice}} - - + {{hintMsg}} + 支付金额:¥{{totalPrice}} + + \ No newline at end of file diff --git a/pages/mine/otherCard/othercarddetail.js b/pages/mine/otherCard/othercarddetail.js index b300717..e21bb7b 100644 --- a/pages/mine/otherCard/othercarddetail.js +++ b/pages/mine/otherCard/othercarddetail.js @@ -34,7 +34,8 @@ Page({ isPlayAudio: false, //标识当前是否在播放音乐 audioId: '', count: 3, - animationData: {} + animationData: {}, + isShowBtn: false }, onLoad(options) { var self = this @@ -194,7 +195,14 @@ Page({ item.list.forEach(iem => { switch (iem.dataType) { case '2': //图片 - var items = iem.value.split(',') + var photoIds = iem.value.split('@') + if (photoIds.length > 1) { + //展示方式 + iem.dataMode = photoIds[1] + } else { + iem.dataMode = '1' + } + var items = photoIds[0].split(',') var tempList = [] items.forEach(item => { var tempItem = { @@ -210,14 +218,24 @@ Page({ var tempList = [] items.forEach(item => { if (item.length > 0) { + var ss = item.split('&') + var totalStr = '00:00' + if (ss.length > 1) { + var dur = ss[1] + var tM = parseInt(dur / 60) //分钟 + var tS = parseInt(dur % 60) //秒 + var totalMStr = tM > 9 ? tM : '0' + tM + var totalSStr = +tS > 9 ? tS : '0' + tS + totalStr = totalMStr + ':' + totalSStr + } var tempItem = { - id: item, //id - path: app.urls.baseImgUrl + item, //地址 + id: ss[0], //id + path: app.urls.baseImgUrl + ss[0], //地址 isPlay: false, //是否播放中 duration: 100000, //时长 curDuration: 0, curDurationStr: '00:00', - totalDurationStr: '00:00' + totalDurationStr: totalStr } tempList.push(tempItem) } @@ -298,6 +316,9 @@ Page({ }) .then(res => { if (res.data.length > 0) { + _self.setData({ + isShowBtn: true + }) res.data[0].list.forEach(it => { switch (it.name) { case 'phone': @@ -322,6 +343,10 @@ Page({ break } }) + } else { + _self.setData({ + isShowBtn: false + }) } }) .catch(err => { @@ -373,18 +398,18 @@ Page({ } }) - if (res.from == 'button') { - var postId = self.buildId() - self.shareRecord(postId) + // if (res.from == 'button') { + var postId = self.buildId() + self.shareRecord(postId) - var param = '/pages/index/index?cardTemplateDispatchId=' + postId; - return { - title: '名片分享', - path: param, - imageUrl: self.data.shareImgUrl - } - // return返回 title 转发标题 path 路径 imageUrl 自定义图片,可以本地路径 代码包文件路径 支持png jpg 显示长宽比5:4 + var param = '/pages/index/index?cardTemplateDispatchId=' + postId; + return { + title: '您好,这是我的电子名片,请查看.', + path: param, + imageUrl: self.data.shareImgUrl } + // return返回 title 转发标题 path 路径 imageUrl 自定义图片,可以本地路径 代码包文件路径 支持png jpg 显示长宽比5:4 + // } }, // 转发记录 shareRecord: function (cardTemplateDispatchId) { @@ -406,19 +431,23 @@ Page({ }, // 展示名片码 showBarCode: function () { - this.setData({ - isShowBarCode: true - }) - wx.hideTabBar() - var anim = wx.createAnimation({ - duration: 1200, - timingFunction: 'linear', - transformOrigin: '50% 50% 0' - }) - anim.rotate(180).step() - this.setData({ - animationData: anim.export() + var _self = this + wx.navigateTo({ + url: '/packagecard/sharePage/cardcode?cardImg=' + _self.data.cardInfo.cardTemplateUsePhotoUrl + '&id=' + _self.data.cardInfo.cardTemplateUseBarcode, }) + // this.setData({ + // isShowBarCode: true + // }) + // wx.hideTabBar() + // var anim = wx.createAnimation({ + // duration: 1200, + // timingFunction: 'linear', + // transformOrigin: '50% 50% 0' + // }) + // anim.rotate(180).step() + // this.setData({ + // animationData: anim.export() + // }) }, // 隐藏名片码 hideBarCode: function () { @@ -540,8 +569,15 @@ Page({ }, //预览图片 viewImg(e) { + var imgs = e.currentTarget.dataset.values + var cur = e.currentTarget.dataset.url + var imgPaths = [] + imgs.forEach(it => { + imgPaths.push(it.path) + }) wx.previewImage({ - urls: [e.currentTarget.dataset.url], + urls: imgPaths, + current: cur }) }, //预览视频 diff --git a/pages/mine/otherCard/othercarddetail.wxml b/pages/mine/otherCard/othercarddetail.wxml index 89cb879..ee10e41 100644 --- a/pages/mine/otherCard/othercarddetail.wxml +++ b/pages/mine/otherCard/othercarddetail.wxml @@ -39,29 +39,29 @@ 名片码 - - + + 拨打电话 {{phoneTxt}} - + 添加微信 {{wechateTxt}} - + 邮箱 {{emailTxt}} - + 地址 @@ -167,32 +167,32 @@ - + - + data-values="{{child.valueList}}" catchtap="viewImg" data-url="{{photo.path}}"> + + wx:elif="{{child.dataMode=='2' || child.dataMode=='3'}}"> + autoplay="{{child.dataMode=='3'}}"> - + - + - + diff --git a/pages/mine/otherCard/othercarddetail.wxss b/pages/mine/otherCard/othercarddetail.wxss index 2fba4fb..3e7b7e8 100644 --- a/pages/mine/otherCard/othercarddetail.wxss +++ b/pages/mine/otherCard/othercarddetail.wxss @@ -9,7 +9,6 @@ .card { width: 100%; box-sizing: border-box; - background: #fff; position: relative; overflow: hidden; /* text-align: center; */ @@ -419,7 +418,6 @@ } .top-box { - background-color: #F7F7F7; width: 100%; } diff --git a/pages/mine/setting/columnsetting.js b/pages/mine/setting/columnsetting.js index 20f0b7d..fe45a92 100644 --- a/pages/mine/setting/columnsetting.js +++ b/pages/mine/setting/columnsetting.js @@ -2,6 +2,7 @@ const app = getApp() Page({ data: { + activeNames: ['1'], curIndex: 0, menuList: [], imgUrl: app.urls.baseImgUrl, @@ -9,7 +10,39 @@ Page({ isShowInput: false, curId: '', curIndex: 0, - curIdx: 0 + curIdx: 0, + pageInfo: { + rowHeight: 64, + scrollHeight: 85, + startIndex: null, + scrollY: true, + readyPlaceIndex: null, + startY: 0, + selectedIndex: null, + startIdx: null, + selectedIdx: null + }, + movableViewInfo: { + y: 0, + showClass: 'none', + data: {} + }, + pageInfoX: { + rowWidth: 96, + scrollHeight: 85, + startIndex: null, + scrollX: true, + readyPlaceIndex: null, + startX: 0, + selectedIndex: null, + startIdx: null, + selectedIdx: null + }, + movableViewInfoX: { + x: 0, + showClass: 'none', + data: {} + }, }, onLoad: function (options) { this.getColumnList() @@ -56,8 +89,8 @@ Page({ .then(res => { var data = res.data wx.hideLoading({}) - data.forEach(it => { - it.configColumnList.sort((a, b) => a.configColumnOrder - b.configColumnOrder) + data.forEach((it, index) => { + it.phoneOrder = index }) _self.setData({ menuList: data @@ -170,5 +203,202 @@ Page({ this.setData({ isShowInput: false }) + }, + dragStart: function (event) { + var startIndex = event.currentTarget.dataset.index + var startIdx = event.currentTarget.dataset.idx + console.log('获取到的元素为', this.data.menuList[startIndex].configColumnList[startIdx]) + // 初始化页面数据 + var pageInfo = this.data.pageInfo + pageInfo.startY = event.touches[0].clientY + pageInfo.readyPlaceIndex = startIndex + pageInfo.selectedIndex = startIndex + pageInfo.selectedIdx = startIdx + pageInfo.scrollY = false + pageInfo.startIndex = startIndex + pageInfo.startIdx = startIdx + this.setData({ + 'movableViewInfo.y': pageInfo.startY - (pageInfo.rowHeight / 2) + }) + // 初始化拖动控件数据 + var movableViewInfo = this.data.movableViewInfo + movableViewInfo.data = this.data.menuList[startIndex].configColumnList[startIdx] + movableViewInfo.showClass = "inline" + + this.setData({ + movableViewInfo: movableViewInfo, + pageInfo: pageInfo + }) + }, + + dragMove: function (event) { + var optionList = this.data.menuList + var pageInfo = this.data.pageInfo + // 计算拖拽距离 + var movableViewInfo = this.data.movableViewInfo + var movedDistance = event.touches[0].clientY - pageInfo.startY + movableViewInfo.y = pageInfo.startY - (pageInfo.rowHeight / 2) + movedDistance + console.log('移动的距离为', movedDistance) + + // 修改预计放置位置 + var movedIndex = parseInt(movedDistance / pageInfo.rowHeight) + var readyPlaceIndex = pageInfo.startIdx + movedIndex + if (readyPlaceIndex < 0) { + readyPlaceIndex = 0 + } else if (readyPlaceIndex >= optionList[pageInfo.selectedIndex].configColumnList.length) { + readyPlaceIndex = optionList[pageInfo.selectedIndex].configColumnList.length - 1 + } + + if (readyPlaceIndex != pageInfo.selectedIdx) { + var selectedData = optionList[pageInfo.selectedIndex].configColumnList[pageInfo.selectedIdx] + + optionList[pageInfo.selectedIndex].configColumnList.splice(pageInfo.selectedIdx, 1) + optionList[pageInfo.selectedIndex].configColumnList.splice(readyPlaceIndex, 0, selectedData) + pageInfo.selectedIdx = readyPlaceIndex + } + // 移动movableView + pageInfo.readyPlaceIndex = readyPlaceIndex + // console.log('移动到了索引', readyPlaceIndex, '选项为', optionList[readyPlaceIndex]) + + this.setData({ + movableViewInfo: movableViewInfo, + menuList: optionList, + pageInfo: pageInfo + }) + }, + + dragEnd: function (event) { + // 重置页面数据 + var pageInfo = this.data.pageInfo + var order = order = pageInfo.readyPlaceIndex + 1 + this.doSaveOrder(pageInfo.selectedIndex) + pageInfo.readyPlaceIndex = null + pageInfo.startY = null + pageInfo.selectedIndex = null + pageInfo.selectedIdx = null + pageInfo.startIndex = null + pageInfo.startIdx = null + pageInfo.scrollY = true + // 隐藏movableView + var movableViewInfo = this.data.movableViewInfo + movableViewInfo.showClass = 'none' + + this.setData({ + pageInfo: pageInfo, + movableViewInfo: movableViewInfo + }) + }, + dragStartX(e) { + var startIndex = e.currentTarget.dataset.index + var startIdx = e.currentTarget.dataset.idx + console.log('获取到的元素为', this.data.menuList[startIndex].configColumnList[startIdx]) + // 初始化页面数据 + var pageInfo = this.data.pageInfoX + pageInfo.startX = e.touches[0].clientX + console.log(pageInfo.startX) + pageInfo.readyPlaceIndex = startIndex + pageInfo.selectedIndex = startIndex + pageInfo.selectedIdx = startIdx + pageInfo.scrollX = false + pageInfo.startIndex = startIndex + pageInfo.startIdx = startIdx + this.setData({ + 'movableViewInfoX.x': pageInfo.startX - (pageInfo.rowWidth / 2) + }) + // 初始化拖动控件数据 + var movableViewInfo = this.data.movableViewInfoX + movableViewInfo.data = this.data.menuList[startIndex].configColumnList[startIdx] + movableViewInfo.showClass = "inline" + console.log(movableViewInfo) + this.setData({ + movableViewInfoX: movableViewInfo, + pageInfoX: pageInfo + }) + }, + dragMoveX(event) { + var optionList = this.data.menuList + var pageInfo = this.data.pageInfoX + // 计算拖拽距离 + var movableViewInfo = this.data.movableViewInfoX + var movedDistance = event.touches[0].clientX - pageInfo.startX + movableViewInfo.x = pageInfo.startX - (pageInfo.rowWidth / 2) + movedDistance + console.log('移动的距离为', movedDistance) + + // 修改预计放置位置 + var movedIndex = parseInt(movedDistance / pageInfo.rowWidth) + var readyPlaceIndex = pageInfo.startIdx + movedIndex + if (readyPlaceIndex < 0) { + readyPlaceIndex = 0 + } else if (readyPlaceIndex >= optionList[pageInfo.selectedIndex].configColumnList.length) { + readyPlaceIndex = optionList[pageInfo.selectedIndex].configColumnList.length - 1 + } + + if (readyPlaceIndex != pageInfo.selectedIdx) { + var selectedData = optionList[pageInfo.selectedIndex].configColumnList[pageInfo.selectedIdx] + + optionList[pageInfo.selectedIndex].configColumnList.splice(pageInfo.selectedIdx, 1) + optionList[pageInfo.selectedIndex].configColumnList.splice(readyPlaceIndex, 0, selectedData) + pageInfo.selectedIdx = readyPlaceIndex + } + // 移动movableView + pageInfo.readyPlaceIndex = readyPlaceIndex + // console.log('移动到了索引', readyPlaceIndex, '选项为', optionList[readyPlaceIndex]) + + this.setData({ + movableViewInfoX: movableViewInfo, + menuList: optionList, + pageInfoX: pageInfo + }) + }, + dragEndX(e) { + // 重置页面数据 + var pageInfo = this.data.pageInfoX + // var order = order = pageInfo.readyPlaceIndex + 1 + // this.doSaveOrder(order, this.data.movableViewInfo.data.configColumnId) + pageInfo.readyPlaceIndex = null + pageInfo.startX = null + pageInfo.selectedIndex = null + pageInfo.selectedIdx = null + pageInfo.startIndex = null + pageInfo.startIdx = null + pageInfo.scrollY = true + // 隐藏movableView + var movableViewInfo = this.data.movableViewInfoX + movableViewInfo.showClass = 'none' + + this.setData({ + pageInfoX: pageInfo, + movableViewInfoX: movableViewInfo + }) + }, + + //保存排序 + doSaveOrder(index) { + wx.showLoading({ + title: '保存中...', + }) + var _self = this + + var orders = {} + _self.data.menuList[index].configColumnList.forEach((it, index) => { + orders[it.configColumnId] = index + 1 + }) + app.http.post(app.urls.doOrderColumn, { + header: { + token: app.globalData.token + }, + data: { + configColumnOrder: orders + } + }) + .then(res => { + wx.hideLoading({}) + }) + .catch(err => {}) + }, + onChange(e) { + this.setData({ + activeNames: e.detail + }) } }) \ No newline at end of file diff --git a/pages/mine/setting/columnsetting.wxml b/pages/mine/setting/columnsetting.wxml index e65b2c1..2958232 100644 --- a/pages/mine/setting/columnsetting.wxml +++ b/pages/mine/setting/columnsetting.wxml @@ -2,49 +2,107 @@ 设置 + + + 1.可以通过点击条目名称来修改栏目名称\n2.选择开关用来关闭/开启栏目的展示\n3.拖动排序按钮来进行排列条目的展示顺序\n + + - + {{group.configColumnGroupName}} - - - + + + + + - {{item.configColumnName}} - + {{movableViewInfoX.data.configColumnName}} + + + + + + + + + + + + + {{item.configColumnName}} + + - + {{group.configColumnGroupName}} - - - - {{item.configColumnName}} - 原名称:{{item.configColumnRemark}} + + + + + {{movableViewInfo.data.configColumnName}} + 原名称:{{movableViewInfo.data.configColumnRemark}} + + + + + + + + + + + + + + + {{item.configColumnName}} + 原名称:{{item.configColumnRemark}} + + + + + + + + - - - - + diff --git a/pages/mine/setting/columnsetting.wxss b/pages/mine/setting/columnsetting.wxss index 5942c32..4dd19c3 100644 --- a/pages/mine/setting/columnsetting.wxss +++ b/pages/mine/setting/columnsetting.wxss @@ -17,6 +17,19 @@ background-color: #ffffff; padding: 15rpx; border-bottom: 1rpx solid #f2f2f2; + justify-content: space-between; +} + +.item-box-move { + display: flex; + flex-direction: row; + margin: 0rpx 15rpx; + width: 100%; + align-items: center; + background-color: #ffffff; + padding: 15rpx; + border-bottom: 1rpx solid #f2f2f2; + justify-content: space-between; } .item-img { @@ -81,4 +94,16 @@ margin-top: 15rpx; max-width: 96rpx; font-size: 24rpx; +} + +.movable-area { + position: absolute; + top: 0; + left: 0; + z-index: 10; + width: 96%; +} + +.movable-row { + box-shadow: #D9D9D9 0px 0px 20px; } \ No newline at end of file diff --git a/pages/mine/vip/vipcenter.js b/pages/mine/vip/vipcenter.js new file mode 100644 index 0000000..0aff4ad --- /dev/null +++ b/pages/mine/vip/vipcenter.js @@ -0,0 +1,146 @@ +// pages/mine/vip/vipcenter.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + name: '用户名称', + userIcon: '/images/ic_user_default.png', + curPage: 1, + isRefreshing: false, //是否在刷新中 + hasMore: true, //是否有更多数据 + isLoadMore: false, //是否正在加载更多 + recordList: [], + isDredge: true, //是否开通过会员 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) {}, + onShow(e) { + var name = wx.getStorageSync('name') + var userIcon = wx.getStorageSync('userIcon') + if (name) { + this.setData({ + name: name, + userIcon: userIcon + }) + } + wx.startPullDownRefresh({}) + // this.getPayState() + // this.getPayHistoryList() + }, + getPayState() { + wx.showLoading({ + title: '加载中...', + }) + var _self = this + app.http.get(app.urls.getPayState, { + header: { + token: app.globalData.token + } + }) + .then(res => { + wx.hideLoading({}) + //支付过跳转名片创建页面,没有支付跳转支付页面 + //第一次开通 + _self.setData({ + isDredge: res.data.cardCharge && res.data.cardChargeEnd == '' + }) + if (res.data.cardChargeEnd && res.data.cardChargeEnd.length > 0) { + res.data.cardChargeEnd = _self.formatDate(res.data.cardChargeEnd) + } + _self.setData({ + payState: res.data + }) + }) + .catch(err => { + + }) + }, + formatDate(date) { + var d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) month = '0' + month; + if (day.length < 2) day = '0' + day; + return [year, month, day].join('-'); + }, + //获取支付历史列表 + getPayHistoryList() { + var _self = this + wx.showLoading({ + title: '加载中...', + }) + app.http.get(app.urls.getPayHistoryList, { + header: { + token: app.globalData.token + }, + data: { + page: _self.data.curPage, + rows: '10' + } + }) + .then(res => { + wx.stopPullDownRefresh({}) + wx.hideLoading({}) + _self.data.recordList = _self.data.recordList.concat(res.data.rows) + var more = _self.data.recordList.length < res.data.total + _self.setData({ + recordList: _self.data.recordList, + isRefreshing: false, + isLoadMore: false, + hasMore: more + }) + }) + .catch(err => { + wx.stopPullDownRefresh({}) + _self.setData({ + isRefreshing: false, + isLoadMore: false, + hasMore: true + }) + }) + }, + + //立即续费 + doRenew() { + wx.navigateTo({ + url: '/packagecard/paypage/paypage', + }) + }, + //加载更多 + doLoadMore() { + var _self = this + if (_self.data.hasMore) { + if (_self.data.isLoadMore) { + return + } + this.setData({ + isLoadMore: true, + curPage: ++_self.data.curPage + }) + this.getPayHistoryList() + } + }, + onReachBottom() { + this.doLoadMore() + }, + //下拉刷新 + onPullDownRefresh() { + this.setData({ + isLoadMore: false, + isRefreshing: true, + hasMore: true, + recordList: [], + curPage: 1 + }) + this.getPayState() + this.getPayHistoryList() + } +}) \ No newline at end of file diff --git a/pages/mine/vip/vipcenter.json b/pages/mine/vip/vipcenter.json new file mode 100644 index 0000000..53da382 --- /dev/null +++ b/pages/mine/vip/vipcenter.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "onReachBottomDistance": 50, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/pages/mine/vip/vipcenter.wxml b/pages/mine/vip/vipcenter.wxml new file mode 100644 index 0000000..90e13b7 --- /dev/null +++ b/pages/mine/vip/vipcenter.wxml @@ -0,0 +1,53 @@ + + 会员中心 + + + + + + + + + {{name}} + + + + 会员将于{{payState.cardChargeEnd}}到期 + + 会员已于{{payState.cardChargeEnd}}到期 + + + + 立即续费 + + + + + + {{item.cardChargeRemark}} + 支付时间:{{item.cardChargeOrderTime}} + 支付金额:¥{{item.cardChargePrice}} + + + + + + 已取消 + + + 支付成功 + + + + + 加载中... + + + + 您还未开通会员,点击下方按钮去开通会员 + + + \ No newline at end of file diff --git a/pages/mine/vip/vipcenter.wxss b/pages/mine/vip/vipcenter.wxss new file mode 100644 index 0000000..214df79 --- /dev/null +++ b/pages/mine/vip/vipcenter.wxss @@ -0,0 +1,117 @@ +/* pages/mine/vip/vipcenter.wxss */ + + +.info-box { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + align-self: center; + box-shadow: 0rpx 4rpx 8rpx 0rpx #efd9be, 0rpx 6rpx 20rpx 0rpx #efd9be; + border-radius: 10rpx; + padding: 10rpx 0rpx; +} + +.base-info { + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + padding: 15rpx; +} + +.base-info .user-icon { + width: 128rpx; + height: 128rpx; + border-radius: 50%; + border: 6rpx solid #ffbc00; +} + +.base-info-text-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 15rpx; +} + +.name-box { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.name-box .name { + font-size: 32rpx; + color: #ffffff; + line-height: 10rpx; +} + +.name-box image { + width: 48rpx; + height: 48rpx; + margin-left: 15rpx; +} + +.item { + display: flex; + flex-direction: row; + position: relative; + justify-content: flex-start; + align-items: center; + background-color: #ffffff; + width: 100%; + padding: 15rpx; + margin-top: 15rpx; +} + +.subscript { + width: 96rpx; + height: 96rpx; + position: absolute; + right: 0rpx; + bottom: 0rpx; +} + +.subscript image { + width: 100%; + height: 100%; +} + +.state { + position: absolute; + transform: rotate(-45deg) translate(-50%, -50%); + font-size: 22rpx; + width: 100%; + height: 100%; + top: 30%; + left: 110%; + color: #ffffff; +} + +.item .icon { + width: 96rpx; + height: 96rpx; + border-radius: 50%; +} + +.item .content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-left: 15rpx; + width: 85%; +} + +.title { + font-size: 32rpx; + color: #E6B980; +} + +.hint-msg { + font-size: 28rpx; + color: #333333; +} \ No newline at end of file diff --git a/pages/serve/index/index.js b/pages/serve/index/index.js index ce157bb..e494348 100644 --- a/pages/serve/index/index.js +++ b/pages/serve/index/index.js @@ -5,7 +5,7 @@ Page({ * 页面的初始数据 */ data: { - shopUrl: 'https://www.tenlion.com.cn', + shopUrl: '', imgUlr: app.urls.baseImgUrl }, @@ -13,12 +13,20 @@ Page({ * 生命周期函数--监听页面加载 */ onLoad: function (options) { + var url = app.urls.shopUrl + app.globalData.userId + '?token=' + app.globalData.token + this.setData({ + shopUrl: url + }) }, - onPullDownRefresh() { - this.setData({ - shopUrl: 'https://www.tenlion.com.cn' + onShow() { + wx.setNavigationBarTitle({ + title: '服务' }) - wx.stopPullDownRefresh({}) - } + var _self = this + var url = app.urls.shopUrl + app.globalData.userId + '?token=' + app.globalData.token + this.setData({ + shopUrl: url + }) + }, }) \ No newline at end of file diff --git a/pages/serve/index/index.wxml b/pages/serve/index/index.wxml index 3daad79..70902c1 100644 --- a/pages/serve/index/index.wxml +++ b/pages/serve/index/index.wxml @@ -1,9 +1 @@ - - - 服务 - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/project.config.json b/project.config.json index 73b7444..a69dadf 100644 --- a/project.config.json +++ b/project.config.json @@ -23,7 +23,7 @@ "compileHotReLoad": false, "useMultiFrameRuntime": true, "useApiHook": true, - "useApiHostProcess": false, + "useApiHostProcess": true, "babelSetting": { "ignore": [], "disablePlugins": [], diff --git a/utils/api.js b/utils/api.js index d3c32cd..ce4bdc8 100644 --- a/utils/api.js +++ b/utils/api.js @@ -1,10 +1,26 @@ var apis = { + url: 'http://192.168.0.115:8091/systemcard/', + userCenter: 'http://192.168.0.115:8091/systemcard/', + baseImgUrl: 'http://192.168.0.115:8091/systemcard/route/file/download/true/', + // url: 'https://cbc.wgink.ink/systemcard/', - url: 'http://192.168.0.111:8091/systemcard/', // userCenter: 'https://cbc.wgink.ink/systemcard/', - userCenter: 'http://192.168.0.111:8091/systemcard/', // baseImgUrl: 'https://cbc.wgink.ink/systemcard/route/file/download/true/', - baseImgUrl: 'http://192.168.0.111:8091/systemcard/route/file/download/true/', + + // url: 'https://www.tenlion.com.cn/systemcard/', + // userCenter: 'https://www.tenlion.com.cn/systemcard/', + // baseImgUrl: 'https://www.tenlion.com.cn/systemcard/route/file/download/true/', + + // url: 'http://192.168.0.111:8091/systemcard/', + // userCenter: 'http://192.168.0.111:8091/systemcard/', + // baseImgUrl: 'http://192.168.0.111:8091/systemcard/route/file/download/true/', + + // url: 'http://192.168.0.103:7008/study/', + // userCenter: 'http://192.168.0.103:7008/study/', + // baseImgUrl: 'http://192.168.0.103:7008/study/route/file/download/true/', + + + shopUrl: `https://www.tenlion.com.cn/systemcard/app/shoptemplateconfig/pagerelease/`, doSaveUserInfo: `app/miniapp/user/update-info`, //保存微信头像与名称 doUpdatePhone: `app/miniapp/update-phone`, //绑定手机号 token, {phone:''} put doUploadImg: `app/file/uploadimage`, //上传图片 @@ -12,9 +28,23 @@ var apis = { doUploadAudio: `app/file/uploadaudio`, //上传音频 /**用户相关 */ wxLogin: `wechat-miniapp/sign/default`, //微信用户登录 - // wxLogin: `wechat/miniapp/sign/default`, //微信用户登录 + getUserBaseInfo: `app/cardcharge/getuser`, getDictionaryList: `app/data/listallbyparentid/{dataParentId}`, //获取字典全部列表 getAreaDictionaryList: `app/area/listbyparentid/{areaParentId}`, //获取地区全部字典 + getPayState: `app/cardcharge/getprice`, //获取支付状态 + getTreaty: `app/projectconfigrelease/html/{key}`, //获取协议 1.privacyPolicy 隐私协议 2.cardCreateTemplateUse 使用协议 3.cardUserServicesTreaty 认证协议 4.cardCreateTreaty 服务协议 + getMemberTypeList: `app/cardchargerole/list`, //获取会员开通类型列表 + getMenuState: ``, //获取菜单开关状态 + getIndexIcon: `app/projectconfigrelease/file/createCardIcon`, //获取首页按钮ID + getMyAccount: `app/account/get`, //获取账户信息 + getIncomeList: `app/accountitem/listpage`, //获取收益记录 + doTakeCash: `app/accountwithdraw/save`, //申请提现单位分 accountWithdrawMoney + getTakeCashList: `app/accountwithdraw/listpage`, //获取提现历史 + /* 支付 */ + getOrderState: `app/miniapp/pay/save-place-order-demo`, + getCardPayState: `app/cardcharge/savecharge/{mode}`, //获取开通名片的订单信息 + doSaveOrderPayState: `app/cardcharge/checkorder/{cardChargeOrderNumber}`, //保存订单支付状态 + getPayHistoryList: `app/cardcharge/listpage`, //获取 /*用户 */ /**店铺相关 **/ doSaveShop: `app/shop/save`, //保存商店 @@ -38,6 +68,12 @@ var apis = { getShopAuthenticationInfo: `app/shopcertification/get/{shopCertificationId}`, //获取店铺认证信息 doUpdateAuthenticationInfo: `app/shopcertification/updateshopcertification/{shopCertificationId}`, //更新店铺认证信息 getTempleteList: `app/shoptemplateconfig/get-template-by-industryId/{industryId}`, //根据行业ID获取模板列表 + /** 营销 **/ + getPosterDetail: ``, //获取海报详情 + getPosterTempleteList: `app/cardtemplate/listposter`, //获取海报模板列表 + getPosterHistory: `app/cardtemplateuse/list`, //获取发布的海报历史 mode 1.名片 2.海报 + getMarketingInfoList: ``, //获取营销资讯 + doSavePoster: `app/cardtemplateuse/saveposter`, //创建海报 /** 优惠券 **/ doSaveCoupon: `app/coupon/save`, //保存优惠券 getCouponList: `app/coupon/list`, //获取优惠卷列表 @@ -83,8 +119,12 @@ var apis = { getMineColumnList: `app/configcolumnset/list`, //获取我的栏目配置列表 doSaveColumnDisplay: `app/configcolumnset/savedisplay`, //保存我的栏目隐藏显示 doSaveColumnName: `app/configcolumnset/savename`, //保存我的栏目名称 + doOrderColumn: `app/configcolumnset/saveorder`, //保存栏目排序, post {configColumnId, configColumnOrder} getColumnListByGroupId: `app/configcolumn/list`, //根据栏目组id获取栏目? configColumnGroupId - + //评论 点赞 收藏 + doSaveCollect: `app/contentcollect/save`, //保存取消收藏 businessId=xxx&projectId=poster + doSaveLike: `app/contentlike/save`, //保存取消点赞 ?businessId + getPosterFavorList: `app/cardtemplate/mylistposter`, //获取我的海报收藏列表 //名片信息 getCardList: `app/cardtemplate/list`, //获取名片列表 getCardDetail: `app/cardtemplate/get/{cardTemplateId}`, //获取名片详情 diff --git a/utils/rsa.js b/utils/rsa.js new file mode 100755 index 0000000..300699e --- /dev/null +++ b/utils/rsa.js @@ -0,0 +1,14462 @@ +var navigator2 = { + appName: 'Netscape', + userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' +}; + +var window2 = { + ASN1 : null, + Base64 : null, + Hex : null, + crypto : null, + href : null +}; + +var KJUR = null; + +if (typeof YAHOO == "undefined" || !YAHOO) { + var YAHOO = {}; +} +YAHOO.namespace = function() { + var b = arguments, + g = null, + e, c, f; + for (e = 0; e < b.length; e = e + 1) { + f = ("" + b[e]).split("."); + g = YAHOO; + for (c = (f[0] == "YAHOO") ? 1 : 0; c < f.length; c = c + 1) { + g[f[c]] = g[f[c]] || {}; + g = g[f[c]]; + } + } + return g; +}; +YAHOO.log = function(d, a, c) { + var b = YAHOO.widget.Logger; + if (b && b.log) { + return b.log(d, a, c); + } else { + return false; + } +}; +YAHOO.register = function(a, f, e) { + var k = YAHOO.env.modules, + c, j, h, g, d; + if (!k[a]) { + k[a] = { + versions: [], + builds: [] + }; + } + c = k[a]; + j = e.version; + h = e.build; + g = YAHOO.env.listeners; + c.name = a; + c.version = j; + c.build = h; + c.versions.push(j); + c.builds.push(h); + c.mainClass = f; + for (d = 0; d < g.length; d = d + 1) { + g[d](c); + } + if (f) { + f.VERSION = j; + f.BUILD = h; + } else { + YAHOO.log("mainClass is undefined for module " + a, "warn"); + } +}; +YAHOO.env = YAHOO.env || { + modules: [], + listeners: [] +}; +YAHOO.env.getVersion = function(a) { + return YAHOO.env.modules[a] || null; +}; +YAHOO.env.parseUA = function(d) { + var e = function(i) { + var j = 0; + return parseFloat(i.replace(/\./g, + function() { + return (j++==1) ? "": "."; + })); + }, + h = navigator2, + g = { + ie: 0, + opera: 0, + gecko: 0, + webkit: 0, + chrome: 0, + mobile: null, + air: 0, + ipad: 0, + iphone: 0, + ipod: 0, + ios: null, + android: 0, + webos: 0, + caja: h && h.cajaVersion, + secure: false, + os: null + }, + c = d || (navigator2 && navigator2.userAgent), + f = window2 && window2.location, + b = f && f.href, + a; + g.secure = b && (b.toLowerCase().indexOf("https") === 0); + if (c) { + if ((/windows|win32/i).test(c)) { + g.os = "windows"; + } else { + if ((/macintosh/i).test(c)) { + g.os = "macintosh"; + } else { + if ((/rhino/i).test(c)) { + g.os = "rhino"; + } + } + } + if ((/KHTML/).test(c)) { + g.webkit = 1; + } + a = c.match(/AppleWebKit\/([^\s]*)/); + if (a && a[1]) { + g.webkit = e(a[1]); + if (/ Mobile\//.test(c)) { + g.mobile = "Apple"; + a = c.match(/OS ([^\s]*)/); + if (a && a[1]) { + a = e(a[1].replace("_", ".")); + } + g.ios = a; + g.ipad = g.ipod = g.iphone = 0; + a = c.match(/iPad|iPod|iPhone/); + if (a && a[0]) { + g[a[0].toLowerCase()] = g.ios; + } + } else { + a = c.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/); + if (a) { + g.mobile = a[0]; + } + if (/webOS/.test(c)) { + g.mobile = "WebOS"; + a = c.match(/webOS\/([^\s]*);/); + if (a && a[1]) { + g.webos = e(a[1]); + } + } + if (/ Android/.test(c)) { + g.mobile = "Android"; + a = c.match(/Android ([^\s]*);/); + if (a && a[1]) { + g.android = e(a[1]); + } + } + } + a = c.match(/Chrome\/([^\s]*)/); + if (a && a[1]) { + g.chrome = e(a[1]); + } else { + a = c.match(/AdobeAIR\/([^\s]*)/); + if (a) { + g.air = a[0]; + } + } + } + if (!g.webkit) { + a = c.match(/Opera[\s\/]([^\s]*)/); + if (a && a[1]) { + g.opera = e(a[1]); + a = c.match(/Version\/([^\s]*)/); + if (a && a[1]) { + g.opera = e(a[1]); + } + a = c.match(/Opera Mini[^;]*/); + if (a) { + g.mobile = a[0]; + } + } else { + a = c.match(/MSIE\s([^;]*)/); + if (a && a[1]) { + g.ie = e(a[1]); + } else { + a = c.match(/Gecko\/([^\s]*)/); + if (a) { + g.gecko = 1; + a = c.match(/rv:([^\s\)]*)/); + if (a && a[1]) { + g.gecko = e(a[1]); + } + } + } + } + } + } + return g; +}; +YAHOO.env.ua = YAHOO.env.parseUA(); (function() { + YAHOO.namespace("util", "widget", "example"); + if ("undefined" !== typeof YAHOO_config) { + var b = YAHOO_config.listener, + a = YAHOO.env.listeners, + d = true, + c; + if (b) { + for (c = 0; c < a.length; c++) { + if (a[c] == b) { + d = false; + break; + } + } + if (d) { + a.push(b); + } + } + } +})(); +YAHOO.lang = YAHOO.lang || {}; (function() { + var f = YAHOO.lang, + a = Object.prototype, + c = "[object Array]", + h = "[object Function]", + i = "[object Object]", + b = [], + g = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "/": "/", + "`": "`" + }, + d = ["toString", "valueOf"], + e = { + isArray: function(j) { + return a.toString.apply(j) === c; + }, + isBoolean: function(j) { + return typeof j === "boolean"; + }, + isFunction: function(j) { + return (typeof j === "function") || a.toString.apply(j) === h; + }, + isNull: function(j) { + return j === null; + }, + isNumber: function(j) { + return typeof j === "number" && isFinite(j); + }, + isObject: function(j) { + return (j && (typeof j === "object" || f.isFunction(j))) || false; + }, + isString: function(j) { + return typeof j === "string"; + }, + isUndefined: function(j) { + return typeof j === "undefined"; + }, + _IEEnumFix: (YAHOO.env.ua.ie) ? + function(l, k) { + var j, n, m; + for (j = 0; j < d.length; j = j + 1) { + n = d[j]; + m = k[n]; + if (f.isFunction(m) && m != a[n]) { + l[n] = m; + } + } + }: function() {}, + escapeHTML: function(j) { + return j.replace(/[&<>"'\/`]/g, + function(k) { + return g[k]; + }); + }, + extend: function(m, n, l) { + if (!n || !m) { + throw new Error("extend failed, please check that " + "all dependencies are included."); + } + var k = function() {}, + j; + k.prototype = n.prototype; + m.prototype = new k(); + m.prototype.constructor = m; + m.superclass = n.prototype; + if (n.prototype.constructor == a.constructor) { + n.prototype.constructor = n; + } + if (l) { + for (j in l) { + if (f.hasOwnProperty(l, j)) { + m.prototype[j] = l[j]; + } + } + f._IEEnumFix(m.prototype, l); + } + }, + augmentObject: function(n, m) { + if (!m || !n) { + throw new Error("Absorb failed, verify dependencies."); + } + var j = arguments, + l, o, k = j[2]; + if (k && k !== true) { + for (l = 2; l < j.length; l = l + 1) { + n[j[l]] = m[j[l]]; + } + } else { + for (o in m) { + if (k || !(o in n)) { + n[o] = m[o]; + } + } + f._IEEnumFix(n, m); + } + return n; + }, + augmentProto: function(m, l) { + if (!l || !m) { + throw new Error("Augment failed, verify dependencies."); + } + var j = [m.prototype, l.prototype], + k; + for (k = 2; k < arguments.length; k = k + 1) { + j.push(arguments[k]); + } + f.augmentObject.apply(this, j); + return m; + }, + dump: function(j, p) { + var l, n, r = [], + t = "{...}", + k = "f(){...}", + q = ", ", + m = " => "; + if (!f.isObject(j)) { + return j + ""; + } else { + if (j instanceof Date || ("nodeType" in j && "tagName" in j)) { + return j; + } else { + if (f.isFunction(j)) { + return k; + } + } + } + p = (f.isNumber(p)) ? p: 3; + if (f.isArray(j)) { + r.push("["); + for (l = 0, n = j.length; l < n; l = l + 1) { + if (f.isObject(j[l])) { + r.push((p > 0) ? f.dump(j[l], p - 1) : t); + } else { + r.push(j[l]); + } + r.push(q); + } + if (r.length > 1) { + r.pop(); + } + r.push("]"); + } else { + r.push("{"); + for (l in j) { + if (f.hasOwnProperty(j, l)) { + r.push(l + m); + if (f.isObject(j[l])) { + r.push((p > 0) ? f.dump(j[l], p - 1) : t); + } else { + r.push(j[l]); + } + r.push(q); + } + } + if (r.length > 1) { + r.pop(); + } + r.push("}"); + } + return r.join(""); + }, + substitute: function(x, y, E, l) { + var D, C, B, G, t, u, F = [], + p, + z = x.length, + A = "dump", + r = " ", + q = "{", + m = "}", + n, + w; + for (;;) { + D = x.lastIndexOf(q, z); + if (D < 0) { + break; + } + C = x.indexOf(m, D); + if (D + 1 > C) { + break; + } + p = x.substring(D + 1, C); + G = p; + u = null; + B = G.indexOf(r); + if (B > -1) { + u = G.substring(B + 1); + G = G.substring(0, B); + } + t = y[G]; + if (E) { + t = E(G, t, u); + } + if (f.isObject(t)) { + if (f.isArray(t)) { + t = f.dump(t, parseInt(u, 10)); + } else { + u = u || ""; + n = u.indexOf(A); + if (n > -1) { + u = u.substring(4); + } + w = t.toString(); + if (w === i || n > -1) { + t = f.dump(t, parseInt(u, 10)); + } else { + t = w; + } + } + } else { + if (!f.isString(t) && !f.isNumber(t)) { + t = "~-" + F.length + "-~"; + F[F.length] = p; + } + } + x = x.substring(0, D) + t + x.substring(C + 1); + if (l === false) { + z = D - 1; + } + } + for (D = F.length - 1; D >= 0; D = D - 1) { + x = x.replace(new RegExp("~-" + D + "-~"), "{" + F[D] + "}", "g"); + } + return x; + }, + trim: function(j) { + try { + return j.replace(/^\s+|\s+$/g, ""); + } catch(k) { + return j; + } + }, + merge: function() { + var n = {}, + k = arguments, + j = k.length, + m; + for (m = 0; m < j; m = m + 1) { + f.augmentObject(n, k[m], true); + } + return n; + }, + later: function(t, k, u, n, p) { + t = t || 0; + k = k || {}; + var l = u, + s = n, + q, j; + if (f.isString(u)) { + l = k[u]; + } + if (!l) { + throw new TypeError("method undefined"); + } + if (!f.isUndefined(n) && !f.isArray(s)) { + s = [n]; + } + q = function() { + l.apply(k, s || b); + }; + j = (p) ? setInterval(q, t) : setTimeout(q, t); + return { + interval: p, + cancel: function() { + if (this.interval) { + clearInterval(j); + } else { + clearTimeout(j); + } + } + }; + }, + isValue: function(j) { + return (f.isObject(j) || f.isString(j) || f.isNumber(j) || f.isBoolean(j)); + } + }; + f.hasOwnProperty = (a.hasOwnProperty) ? + function(j, k) { + return j && j.hasOwnProperty && j.hasOwnProperty(k); + }: function(j, k) { + return ! f.isUndefined(j[k]) && j.constructor.prototype[k] !== j[k]; + }; + e.augmentObject(f, e, true); + YAHOO.util.Lang = f; + f.augment = f.augmentProto; + YAHOO.augment = f.augmentProto; + YAHOO.extend = f.extend; +})(); +YAHOO.register("yahoo", YAHOO, { + version: "2.9.0", + build: "2800" +}); + +var CryptoJS = CryptoJS || (function(e, g) { + var a = {}; + var b = a.lib = {}; + var j = b.Base = (function() { + function n() {} + return { + extend: function(p) { + n.prototype = this; + var o = new n(); + if (p) { + o.mixIn(p) + } + if (!o.hasOwnProperty("init")) { + o.init = function() { + o.$super.init.apply(this, arguments) + } + } + o.init.prototype = o; + o.$super = this; + return o + }, + create: function() { + var o = this.extend(); + o.init.apply(o, arguments); + return o + }, + init: function() {}, + mixIn: function(p) { + for (var o in p) { + if (p.hasOwnProperty(o)) { + this[o] = p[o] + } + } + if (p.hasOwnProperty("toString")) { + this.toString = p.toString + } + }, + clone: function() { + return this.init.prototype.extend(this) + } + } + } ()); + var l = b.WordArray = j.extend({ + init: function(o, n) { + o = this.words = o || []; + if (n != g) { + this.sigBytes = n + } else { + this.sigBytes = o.length * 4 + } + }, + toString: function(n) { + return (n || h).stringify(this) + }, + concat: function(t) { + var q = this.words; + var p = t.words; + var n = this.sigBytes; + var s = t.sigBytes; + this.clamp(); + if (n % 4) { + for (var r = 0; r < s; r++) { + var o = (p[r >>> 2] >>> (24 - (r % 4) * 8)) & 255; + q[(n + r) >>> 2] |= o << (24 - ((n + r) % 4) * 8) + } + } else { + for (var r = 0; r < s; r += 4) { + q[(n + r) >>> 2] = p[r >>> 2] + } + } + this.sigBytes += s; + return this + }, + clamp: function() { + var o = this.words; + var n = this.sigBytes; + o[n >>> 2] &= 4294967295 << (32 - (n % 4) * 8); + o.length = e.ceil(n / 4) + }, + clone: function() { + var n = j.clone.call(this); + n.words = this.words.slice(0); + return n + }, + random: function(p) { + var o = []; + for (var n = 0; n < p; n += 4) { + o.push((e.random() * 4294967296) | 0) + } + return new l.init(o, p) + } + }); + var m = a.enc = {}; + var h = m.Hex = { + stringify: function(p) { + var r = p.words; + var o = p.sigBytes; + var q = []; + for (var n = 0; n < o; n++) { + var s = (r[n >>> 2] >>> (24 - (n % 4) * 8)) & 255; + q.push((s >>> 4).toString(16)); + q.push((s & 15).toString(16)) + } + return q.join("") + }, + parse: function(p) { + var n = p.length; + var q = []; + for (var o = 0; o < n; o += 2) { + q[o >>> 3] |= parseInt(p.substr(o, 2), 16) << (24 - (o % 8) * 4) + } + return new l.init(q, n / 2) + } + }; + var d = m.Latin1 = { + stringify: function(q) { + var r = q.words; + var p = q.sigBytes; + var n = []; + for (var o = 0; o < p; o++) { + var s = (r[o >>> 2] >>> (24 - (o % 4) * 8)) & 255; + n.push(String.fromCharCode(s)) + } + return n.join("") + }, + parse: function(p) { + var n = p.length; + var q = []; + for (var o = 0; o < n; o++) { + q[o >>> 2] |= (p.charCodeAt(o) & 255) << (24 - (o % 4) * 8) + } + return new l.init(q, n) + } + }; + var c = m.Utf8 = { + stringify: function(n) { + try { + return decodeURIComponent(escape(d.stringify(n))) + } catch(o) { + throw new Error("Malformed UTF-8 data") + } + }, + parse: function(n) { + return d.parse(unescape(encodeURIComponent(n))) + } + }; + var i = b.BufferedBlockAlgorithm = j.extend({ + reset: function() { + this._data = new l.init(); + this._nDataBytes = 0 + }, + _append: function(n) { + if (typeof n == "string") { + n = c.parse(n) + } + this._data.concat(n); + this._nDataBytes += n.sigBytes + }, + _process: function(w) { + var q = this._data; + var x = q.words; + var n = q.sigBytes; + var t = this.blockSize; + var v = t * 4; + var u = n / v; + if (w) { + u = e.ceil(u) + } else { + u = e.max((u | 0) - this._minBufferSize, 0) + } + var s = u * t; + var r = e.min(s * 4, n); + if (s) { + for (var p = 0; p < s; p += t) { + this._doProcessBlock(x, p) + } + var o = x.splice(0, s); + q.sigBytes -= r + } + return new l.init(o, r) + }, + clone: function() { + var n = j.clone.call(this); + n._data = this._data.clone(); + return n + }, + _minBufferSize: 0 + }); + var f = b.Hasher = i.extend({ + cfg: j.extend(), + init: function(n) { + this.cfg = this.cfg.extend(n); + this.reset() + }, + reset: function() { + i.reset.call(this); + this._doReset() + }, + update: function(n) { + this._append(n); + this._process(); + return this + }, + finalize: function(n) { + if (n) { + this._append(n) + } + var o = this._doFinalize(); + return o + }, + blockSize: 512 / 32, + _createHelper: function(n) { + return function(p, o) { + return new n.init(o).finalize(p) + } + }, + _createHmacHelper: function(n) { + return function(p, o) { + return new k.HMAC.init(n, o).finalize(p) + } + } + }); + var k = a.algo = {}; + return a +} (Math)); + +(function(g) { + var a = CryptoJS, + f = a.lib, + e = f.Base, + h = f.WordArray, + a = a.x64 = {}; + a.Word = e.extend({ + init: function(b, c) { + this.high = b; + this.low = c + } + }); + a.WordArray = e.extend({ + init: function(b, c) { + b = this.words = b || []; + this.sigBytes = c != g ? c: 8 * b.length + }, + toX32: function() { + for (var b = this.words, + c = b.length, + a = [], d = 0; d < c; d++) { + var e = b[d]; + a.push(e.high); + a.push(e.low) + } + return h.create(a, this.sigBytes) + }, + clone: function() { + for (var b = e.clone.call(this), c = b.words = this.words.slice(0), a = c.length, d = 0; d < a; d++) c[d] = c[d].clone(); + return b + } + }) +})(); + +CryptoJS.lib.Cipher || +function(u) { + var g = CryptoJS, + f = g.lib, + k = f.Base, + l = f.WordArray, + q = f.BufferedBlockAlgorithm, + r = g.enc.Base64, + v = g.algo.EvpKDF, + n = f.Cipher = q.extend({ + cfg: k.extend(), + createEncryptor: function(a, b) { + return this.create(this._ENC_XFORM_MODE, a, b) + }, + createDecryptor: function(a, b) { + return this.create(this._DEC_XFORM_MODE, a, b) + }, + init: function(a, b, c) { + this.cfg = this.cfg.extend(c); + this._xformMode = a; + this._key = b; + this.reset() + }, + reset: function() { + q.reset.call(this); + this._doReset() + }, + process: function(a) { + this._append(a); + return this._process() + }, + finalize: function(a) { + a && this._append(a); + return this._doFinalize() + }, + keySize: 4, + ivSize: 4, + _ENC_XFORM_MODE: 1, + _DEC_XFORM_MODE: 2, + _createHelper: function(a) { + return { + encrypt: function(b, c, d) { + return ("string" == typeof c ? s: j).encrypt(a, b, c, d) + }, + decrypt: function(b, c, d) { + return ("string" == typeof c ? s: j).decrypt(a, b, c, d) + } + } + } + }); + f.StreamCipher = n.extend({ + _doFinalize: function() { + return this._process(!0) + }, + blockSize: 1 + }); + var m = g.mode = {}, + t = function(a, b, c) { + var d = this._iv; + d ? this._iv = u: d = this._prevBlock; + for (var e = 0; e < c; e++) a[b + e] ^= d[e] + }, + h = (f.BlockCipherMode = k.extend({ + createEncryptor: function(a, b) { + return this.Encryptor.create(a, b) + }, + createDecryptor: function(a, b) { + return this.Decryptor.create(a, b) + }, + init: function(a, b) { + this._cipher = a; + this._iv = b + } + })).extend(); + h.Encryptor = h.extend({ + processBlock: function(a, b) { + var c = this._cipher, + d = c.blockSize; + t.call(this, a, b, d); + c.encryptBlock(a, b); + this._prevBlock = a.slice(b, b + d) + } + }); + h.Decryptor = h.extend({ + processBlock: function(a, b) { + var c = this._cipher, + d = c.blockSize, + e = a.slice(b, b + d); + c.decryptBlock(a, b); + t.call(this, a, b, d); + this._prevBlock = e + } + }); + m = m.CBC = h; + h = (g.pad = {}).Pkcs7 = { + pad: function(a, b) { + for (var c = 4 * b, + c = c - a.sigBytes % c, + d = c << 24 | c << 16 | c << 8 | c, + e = [], f = 0; f < c; f += 4) e.push(d); + c = l.create(e, c); + a.concat(c) + }, + unpad: function(a) { + a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 + } + }; + f.BlockCipher = n.extend({ + cfg: n.cfg.extend({ + mode: m, + padding: h + }), + reset: function() { + n.reset.call(this); + var a = this.cfg, + b = a.iv, + a = a.mode; + if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; + else c = a.createDecryptor, + this._minBufferSize = 1; + this._mode = c.call(a, this, b && b.words) + }, + _doProcessBlock: function(a, b) { + this._mode.processBlock(a, b) + }, + _doFinalize: function() { + var a = this.cfg.padding; + if (this._xformMode == this._ENC_XFORM_MODE) { + a.pad(this._data, this.blockSize); + var b = this._process(!0) + } else b = this._process(!0), + a.unpad(b); + return b + }, + blockSize: 4 + }); + var p = f.CipherParams = k.extend({ + init: function(a) { + this.mixIn(a) + }, + toString: function(a) { + return (a || this.formatter).stringify(this) + } + }), + m = (g.format = {}).OpenSSL = { + stringify: function(a) { + var b = a.ciphertext; + a = a.salt; + return (a ? l.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r) + }, + parse: function(a) { + a = r.parse(a); + var b = a.words; + if (1398893684 == b[0] && 1701076831 == b[1]) { + var c = l.create(b.slice(2, 4)); + b.splice(0, 4); + a.sigBytes -= 16 + } + return p.create({ + ciphertext: a, + salt: c + }) + } + }, + j = f.SerializableCipher = k.extend({ + cfg: k.extend({ + format: m + }), + encrypt: function(a, b, c, d) { + d = this.cfg.extend(d); + var e = a.createEncryptor(c, d); + b = e.finalize(b); + e = e.cfg; + return p.create({ + ciphertext: b, + key: c, + iv: e.iv, + algorithm: a, + mode: e.mode, + padding: e.padding, + blockSize: a.blockSize, + formatter: d.format + }) + }, + decrypt: function(a, b, c, d) { + d = this.cfg.extend(d); + b = this._parse(b, d.format); + return a.createDecryptor(c, d).finalize(b.ciphertext) + }, + _parse: function(a, b) { + return "string" == typeof a ? b.parse(a, this) : a + } + }), + g = (g.kdf = {}).OpenSSL = { + execute: function(a, b, c, d) { + d || (d = l.random(8)); + a = v.create({ + keySize: b + c + }).compute(a, d); + c = l.create(a.words.slice(b), 4 * c); + a.sigBytes = 4 * b; + return p.create({ + key: a, + iv: c, + salt: d + }) + } + }, + s = f.PasswordBasedCipher = j.extend({ + cfg: j.cfg.extend({ + kdf: g + }), + encrypt: function(a, b, c, d) { + d = this.cfg.extend(d); + c = d.kdf.execute(c, a.keySize, a.ivSize); + d.iv = c.iv; + a = j.encrypt.call(this, a, b, c.key, d); + a.mixIn(c); + return a + }, + decrypt: function(a, b, c, d) { + d = this.cfg.extend(d); + b = this._parse(b, d.format); + c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt); + d.iv = c.iv; + return j.decrypt.call(this, a, b, c.key, d) + } + }) +} (); + +(function() { + for (var q = CryptoJS, + x = q.lib.BlockCipher, + r = q.algo, + j = [], y = [], z = [], A = [], B = [], C = [], s = [], u = [], v = [], w = [], g = [], k = 0; 256 > k; k++) g[k] = 128 > k ? k << 1 : k << 1 ^ 283; + for (var n = 0, + l = 0, + k = 0; 256 > k; k++) { + var f = l ^ l << 1 ^ l << 2 ^ l << 3 ^ l << 4, + f = f >>> 8 ^ f & 255 ^ 99; + j[n] = f; + y[f] = n; + var t = g[n], + D = g[t], + E = g[D], + b = 257 * g[f] ^ 16843008 * f; + z[n] = b << 24 | b >>> 8; + A[n] = b << 16 | b >>> 16; + B[n] = b << 8 | b >>> 24; + C[n] = b; + b = 16843009 * E ^ 65537 * D ^ 257 * t ^ 16843008 * n; + s[f] = b << 24 | b >>> 8; + u[f] = b << 16 | b >>> 16; + v[f] = b << 8 | b >>> 24; + w[f] = b; + n ? (n = t ^ g[g[g[E ^ t]]], l ^= g[g[l]]) : n = l = 1 + } + var F = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], + r = r.AES = x.extend({ + _doReset: function() { + for (var c = this._key, + e = c.words, + a = c.sigBytes / 4, + c = 4 * ((this._nRounds = a + 6) + 1), b = this._keySchedule = [], h = 0; h < c; h++) if (h < a) b[h] = e[h]; + else { + var d = b[h - 1]; + h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255], d ^= F[h / a | 0] << 24); + b[h] = b[h - a] ^ d + } + e = this._invKeySchedule = []; + for (a = 0; a < c; a++) h = c - a, + d = a % 4 ? b[h] : b[h - 4], + e[a] = 4 > a || 4 >= h ? d: s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]] + }, + encryptBlock: function(c, e) { + this._doCryptBlock(c, e, this._keySchedule, z, A, B, C, j) + }, + decryptBlock: function(c, e) { + var a = c[e + 1]; + c[e + 1] = c[e + 3]; + c[e + 3] = a; + this._doCryptBlock(c, e, this._invKeySchedule, s, u, v, w, y); + a = c[e + 1]; + c[e + 1] = c[e + 3]; + c[e + 3] = a + }, + _doCryptBlock: function(c, e, a, b, h, d, j, m) { + for (var n = this._nRounds, + f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++], + r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++], + s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++], + p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++], + f = q, + g = r, + k = s; + q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++]; + r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++]; + s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++]; + p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++]; + c[e] = q; + c[e + 1] = r; + c[e + 2] = s; + c[e + 3] = p + }, + keySize: 8 + }); + q.AES = x._createHelper(r) +})(); + +(function() { + function j(b, c) { + var a = (this._lBlock >>> b ^ this._rBlock) & c; + this._rBlock ^= a; + this._lBlock ^= a << b + } + function l(b, c) { + var a = (this._rBlock >>> b ^ this._lBlock) & c; + this._lBlock ^= a; + this._rBlock ^= a << b + } + var h = CryptoJS, + e = h.lib, + n = e.WordArray, + e = e.BlockCipher, + g = h.algo, + q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4], + p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32], + r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28], + s = [{ + "0": 8421888, + 268435456 : 32768, + 536870912 : 8421378, + 805306368 : 2, + 1073741824 : 512, + 1342177280 : 8421890, + 1610612736 : 8389122, + 1879048192 : 8388608, + 2147483648 : 514, + 2415919104 : 8389120, + 2684354560 : 33280, + 2952790016 : 8421376, + 3221225472 : 32770, + 3489660928 : 8388610, + 3758096384 : 0, + 4026531840 : 33282, + 134217728 : 0, + 402653184 : 8421890, + 671088640 : 33282, + 939524096 : 32768, + 1207959552 : 8421888, + 1476395008 : 512, + 1744830464 : 8421378, + 2013265920 : 2, + 2281701376 : 8389120, + 2550136832 : 33280, + 2818572288 : 8421376, + 3087007744 : 8389122, + 3355443200 : 8388610, + 3623878656 : 32770, + 3892314112 : 514, + 4160749568 : 8388608, + 1 : 32768, + 268435457 : 2, + 536870913 : 8421888, + 805306369 : 8388608, + 1073741825 : 8421378, + 1342177281 : 33280, + 1610612737 : 512, + 1879048193 : 8389122, + 2147483649 : 8421890, + 2415919105 : 8421376, + 2684354561 : 8388610, + 2952790017 : 33282, + 3221225473 : 514, + 3489660929 : 8389120, + 3758096385 : 32770, + 4026531841 : 0, + 134217729 : 8421890, + 402653185 : 8421376, + 671088641 : 8388608, + 939524097 : 512, + 1207959553 : 32768, + 1476395009 : 8388610, + 1744830465 : 2, + 2013265921 : 33282, + 2281701377 : 32770, + 2550136833 : 8389122, + 2818572289 : 514, + 3087007745 : 8421888, + 3355443201 : 8389120, + 3623878657 : 0, + 3892314113 : 33280, + 4160749569 : 8421378 + }, + { + "0": 1074282512, + 16777216 : 16384, + 33554432 : 524288, + 50331648 : 1074266128, + 67108864 : 1073741840, + 83886080 : 1074282496, + 100663296 : 1073758208, + 117440512 : 16, + 134217728 : 540672, + 150994944 : 1073758224, + 167772160 : 1073741824, + 184549376 : 540688, + 201326592 : 524304, + 218103808 : 0, + 234881024 : 16400, + 251658240 : 1074266112, + 8388608 : 1073758208, + 25165824 : 540688, + 41943040 : 16, + 58720256 : 1073758224, + 75497472 : 1074282512, + 92274688 : 1073741824, + 109051904 : 524288, + 125829120 : 1074266128, + 142606336 : 524304, + 159383552 : 0, + 176160768 : 16384, + 192937984 : 1074266112, + 209715200 : 1073741840, + 226492416 : 540672, + 243269632 : 1074282496, + 260046848 : 16400, + 268435456 : 0, + 285212672 : 1074266128, + 301989888 : 1073758224, + 318767104 : 1074282496, + 335544320 : 1074266112, + 352321536 : 16, + 369098752 : 540688, + 385875968 : 16384, + 402653184 : 16400, + 419430400 : 524288, + 436207616 : 524304, + 452984832 : 1073741840, + 469762048 : 540672, + 486539264 : 1073758208, + 503316480 : 1073741824, + 520093696 : 1074282512, + 276824064 : 540688, + 293601280 : 524288, + 310378496 : 1074266112, + 327155712 : 16384, + 343932928 : 1073758208, + 360710144 : 1074282512, + 377487360 : 16, + 394264576 : 1073741824, + 411041792 : 1074282496, + 427819008 : 1073741840, + 444596224 : 1073758224, + 461373440 : 524304, + 478150656 : 0, + 494927872 : 16400, + 511705088 : 1074266128, + 528482304 : 540672 + }, + { + "0": 260, + 1048576 : 0, + 2097152 : 67109120, + 3145728 : 65796, + 4194304 : 65540, + 5242880 : 67108868, + 6291456 : 67174660, + 7340032 : 67174400, + 8388608 : 67108864, + 9437184 : 67174656, + 10485760 : 65792, + 11534336 : 67174404, + 12582912 : 67109124, + 13631488 : 65536, + 14680064 : 4, + 15728640 : 256, + 524288 : 67174656, + 1572864 : 67174404, + 2621440 : 0, + 3670016 : 67109120, + 4718592 : 67108868, + 5767168 : 65536, + 6815744 : 65540, + 7864320 : 260, + 8912896 : 4, + 9961472 : 256, + 11010048 : 67174400, + 12058624 : 65796, + 13107200 : 65792, + 14155776 : 67109124, + 15204352 : 67174660, + 16252928 : 67108864, + 16777216 : 67174656, + 17825792 : 65540, + 18874368 : 65536, + 19922944 : 67109120, + 20971520 : 256, + 22020096 : 67174660, + 23068672 : 67108868, + 24117248 : 0, + 25165824 : 67109124, + 26214400 : 67108864, + 27262976 : 4, + 28311552 : 65792, + 29360128 : 67174400, + 30408704 : 260, + 31457280 : 65796, + 32505856 : 67174404, + 17301504 : 67108864, + 18350080 : 260, + 19398656 : 67174656, + 20447232 : 0, + 21495808 : 65540, + 22544384 : 67109120, + 23592960 : 256, + 24641536 : 67174404, + 25690112 : 65536, + 26738688 : 67174660, + 27787264 : 65796, + 28835840 : 67108868, + 29884416 : 67109124, + 30932992 : 67174400, + 31981568 : 4, + 33030144 : 65792 + }, + { + "0": 2151682048, + 65536 : 2147487808, + 131072 : 4198464, + 196608 : 2151677952, + 262144 : 0, + 327680 : 4198400, + 393216 : 2147483712, + 458752 : 4194368, + 524288 : 2147483648, + 589824 : 4194304, + 655360 : 64, + 720896 : 2147487744, + 786432 : 2151678016, + 851968 : 4160, + 917504 : 4096, + 983040 : 2151682112, + 32768 : 2147487808, + 98304 : 64, + 163840 : 2151678016, + 229376 : 2147487744, + 294912 : 4198400, + 360448 : 2151682112, + 425984 : 0, + 491520 : 2151677952, + 557056 : 4096, + 622592 : 2151682048, + 688128 : 4194304, + 753664 : 4160, + 819200 : 2147483648, + 884736 : 4194368, + 950272 : 4198464, + 1015808 : 2147483712, + 1048576 : 4194368, + 1114112 : 4198400, + 1179648 : 2147483712, + 1245184 : 0, + 1310720 : 4160, + 1376256 : 2151678016, + 1441792 : 2151682048, + 1507328 : 2147487808, + 1572864 : 2151682112, + 1638400 : 2147483648, + 1703936 : 2151677952, + 1769472 : 4198464, + 1835008 : 2147487744, + 1900544 : 4194304, + 1966080 : 64, + 2031616 : 4096, + 1081344 : 2151677952, + 1146880 : 2151682112, + 1212416 : 0, + 1277952 : 4198400, + 1343488 : 4194368, + 1409024 : 2147483648, + 1474560 : 2147487808, + 1540096 : 64, + 1605632 : 2147483712, + 1671168 : 4096, + 1736704 : 2147487744, + 1802240 : 2151678016, + 1867776 : 4160, + 1933312 : 2151682048, + 1998848 : 4194304, + 2064384 : 4198464 + }, + { + "0": 128, + 4096 : 17039360, + 8192 : 262144, + 12288 : 536870912, + 16384 : 537133184, + 20480 : 16777344, + 24576 : 553648256, + 28672 : 262272, + 32768 : 16777216, + 36864 : 537133056, + 40960 : 536871040, + 45056 : 553910400, + 49152 : 553910272, + 53248 : 0, + 57344 : 17039488, + 61440 : 553648128, + 2048 : 17039488, + 6144 : 553648256, + 10240 : 128, + 14336 : 17039360, + 18432 : 262144, + 22528 : 537133184, + 26624 : 553910272, + 30720 : 536870912, + 34816 : 537133056, + 38912 : 0, + 43008 : 553910400, + 47104 : 16777344, + 51200 : 536871040, + 55296 : 553648128, + 59392 : 16777216, + 63488 : 262272, + 65536 : 262144, + 69632 : 128, + 73728 : 536870912, + 77824 : 553648256, + 81920 : 16777344, + 86016 : 553910272, + 90112 : 537133184, + 94208 : 16777216, + 98304 : 553910400, + 102400 : 553648128, + 106496 : 17039360, + 110592 : 537133056, + 114688 : 262272, + 118784 : 536871040, + 122880 : 0, + 126976 : 17039488, + 67584 : 553648256, + 71680 : 16777216, + 75776 : 17039360, + 79872 : 537133184, + 83968 : 536870912, + 88064 : 17039488, + 92160 : 128, + 96256 : 553910272, + 100352 : 262272, + 104448 : 553910400, + 108544 : 0, + 112640 : 553648128, + 116736 : 16777344, + 120832 : 262144, + 124928 : 537133056, + 129024 : 536871040 + }, + { + "0": 268435464, + 256 : 8192, + 512 : 270532608, + 768 : 270540808, + 1024 : 268443648, + 1280 : 2097152, + 1536 : 2097160, + 1792 : 268435456, + 2048 : 0, + 2304 : 268443656, + 2560 : 2105344, + 2816 : 8, + 3072 : 270532616, + 3328 : 2105352, + 3584 : 8200, + 3840 : 270540800, + 128 : 270532608, + 384 : 270540808, + 640 : 8, + 896 : 2097152, + 1152 : 2105352, + 1408 : 268435464, + 1664 : 268443648, + 1920 : 8200, + 2176 : 2097160, + 2432 : 8192, + 2688 : 268443656, + 2944 : 270532616, + 3200 : 0, + 3456 : 270540800, + 3712 : 2105344, + 3968 : 268435456, + 4096 : 268443648, + 4352 : 270532616, + 4608 : 270540808, + 4864 : 8200, + 5120 : 2097152, + 5376 : 268435456, + 5632 : 268435464, + 5888 : 2105344, + 6144 : 2105352, + 6400 : 0, + 6656 : 8, + 6912 : 270532608, + 7168 : 8192, + 7424 : 268443656, + 7680 : 270540800, + 7936 : 2097160, + 4224 : 8, + 4480 : 2105344, + 4736 : 2097152, + 4992 : 268435464, + 5248 : 268443648, + 5504 : 8200, + 5760 : 270540808, + 6016 : 270532608, + 6272 : 270540800, + 6528 : 270532616, + 6784 : 8192, + 7040 : 2105352, + 7296 : 2097160, + 7552 : 0, + 7808 : 268435456, + 8064 : 268443656 + }, + { + "0": 1048576, + 16 : 33555457, + 32 : 1024, + 48 : 1049601, + 64 : 34604033, + 80 : 0, + 96 : 1, + 112 : 34603009, + 128 : 33555456, + 144 : 1048577, + 160 : 33554433, + 176 : 34604032, + 192 : 34603008, + 208 : 1025, + 224 : 1049600, + 240 : 33554432, + 8 : 34603009, + 24 : 0, + 40 : 33555457, + 56 : 34604032, + 72 : 1048576, + 88 : 33554433, + 104 : 33554432, + 120 : 1025, + 136 : 1049601, + 152 : 33555456, + 168 : 34603008, + 184 : 1048577, + 200 : 1024, + 216 : 34604033, + 232 : 1, + 248 : 1049600, + 256 : 33554432, + 272 : 1048576, + 288 : 33555457, + 304 : 34603009, + 320 : 1048577, + 336 : 33555456, + 352 : 34604032, + 368 : 1049601, + 384 : 1025, + 400 : 34604033, + 416 : 1049600, + 432 : 1, + 448 : 0, + 464 : 34603008, + 480 : 33554433, + 496 : 1024, + 264 : 1049600, + 280 : 33555457, + 296 : 34603009, + 312 : 1, + 328 : 33554432, + 344 : 1048576, + 360 : 1025, + 376 : 34604032, + 392 : 33554433, + 408 : 34603008, + 424 : 0, + 440 : 34604033, + 456 : 1049601, + 472 : 1024, + 488 : 33555456, + 504 : 1048577 + }, + { + "0": 134219808, + 1 : 131072, + 2 : 134217728, + 3 : 32, + 4 : 131104, + 5 : 134350880, + 6 : 134350848, + 7 : 2048, + 8 : 134348800, + 9 : 134219776, + 10 : 133120, + 11 : 134348832, + 12 : 2080, + 13 : 0, + 14 : 134217760, + 15 : 133152, + 2147483648 : 2048, + 2147483649 : 134350880, + 2147483650 : 134219808, + 2147483651 : 134217728, + 2147483652 : 134348800, + 2147483653 : 133120, + 2147483654 : 133152, + 2147483655 : 32, + 2147483656 : 134217760, + 2147483657 : 2080, + 2147483658 : 131104, + 2147483659 : 134350848, + 2147483660 : 0, + 2147483661 : 134348832, + 2147483662 : 134219776, + 2147483663 : 131072, + 16 : 133152, + 17 : 134350848, + 18 : 32, + 19 : 2048, + 20 : 134219776, + 21 : 134217760, + 22 : 134348832, + 23 : 131072, + 24 : 0, + 25 : 131104, + 26 : 134348800, + 27 : 134219808, + 28 : 134350880, + 29 : 133120, + 30 : 2080, + 31 : 134217728, + 2147483664 : 131072, + 2147483665 : 2048, + 2147483666 : 134348832, + 2147483667 : 133152, + 2147483668 : 32, + 2147483669 : 134348800, + 2147483670 : 134217728, + 2147483671 : 134219808, + 2147483672 : 134350880, + 2147483673 : 134217760, + 2147483674 : 134219776, + 2147483675 : 0, + 2147483676 : 133120, + 2147483677 : 2080, + 2147483678 : 131104, + 2147483679 : 134350848 + }], + t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679], + m = g.DES = e.extend({ + _doReset: function() { + for (var b = this._key.words, + c = [], a = 0; 56 > a; a++) { + var f = q[a] - 1; + c[a] = b[f >>> 5] >>> 31 - f % 32 & 1 + } + b = this._subKeys = []; + for (f = 0; 16 > f; f++) { + for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6, + d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6; + d[0] = d[0] << 1 | d[0] >>> 31; + for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3; + d[7] = d[7] << 5 | d[7] >>> 27 + } + c = this._invSubKeys = []; + for (a = 0; 16 > a; a++) c[a] = b[15 - a] + }, + encryptBlock: function(b, c) { + this._doCryptBlock(b, c, this._subKeys) + }, + decryptBlock: function(b, c) { + this._doCryptBlock(b, c, this._invSubKeys) + }, + _doCryptBlock: function(b, c, a) { + this._lBlock = b[c]; + this._rBlock = b[c + 1]; + j.call(this, 4, 252645135); + j.call(this, 16, 65535); + l.call(this, 2, 858993459); + l.call(this, 8, 16711935); + j.call(this, 1, 1431655765); + for (var f = 0; 16 > f; f++) { + for (var d = a[f], e = this._lBlock, h = this._rBlock, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0]; + this._lBlock = h; + this._rBlock = e ^ g + } + a = this._lBlock; + this._lBlock = this._rBlock; + this._rBlock = a; + j.call(this, 1, 1431655765); + l.call(this, 8, 16711935); + l.call(this, 2, 858993459); + j.call(this, 16, 65535); + j.call(this, 4, 252645135); + b[c] = this._lBlock; + b[c + 1] = this._rBlock + }, + keySize: 2, + ivSize: 2, + blockSize: 2 + }); + h.DES = e._createHelper(m); + g = g.TripleDES = e.extend({ + _doReset: function() { + var b = this._key.words; + this._des1 = m.createEncryptor(n.create(b.slice(0, 2))); + this._des2 = m.createEncryptor(n.create(b.slice(2, 4))); + this._des3 = m.createEncryptor(n.create(b.slice(4, 6))) + }, + encryptBlock: function(b, c) { + this._des1.encryptBlock(b, c); + this._des2.decryptBlock(b, c); + this._des3.encryptBlock(b, c) + }, + decryptBlock: function(b, c) { + this._des3.decryptBlock(b, c); + this._des2.encryptBlock(b, c); + this._des1.decryptBlock(b, c) + }, + keySize: 6, + ivSize: 2, + blockSize: 2 + }); + h.TripleDES = e._createHelper(g) +})(); + +(function() { + var h = CryptoJS, + j = h.lib.WordArray; + h.enc.Base64 = { + stringify: function(b) { + var e = b.words, + f = b.sigBytes, + c = this._map; + b.clamp(); + b = []; + for (var a = 0; a < f; a += 3) for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63)); + if (e = c.charAt(64)) for (; b.length % 4;) b.push(e); + return b.join("") + }, + parse: function(b) { + var e = b.length, + f = this._map, + c = f.charAt(64); + c && (c = b.indexOf(c), -1 != c && (e = c)); + for (var c = [], a = 0, d = 0; d < e; d++) if (d % 4) { + var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4), + h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4); + c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4); + a++ + } + return j.create(c, a) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } +})(); + +(function(E) { + function h(a, f, g, j, p, h, k) { + a = a + (f & g | ~f & j) + p + k; + return (a << h | a >>> 32 - h) + f + } + function k(a, f, g, j, p, h, k) { + a = a + (f & j | g & ~j) + p + k; + return (a << h | a >>> 32 - h) + f + } + function l(a, f, g, j, h, k, l) { + a = a + (f ^ g ^ j) + h + l; + return (a << k | a >>> 32 - k) + f + } + function n(a, f, g, j, h, k, l) { + a = a + (g ^ (f | ~j)) + h + l; + return (a << k | a >>> 32 - k) + f + } + for (var r = CryptoJS, + q = r.lib, + F = q.WordArray, + s = q.Hasher, + q = r.algo, + a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0; + q = q.MD5 = s.extend({ + _doReset: function() { + this._hash = new F.init([1732584193, 4023233417, 2562383102, 271733878]) + }, + _doProcessBlock: function(m, f) { + for (var g = 0; 16 > g; g++) { + var j = f + g, + p = m[j]; + m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360 + } + var g = this._hash.words, + j = m[f + 0], + p = m[f + 1], + q = m[f + 2], + r = m[f + 3], + s = m[f + 4], + t = m[f + 5], + u = m[f + 6], + v = m[f + 7], + w = m[f + 8], + x = m[f + 9], + y = m[f + 10], + z = m[f + 11], + A = m[f + 12], + B = m[f + 13], + C = m[f + 14], + D = m[f + 15], + b = g[0], + c = g[1], + d = g[2], + e = g[3], + b = h(b, c, d, e, j, 7, a[0]), + e = h(e, b, c, d, p, 12, a[1]), + d = h(d, e, b, c, q, 17, a[2]), + c = h(c, d, e, b, r, 22, a[3]), + b = h(b, c, d, e, s, 7, a[4]), + e = h(e, b, c, d, t, 12, a[5]), + d = h(d, e, b, c, u, 17, a[6]), + c = h(c, d, e, b, v, 22, a[7]), + b = h(b, c, d, e, w, 7, a[8]), + e = h(e, b, c, d, x, 12, a[9]), + d = h(d, e, b, c, y, 17, a[10]), + c = h(c, d, e, b, z, 22, a[11]), + b = h(b, c, d, e, A, 7, a[12]), + e = h(e, b, c, d, B, 12, a[13]), + d = h(d, e, b, c, C, 17, a[14]), + c = h(c, d, e, b, D, 22, a[15]), + b = k(b, c, d, e, p, 5, a[16]), + e = k(e, b, c, d, u, 9, a[17]), + d = k(d, e, b, c, z, 14, a[18]), + c = k(c, d, e, b, j, 20, a[19]), + b = k(b, c, d, e, t, 5, a[20]), + e = k(e, b, c, d, y, 9, a[21]), + d = k(d, e, b, c, D, 14, a[22]), + c = k(c, d, e, b, s, 20, a[23]), + b = k(b, c, d, e, x, 5, a[24]), + e = k(e, b, c, d, C, 9, a[25]), + d = k(d, e, b, c, r, 14, a[26]), + c = k(c, d, e, b, w, 20, a[27]), + b = k(b, c, d, e, B, 5, a[28]), + e = k(e, b, c, d, q, 9, a[29]), + d = k(d, e, b, c, v, 14, a[30]), + c = k(c, d, e, b, A, 20, a[31]), + b = l(b, c, d, e, t, 4, a[32]), + e = l(e, b, c, d, w, 11, a[33]), + d = l(d, e, b, c, z, 16, a[34]), + c = l(c, d, e, b, C, 23, a[35]), + b = l(b, c, d, e, p, 4, a[36]), + e = l(e, b, c, d, s, 11, a[37]), + d = l(d, e, b, c, v, 16, a[38]), + c = l(c, d, e, b, y, 23, a[39]), + b = l(b, c, d, e, B, 4, a[40]), + e = l(e, b, c, d, j, 11, a[41]), + d = l(d, e, b, c, r, 16, a[42]), + c = l(c, d, e, b, u, 23, a[43]), + b = l(b, c, d, e, x, 4, a[44]), + e = l(e, b, c, d, A, 11, a[45]), + d = l(d, e, b, c, D, 16, a[46]), + c = l(c, d, e, b, q, 23, a[47]), + b = n(b, c, d, e, j, 6, a[48]), + e = n(e, b, c, d, v, 10, a[49]), + d = n(d, e, b, c, C, 15, a[50]), + c = n(c, d, e, b, t, 21, a[51]), + b = n(b, c, d, e, A, 6, a[52]), + e = n(e, b, c, d, r, 10, a[53]), + d = n(d, e, b, c, y, 15, a[54]), + c = n(c, d, e, b, p, 21, a[55]), + b = n(b, c, d, e, w, 6, a[56]), + e = n(e, b, c, d, D, 10, a[57]), + d = n(d, e, b, c, u, 15, a[58]), + c = n(c, d, e, b, B, 21, a[59]), + b = n(b, c, d, e, s, 6, a[60]), + e = n(e, b, c, d, z, 10, a[61]), + d = n(d, e, b, c, q, 15, a[62]), + c = n(c, d, e, b, x, 21, a[63]); + g[0] = g[0] + b | 0; + g[1] = g[1] + c | 0; + g[2] = g[2] + d | 0; + g[3] = g[3] + e | 0 + }, + _doFinalize: function() { + var a = this._data, + f = a.words, + g = 8 * this._nDataBytes, + j = 8 * a.sigBytes; + f[j >>> 5] |= 128 << 24 - j % 32; + var h = E.floor(g / 4294967296); + f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360; + f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360; + a.sigBytes = 4 * (f.length + 1); + this._process(); + a = this._hash; + f = a.words; + for (g = 0; 4 > g; g++) j = f[g], + f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360; + return a + }, + clone: function() { + var a = s.clone.call(this); + a._hash = this._hash.clone(); + return a + } + }); + r.MD5 = s._createHelper(q); + r.HmacMD5 = s._createHmacHelper(q) +})(Math); + +(function() { + var k = CryptoJS, + b = k.lib, + m = b.WordArray, + l = b.Hasher, + d = [], + b = k.algo.SHA1 = l.extend({ + _doReset: function() { + this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, + _doProcessBlock: function(n, p) { + for (var a = this._hash.words, + e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) { + if (16 > c) d[c] = n[p + c] | 0; + else { + var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16]; + d[c] = g << 1 | g >>> 31 + } + g = (e << 5 | e >>> 27) + b + d[c]; + g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514); + b = j; + j = h; + h = f << 30 | f >>> 2; + f = e; + e = g + } + a[0] = a[0] + e | 0; + a[1] = a[1] + f | 0; + a[2] = a[2] + h | 0; + a[3] = a[3] + j | 0; + a[4] = a[4] + b | 0 + }, + _doFinalize: function() { + var b = this._data, + d = b.words, + a = 8 * this._nDataBytes, + e = 8 * b.sigBytes; + d[e >>> 5] |= 128 << 24 - e % 32; + d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296); + d[(e + 64 >>> 9 << 4) + 15] = a; + b.sigBytes = 4 * d.length; + this._process(); + return this._hash + }, + clone: function() { + var b = l.clone.call(this); + b._hash = this._hash.clone(); + return b + } + }); + k.SHA1 = l._createHelper(b); + k.HmacSHA1 = l._createHmacHelper(b) +})(); + +(function(k) { + for (var g = CryptoJS, + h = g.lib, + v = h.WordArray, + j = h.Hasher, + h = g.algo, + s = [], t = [], u = function(q) { + return 4294967296 * (q - (q | 0)) | 0 + }, + l = 2, b = 0; 64 > b;) { + var d; + a: { + d = l; + for (var w = k.sqrt(d), r = 2; r <= w; r++) if (! (d % r)) { + d = !1; + break a + } + d = !0 + } + d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++); + l++ + } + var n = [], + h = h.SHA256 = j.extend({ + _doReset: function() { + this._hash = new v.init(s.slice(0)) + }, + _doProcessBlock: function(q, h) { + for (var a = this._hash.words, + c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) { + if (16 > e) n[e] = q[h + e] | 0; + else { + var m = n[e - 15], + p = n[e - 2]; + n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16] + } + m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e]; + p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b); + l = j; + j = g; + g = f; + f = k + m | 0; + k = b; + b = d; + d = c; + c = m + p | 0 + } + a[0] = a[0] + c | 0; + a[1] = a[1] + d | 0; + a[2] = a[2] + b | 0; + a[3] = a[3] + k | 0; + a[4] = a[4] + f | 0; + a[5] = a[5] + g | 0; + a[6] = a[6] + j | 0; + a[7] = a[7] + l | 0 + }, + _doFinalize: function() { + var d = this._data, + b = d.words, + a = 8 * this._nDataBytes, + c = 8 * d.sigBytes; + b[c >>> 5] |= 128 << 24 - c % 32; + b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296); + b[(c + 64 >>> 9 << 4) + 15] = a; + d.sigBytes = 4 * b.length; + this._process(); + return this._hash + }, + clone: function() { + var b = j.clone.call(this); + b._hash = this._hash.clone(); + return b + } + }); + g.SHA256 = j._createHelper(h); + g.HmacSHA256 = j._createHmacHelper(h) +})(Math); + +(function() { + var b = CryptoJS, + d = b.lib.WordArray, + a = b.algo, + c = a.SHA256, + a = a.SHA224 = c.extend({ + _doReset: function() { + this._hash = new d.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]) + }, + _doFinalize: function() { + var a = c._doFinalize.call(this); + a.sigBytes -= 4; + return a + } + }); + b.SHA224 = c._createHelper(a); + b.HmacSHA224 = c._createHmacHelper(a) +})(); + +(function() { + function a() { + return d.create.apply(d, arguments) + } + for (var n = CryptoJS, + r = n.lib.Hasher, + e = n.x64, + d = e.Word, + T = e.WordArray, + e = n.algo, + ea = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], v = [], w = 0; 80 > w; w++) v[w] = a(); + e = e.SHA512 = r.extend({ + _doReset: function() { + this._hash = new T.init([new d.init(1779033703, 4089235720), new d.init(3144134277, 2227873595), new d.init(1013904242, 4271175723), new d.init(2773480762, 1595750129), new d.init(1359893119, 2917565137), new d.init(2600822924, 725511199), new d.init(528734635, 4215389547), new d.init(1541459225, 327033209)]) + }, + _doProcessBlock: function(a, d) { + for (var f = this._hash.words, + F = f[0], e = f[1], n = f[2], r = f[3], G = f[4], H = f[5], I = f[6], f = f[7], w = F.high, J = F.low, X = e.high, K = e.low, Y = n.high, L = n.low, Z = r.high, M = r.low, $ = G.high, N = G.low, aa = H.high, O = H.low, ba = I.high, P = I.low, ca = f.high, Q = f.low, k = w, g = J, z = X, x = K, A = Y, y = L, U = Z, B = M, l = $, h = N, R = aa, C = O, S = ba, D = P, V = ca, E = Q, m = 0; 80 > m; m++) { + var s = v[m]; + if (16 > m) var j = s.high = a[d + 2 * m] | 0, + b = s.low = a[d + 2 * m + 1] | 0; + else { + var j = v[m - 15], + b = j.high, + p = j.low, + j = (b >>> 1 | p << 31) ^ (b >>> 8 | p << 24) ^ b >>> 7, + p = (p >>> 1 | b << 31) ^ (p >>> 8 | b << 24) ^ (p >>> 7 | b << 25), + u = v[m - 2], + b = u.high, + c = u.low, + u = (b >>> 19 | c << 13) ^ (b << 3 | c >>> 29) ^ b >>> 6, + c = (c >>> 19 | b << 13) ^ (c << 3 | b >>> 29) ^ (c >>> 6 | b << 26), + b = v[m - 7], + W = b.high, + t = v[m - 16], + q = t.high, + t = t.low, + b = p + b.low, + j = j + W + (b >>> 0 < p >>> 0 ? 1 : 0), + b = b + c, + j = j + u + (b >>> 0 < c >>> 0 ? 1 : 0), + b = b + t, + j = j + q + (b >>> 0 < t >>> 0 ? 1 : 0); + s.high = j; + s.low = b + } + var W = l & R ^ ~l & S, + t = h & C ^ ~h & D, + s = k & z ^ k & A ^ z & A, + T = g & x ^ g & y ^ x & y, + p = (k >>> 28 | g << 4) ^ (k << 30 | g >>> 2) ^ (k << 25 | g >>> 7), + u = (g >>> 28 | k << 4) ^ (g << 30 | k >>> 2) ^ (g << 25 | k >>> 7), + c = ea[m], + fa = c.high, + da = c.low, + c = E + ((h >>> 14 | l << 18) ^ (h >>> 18 | l << 14) ^ (h << 23 | l >>> 9)), + q = V + ((l >>> 14 | h << 18) ^ (l >>> 18 | h << 14) ^ (l << 23 | h >>> 9)) + (c >>> 0 < E >>> 0 ? 1 : 0), + c = c + t, + q = q + W + (c >>> 0 < t >>> 0 ? 1 : 0), + c = c + da, + q = q + fa + (c >>> 0 < da >>> 0 ? 1 : 0), + c = c + b, + q = q + j + (c >>> 0 < b >>> 0 ? 1 : 0), + b = u + T, + s = p + s + (b >>> 0 < u >>> 0 ? 1 : 0), + V = S, + E = D, + S = R, + D = C, + R = l, + C = h, + h = B + c | 0, + l = U + q + (h >>> 0 < B >>> 0 ? 1 : 0) | 0, + U = A, + B = y, + A = z, + y = x, + z = k, + x = g, + g = c + b | 0, + k = q + s + (g >>> 0 < c >>> 0 ? 1 : 0) | 0 + } + J = F.low = J + g; + F.high = w + k + (J >>> 0 < g >>> 0 ? 1 : 0); + K = e.low = K + x; + e.high = X + z + (K >>> 0 < x >>> 0 ? 1 : 0); + L = n.low = L + y; + n.high = Y + A + (L >>> 0 < y >>> 0 ? 1 : 0); + M = r.low = M + B; + r.high = Z + U + (M >>> 0 < B >>> 0 ? 1 : 0); + N = G.low = N + h; + G.high = $ + l + (N >>> 0 < h >>> 0 ? 1 : 0); + O = H.low = O + C; + H.high = aa + R + (O >>> 0 < C >>> 0 ? 1 : 0); + P = I.low = P + D; + I.high = ba + S + (P >>> 0 < D >>> 0 ? 1 : 0); + Q = f.low = Q + E; + f.high = ca + V + (Q >>> 0 < E >>> 0 ? 1 : 0) + }, + _doFinalize: function() { + var a = this._data, + d = a.words, + f = 8 * this._nDataBytes, + e = 8 * a.sigBytes; + d[e >>> 5] |= 128 << 24 - e % 32; + d[(e + 128 >>> 10 << 5) + 30] = Math.floor(f / 4294967296); + d[(e + 128 >>> 10 << 5) + 31] = f; + a.sigBytes = 4 * d.length; + this._process(); + return this._hash.toX32() + }, + clone: function() { + var a = r.clone.call(this); + a._hash = this._hash.clone(); + return a + }, + blockSize: 32 + }); + n.SHA512 = r._createHelper(e); + n.HmacSHA512 = r._createHmacHelper(e) +})(); + +(function() { + var c = CryptoJS, + a = c.x64, + b = a.Word, + e = a.WordArray, + a = c.algo, + d = a.SHA512, + a = a.SHA384 = d.extend({ + _doReset: function() { + this._hash = new e.init([new b.init(3418070365, 3238371032), new b.init(1654270250, 914150663), new b.init(2438529370, 812702999), new b.init(355462360, 4144912697), new b.init(1731405415, 4290775857), new b.init(2394180231, 1750603025), new b.init(3675008525, 1694076839), new b.init(1203062813, 3204075428)]) + }, + _doFinalize: function() { + var a = d._doFinalize.call(this); + a.sigBytes -= 16; + return a + } + }); + c.SHA384 = d._createHelper(a); + c.HmacSHA384 = d._createHmacHelper(a) +})(); + +(function() { + var q = CryptoJS, + d = q.lib, + n = d.WordArray, + p = d.Hasher, + d = q.algo, + x = n.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]), + y = n.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]), + z = n.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]), + A = n.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]), + B = n.create([0, 1518500249, 1859775393, 2400959708, 2840853838]), + C = n.create([1352829926, 1548603684, 1836072691, 2053994217, 0]), + d = d.RIPEMD160 = p.extend({ + _doReset: function() { + this._hash = n.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, + _doProcessBlock: function(e, v) { + for (var b = 0; 16 > b; b++) { + var c = v + b, + f = e[c]; + e[c] = (f << 8 | f >>> 24) & 16711935 | (f << 24 | f >>> 8) & 4278255360 + } + var c = this._hash.words, + f = B.words, + d = C.words, + n = x.words, + q = y.words, + p = z.words, + w = A.words, + t, g, h, j, r, u, k, l, m, s; + u = t = c[0]; + k = g = c[1]; + l = h = c[2]; + m = j = c[3]; + s = r = c[4]; + for (var a, b = 0; 80 > b; b += 1) a = t + e[v + n[b]] | 0, + a = 16 > b ? a + ((g ^ h ^ j) + f[0]) : 32 > b ? a + ((g & h | ~g & j) + f[1]) : 48 > b ? a + (((g | ~h) ^ j) + f[2]) : 64 > b ? a + ((g & j | h & ~j) + f[3]) : a + ((g ^ (h | ~j)) + f[4]), + a |= 0, + a = a << p[b] | a >>> 32 - p[b], + a = a + r | 0, + t = r, + r = j, + j = h << 10 | h >>> 22, + h = g, + g = a, + a = u + e[v + q[b]] | 0, + a = 16 > b ? a + ((k ^ (l | ~m)) + d[0]) : 32 > b ? a + ((k & m | l & ~m) + d[1]) : 48 > b ? a + (((k | ~l) ^ m) + d[2]) : 64 > b ? a + ((k & l | ~k & m) + d[3]) : a + ((k ^ l ^ m) + d[4]), + a |= 0, + a = a << w[b] | a >>> 32 - w[b], + a = a + s | 0, + u = s, + s = m, + m = l << 10 | l >>> 22, + l = k, + k = a; + a = c[1] + h + m | 0; + c[1] = c[2] + j + s | 0; + c[2] = c[3] + r + u | 0; + c[3] = c[4] + t + k | 0; + c[4] = c[0] + g + l | 0; + c[0] = a + }, + _doFinalize: function() { + var e = this._data, + d = e.words, + b = 8 * this._nDataBytes, + c = 8 * e.sigBytes; + d[c >>> 5] |= 128 << 24 - c % 32; + d[(c + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360; + e.sigBytes = 4 * (d.length + 1); + this._process(); + e = this._hash; + d = e.words; + for (b = 0; 5 > b; b++) c = d[b], + d[b] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360; + return e + }, + clone: function() { + var d = p.clone.call(this); + d._hash = this._hash.clone(); + return d + } + }); + q.RIPEMD160 = p._createHelper(d); + q.HmacRIPEMD160 = p._createHmacHelper(d) +})(Math); + +/* +CryptoJS v3.1.2 hmac.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function() { + var c = CryptoJS, + k = c.enc.Utf8; + c.algo.HMAC = c.lib.Base.extend({ + init: function(a, b) { + a = this._hasher = new a.init; + "string" == typeof b && (b = k.parse(b)); + var c = a.blockSize, + e = 4 * c; + b.sigBytes > e && (b = a.finalize(b)); + b.clamp(); + for (var f = this._oKey = b.clone(), g = this._iKey = b.clone(), h = f.words, j = g.words, d = 0; d < c; d++) h[d] ^= 1549556828, + j[d] ^= 909522486; + f.sigBytes = g.sigBytes = e; + this.reset() + }, + reset: function() { + var a = this._hasher; + a.reset(); + a.update(this._iKey) + }, + update: function(a) { + this._hasher.update(a); + return this + }, + finalize: function(a) { + var b = this._hasher; + a = b.finalize(a); + b.reset(); + return b.finalize(this._oKey.clone().concat(a)) + } + }) +})(); + +/* +CryptoJS v3.1.2 pbkdf2-min.js +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function() { + var b = CryptoJS, + a = b.lib, + d = a.Base, + m = a.WordArray, + a = b.algo, + q = a.HMAC, + l = a.PBKDF2 = d.extend({ + cfg: d.extend({ + keySize: 4, + hasher: a.SHA1, + iterations: 1 + }), + init: function(a) { + this.cfg = this.cfg.extend(a) + }, + compute: function(a, b) { + for (var c = this.cfg, + f = q.create(c.hasher, a), g = m.create(), d = m.create([1]), l = g.words, r = d.words, n = c.keySize, c = c.iterations; l.length < n;) { + var h = f.update(b).finalize(d); + f.reset(); + for (var j = h.words, + s = j.length, + k = h, + p = 1; p < c; p++) { + k = f.finalize(k); + f.reset(); + for (var t = k.words, + e = 0; e < s; e++) j[e] ^= t[e] + } + g.concat(h); + r[0]++ + } + g.sigBytes = 4 * n; + return g + } + }); + b.PBKDF2 = function(a, b, c) { + return l.create(c).compute(a, b) + } +})(); + +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var b64pad = "="; +function hex2b64(d) { + var b; + var e; + var a = ""; + for (b = 0; b + 3 <= d.length; b += 3) { + e = parseInt(d.substring(b, b + 3), 16); + a += b64map.charAt(e >> 6) + b64map.charAt(e & 63) + } + if (b + 1 == d.length) { + e = parseInt(d.substring(b, b + 1), 16); + a += b64map.charAt(e << 2) + } else { + if (b + 2 == d.length) { + e = parseInt(d.substring(b, b + 2), 16); + a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4) + } + } + if (b64pad) { + while ((a.length & 3) > 0) { + a += b64pad + } + } + return a +} +function b64tohex(f) { + var d = ""; + var e; + var b = 0; + var c; + var a; + for (e = 0; e < f.length; ++e) { + if (f.charAt(e) == b64pad) { + break + } + a = b64map.indexOf(f.charAt(e)); + if (a < 0) { + continue + } + if (b == 0) { + d += int2char(a >> 2); + c = a & 3; + b = 1 + } else { + if (b == 1) { + d += int2char((c << 2) | (a >> 4)); + c = a & 15; + b = 2 + } else { + if (b == 2) { + d += int2char(c); + d += int2char(a >> 2); + c = a & 3; + b = 3 + } else { + d += int2char((c << 2) | (a >> 4)); + d += int2char(a & 15); + b = 0 + } + } + } + } + if (b == 1) { + d += int2char(c << 2) + } + return d +} +function b64toBA(e) { + var d = b64tohex(e); + var c; + var b = new Array(); + for (c = 0; 2 * c < d.length; ++c) { + b[c] = parseInt(d.substring(2 * c, 2 * c + 2), 16) + } + return b +}; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +var dbits; +var canary = 244837814094590; +var j_lm = ((canary & 16777215) == 15715070); +function BigInteger(e, d, f) { + if (e != null) { + if ("number" == typeof e) { + this.fromNumber(e, d, f) + } else { + if (d == null && "string" != typeof e) { + this.fromString(e, 256) + } else { + this.fromString(e, d) + } + } + } +} +function nbi() { + return new BigInteger(null) +} +function am1(f, a, b, e, h, g) { + while (--g >= 0) { + var d = a * this[f++] + b[e] + h; + h = Math.floor(d / 67108864); + b[e++] = d & 67108863 + } + return h +} +function am2(f, q, r, e, o, a) { + var k = q & 32767, + p = q >> 15; + while (--a >= 0) { + var d = this[f] & 32767; + var g = this[f++] >> 15; + var b = p * d + g * k; + d = k * d + ((b & 32767) << 15) + r[e] + (o & 1073741823); + o = (d >>> 30) + (b >>> 15) + p * g + (o >>> 30); + r[e++] = d & 1073741823 + } + return o +} +function am3(f, q, r, e, o, a) { + var k = q & 16383, + p = q >> 14; + while (--a >= 0) { + var d = this[f] & 16383; + var g = this[f++] >> 14; + var b = p * d + g * k; + d = k * d + ((b & 16383) << 14) + r[e] + o; + o = (d >> 28) + (b >> 14) + p * g; + r[e++] = d & 268435455 + } + return o +} +if (j_lm && (navigator2.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30 +} else { + if (j_lm && (navigator2.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26 + } else { + BigInteger.prototype.am = am3; + dbits = 28 + } +} +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1 << dbits) - 1); +BigInteger.prototype.DV = (1 << dbits); +var BI_FP = 52; +BigInteger.prototype.FV = Math.pow(2, BI_FP); +BigInteger.prototype.F1 = BI_FP - dbits; +BigInteger.prototype.F2 = 2 * dbits - BI_FP; +var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; +var BI_RC = new Array(); +var rr, vv; +rr = "0".charCodeAt(0); +for (vv = 0; vv <= 9; ++vv) { + BI_RC[rr++] = vv +} +rr = "a".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) { + BI_RC[rr++] = vv +} +rr = "A".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) { + BI_RC[rr++] = vv +} +function int2char(a) { + return BI_RM.charAt(a) +} +function intAt(b, a) { + var d = BI_RC[b.charCodeAt(a)]; + return (d == null) ? -1 : d +} +function bnpCopyTo(b) { + for (var a = this.t - 1; a >= 0; --a) { + b[a] = this[a] + } + b.t = this.t; + b.s = this.s +} +function bnpFromInt(a) { + this.t = 1; + this.s = (a < 0) ? -1 : 0; + if (a > 0) { + this[0] = a + } else { + if (a < -1) { + this[0] = a + this.DV + } else { + this.t = 0 + } + } +} +function nbv(a) { + var b = nbi(); + b.fromInt(a); + return b +} +function bnpFromString(h, c) { + var e; + if (c == 16) { + e = 4 + } else { + if (c == 8) { + e = 3 + } else { + if (c == 256) { + e = 8 + } else { + if (c == 2) { + e = 1 + } else { + if (c == 32) { + e = 5 + } else { + if (c == 4) { + e = 2 + } else { + this.fromRadix(h, c); + return + } + } + } + } + } + } + this.t = 0; + this.s = 0; + var g = h.length, + d = false, + f = 0; + while (--g >= 0) { + var a = (e == 8) ? h[g] & 255 : intAt(h, g); + if (a < 0) { + if (h.charAt(g) == "-") { + d = true + } + continue + } + d = false; + if (f == 0) { + this[this.t++] = a + } else { + if (f + e > this.DB) { + this[this.t - 1] |= (a & ((1 << (this.DB - f)) - 1)) << f; + this[this.t++] = (a >> (this.DB - f)) + } else { + this[this.t - 1] |= a << f + } + } + f += e; + if (f >= this.DB) { + f -= this.DB + } + } + if (e == 8 && (h[0] & 128) != 0) { + this.s = -1; + if (f > 0) { + this[this.t - 1] |= ((1 << (this.DB - f)) - 1) << f + } + } + this.clamp(); + if (d) { + BigInteger.ZERO.subTo(this, this) + } +} +function bnpClamp() { + var a = this.s & this.DM; + while (this.t > 0 && this[this.t - 1] == a) {--this.t + } +} +function bnToString(c) { + if (this.s < 0) { + return "-" + this.negate().toString(c) + } + var e; + if (c == 16) { + e = 4 + } else { + if (c == 8) { + e = 3 + } else { + if (c == 2) { + e = 1 + } else { + if (c == 32) { + e = 5 + } else { + if (c == 4) { + e = 2 + } else { + return this.toRadix(c) + } + } + } + } + } + var g = (1 << e) - 1, + l, + a = false, + h = "", + f = this.t; + var j = this.DB - (f * this.DB) % e; + if (f-->0) { + if (j < this.DB && (l = this[f] >> j) > 0) { + a = true; + h = int2char(l) + } + while (f >= 0) { + if (j < e) { + l = (this[f] & ((1 << j) - 1)) << (e - j); + l |= this[--f] >> (j += this.DB - e) + } else { + l = (this[f] >> (j -= e)) & g; + if (j <= 0) { + j += this.DB; --f + } + } + if (l > 0) { + a = true + } + if (a) { + h += int2char(l) + } + } + } + return a ? h: "0" +} +function bnNegate() { + var a = nbi(); + BigInteger.ZERO.subTo(this, a); + return a +} +function bnAbs() { + return (this.s < 0) ? this.negate() : this +} +function bnCompareTo(b) { + var d = this.s - b.s; + if (d != 0) { + return d + } + var c = this.t; + d = c - b.t; + if (d != 0) { + return (this.s < 0) ? -d: d + } + while (--c >= 0) { + if ((d = this[c] - b[c]) != 0) { + return d + } + } + return 0 +} +function nbits(a) { + var c = 1, + b; + if ((b = a >>> 16) != 0) { + a = b; + c += 16 + } + if ((b = a >> 8) != 0) { + a = b; + c += 8 + } + if ((b = a >> 4) != 0) { + a = b; + c += 4 + } + if ((b = a >> 2) != 0) { + a = b; + c += 2 + } + if ((b = a >> 1) != 0) { + a = b; + c += 1 + } + return c +} +function bnBitLength() { + if (this.t <= 0) { + return 0 + } + return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM)) +} +function bnpDLShiftTo(c, b) { + var a; + for (a = this.t - 1; a >= 0; --a) { + b[a + c] = this[a] + } + for (a = c - 1; a >= 0; --a) { + b[a] = 0 + } + b.t = this.t + c; + b.s = this.s +} +function bnpDRShiftTo(c, b) { + for (var a = c; a < this.t; ++a) { + b[a - c] = this[a] + } + b.t = Math.max(this.t - c, 0); + b.s = this.s +} +function bnpLShiftTo(j, e) { + var b = j % this.DB; + var a = this.DB - b; + var g = (1 << a) - 1; + var f = Math.floor(j / this.DB), + h = (this.s << b) & this.DM, + d; + for (d = this.t - 1; d >= 0; --d) { + e[d + f + 1] = (this[d] >> a) | h; + h = (this[d] & g) << b + } + for (d = f - 1; d >= 0; --d) { + e[d] = 0 + } + e[f] = h; + e.t = this.t + f + 1; + e.s = this.s; + e.clamp() +} +function bnpRShiftTo(g, d) { + d.s = this.s; + var e = Math.floor(g / this.DB); + if (e >= this.t) { + d.t = 0; + return + } + var b = g % this.DB; + var a = this.DB - b; + var f = (1 << b) - 1; + d[0] = this[e] >> b; + for (var c = e + 1; c < this.t; ++c) { + d[c - e - 1] |= (this[c] & f) << a; + d[c - e] = this[c] >> b + } + if (b > 0) { + d[this.t - e - 1] |= (this.s & f) << a + } + d.t = this.t - e; + d.clamp() +} +function bnpSubTo(d, f) { + var e = 0, + g = 0, + b = Math.min(d.t, this.t); + while (e < b) { + g += this[e] - d[e]; + f[e++] = g & this.DM; + g >>= this.DB + } + if (d.t < this.t) { + g -= d.s; + while (e < this.t) { + g += this[e]; + f[e++] = g & this.DM; + g >>= this.DB + } + g += this.s + } else { + g += this.s; + while (e < d.t) { + g -= d[e]; + f[e++] = g & this.DM; + g >>= this.DB + } + g -= d.s + } + f.s = (g < 0) ? -1 : 0; + if (g < -1) { + f[e++] = this.DV + g + } else { + if (g > 0) { + f[e++] = g + } + } + f.t = e; + f.clamp() +} +function bnpMultiplyTo(c, e) { + var b = this.abs(), + f = c.abs(); + var d = b.t; + e.t = d + f.t; + while (--d >= 0) { + e[d] = 0 + } + for (d = 0; d < f.t; ++d) { + e[d + b.t] = b.am(0, f[d], e, d, 0, b.t) + } + e.s = 0; + e.clamp(); + if (this.s != c.s) { + BigInteger.ZERO.subTo(e, e) + } +} +function bnpSquareTo(d) { + var a = this.abs(); + var b = d.t = 2 * a.t; + while (--b >= 0) { + d[b] = 0 + } + for (b = 0; b < a.t - 1; ++b) { + var e = a.am(b, a[b], d, 2 * b, 0, 1); + if ((d[b + a.t] += a.am(b + 1, 2 * a[b], d, 2 * b + 1, e, a.t - b - 1)) >= a.DV) { + d[b + a.t] -= a.DV; + d[b + a.t + 1] = 1 + } + } + if (d.t > 0) { + d[d.t - 1] += a.am(b, a[b], d, 2 * b, 0, 1) + } + d.s = 0; + d.clamp() +} +function bnpDivRemTo(n, h, g) { + var w = n.abs(); + if (w.t <= 0) { + return + } + var k = this.abs(); + if (k.t < w.t) { + if (h != null) { + h.fromInt(0) + } + if (g != null) { + this.copyTo(g) + } + return + } + if (g == null) { + g = nbi() + } + var d = nbi(), + a = this.s, + l = n.s; + var v = this.DB - nbits(w[w.t - 1]); + if (v > 0) { + w.lShiftTo(v, d); + k.lShiftTo(v, g) + } else { + w.copyTo(d); + k.copyTo(g) + } + var p = d.t; + var b = d[p - 1]; + if (b == 0) { + return + } + var o = b * (1 << this.F1) + ((p > 1) ? d[p - 2] >> this.F2: 0); + var A = this.FV / o, + z = (1 << this.F1) / o, + x = 1 << this.F2; + var u = g.t, + s = u - p, + f = (h == null) ? nbi() : h; + d.dlShiftTo(s, f); + if (g.compareTo(f) >= 0) { + g[g.t++] = 1; + g.subTo(f, g) + } + BigInteger.ONE.dlShiftTo(p, f); + f.subTo(d, d); + while (d.t < p) { + d[d.t++] = 0 + } + while (--s >= 0) { + var c = (g[--u] == b) ? this.DM: Math.floor(g[u] * A + (g[u - 1] + x) * z); + if ((g[u] += d.am(0, c, g, s, 0, p)) < c) { + d.dlShiftTo(s, f); + g.subTo(f, g); + while (g[u] < --c) { + g.subTo(f, g) + } + } + } + if (h != null) { + g.drShiftTo(p, h); + if (a != l) { + BigInteger.ZERO.subTo(h, h) + } + } + g.t = p; + g.clamp(); + if (v > 0) { + g.rShiftTo(v, g) + } + if (a < 0) { + BigInteger.ZERO.subTo(g, g) + } +} +function bnMod(b) { + var c = nbi(); + this.abs().divRemTo(b, null, c); + if (this.s < 0 && c.compareTo(BigInteger.ZERO) > 0) { + b.subTo(c, c) + } + return c +} +function Classic(a) { + this.m = a +} +function cConvert(a) { + if (a.s < 0 || a.compareTo(this.m) >= 0) { + return a.mod(this.m) + } else { + return a + } +} +function cRevert(a) { + return a +} +function cReduce(a) { + a.divRemTo(this.m, null, a) +} +function cMulTo(a, c, b) { + a.multiplyTo(c, b); + this.reduce(b) +} +function cSqrTo(a, b) { + a.squareTo(b); + this.reduce(b) +} +Classic.prototype.convert = cConvert; +Classic.prototype.revert = cRevert; +Classic.prototype.reduce = cReduce; +Classic.prototype.mulTo = cMulTo; +Classic.prototype.sqrTo = cSqrTo; +function bnpInvDigit() { + if (this.t < 1) { + return 0 + } + var a = this[0]; + if ((a & 1) == 0) { + return 0 + } + var b = a & 3; + b = (b * (2 - (a & 15) * b)) & 15; + b = (b * (2 - (a & 255) * b)) & 255; + b = (b * (2 - (((a & 65535) * b) & 65535))) & 65535; + b = (b * (2 - a * b % this.DV)) % this.DV; + return (b > 0) ? this.DV - b: -b +} +function Montgomery(a) { + this.m = a; + this.mp = a.invDigit(); + this.mpl = this.mp & 32767; + this.mph = this.mp >> 15; + this.um = (1 << (a.DB - 15)) - 1; + this.mt2 = 2 * a.t +} +function montConvert(a) { + var b = nbi(); + a.abs().dlShiftTo(this.m.t, b); + b.divRemTo(this.m, null, b); + if (a.s < 0 && b.compareTo(BigInteger.ZERO) > 0) { + this.m.subTo(b, b) + } + return b +} +function montRevert(a) { + var b = nbi(); + a.copyTo(b); + this.reduce(b); + return b +} +function montReduce(a) { + while (a.t <= this.mt2) { + a[a.t++] = 0 + } + for (var c = 0; c < this.m.t; ++c) { + var b = a[c] & 32767; + var d = (b * this.mpl + (((b * this.mph + (a[c] >> 15) * this.mpl) & this.um) << 15)) & a.DM; + b = c + this.m.t; + a[b] += this.m.am(0, d, a, c, 0, this.m.t); + while (a[b] >= a.DV) { + a[b] -= a.DV; + a[++b]++ + } + } + a.clamp(); + a.drShiftTo(this.m.t, a); + if (a.compareTo(this.m) >= 0) { + a.subTo(this.m, a) + } +} +function montSqrTo(a, b) { + a.squareTo(b); + this.reduce(b) +} +function montMulTo(a, c, b) { + a.multiplyTo(c, b); + this.reduce(b) +} +Montgomery.prototype.convert = montConvert; +Montgomery.prototype.revert = montRevert; +Montgomery.prototype.reduce = montReduce; +Montgomery.prototype.mulTo = montMulTo; +Montgomery.prototype.sqrTo = montSqrTo; +function bnpIsEven() { + return ((this.t > 0) ? (this[0] & 1) : this.s) == 0 +} +function bnpExp(h, j) { + if (h > 4294967295 || h < 1) { + return BigInteger.ONE + } + var f = nbi(), + a = nbi(), + d = j.convert(this), + c = nbits(h) - 1; + d.copyTo(f); + while (--c >= 0) { + j.sqrTo(f, a); + if ((h & (1 << c)) > 0) { + j.mulTo(a, d, f) + } else { + var b = f; + f = a; + a = b + } + } + return j.revert(f) +} +function bnModPowInt(b, a) { + var c; + if (b < 256 || a.isEven()) { + c = new Classic(a) + } else { + c = new Montgomery(a) + } + return this.exp(b, c) +} +BigInteger.prototype.copyTo = bnpCopyTo; +BigInteger.prototype.fromInt = bnpFromInt; +BigInteger.prototype.fromString = bnpFromString; +BigInteger.prototype.clamp = bnpClamp; +BigInteger.prototype.dlShiftTo = bnpDLShiftTo; +BigInteger.prototype.drShiftTo = bnpDRShiftTo; +BigInteger.prototype.lShiftTo = bnpLShiftTo; +BigInteger.prototype.rShiftTo = bnpRShiftTo; +BigInteger.prototype.subTo = bnpSubTo; +BigInteger.prototype.multiplyTo = bnpMultiplyTo; +BigInteger.prototype.squareTo = bnpSquareTo; +BigInteger.prototype.divRemTo = bnpDivRemTo; +BigInteger.prototype.invDigit = bnpInvDigit; +BigInteger.prototype.isEven = bnpIsEven; +BigInteger.prototype.exp = bnpExp; +BigInteger.prototype.toString = bnToString; +BigInteger.prototype.negate = bnNegate; +BigInteger.prototype.abs = bnAbs; +BigInteger.prototype.compareTo = bnCompareTo; +BigInteger.prototype.bitLength = bnBitLength; +BigInteger.prototype.mod = bnMod; +BigInteger.prototype.modPowInt = bnModPowInt; +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function bnClone() { + var a = nbi(); + this.copyTo(a); + return a +} +function bnIntValue() { + if (this.s < 0) { + if (this.t == 1) { + return this[0] - this.DV + } else { + if (this.t == 0) { + return - 1 + } + } + } else { + if (this.t == 1) { + return this[0] + } else { + if (this.t == 0) { + return 0 + } + } + } + return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0] +} +function bnByteValue() { + return (this.t == 0) ? this.s: (this[0] << 24) >> 24 +} +function bnShortValue() { + return (this.t == 0) ? this.s: (this[0] << 16) >> 16 +} +function bnpChunkSize(a) { + return Math.floor(Math.LN2 * this.DB / Math.log(a)) +} +function bnSigNum() { + if (this.s < 0) { + return - 1 + } else { + if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) { + return 0 + } else { + return 1 + } + } +} +function bnpToRadix(c) { + if (c == null) { + c = 10 + } + if (this.signum() == 0 || c < 2 || c > 36) { + return "0" + } + var f = this.chunkSize(c); + var e = Math.pow(c, f); + var i = nbv(e), + j = nbi(), + h = nbi(), + g = ""; + this.divRemTo(i, j, h); + while (j.signum() > 0) { + g = (e + h.intValue()).toString(c).substr(1) + g; + j.divRemTo(i, j, h) + } + return h.intValue().toString(c) + g +} +function bnpFromRadix(m, h) { + this.fromInt(0); + if (h == null) { + h = 10 + } + var f = this.chunkSize(h); + var g = Math.pow(h, f), + e = false, + a = 0, + l = 0; + for (var c = 0; c < m.length; ++c) { + var k = intAt(m, c); + if (k < 0) { + if (m.charAt(c) == "-" && this.signum() == 0) { + e = true + } + continue + } + l = h * l + k; + if (++a >= f) { + this.dMultiply(g); + this.dAddOffset(l, 0); + a = 0; + l = 0 + } + } + if (a > 0) { + this.dMultiply(Math.pow(h, a)); + this.dAddOffset(l, 0) + } + if (e) { + BigInteger.ZERO.subTo(this, this) + } +} +function bnpFromNumber(f, e, h) { + if ("number" == typeof e) { + if (f < 2) { + this.fromInt(1) + } else { + this.fromNumber(f, h); + if (!this.testBit(f - 1)) { + this.bitwiseTo(BigInteger.ONE.shiftLeft(f - 1), op_or, this) + } + if (this.isEven()) { + this.dAddOffset(1, 0) + } + while (!this.isProbablePrime(e)) { + this.dAddOffset(2, 0); + if (this.bitLength() > f) { + this.subTo(BigInteger.ONE.shiftLeft(f - 1), this) + } + } + } + } else { + var d = new Array(), + g = f & 7; + d.length = (f >> 3) + 1; + e.nextBytes(d); + if (g > 0) { + d[0] &= ((1 << g) - 1) + } else { + d[0] = 0 + } + this.fromString(d, 256) + } +} +function bnToByteArray() { + var b = this.t, + c = new Array(); + c[0] = this.s; + var e = this.DB - (b * this.DB) % 8, + f, + a = 0; + if (b-->0) { + if (e < this.DB && (f = this[b] >> e) != (this.s & this.DM) >> e) { + c[a++] = f | (this.s << (this.DB - e)) + } + while (b >= 0) { + if (e < 8) { + f = (this[b] & ((1 << e) - 1)) << (8 - e); + f |= this[--b] >> (e += this.DB - 8) + } else { + f = (this[b] >> (e -= 8)) & 255; + if (e <= 0) { + e += this.DB; --b + } + } + if ((f & 128) != 0) { + f |= -256 + } + if (a == 0 && (this.s & 128) != (f & 128)) {++a + } + if (a > 0 || f != this.s) { + c[a++] = f + } + } + } + return c +} +function bnEquals(b) { + return (this.compareTo(b) == 0) +} +function bnMin(b) { + return (this.compareTo(b) < 0) ? this: b +} +function bnMax(b) { + return (this.compareTo(b) > 0) ? this: b +} +function bnpBitwiseTo(c, h, e) { + var d, g, b = Math.min(c.t, this.t); + for (d = 0; d < b; ++d) { + e[d] = h(this[d], c[d]) + } + if (c.t < this.t) { + g = c.s & this.DM; + for (d = b; d < this.t; ++d) { + e[d] = h(this[d], g) + } + e.t = this.t + } else { + g = this.s & this.DM; + for (d = b; d < c.t; ++d) { + e[d] = h(g, c[d]) + } + e.t = c.t + } + e.s = h(this.s, c.s); + e.clamp() +} +function op_and(a, b) { + return a & b +} +function bnAnd(b) { + var c = nbi(); + this.bitwiseTo(b, op_and, c); + return c +} +function op_or(a, b) { + return a | b +} +function bnOr(b) { + var c = nbi(); + this.bitwiseTo(b, op_or, c); + return c +} +function op_xor(a, b) { + return a ^ b +} +function bnXor(b) { + var c = nbi(); + this.bitwiseTo(b, op_xor, c); + return c +} +function op_andnot(a, b) { + return a & ~b +} +function bnAndNot(b) { + var c = nbi(); + this.bitwiseTo(b, op_andnot, c); + return c +} +function bnNot() { + var b = nbi(); + for (var a = 0; a < this.t; ++a) { + b[a] = this.DM & ~this[a] + } + b.t = this.t; + b.s = ~this.s; + return b +} +function bnShiftLeft(b) { + var a = nbi(); + if (b < 0) { + this.rShiftTo( - b, a) + } else { + this.lShiftTo(b, a) + } + return a +} +function bnShiftRight(b) { + var a = nbi(); + if (b < 0) { + this.lShiftTo( - b, a) + } else { + this.rShiftTo(b, a) + } + return a +} +function lbit(a) { + if (a == 0) { + return - 1 + } + var b = 0; + if ((a & 65535) == 0) { + a >>= 16; + b += 16 + } + if ((a & 255) == 0) { + a >>= 8; + b += 8 + } + if ((a & 15) == 0) { + a >>= 4; + b += 4 + } + if ((a & 3) == 0) { + a >>= 2; + b += 2 + } + if ((a & 1) == 0) {++b + } + return b +} +function bnGetLowestSetBit() { + for (var a = 0; a < this.t; ++a) { + if (this[a] != 0) { + return a * this.DB + lbit(this[a]) + } + } + if (this.s < 0) { + return this.t * this.DB + } + return - 1 +} +function cbit(a) { + var b = 0; + while (a != 0) { + a &= a - 1; ++b + } + return b +} +function bnBitCount() { + var c = 0, + a = this.s & this.DM; + for (var b = 0; b < this.t; ++b) { + c += cbit(this[b] ^ a) + } + return c +} +function bnTestBit(b) { + var a = Math.floor(b / this.DB); + if (a >= this.t) { + return (this.s != 0) + } + return ((this[a] & (1 << (b % this.DB))) != 0) +} +function bnpChangeBit(c, b) { + var a = BigInteger.ONE.shiftLeft(c); + this.bitwiseTo(a, b, a); + return a +} +function bnSetBit(a) { + return this.changeBit(a, op_or) +} +function bnClearBit(a) { + return this.changeBit(a, op_andnot) +} +function bnFlipBit(a) { + return this.changeBit(a, op_xor) +} +function bnpAddTo(d, f) { + var e = 0, + g = 0, + b = Math.min(d.t, this.t); + while (e < b) { + g += this[e] + d[e]; + f[e++] = g & this.DM; + g >>= this.DB + } + if (d.t < this.t) { + g += d.s; + while (e < this.t) { + g += this[e]; + f[e++] = g & this.DM; + g >>= this.DB + } + g += this.s + } else { + g += this.s; + while (e < d.t) { + g += d[e]; + f[e++] = g & this.DM; + g >>= this.DB + } + g += d.s + } + f.s = (g < 0) ? -1 : 0; + if (g > 0) { + f[e++] = g + } else { + if (g < -1) { + f[e++] = this.DV + g + } + } + f.t = e; + f.clamp() +} +function bnAdd(b) { + var c = nbi(); + this.addTo(b, c); + return c +} +function bnSubtract(b) { + var c = nbi(); + this.subTo(b, c); + return c +} +function bnMultiply(b) { + var c = nbi(); + this.multiplyTo(b, c); + return c +} +function bnSquare() { + var a = nbi(); + this.squareTo(a); + return a +} +function bnDivide(b) { + var c = nbi(); + this.divRemTo(b, c, null); + return c +} +function bnRemainder(b) { + var c = nbi(); + this.divRemTo(b, null, c); + return c +} +function bnDivideAndRemainder(b) { + var d = nbi(), + c = nbi(); + this.divRemTo(b, d, c); + return new Array(d, c) +} +function bnpDMultiply(a) { + this[this.t] = this.am(0, a - 1, this, 0, 0, this.t); ++this.t; + this.clamp() +} +function bnpDAddOffset(b, a) { + if (b == 0) { + return + } + while (this.t <= a) { + this[this.t++] = 0 + } + this[a] += b; + while (this[a] >= this.DV) { + this[a] -= this.DV; + if (++a >= this.t) { + this[this.t++] = 0 + }++this[a] + } +} +function NullExp() {} +function nNop(a) { + return a +} +function nMulTo(a, c, b) { + a.multiplyTo(c, b) +} +function nSqrTo(a, b) { + a.squareTo(b) +} +NullExp.prototype.convert = nNop; +NullExp.prototype.revert = nNop; +NullExp.prototype.mulTo = nMulTo; +NullExp.prototype.sqrTo = nSqrTo; +function bnPow(a) { + return this.exp(a, new NullExp()) +} +function bnpMultiplyLowerTo(b, f, e) { + var d = Math.min(this.t + b.t, f); + e.s = 0; + e.t = d; + while (d > 0) { + e[--d] = 0 + } + var c; + for (c = e.t - this.t; d < c; ++d) { + e[d + this.t] = this.am(0, b[d], e, d, 0, this.t) + } + for (c = Math.min(b.t, f); d < c; ++d) { + this.am(0, b[d], e, d, 0, f - d) + } + e.clamp() +} +function bnpMultiplyUpperTo(b, e, d) {--e; + var c = d.t = this.t + b.t - e; + d.s = 0; + while (--c >= 0) { + d[c] = 0 + } + for (c = Math.max(e - this.t, 0); c < b.t; ++c) { + d[this.t + c - e] = this.am(e - c, b[c], d, 0, 0, this.t + c - e) + } + d.clamp(); + d.drShiftTo(1, d) +} +function Barrett(a) { + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2 * a.t, this.r2); + this.mu = this.r2.divide(a); + this.m = a +} +function barrettConvert(a) { + if (a.s < 0 || a.t > 2 * this.m.t) { + return a.mod(this.m) + } else { + if (a.compareTo(this.m) < 0) { + return a + } else { + var b = nbi(); + a.copyTo(b); + this.reduce(b); + return b + } + } +} +function barrettRevert(a) { + return a +} +function barrettReduce(a) { + a.drShiftTo(this.m.t - 1, this.r2); + if (a.t > this.m.t + 1) { + a.t = this.m.t + 1; + a.clamp() + } + this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); + this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); + while (a.compareTo(this.r2) < 0) { + a.dAddOffset(1, this.m.t + 1) + } + a.subTo(this.r2, a); + while (a.compareTo(this.m) >= 0) { + a.subTo(this.m, a) + } +} +function barrettSqrTo(a, b) { + a.squareTo(b); + this.reduce(b) +} +function barrettMulTo(a, c, b) { + a.multiplyTo(c, b); + this.reduce(b) +} +Barrett.prototype.convert = barrettConvert; +Barrett.prototype.revert = barrettRevert; +Barrett.prototype.reduce = barrettReduce; +Barrett.prototype.mulTo = barrettMulTo; +Barrett.prototype.sqrTo = barrettSqrTo; +function bnModPow(q, f) { + var o = q.bitLength(), + h, + b = nbv(1), + v; + if (o <= 0) { + return b + } else { + if (o < 18) { + h = 1 + } else { + if (o < 48) { + h = 3 + } else { + if (o < 144) { + h = 4 + } else { + if (o < 768) { + h = 5 + } else { + h = 6 + } + } + } + } + } + if (o < 8) { + v = new Classic(f) + } else { + if (f.isEven()) { + v = new Barrett(f) + } else { + v = new Montgomery(f) + } + } + var p = new Array(), + d = 3, + s = h - 1, + a = (1 << h) - 1; + p[1] = v.convert(this); + if (h > 1) { + var A = nbi(); + v.sqrTo(p[1], A); + while (d <= a) { + p[d] = nbi(); + v.mulTo(A, p[d - 2], p[d]); + d += 2 + } + } + var l = q.t - 1, + x, u = true, + c = nbi(), + y; + o = nbits(q[l]) - 1; + while (l >= 0) { + if (o >= s) { + x = (q[l] >> (o - s)) & a + } else { + x = (q[l] & ((1 << (o + 1)) - 1)) << (s - o); + if (l > 0) { + x |= q[l - 1] >> (this.DB + o - s) + } + } + d = h; + while ((x & 1) == 0) { + x >>= 1; --d + } + if ((o -= d) < 0) { + o += this.DB; --l + } + if (u) { + p[x].copyTo(b); + u = false + } else { + while (d > 1) { + v.sqrTo(b, c); + v.sqrTo(c, b); + d -= 2 + } + if (d > 0) { + v.sqrTo(b, c) + } else { + y = b; + b = c; + c = y + } + v.mulTo(c, p[x], b) + } + while (l >= 0 && (q[l] & (1 << o)) == 0) { + v.sqrTo(b, c); + y = b; + b = c; + c = y; + if (--o < 0) { + o = this.DB - 1; --l + } + } + } + return v.revert(b) +} +function bnGCD(c) { + var b = (this.s < 0) ? this.negate() : this.clone(); + var h = (c.s < 0) ? c.negate() : c.clone(); + if (b.compareTo(h) < 0) { + var e = b; + b = h; + h = e + } + var d = b.getLowestSetBit(), + f = h.getLowestSetBit(); + if (f < 0) { + return b + } + if (d < f) { + f = d + } + if (f > 0) { + b.rShiftTo(f, b); + h.rShiftTo(f, h) + } + while (b.signum() > 0) { + if ((d = b.getLowestSetBit()) > 0) { + b.rShiftTo(d, b) + } + if ((d = h.getLowestSetBit()) > 0) { + h.rShiftTo(d, h) + } + if (b.compareTo(h) >= 0) { + b.subTo(h, b); + b.rShiftTo(1, b) + } else { + h.subTo(b, h); + h.rShiftTo(1, h) + } + } + if (f > 0) { + h.lShiftTo(f, h) + } + return h +} +function bnpModInt(e) { + if (e <= 0) { + return 0 + } + var c = this.DV % e, + b = (this.s < 0) ? e - 1 : 0; + if (this.t > 0) { + if (c == 0) { + b = this[0] % e + } else { + for (var a = this.t - 1; a >= 0; --a) { + b = (c * b + this[a]) % e + } + } + } + return b +} +function bnModInverse(f) { + var j = f.isEven(); + if ((this.isEven() && j) || f.signum() == 0) { + return BigInteger.ZERO + } + var i = f.clone(), + h = this.clone(); + var g = nbv(1), + e = nbv(0), + l = nbv(0), + k = nbv(1); + while (i.signum() != 0) { + while (i.isEven()) { + i.rShiftTo(1, i); + if (j) { + if (!g.isEven() || !e.isEven()) { + g.addTo(this, g); + e.subTo(f, e) + } + g.rShiftTo(1, g) + } else { + if (!e.isEven()) { + e.subTo(f, e) + } + } + e.rShiftTo(1, e) + } + while (h.isEven()) { + h.rShiftTo(1, h); + if (j) { + if (!l.isEven() || !k.isEven()) { + l.addTo(this, l); + k.subTo(f, k) + } + l.rShiftTo(1, l) + } else { + if (!k.isEven()) { + k.subTo(f, k) + } + } + k.rShiftTo(1, k) + } + if (i.compareTo(h) >= 0) { + i.subTo(h, i); + if (j) { + g.subTo(l, g) + } + e.subTo(k, e) + } else { + h.subTo(i, h); + if (j) { + l.subTo(g, l) + } + k.subTo(e, k) + } + } + if (h.compareTo(BigInteger.ONE) != 0) { + return BigInteger.ZERO + } + if (k.compareTo(f) >= 0) { + return k.subtract(f) + } + if (k.signum() < 0) { + k.addTo(f, k) + } else { + return k + } + if (k.signum() < 0) { + return k.add(f) + } else { + return k + } +} +var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; +var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; +function bnIsProbablePrime(e) { + var d, b = this.abs(); + if (b.t == 1 && b[0] <= lowprimes[lowprimes.length - 1]) { + for (d = 0; d < lowprimes.length; ++d) { + if (b[0] == lowprimes[d]) { + return true + } + } + return false + } + if (b.isEven()) { + return false + } + d = 1; + while (d < lowprimes.length) { + var a = lowprimes[d], + c = d + 1; + while (c < lowprimes.length && a < lplim) { + a *= lowprimes[c++] + } + a = b.modInt(a); + while (d < c) { + if (a % lowprimes[d++] == 0) { + return false + } + } + } + return b.millerRabin(e) +} +function bnpMillerRabin(f) { + var g = this.subtract(BigInteger.ONE); + var c = g.getLowestSetBit(); + if (c <= 0) { + return false + } + var h = g.shiftRight(c); + f = (f + 1) >> 1; + if (f > lowprimes.length) { + f = lowprimes.length + } + var b = nbi(); + for (var e = 0; e < f; ++e) { + b.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); + var l = b.modPow(h, this); + if (l.compareTo(BigInteger.ONE) != 0 && l.compareTo(g) != 0) { + var d = 1; + while (d++> 8) & 255; + rng_pool[rng_pptr++] ^= (a >> 16) & 255; + rng_pool[rng_pptr++] ^= (a >> 24) & 255; + if (rng_pptr >= rng_psize) { + rng_pptr -= rng_psize + } +} +function rng_seed_time() { + rng_seed_int(new Date().getTime()) +} +if (rng_pool == null) { + rng_pool = new Array(); + rng_pptr = 0; + var t; + if (window2.crypto && window2.crypto.getRandomValues) { + var ua = new Uint8Array(32); + window2.crypto.getRandomValues(ua); + for (t = 0; t < 32; ++t) { + rng_pool[rng_pptr++] = ua[t] + } + } + if (navigator2.appName == "Netscape" && navigator2.appVersion < "5" && window2.crypto && window2.crypto.random) { + var z = window2.crypto.random(32); + for (t = 0; t < z.length; ++t) { + rng_pool[rng_pptr++] = z.charCodeAt(t) & 255 + } + } + while (rng_pptr < rng_psize) { + t = Math.floor(65536 * Math.random()); + rng_pool[rng_pptr++] = t >>> 8; + rng_pool[rng_pptr++] = t & 255 + } + rng_pptr = 0; + rng_seed_time() +} +function rng_get_byte() { + if (rng_state == null) { + rng_seed_time(); + rng_state = prng_newstate(); + rng_state.init(rng_pool); + for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { + rng_pool[rng_pptr] = 0 + } + rng_pptr = 0 + } + return rng_state.next() +} +function rng_get_bytes(b) { + var a; + for (a = 0; a < b.length; ++a) { + b[a] = rng_get_byte() + } +} +function SecureRandom() {} +SecureRandom.prototype.nextBytes = rng_get_bytes; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function parseBigInt(b, a) { + return new BigInteger(b, a) +} +function linebrk(c, d) { + var a = ""; + var b = 0; + while (b + d < c.length) { + a += c.substring(b, b + d) + "\n"; + b += d + } + return a + c.substring(b, c.length) +} +function byte2Hex(a) { + if (a < 16) { + return "0" + a.toString(16) + } else { + return a.toString(16) + } +} +function pkcs1pad2(e, h) { + if (h < e.length + 11) { + alert("Message too long for RSA"); + return null + } + var g = new Array(); + var d = e.length - 1; + while (d >= 0 && h > 0) { + var f = e.charCodeAt(d--); + if (f < 128) { + g[--h] = f + } else { + if ((f > 127) && (f < 2048)) { + g[--h] = (f & 63) | 128; + g[--h] = (f >> 6) | 192 + } else { + g[--h] = (f & 63) | 128; + g[--h] = ((f >> 6) & 63) | 128; + g[--h] = (f >> 12) | 224 + } + } + } + g[--h] = 0; + var b = new SecureRandom(); + var a = new Array(); + while (h > 2) { + a[0] = 0; + while (a[0] == 0) { + b.nextBytes(a) + } + g[--h] = a[0] + } + g[--h] = 2; + g[--h] = 0; + return new BigInteger(g) +} +function oaep_mgf1_arr(c, a, e) { + var b = "", + d = 0; + while (b.length < a) { + b += e(String.fromCharCode.apply(String, c.concat([(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]))); + d += 1 + } + return b +} +function oaep_pad(q, a, f, l) { + var c = KJUR.crypto.MessageDigest; + var o = KJUR.crypto.Util; + var b = null; + if (!f) { + f = "sha1" + } + if (typeof f === "string") { + b = c.getCanonicalAlgName(f); + l = c.getHashLength(b); + f = function(i) { + return hextorstr(o.hashString(i, b)) + } + } + if (q.length + 2 * l + 2 > a) { + throw "Message too long for RSA" + } + var k = "", + e; + for (e = 0; e < a - q.length - 2 * l - 2; e += 1) { + k += "\x00" + } + var h = f("") + k + "\x01" + q; + var g = new Array(l); + new SecureRandom().nextBytes(g); + var j = oaep_mgf1_arr(g, h.length, f); + var p = []; + for (e = 0; e < h.length; e += 1) { + p[e] = h.charCodeAt(e) ^ j.charCodeAt(e) + } + var m = oaep_mgf1_arr(p, g.length, f); + var d = [0]; + for (e = 0; e < g.length; e += 1) { + d[e + 1] = g[e] ^ m.charCodeAt(e) + } + return new BigInteger(d.concat(p)) +} +function RSAKey() { + this.n = null; + this.e = 0; + this.d = null; + this.p = null; + this.q = null; + this.dmp1 = null; + this.dmq1 = null; + this.coeff = null +} +function RSASetPublic(b, a) { + this.isPublic = true; + this.isPrivate = false; + if (typeof b !== "string") { + this.n = b; + this.e = a + } else { + if (b != null && a != null && b.length > 0 && a.length > 0) { + this.n = parseBigInt(b, 16); + this.e = parseInt(a, 16) + } else { + throw "Invalid RSA public key" + } + } +} +function RSADoPublic(a) { + return a.modPowInt(this.e, this.n) +} +function RSAEncrypt(d) { + var a = pkcs1pad2(d, (this.n.bitLength() + 7) >> 3); + if (a == null) { + return null + } + var e = this.doPublic(a); + if (e == null) { + return null + } + var b = e.toString(16); + if ((b.length & 1) == 0) { + return b + } else { + return "0" + b + } +} +function RSAEncryptOAEP(f, e, b) { + var a = oaep_pad(f, (this.n.bitLength() + 7) >> 3, e, b); + if (a == null) { + return null + } + var g = this.doPublic(a); + if (g == null) { + return null + } + var d = g.toString(16); + if ((d.length & 1) == 0) { + return d + } else { + return "0" + d + } +} +RSAKey.prototype.doPublic = RSADoPublic; +RSAKey.prototype.setPublic = RSASetPublic; +RSAKey.prototype.encrypt = RSAEncrypt; +RSAKey.prototype.encryptOAEP = RSAEncryptOAEP; +RSAKey.prototype.type = "RSA"; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function pkcs1unpad2(g, j) { + var a = g.toByteArray(); + var f = 0; + while (f < a.length && a[f] == 0) {++f + } + if (a.length - f != j - 1 || a[f] != 2) { + return null + }++f; + while (a[f] != 0) { + if (++f >= a.length) { + return null + } + } + var e = ""; + while (++f < a.length) { + var h = a[f] & 255; + if (h < 128) { + e += String.fromCharCode(h) + } else { + if ((h > 191) && (h < 224)) { + e += String.fromCharCode(((h & 31) << 6) | (a[f + 1] & 63)); ++f + } else { + e += String.fromCharCode(((h & 15) << 12) | ((a[f + 1] & 63) << 6) | (a[f + 2] & 63)); + f += 2 + } + } + } + return e +} +function oaep_mgf1_str(c, a, e) { + var b = "", + d = 0; + while (b.length < a) { + b += e(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])); + d += 1 + } + return b +} +function oaep_unpad(o, b, g, p) { + var e = KJUR.crypto.MessageDigest; + var r = KJUR.crypto.Util; + var c = null; + if (!g) { + g = "sha1" + } + if (typeof g === "string") { + c = e.getCanonicalAlgName(g); + p = e.getHashLength(c); + g = function(d) { + return hextorstr(r.hashString(d, c)) + } + } + o = o.toByteArray(); + var h; + for (h = 0; h < o.length; h += 1) { + o[h] &= 255 + } + while (o.length < b) { + o.unshift(0) + } + o = String.fromCharCode.apply(String, o); + if (o.length < 2 * p + 2) { + throw "Cipher too short" + } + var f = o.substr(1, p); + var s = o.substr(p + 1); + var q = oaep_mgf1_str(s, p, g); + var k = [], + h; + for (h = 0; h < f.length; h += 1) { + k[h] = f.charCodeAt(h) ^ q.charCodeAt(h) + } + var l = oaep_mgf1_str(String.fromCharCode.apply(String, k), o.length - p, g); + var j = []; + for (h = 0; h < s.length; h += 1) { + j[h] = s.charCodeAt(h) ^ l.charCodeAt(h) + } + j = String.fromCharCode.apply(String, j); + if (j.substr(0, p) !== g("")) { + throw "Hash mismatch" + } + j = j.substr(p); + var a = j.indexOf("\x01"); + var m = (a != -1) ? j.substr(0, a).lastIndexOf("\x00") : -1; + if (m + 1 != a) { + throw "Malformed data" + } + return j.substr(a + 1) +} +function RSASetPrivate(c, a, b) { + this.isPrivate = true; + if (typeof c !== "string") { + this.n = c; + this.e = a; + this.d = b + } else { + if (c != null && a != null && c.length > 0 && a.length > 0) { + this.n = parseBigInt(c, 16); + this.e = parseInt(a, 16); + this.d = parseBigInt(b, 16) + } else { + alert("Invalid RSA private key") + } + } +} +function RSASetPrivateEx(g, d, e, c, b, a, h, f) { + this.isPrivate = true; + this.isPublic = false; + if (g == null) { + throw "RSASetPrivateEx N == null" + } + if (d == null) { + throw "RSASetPrivateEx E == null" + } + if (g.length == 0) { + throw "RSASetPrivateEx N.length == 0" + } + if (d.length == 0) { + throw "RSASetPrivateEx E.length == 0" + } + if (g != null && d != null && g.length > 0 && d.length > 0) { + this.n = parseBigInt(g, 16); + this.e = parseInt(d, 16); + this.d = parseBigInt(e, 16); + this.p = parseBigInt(c, 16); + this.q = parseBigInt(b, 16); + this.dmp1 = parseBigInt(a, 16); + this.dmq1 = parseBigInt(h, 16); + this.coeff = parseBigInt(f, 16) + } else { + alert("Invalid RSA private key in RSASetPrivateEx") + } +} +function RSAGenerate(b, i) { + var a = new SecureRandom(); + var f = b >> 1; + this.e = parseInt(i, 16); + var c = new BigInteger(i, 16); + for (;;) { + for (;;) { + this.p = new BigInteger(b - f, 1, a); + if (this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) { + break + } + } + for (;;) { + this.q = new BigInteger(f, 1, a); + if (this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) { + break + } + } + if (this.p.compareTo(this.q) <= 0) { + var h = this.p; + this.p = this.q; + this.q = h + } + var g = this.p.subtract(BigInteger.ONE); + var d = this.q.subtract(BigInteger.ONE); + var e = g.multiply(d); + if (e.gcd(c).compareTo(BigInteger.ONE) == 0) { + this.n = this.p.multiply(this.q); + this.d = c.modInverse(e); + this.dmp1 = this.d.mod(g); + this.dmq1 = this.d.mod(d); + this.coeff = this.q.modInverse(this.p); + break + } + } + this.isPrivate = true +} +function RSADoPrivate(a) { + if (this.p == null || this.q == null) { + return a.modPow(this.d, this.n) + } + var c = a.mod(this.p).modPow(this.dmp1, this.p); + var b = a.mod(this.q).modPow(this.dmq1, this.q); + while (c.compareTo(b) < 0) { + c = c.add(this.p) + } + return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b) +} +function RSADecrypt(b) { + var d = parseBigInt(b, 16); + var a = this.doPrivate(d); + if (a == null) { + return null + } + return pkcs1unpad2(a, (this.n.bitLength() + 7) >> 3) +} +function RSADecryptOAEP(e, d, b) { + var f = parseBigInt(e, 16); + var a = this.doPrivate(f); + if (a == null) { + return null + } + return oaep_unpad(a, (this.n.bitLength() + 7) >> 3, d, b) +} +RSAKey.prototype.doPrivate = RSADoPrivate; +RSAKey.prototype.setPrivate = RSASetPrivate; +RSAKey.prototype.setPrivateEx = RSASetPrivateEx; +RSAKey.prototype.generate = RSAGenerate; +RSAKey.prototype.decrypt = RSADecrypt; +RSAKey.prototype.decryptOAEP = RSADecryptOAEP; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function ECFieldElementFp(b, a) { + this.x = a; + this.q = b +} +function feFpEquals(a) { + if (a == this) { + return true + } + return (this.q.equals(a.q) && this.x.equals(a.x)) +} +function feFpToBigInteger() { + return this.x +} +function feFpNegate() { + return new ECFieldElementFp(this.q, this.x.negate().mod(this.q)) +} +function feFpAdd(a) { + return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q)) +} +function feFpSubtract(a) { + return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q)) +} +function feFpMultiply(a) { + return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q)) +} +function feFpSquare() { + return new ECFieldElementFp(this.q, this.x.square().mod(this.q)) +} +function feFpDivide(a) { + return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q)) +} +ECFieldElementFp.prototype.equals = feFpEquals; +ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger; +ECFieldElementFp.prototype.negate = feFpNegate; +ECFieldElementFp.prototype.add = feFpAdd; +ECFieldElementFp.prototype.subtract = feFpSubtract; +ECFieldElementFp.prototype.multiply = feFpMultiply; +ECFieldElementFp.prototype.square = feFpSquare; +ECFieldElementFp.prototype.divide = feFpDivide; +function ECPointFp(c, a, d, b) { + this.curve = c; + this.x = a; + this.y = d; + if (b == null) { + this.z = BigInteger.ONE + } else { + this.z = b + } + this.zinv = null +} +function pointFpGetX() { + if (this.zinv == null) { + this.zinv = this.z.modInverse(this.curve.q) + } + return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q)) +} +function pointFpGetY() { + if (this.zinv == null) { + this.zinv = this.z.modInverse(this.curve.q) + } + return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q)) +} +function pointFpEquals(a) { + if (a == this) { + return true + } + if (this.isInfinity()) { + return a.isInfinity() + } + if (a.isInfinity()) { + return this.isInfinity() + } + var c, b; + c = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q); + if (!c.equals(BigInteger.ZERO)) { + return false + } + b = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q); + return b.equals(BigInteger.ZERO) +} +function pointFpIsInfinity() { + if ((this.x == null) && (this.y == null)) { + return true + } + return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO) +} +function pointFpNegate() { + return new ECPointFp(this.curve, this.x, this.y.negate(), this.z) +} +function pointFpAdd(l) { + if (this.isInfinity()) { + return l + } + if (l.isInfinity()) { + return this + } + var p = l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q); + var o = l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q); + if (BigInteger.ZERO.equals(o)) { + if (BigInteger.ZERO.equals(p)) { + return this.twice() + } + return this.curve.getInfinity() + } + var j = new BigInteger("3"); + var e = this.x.toBigInteger(); + var n = this.y.toBigInteger(); + var c = l.x.toBigInteger(); + var k = l.y.toBigInteger(); + var m = o.square(); + var i = m.multiply(o); + var d = e.multiply(m); + var g = p.square().multiply(this.z); + var a = g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q); + var h = d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q); + var f = i.multiply(this.z).multiply(l.z).mod(this.curve.q); + return new ECPointFp(this.curve, this.curve.fromBigInteger(a), this.curve.fromBigInteger(h), f) +} +function pointFpTwice() { + if (this.isInfinity()) { + return this + } + if (this.y.toBigInteger().signum() == 0) { + return this.curve.getInfinity() + } + var g = new BigInteger("3"); + var c = this.x.toBigInteger(); + var h = this.y.toBigInteger(); + var e = h.multiply(this.z); + var j = e.multiply(h).mod(this.curve.q); + var i = this.curve.a.toBigInteger(); + var k = c.square().multiply(g); + if (!BigInteger.ZERO.equals(i)) { + k = k.add(this.z.square().multiply(i)) + } + k = k.mod(this.curve.q); + var b = k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q); + var f = k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q); + var d = e.square().multiply(e).shiftLeft(3).mod(this.curve.q); + return new ECPointFp(this.curve, this.curve.fromBigInteger(b), this.curve.fromBigInteger(f), d) +} +function pointFpMultiply(b) { + if (this.isInfinity()) { + return this + } + if (b.signum() == 0) { + return this.curve.getInfinity() + } + var g = b; + var f = g.multiply(new BigInteger("3")); + var l = this.negate(); + var d = this; + var c; + for (c = f.bitLength() - 2; c > 0; --c) { + d = d.twice(); + var a = f.testBit(c); + var j = g.testBit(c); + if (a != j) { + d = d.add(a ? this: l) + } + } + return d +} +function pointFpMultiplyTwo(c, a, b) { + var d; + if (c.bitLength() > b.bitLength()) { + d = c.bitLength() - 1 + } else { + d = b.bitLength() - 1 + } + var f = this.curve.getInfinity(); + var e = this.add(a); + while (d >= 0) { + f = f.twice(); + if (c.testBit(d)) { + if (b.testBit(d)) { + f = f.add(e) + } else { + f = f.add(this) + } + } else { + if (b.testBit(d)) { + f = f.add(a) + } + }--d + } + return f +} +ECPointFp.prototype.getX = pointFpGetX; +ECPointFp.prototype.getY = pointFpGetY; +ECPointFp.prototype.equals = pointFpEquals; +ECPointFp.prototype.isInfinity = pointFpIsInfinity; +ECPointFp.prototype.negate = pointFpNegate; +ECPointFp.prototype.add = pointFpAdd; +ECPointFp.prototype.twice = pointFpTwice; +ECPointFp.prototype.multiply = pointFpMultiply; +ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo; +function ECCurveFp(e, d, c) { + this.q = e; + this.a = this.fromBigInteger(d); + this.b = this.fromBigInteger(c); + this.infinity = new ECPointFp(this, null, null) +} +function curveFpGetQ() { + return this.q +} +function curveFpGetA() { + return this.a +} +function curveFpGetB() { + return this.b +} +function curveFpEquals(a) { + if (a == this) { + return true + } + return (this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b)) +} +function curveFpGetInfinity() { + return this.infinity +} +function curveFpFromBigInteger(a) { + return new ECFieldElementFp(this.q, a) +} +function curveFpDecodePointHex(d) { + switch (parseInt(d.substr(0, 2), 16)) { + case 0: + return this.infinity; + case 2: + case 3: + return null; + case 4: + case 6: + case 7: + var a = (d.length - 2) / 2; + var c = d.substr(2, a); + var b = d.substr(a + 2, a); + return new ECPointFp(this, this.fromBigInteger(new BigInteger(c, 16)), this.fromBigInteger(new BigInteger(b, 16))); + default: + return null + } +} +ECCurveFp.prototype.getQ = curveFpGetQ; +ECCurveFp.prototype.getA = curveFpGetA; +ECCurveFp.prototype.getB = curveFpGetB; +ECCurveFp.prototype.equals = curveFpEquals; +ECCurveFp.prototype.getInfinity = curveFpGetInfinity; +ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger; +ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex; +/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib + */ +ECFieldElementFp.prototype.getByteLength = function() { + return Math.floor((this.toBigInteger().bitLength() + 7) / 8) +}; +ECPointFp.prototype.getEncoded = function(c) { + var d = function(h, f) { + var g = h.toByteArrayUnsigned(); + if (f < g.length) { + g = g.slice(g.length - f) + } else { + while (f > g.length) { + g.unshift(0) + } + } + return g + }; + var a = this.getX().toBigInteger(); + var e = this.getY().toBigInteger(); + var b = d(a, 32); + if (c) { + if (e.isEven()) { + b.unshift(2) + } else { + b.unshift(3) + } + } else { + b.unshift(4); + b = b.concat(d(e, 32)) + } + return b +}; +ECPointFp.decodeFrom = function(g, c) { + var f = c[0]; + var e = c.length - 1; + var d = c.slice(1, 1 + e / 2); + var b = c.slice(1 + e / 2, 1 + e); + d.unshift(0); + b.unshift(0); + var a = new BigInteger(d); + var h = new BigInteger(b); + return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h)) +}; +ECPointFp.decodeFromHex = function(g, c) { + var f = c.substr(0, 2); + var e = c.length - 2; + var d = c.substr(2, e / 2); + var b = c.substr(2 + e / 2, e / 2); + var a = new BigInteger(d, 16); + var h = new BigInteger(b, 16); + return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h)) +}; +ECPointFp.prototype.add2D = function(c) { + if (this.isInfinity()) { + return c + } + if (c.isInfinity()) { + return this + } + if (this.x.equals(c.x)) { + if (this.y.equals(c.y)) { + return this.twice() + } + return this.curve.getInfinity() + } + var g = c.x.subtract(this.x); + var e = c.y.subtract(this.y); + var a = e.divide(g); + var d = a.square().subtract(this.x).subtract(c.x); + var f = a.multiply(this.x.subtract(d)).subtract(this.y); + return new ECPointFp(this.curve, d, f) +}; +ECPointFp.prototype.twice2D = function() { + if (this.isInfinity()) { + return this + } + if (this.y.toBigInteger().signum() == 0) { + return this.curve.getInfinity() + } + var b = this.curve.fromBigInteger(BigInteger.valueOf(2)); + var e = this.curve.fromBigInteger(BigInteger.valueOf(3)); + var a = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b)); + var c = a.square().subtract(this.x.multiply(b)); + var d = a.multiply(this.x.subtract(c)).subtract(this.y); + return new ECPointFp(this.curve, c, d) +}; +ECPointFp.prototype.multiply2D = function(b) { + if (this.isInfinity()) { + return this + } + if (b.signum() == 0) { + return this.curve.getInfinity() + } + var g = b; + var f = g.multiply(new BigInteger("3")); + var l = this.negate(); + var d = this; + var c; + for (c = f.bitLength() - 2; c > 0; --c) { + d = d.twice(); + var a = f.testBit(c); + var j = g.testBit(c); + if (a != j) { + d = d.add2D(a ? this: l) + } + } + return d +}; +ECPointFp.prototype.isOnCurve = function() { + var d = this.getX().toBigInteger(); + var i = this.getY().toBigInteger(); + var f = this.curve.getA().toBigInteger(); + var c = this.curve.getB().toBigInteger(); + var h = this.curve.getQ(); + var e = i.multiply(i).mod(h); + var g = d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h); + return e.equals(g) +}; +ECPointFp.prototype.toString = function() { + return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")" +}; +ECPointFp.prototype.validate = function() { + var c = this.curve.getQ(); + if (this.isInfinity()) { + throw new Error("Point is at infinity.") + } + var a = this.getX().toBigInteger(); + var b = this.getY().toBigInteger(); + if (a.compareTo(BigInteger.ONE) < 0 || a.compareTo(c.subtract(BigInteger.ONE)) > 0) { + throw new Error("x coordinate out of bounds") + } + if (b.compareTo(BigInteger.ONE) < 0 || b.compareTo(c.subtract(BigInteger.ONE)) > 0) { + throw new Error("y coordinate out of bounds") + } + if (!this.isOnCurve()) { + throw new Error("Point is not on the curve.") + } + if (this.multiply(c).isInfinity()) { + throw new Error("Point is not a scalar multiple of G.") + } + return true +}; +/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval + */ +var jsonParse = (function() { + var e = "(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)"; + var j = '(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))'; + var i = '(?:"' + j + '*")'; + var d = new RegExp("(?:false|true|null|[\\{\\}\\[\\]]|" + e + "|" + i + ")", "g"); + var k = new RegExp("\\\\(?:([^u])|u(.{4}))", "g"); + var g = { + '"': '"', + "/": "/", + "\\": "\\", + b: "\b", + f: "\f", + n: "\n", + r: "\r", + t: "\t" + }; + function h(l, m, n) { + return m ? g[m] : String.fromCharCode(parseInt(n, 16)) + } + var c = new String(""); + var a = "\\"; + var f = { + "{": Object, + "[": Array + }; + var b = Object.hasOwnProperty; + return function(u, q) { + var p = u.match(d); + var x; + var v = p[0]; + var l = false; + if ("{" === v) { + x = {} + } else { + if ("[" === v) { + x = [] + } else { + x = []; + l = true + } + } + var t; + var r = [x]; + for (var o = 1 - l, + m = p.length; o < m; ++o) { + v = p[o]; + var w; + switch (v.charCodeAt(0)) { + default: + w = r[0]; + w[t || w.length] = +(v); + t = void 0; + break; + case 34: + v = v.substring(1, v.length - 1); + if (v.indexOf(a) !== -1) { + v = v.replace(k, h) + } + w = r[0]; + if (!t) { + if (w instanceof Array) { + t = w.length + } else { + t = v || c; + break + } + } + w[t] = v; + t = void 0; + break; + case 91: + w = r[0]; + r.unshift(w[t || w.length] = []); + t = void 0; + break; + case 93: + r.shift(); + break; + case 102: + w = r[0]; + w[t || w.length] = false; + t = void 0; + break; + case 110: + w = r[0]; + w[t || w.length] = null; + t = void 0; + break; + case 116: + w = r[0]; + w[t || w.length] = true; + t = void 0; + break; + case 123: + w = r[0]; + r.unshift(w[t || w.length] = {}); + t = void 0; + break; + case 125: + r.shift(); + break + } + } + if (l) { + if (r.length !== 1) { + throw new Error() + } + x = x[0] + } else { + if (r.length) { + throw new Error() + } + } + if (q) { + var s = function(C, B) { + var D = C[B]; + if (D && typeof D === "object") { + var n = null; + for (var z in D) { + if (b.call(D, z) && D !== C) { + var y = s(D, z); + if (y !== void 0) { + D[z] = y + } else { + if (!n) { + n = [] + } + n.push(z) + } + } + } + if (n) { + for (var A = n.length; --A >= 0;) { + delete D[n[A]] + } + } + } + return q.call(C, B, D) + }; + x = s({ + "": x + }, + "") + } + return x + } +})(); +/*! asn1-1.0.12.js (c) 2013-2016 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { + KJUR.asn1 = {} +} +KJUR.asn1.ASN1Util = new +function() { + this.integerToByteHex = function(a) { + var b = a.toString(16); + if ((b.length % 2) == 1) { + b = "0" + b + } + return b + }; + this.bigIntToMinTwosComplementsHex = function(j) { + var f = j.toString(16); + if (f.substr(0, 1) != "-") { + if (f.length % 2 == 1) { + f = "0" + f + } else { + if (!f.match(/^[0-7]/)) { + f = "00" + f + } + } + } else { + var a = f.substr(1); + var e = a.length; + if (e % 2 == 1) { + e += 1 + } else { + if (!f.match(/^[0-7]/)) { + e += 2 + } + } + var g = ""; + for (var d = 0; d < e; d++) { + g += "f" + } + var c = new BigInteger(g, 16); + var b = c.xor(j).add(BigInteger.ONE); + f = b.toString(16).replace(/^-/, "") + } + return f + }; + this.getPEMStringFromHex = function(a, b) { + var c = hextob64(a); + var d = c.replace(/(.{64})/g, "$1\r\n"); + d = d.replace(/\r\n$/, ""); + return "-----BEGIN " + b + "-----\r\n" + d + "\r\n-----END " + b + "-----\r\n" + }; + this.newObject = function(b) { + var g = KJUR.asn1; + var k = Object.keys(b); + if (k.length != 1) { + throw "key of param shall be only one." + } + var j = k[0]; + if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + j + ":") == -1) { + throw "undefined key: " + j + } + if (j == "bool") { + return new g.DERBoolean(b[j]) + } + if (j == "int") { + return new g.DERInteger(b[j]) + } + if (j == "bitstr") { + return new g.DERBitString(b[j]) + } + if (j == "octstr") { + return new g.DEROctetString(b[j]) + } + if (j == "null") { + return new g.DERNull(b[j]) + } + if (j == "oid") { + return new g.DERObjectIdentifier(b[j]) + } + if (j == "enum") { + return new g.DEREnumerated(b[j]) + } + if (j == "utf8str") { + return new g.DERUTF8String(b[j]) + } + if (j == "numstr") { + return new g.DERNumericString(b[j]) + } + if (j == "prnstr") { + return new g.DERPrintableString(b[j]) + } + if (j == "telstr") { + return new g.DERTeletexString(b[j]) + } + if (j == "ia5str") { + return new g.DERIA5String(b[j]) + } + if (j == "utctime") { + return new g.DERUTCTime(b[j]) + } + if (j == "gentime") { + return new g.DERGeneralizedTime(b[j]) + } + if (j == "seq") { + var m = b[j]; + var h = []; + for (var e = 0; e < m.length; e++) { + var l = g.ASN1Util.newObject(m[e]); + h.push(l) + } + return new g.DERSequence({ + array: h + }) + } + if (j == "set") { + var m = b[j]; + var h = []; + for (var e = 0; e < m.length; e++) { + var l = g.ASN1Util.newObject(m[e]); + h.push(l) + } + return new g.DERSet({ + array: h + }) + } + if (j == "tag") { + var c = b[j]; + if (Object.prototype.toString.call(c) === "[object Array]" && c.length == 3) { + var d = g.ASN1Util.newObject(c[2]); + return new g.DERTaggedObject({ + tag: c[0], + explicit: c[1], + obj: d + }) + } else { + var f = {}; + if (c.explicit !== undefined) { + f.explicit = c.explicit + } + if (c.tag !== undefined) { + f.tag = c.tag + } + if (c.obj === undefined) { + throw "obj shall be specified for 'tag'." + } + f.obj = g.ASN1Util.newObject(c.obj); + return new g.DERTaggedObject(f) + } + } + }; + this.jsonToASN1HEX = function(b) { + var a = this.newObject(b); + return a.getEncodedHex() + } +}; +KJUR.asn1.ASN1Util.oidHexToInt = function(a) { + var j = ""; + var k = parseInt(a.substr(0, 2), 16); + var d = Math.floor(k / 40); + var c = k % 40; + var j = d + "." + c; + var e = ""; + for (var f = 2; f < a.length; f += 2) { + var g = parseInt(a.substr(f, 2), 16); + var h = ("00000000" + g.toString(2)).slice( - 8); + e = e + h.substr(1, 7); + if (h.substr(0, 1) == "0") { + var b = new BigInteger(e, 2); + j = j + "." + b.toString(10); + e = "" + } + } + return j +}; +KJUR.asn1.ASN1Util.oidIntToHex = function(f) { + var e = function(a) { + var k = a.toString(16); + if (k.length == 1) { + k = "0" + k + } + return k + }; + var d = function(o) { + var n = ""; + var k = new BigInteger(o, 10); + var a = k.toString(2); + var l = 7 - a.length % 7; + if (l == 7) { + l = 0 + } + var q = ""; + for (var m = 0; m < l; m++) { + q += "0" + } + a = q + a; + for (var m = 0; m < a.length - 1; m += 7) { + var p = a.substr(m, 7); + if (m != a.length - 7) { + p = "1" + p + } + n += e(parseInt(p, 2)) + } + return n + }; + if (!f.match(/^[0-9.]+$/)) { + throw "malformed oid string: " + f + } + var g = ""; + var b = f.split("."); + var j = parseInt(b[0]) * 40 + parseInt(b[1]); + g += e(j); + b.splice(0, 2); + for (var c = 0; c < b.length; c++) { + g += d(b[c]) + } + return g +}; +KJUR.asn1.ASN1Object = function() { + var c = true; + var b = null; + var d = "00"; + var e = "00"; + var a = ""; + this.getLengthHexFromValue = function() { + if (typeof this.hV == "undefined" || this.hV == null) { + throw "this.hV is null or undefined." + } + if (this.hV.length % 2 == 1) { + throw "value hex must be even length: n=" + a.length + ",v=" + this.hV + } + var i = this.hV.length / 2; + var h = i.toString(16); + if (h.length % 2 == 1) { + h = "0" + h + } + if (i < 128) { + return h + } else { + var g = h.length / 2; + if (g > 15) { + throw "ASN.1 length too long to represent by 8x: n = " + i.toString(16) + } + var f = 128 + g; + return f.toString(16) + h + } + }; + this.getEncodedHex = function() { + if (this.hTLV == null || this.isModified) { + this.hV = this.getFreshValueHex(); + this.hL = this.getLengthHexFromValue(); + this.hTLV = this.hT + this.hL + this.hV; + this.isModified = false + } + return this.hTLV + }; + this.getValueHex = function() { + this.getEncodedHex(); + return this.hV + }; + this.getFreshValueHex = function() { + return "" + } +}; +KJUR.asn1.DERAbstractString = function(c) { + KJUR.asn1.DERAbstractString.superclass.constructor.call(this); + var b = null; + var a = null; + this.getString = function() { + return this.s + }; + this.setString = function(d) { + this.hTLV = null; + this.isModified = true; + this.s = d; + this.hV = stohex(this.s) + }; + this.setStringHex = function(d) { + this.hTLV = null; + this.isModified = true; + this.s = null; + this.hV = d + }; + this.getFreshValueHex = function() { + return this.hV + }; + if (typeof c != "undefined") { + if (typeof c == "string") { + this.setString(c) + } else { + if (typeof c.str != "undefined") { + this.setString(c.str) + } else { + if (typeof c.hex != "undefined") { + this.setStringHex(c.hex) + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object); +KJUR.asn1.DERAbstractTime = function(c) { + KJUR.asn1.DERAbstractTime.superclass.constructor.call(this); + var b = null; + var a = null; + this.localDateToUTC = function(f) { + utc = f.getTime() + (f.getTimezoneOffset() * 60000); + var e = new Date(utc); + return e + }; + this.formatDate = function(m, o, e) { + var g = this.zeroPadding; + var n = this.localDateToUTC(m); + var p = String(n.getFullYear()); + if (o == "utc") { + p = p.substr(2, 2) + } + var l = g(String(n.getMonth() + 1), 2); + var q = g(String(n.getDate()), 2); + var h = g(String(n.getHours()), 2); + var i = g(String(n.getMinutes()), 2); + var j = g(String(n.getSeconds()), 2); + var r = p + l + q + h + i + j; + if (e === true) { + var f = n.getMilliseconds(); + if (f != 0) { + var k = g(String(f), 3); + k = k.replace(/[0]+$/, ""); + r = r + "." + k + } + } + return r + "Z" + }; + this.zeroPadding = function(e, d) { + if (e.length >= d) { + return e + } + return new Array(d - e.length + 1).join("0") + e + }; + this.getString = function() { + return this.s + }; + this.setString = function(d) { + this.hTLV = null; + this.isModified = true; + this.s = d; + this.hV = stohex(d) + }; + this.setByDateValue = function(h, j, e, d, f, g) { + var i = new Date(Date.UTC(h, j - 1, e, d, f, g, 0)); + this.setByDate(i) + }; + this.getFreshValueHex = function() { + return this.hV + } +}; +YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object); +KJUR.asn1.DERAbstractStructured = function(b) { + KJUR.asn1.DERAbstractString.superclass.constructor.call(this); + var a = null; + this.setByASN1ObjectArray = function(c) { + this.hTLV = null; + this.isModified = true; + this.asn1Array = c + }; + this.appendASN1Object = function(c) { + this.hTLV = null; + this.isModified = true; + this.asn1Array.push(c) + }; + this.asn1Array = new Array(); + if (typeof b != "undefined") { + if (typeof b.array != "undefined") { + this.asn1Array = b.array + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object); +KJUR.asn1.DERBoolean = function() { + KJUR.asn1.DERBoolean.superclass.constructor.call(this); + this.hT = "01"; + this.hTLV = "0101ff" +}; +YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object); +KJUR.asn1.DERInteger = function(a) { + KJUR.asn1.DERInteger.superclass.constructor.call(this); + this.hT = "02"; + this.setByBigInteger = function(b) { + this.hTLV = null; + this.isModified = true; + this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b) + }; + this.setByInteger = function(c) { + var b = new BigInteger(String(c), 10); + this.setByBigInteger(b) + }; + this.setValueHex = function(b) { + this.hV = b + }; + this.getFreshValueHex = function() { + return this.hV + }; + if (typeof a != "undefined") { + if (typeof a.bigint != "undefined") { + this.setByBigInteger(a.bigint) + } else { + if (typeof a["int"] != "undefined") { + this.setByInteger(a["int"]) + } else { + if (typeof a == "number") { + this.setByInteger(a) + } else { + if (typeof a.hex != "undefined") { + this.setValueHex(a.hex) + } + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object); +KJUR.asn1.DERBitString = function(b) { + if (b !== undefined && typeof b.obj !== "undefined") { + var a = KJUR.asn1.ASN1Util.newObject(b.obj); + b.hex = "00" + a.getEncodedHex() + } + KJUR.asn1.DERBitString.superclass.constructor.call(this); + this.hT = "03"; + this.setHexValueIncludingUnusedBits = function(c) { + this.hTLV = null; + this.isModified = true; + this.hV = c + }; + this.setUnusedBitsAndHexValue = function(c, e) { + if (c < 0 || 7 < c) { + throw "unused bits shall be from 0 to 7: u = " + c + } + var d = "0" + c; + this.hTLV = null; + this.isModified = true; + this.hV = d + e + }; + this.setByBinaryString = function(e) { + e = e.replace(/0+$/, ""); + var f = 8 - e.length % 8; + if (f == 8) { + f = 0 + } + for (var g = 0; g <= f; g++) { + e += "0" + } + var j = ""; + for (var g = 0; g < e.length - 1; g += 8) { + var d = e.substr(g, 8); + var c = parseInt(d, 2).toString(16); + if (c.length == 1) { + c = "0" + c + } + j += c + } + this.hTLV = null; + this.isModified = true; + this.hV = "0" + f + j + }; + this.setByBooleanArray = function(e) { + var d = ""; + for (var c = 0; c < e.length; c++) { + if (e[c] == true) { + d += "1" + } else { + d += "0" + } + } + this.setByBinaryString(d) + }; + this.newFalseArray = function(e) { + var c = new Array(e); + for (var d = 0; d < e; d++) { + c[d] = false + } + return c + }; + this.getFreshValueHex = function() { + return this.hV + }; + if (typeof b != "undefined") { + if (typeof b == "string" && b.toLowerCase().match(/^[0-9a-f]+$/)) { + this.setHexValueIncludingUnusedBits(b) + } else { + if (typeof b.hex != "undefined") { + this.setHexValueIncludingUnusedBits(b.hex) + } else { + if (typeof b.bin != "undefined") { + this.setByBinaryString(b.bin) + } else { + if (typeof b.array != "undefined") { + this.setByBooleanArray(b.array) + } + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object); +KJUR.asn1.DEROctetString = function(b) { + if (b !== undefined && typeof b.obj !== "undefined") { + var a = KJUR.asn1.ASN1Util.newObject(b.obj); + b.hex = a.getEncodedHex() + } + KJUR.asn1.DEROctetString.superclass.constructor.call(this, b); + this.hT = "04" +}; +YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString); +KJUR.asn1.DERNull = function() { + KJUR.asn1.DERNull.superclass.constructor.call(this); + this.hT = "05"; + this.hTLV = "0500" +}; +YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object); +KJUR.asn1.DERObjectIdentifier = function(c) { + var b = function(d) { + var e = d.toString(16); + if (e.length == 1) { + e = "0" + e + } + return e + }; + var a = function(k) { + var j = ""; + var e = new BigInteger(k, 10); + var d = e.toString(2); + var f = 7 - d.length % 7; + if (f == 7) { + f = 0 + } + var m = ""; + for (var g = 0; g < f; g++) { + m += "0" + } + d = m + d; + for (var g = 0; g < d.length - 1; g += 7) { + var l = d.substr(g, 7); + if (g != d.length - 7) { + l = "1" + l + } + j += b(parseInt(l, 2)) + } + return j + }; + KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this); + this.hT = "06"; + this.setValueHex = function(d) { + this.hTLV = null; + this.isModified = true; + this.s = null; + this.hV = d + }; + this.setValueOidString = function(f) { + if (!f.match(/^[0-9.]+$/)) { + throw "malformed oid string: " + f + } + var g = ""; + var d = f.split("."); + var j = parseInt(d[0]) * 40 + parseInt(d[1]); + g += b(j); + d.splice(0, 2); + for (var e = 0; e < d.length; e++) { + g += a(d[e]) + } + this.hTLV = null; + this.isModified = true; + this.s = null; + this.hV = g + }; + this.setValueName = function(e) { + var d = KJUR.asn1.x509.OID.name2oid(e); + if (d !== "") { + this.setValueOidString(d) + } else { + throw "DERObjectIdentifier oidName undefined: " + e + } + }; + this.getFreshValueHex = function() { + return this.hV + }; + if (c !== undefined) { + if (typeof c === "string") { + if (c.match(/^[0-2].[0-9.]+$/)) { + this.setValueOidString(c) + } else { + this.setValueName(c) + } + } else { + if (c.oid !== undefined) { + this.setValueOidString(c.oid) + } else { + if (c.hex !== undefined) { + this.setValueHex(c.hex) + } else { + if (c.name !== undefined) { + this.setValueName(c.name) + } + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object); +KJUR.asn1.DEREnumerated = function(a) { + KJUR.asn1.DEREnumerated.superclass.constructor.call(this); + this.hT = "0a"; + this.setByBigInteger = function(b) { + this.hTLV = null; + this.isModified = true; + this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b) + }; + this.setByInteger = function(c) { + var b = new BigInteger(String(c), 10); + this.setByBigInteger(b) + }; + this.setValueHex = function(b) { + this.hV = b + }; + this.getFreshValueHex = function() { + return this.hV + }; + if (typeof a != "undefined") { + if (typeof a["int"] != "undefined") { + this.setByInteger(a["int"]) + } else { + if (typeof a == "number") { + this.setByInteger(a) + } else { + if (typeof a.hex != "undefined") { + this.setValueHex(a.hex) + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object); +KJUR.asn1.DERUTF8String = function(a) { + KJUR.asn1.DERUTF8String.superclass.constructor.call(this, a); + this.hT = "0c" +}; +YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString); +KJUR.asn1.DERNumericString = function(a) { + KJUR.asn1.DERNumericString.superclass.constructor.call(this, a); + this.hT = "12" +}; +YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString); +KJUR.asn1.DERPrintableString = function(a) { + KJUR.asn1.DERPrintableString.superclass.constructor.call(this, a); + this.hT = "13" +}; +YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString); +KJUR.asn1.DERTeletexString = function(a) { + KJUR.asn1.DERTeletexString.superclass.constructor.call(this, a); + this.hT = "14" +}; +YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString); +KJUR.asn1.DERIA5String = function(a) { + KJUR.asn1.DERIA5String.superclass.constructor.call(this, a); + this.hT = "16" +}; +YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString); +KJUR.asn1.DERUTCTime = function(a) { + KJUR.asn1.DERUTCTime.superclass.constructor.call(this, a); + this.hT = "17"; + this.setByDate = function(b) { + this.hTLV = null; + this.isModified = true; + this.date = b; + this.s = this.formatDate(this.date, "utc"); + this.hV = stohex(this.s) + }; + this.getFreshValueHex = function() { + if (typeof this.date == "undefined" && typeof this.s == "undefined") { + this.date = new Date(); + this.s = this.formatDate(this.date, "utc"); + this.hV = stohex(this.s) + } + return this.hV + }; + if (a !== undefined) { + if (a.str !== undefined) { + this.setString(a.str) + } else { + if (typeof a == "string" && a.match(/^[0-9]{12}Z$/)) { + this.setString(a) + } else { + if (a.hex !== undefined) { + this.setStringHex(a.hex) + } else { + if (a.date !== undefined) { + this.setByDate(a.date) + } + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime); +KJUR.asn1.DERGeneralizedTime = function(a) { + KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, a); + this.hT = "18"; + this.withMillis = false; + this.setByDate = function(b) { + this.hTLV = null; + this.isModified = true; + this.date = b; + this.s = this.formatDate(this.date, "gen", this.withMillis); + this.hV = stohex(this.s) + }; + this.getFreshValueHex = function() { + if (this.date === undefined && this.s === undefined) { + this.date = new Date(); + this.s = this.formatDate(this.date, "gen", this.withMillis); + this.hV = stohex(this.s) + } + return this.hV + }; + if (a !== undefined) { + if (a.str !== undefined) { + this.setString(a.str) + } else { + if (typeof a == "string" && a.match(/^[0-9]{14}Z$/)) { + this.setString(a) + } else { + if (a.hex !== undefined) { + this.setStringHex(a.hex) + } else { + if (a.date !== undefined) { + this.setByDate(a.date) + } + } + } + } + if (a.millis === true) { + this.withMillis = true + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime); +KJUR.asn1.DERSequence = function(a) { + KJUR.asn1.DERSequence.superclass.constructor.call(this, a); + this.hT = "30"; + this.getFreshValueHex = function() { + var c = ""; + for (var b = 0; b < this.asn1Array.length; b++) { + var d = this.asn1Array[b]; + c += d.getEncodedHex() + } + this.hV = c; + return this.hV + } +}; +YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured); +KJUR.asn1.DERSet = function(a) { + KJUR.asn1.DERSet.superclass.constructor.call(this, a); + this.hT = "31"; + this.sortFlag = true; + this.getFreshValueHex = function() { + var b = new Array(); + for (var c = 0; c < this.asn1Array.length; c++) { + var d = this.asn1Array[c]; + b.push(d.getEncodedHex()) + } + if (this.sortFlag == true) { + b.sort() + } + this.hV = b.join(""); + return this.hV + }; + if (typeof a != "undefined") { + if (typeof a.sortflag != "undefined" && a.sortflag == false) { + this.sortFlag = false + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured); +KJUR.asn1.DERTaggedObject = function(a) { + KJUR.asn1.DERTaggedObject.superclass.constructor.call(this); + this.hT = "a0"; + this.hV = ""; + this.isExplicit = true; + this.asn1Object = null; + this.setASN1Object = function(b, c, d) { + this.hT = c; + this.isExplicit = b; + this.asn1Object = d; + if (this.isExplicit) { + this.hV = this.asn1Object.getEncodedHex(); + this.hTLV = null; + this.isModified = true + } else { + this.hV = null; + this.hTLV = d.getEncodedHex(); + this.hTLV = this.hTLV.replace(/^../, c); + this.isModified = false + } + }; + this.getFreshValueHex = function() { + return this.hV + }; + if (typeof a != "undefined") { + if (typeof a.tag != "undefined") { + this.hT = a.tag + } + if (typeof a.explicit != "undefined") { + this.isExplicit = a.explicit + } + if (typeof a.obj != "undefined") { + this.asn1Object = a.obj; + this.setASN1Object(this.isExplicit, this.hT, this.asn1Object) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object); +/*! asn1hex-1.1.9.js (c) 2012-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var ASN1HEX = new +function() {}; +ASN1HEX.getByteLengthOfL_AtObj = function(b, c) { + if (b.substring(c + 2, c + 3) != "8") { + return 1 + } + var a = parseInt(b.substring(c + 3, c + 4)); + if (a == 0) { + return - 1 + } + if (0 < a && a < 10) { + return a + 1 + } + return - 2 +}; +ASN1HEX.getHexOfL_AtObj = function(b, c) { + var a = ASN1HEX.getByteLengthOfL_AtObj(b, c); + if (a < 1) { + return "" + } + return b.substring(c + 2, c + 2 + a * 2) +}; +ASN1HEX.getIntOfL_AtObj = function(c, d) { + var b = ASN1HEX.getHexOfL_AtObj(c, d); + if (b == "") { + return - 1 + } + var a; + if (parseInt(b.substring(0, 1)) < 8) { + a = new BigInteger(b, 16) + } else { + a = new BigInteger(b.substring(2), 16) + } + return a.intValue() +}; +ASN1HEX.getStartPosOfV_AtObj = function(b, c) { + var a = ASN1HEX.getByteLengthOfL_AtObj(b, c); + if (a < 0) { + return a + } + return c + (a + 1) * 2 +}; +ASN1HEX.getHexOfV_AtObj = function(c, d) { + var b = ASN1HEX.getStartPosOfV_AtObj(c, d); + var a = ASN1HEX.getIntOfL_AtObj(c, d); + return c.substring(b, b + a * 2) +}; +ASN1HEX.getHexOfTLV_AtObj = function(c, e) { + var b = c.substr(e, 2); + var d = ASN1HEX.getHexOfL_AtObj(c, e); + var a = ASN1HEX.getHexOfV_AtObj(c, e); + return b + d + a +}; +ASN1HEX.getPosOfNextSibling_AtObj = function(c, d) { + var b = ASN1HEX.getStartPosOfV_AtObj(c, d); + var a = ASN1HEX.getIntOfL_AtObj(c, d); + return b + a * 2 +}; +ASN1HEX.getPosArrayOfChildren_AtObj = function(f, j) { + var c = new Array(); + var i = ASN1HEX.getStartPosOfV_AtObj(f, j); + if (f.substr(j, 2) == "03") { + c.push(i + 2) + } else { + c.push(i) + } + var b = ASN1HEX.getIntOfL_AtObj(f, j); + var g = i; + var d = 0; + while (1) { + var e = ASN1HEX.getPosOfNextSibling_AtObj(f, g); + if (e == null || (e - i >= (b * 2))) { + break + } + if (d >= 200) { + break + } + c.push(e); + g = e; + d++ + } + return c +}; +ASN1HEX.getNthChildIndex_AtObj = function(d, b, e) { + var c = ASN1HEX.getPosArrayOfChildren_AtObj(d, b); + return c[e] +}; +ASN1HEX.getDecendantIndexByNthList = function(e, d, c) { + if (c.length == 0) { + return d + } + var f = c.shift(); + var b = ASN1HEX.getPosArrayOfChildren_AtObj(e, d); + return ASN1HEX.getDecendantIndexByNthList(e, b[f], c) +}; +ASN1HEX.getDecendantHexTLVByNthList = function(d, c, b) { + var a = ASN1HEX.getDecendantIndexByNthList(d, c, b); + return ASN1HEX.getHexOfTLV_AtObj(d, a) +}; +ASN1HEX.getDecendantHexVByNthList = function(d, c, b) { + var a = ASN1HEX.getDecendantIndexByNthList(d, c, b); + return ASN1HEX.getHexOfV_AtObj(d, a) +}; +ASN1HEX.getVbyList = function(d, c, b, e) { + var a = ASN1HEX.getDecendantIndexByNthList(d, c, b); + if (a === undefined) { + throw "can't find nthList object" + } + if (e !== undefined) { + if (d.substr(a, 2) != e) { + throw "checking tag doesn't match: " + d.substr(a, 2) + "!=" + e + } + } + return ASN1HEX.getHexOfV_AtObj(d, a) +}; +ASN1HEX.hextooidstr = function(e) { + var h = function(b, a) { + if (b.length >= a) { + return b + } + return new Array(a - b.length + 1).join("0") + b + }; + var l = []; + var o = e.substr(0, 2); + var f = parseInt(o, 16); + l[0] = new String(Math.floor(f / 40)); + l[1] = new String(f % 40); + var m = e.substr(2); + var k = []; + for (var g = 0; g < m.length / 2; g++) { + k.push(parseInt(m.substr(g * 2, 2), 16)) + } + var j = []; + var d = ""; + for (var g = 0; g < k.length; g++) { + if (k[g] & 128) { + d = d + h((k[g] & 127).toString(2), 7) + } else { + d = d + h((k[g] & 127).toString(2), 7); + j.push(new String(parseInt(d, 2))); + d = "" + } + } + var n = l.join("."); + if (j.length > 0) { + n = n + "." + j.join(".") + } + return n +}; +ASN1HEX.dump = function(q, c, k, g) { + var e = q; + if (q instanceof KJUR.asn1.ASN1Object) { + e = q.getEncodedHex() + } + var o = function(x, i) { + if (x.length <= i * 2) { + return x + } else { + var v = x.substr(0, i) + "..(total " + x.length / 2 + "bytes).." + x.substr(x.length - i, i); + return v + } + }; + if (c === undefined) { + c = { + ommit_long_octet: 32 + } + } + if (k === undefined) { + k = 0 + } + if (g === undefined) { + g = "" + } + var t = c.ommit_long_octet; + if (e.substr(k, 2) == "01") { + var h = ASN1HEX.getHexOfV_AtObj(e, k); + if (h == "00") { + return g + "BOOLEAN FALSE\n" + } else { + return g + "BOOLEAN TRUE\n" + } + } + if (e.substr(k, 2) == "02") { + var h = ASN1HEX.getHexOfV_AtObj(e, k); + return g + "INTEGER " + o(h, t) + "\n" + } + if (e.substr(k, 2) == "03") { + var h = ASN1HEX.getHexOfV_AtObj(e, k); + return g + "BITSTRING " + o(h, t) + "\n" + } + if (e.substr(k, 2) == "04") { + var h = ASN1HEX.getHexOfV_AtObj(e, k); + if (ASN1HEX.isASN1HEX(h)) { + var j = g + "OCTETSTRING, encapsulates\n"; + j = j + ASN1HEX.dump(h, c, 0, g + " "); + return j + } else { + return g + "OCTETSTRING " + o(h, t) + "\n" + } + } + if (e.substr(k, 2) == "05") { + return g + "NULL\n" + } + if (e.substr(k, 2) == "06") { + var l = ASN1HEX.getHexOfV_AtObj(e, k); + var a = KJUR.asn1.ASN1Util.oidHexToInt(l); + var n = KJUR.asn1.x509.OID.oid2name(a); + var b = a.replace(/\./g, " "); + if (n != "") { + return g + "ObjectIdentifier " + n + " (" + b + ")\n" + } else { + return g + "ObjectIdentifier (" + b + ")\n" + } + } + if (e.substr(k, 2) == "0c") { + return g + "UTF8String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n" + } + if (e.substr(k, 2) == "13") { + return g + "PrintableString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n" + } + if (e.substr(k, 2) == "14") { + return g + "TeletexString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n" + } + if (e.substr(k, 2) == "16") { + return g + "IA5String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n" + } + if (e.substr(k, 2) == "17") { + return g + "UTCTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "\n" + } + if (e.substr(k, 2) == "18") { + return g + "GeneralizedTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "\n" + } + if (e.substr(k, 2) == "30") { + if (e.substr(k, 4) == "3000") { + return g + "SEQUENCE {}\n" + } + var j = g + "SEQUENCE\n"; + var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, k); + var f = c; + if ((d.length == 2 || d.length == 3) && e.substr(d[0], 2) == "06" && e.substr(d[d.length - 1], 2) == "04") { + var u = ASN1HEX.getHexOfV_AtObj(e, d[0]); + var a = KJUR.asn1.ASN1Util.oidHexToInt(u); + var n = KJUR.asn1.x509.OID.oid2name(a); + var p = JSON.parse(JSON.stringify(c)); + p.x509ExtName = n; + f = p + } + for (var r = 0; r < d.length; r++) { + j = j + ASN1HEX.dump(e, f, d[r], g + " ") + } + return j + } + if (e.substr(k, 2) == "31") { + var j = g + "SET\n"; + var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, k); + for (var r = 0; r < d.length; r++) { + j = j + ASN1HEX.dump(e, c, d[r], g + " ") + } + return j + } + var w = parseInt(e.substr(k, 2), 16); + if ((w & 128) != 0) { + var m = w & 31; + if ((w & 32) != 0) { + var j = g + "[" + m + "]\n"; + var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, k); + for (var r = 0; r < d.length; r++) { + j = j + ASN1HEX.dump(e, c, d[r], g + " ") + } + return j + } else { + var h = ASN1HEX.getHexOfV_AtObj(e, k); + if (h.substr(0, 8) == "68747470") { + h = hextoutf8(h) + } + if (c.x509ExtName === "subjectAltName" && m == 2) { + h = hextoutf8(h) + } + var j = g + "[" + m + "] " + h + "\n"; + return j + } + } + return g + "UNKNOWN(" + e.substr(k, 2) + ") " + ASN1HEX.getHexOfV_AtObj(e, k) + "\n" +}; +ASN1HEX.isASN1HEX = function(d) { + if (d.length % 2 == 1) { + return false + } + var c = ASN1HEX.getIntOfL_AtObj(d, 0); + var b = d.substr(0, 2); + var e = ASN1HEX.getHexOfL_AtObj(d, 0); + var a = d.length - b.length - e.length; + if (a == c * 2) { + return true + } + return false +}; +ASN1HEX.pemToHex = function(b, d) { + if (b.indexOf("-----BEGIN ") == -1) { + throw "can't find PEM header: " + d + } + if (d !== undefined) { + b = b.replace("-----BEGIN " + d + "-----", ""); + b = b.replace("-----END " + d + "-----", "") + } else { + b = b.replace(/-----BEGIN [^-]+-----/, ""); + b = b.replace(/-----END [^-]+-----/, "") + } + var c = b.replace(/\s+/g, ""); + var a = b64tohex(c); + return a +}; +/*! asn1x509-1.0.22.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { + KJUR.asn1 = {} +} +if (typeof KJUR.asn1.x509 == "undefined" || !KJUR.asn1.x509) { + KJUR.asn1.x509 = {} +} +KJUR.asn1.x509.Certificate = function(g) { + KJUR.asn1.x509.Certificate.superclass.constructor.call(this); + var b = null; + var d = null; + var f = null; + var c = null; + var a = null; + var e = null; + this.setRsaPrvKeyByPEMandPass = function(i, k) { + var h = PKCS5PKEY.getDecryptedKeyHex(i, k); + var j = new RSAKey(); + j.readPrivateKeyFromASN1HexString(h); + this.prvKey = j + }; + this.sign = function() { + this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg; + var i = new KJUR.crypto.Signature({ + alg: this.asn1SignatureAlg.nameAlg + }); + i.init(this.prvKey); + i.updateHex(this.asn1TBSCert.getEncodedHex()); + this.hexSig = i.sign(); + this.asn1Sig = new KJUR.asn1.DERBitString({ + hex: "00" + this.hexSig + }); + var h = new KJUR.asn1.DERSequence({ + array: [this.asn1TBSCert, this.asn1SignatureAlg, this.asn1Sig] + }); + this.hTLV = h.getEncodedHex(); + this.isModified = false + }; + this.setSignatureHex = function(h) { + this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg; + this.hexSig = h; + this.asn1Sig = new KJUR.asn1.DERBitString({ + hex: "00" + this.hexSig + }); + var i = new KJUR.asn1.DERSequence({ + array: [this.asn1TBSCert, this.asn1SignatureAlg, this.asn1Sig] + }); + this.hTLV = i.getEncodedHex(); + this.isModified = false + }; + this.getEncodedHex = function() { + if (this.isModified == false && this.hTLV != null) { + return this.hTLV + } + throw "not signed yet" + }; + this.getPEMString = function() { + var j = this.getEncodedHex(); + var h = CryptoJS.enc.Hex.parse(j); + var i = CryptoJS.enc.Base64.stringify(h); + var k = i.replace(/(.{64})/g, "$1\r\n"); + return "-----BEGIN CERTIFICATE-----\r\n" + k + "\r\n-----END CERTIFICATE-----\r\n" + }; + if (g !== undefined) { + if (g.tbscertobj !== undefined) { + this.asn1TBSCert = g.tbscertobj + } + if (g.prvkeyobj !== undefined) { + this.prvKey = g.prvkeyobj + } else { + if (g.rsaprvkey !== undefined) { + this.prvKey = g.rsaprvkey + } else { + if ((g.rsaprvpem !== undefined) && (g.rsaprvpas !== undefined)) { + this.setRsaPrvKeyByPEMandPass(g.rsaprvpem, g.rsaprvpas) + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.Certificate, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.TBSCertificate = function(a) { + KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this); + this._initialize = function() { + this.asn1Array = new Array(); + this.asn1Version = new KJUR.asn1.DERTaggedObject({ + obj: new KJUR.asn1.DERInteger({ + "int": 2 + }) + }); + this.asn1SerialNumber = null; + this.asn1SignatureAlg = null; + this.asn1Issuer = null; + this.asn1NotBefore = null; + this.asn1NotAfter = null; + this.asn1Subject = null; + this.asn1SubjPKey = null; + this.extensionsArray = new Array() + }; + this.setSerialNumberByParam = function(b) { + this.asn1SerialNumber = new KJUR.asn1.DERInteger(b) + }; + this.setSignatureAlgByParam = function(b) { + this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(b) + }; + this.setIssuerByParam = function(b) { + this.asn1Issuer = new KJUR.asn1.x509.X500Name(b) + }; + this.setNotBeforeByParam = function(b) { + this.asn1NotBefore = new KJUR.asn1.x509.Time(b) + }; + this.setNotAfterByParam = function(b) { + this.asn1NotAfter = new KJUR.asn1.x509.Time(b) + }; + this.setSubjectByParam = function(b) { + this.asn1Subject = new KJUR.asn1.x509.X500Name(b) + }; + this.setSubjectPublicKeyByParam = function(b) { + this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b) + }; + this.setSubjectPublicKeyByGetKey = function(c) { + var b = KEYUTIL.getKey(c); + this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b) + }; + this.appendExtension = function(b) { + this.extensionsArray.push(b) + }; + this.appendExtensionByName = function(c, b) { + KJUR.asn1.x509.Extension.appendByNameToArray(c, b, this.extensionsArray) + }; + this.getEncodedHex = function() { + if (this.asn1NotBefore == null || this.asn1NotAfter == null) { + throw "notBefore and/or notAfter not set" + } + var c = new KJUR.asn1.DERSequence({ + array: [this.asn1NotBefore, this.asn1NotAfter] + }); + this.asn1Array = new Array(); + this.asn1Array.push(this.asn1Version); + this.asn1Array.push(this.asn1SerialNumber); + this.asn1Array.push(this.asn1SignatureAlg); + this.asn1Array.push(this.asn1Issuer); + this.asn1Array.push(c); + this.asn1Array.push(this.asn1Subject); + this.asn1Array.push(this.asn1SubjPKey); + if (this.extensionsArray.length > 0) { + var d = new KJUR.asn1.DERSequence({ + array: this.extensionsArray + }); + var b = new KJUR.asn1.DERTaggedObject({ + explicit: true, + tag: "a3", + obj: d + }); + this.asn1Array.push(b) + } + var e = new KJUR.asn1.DERSequence({ + array: this.asn1Array + }); + this.hTLV = e.getEncodedHex(); + this.isModified = false; + return this.hTLV + }; + this._initialize() +}; +YAHOO.lang.extend(KJUR.asn1.x509.TBSCertificate, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.Extension = function(b) { + KJUR.asn1.x509.Extension.superclass.constructor.call(this); + var a = null; + this.getEncodedHex = function() { + var f = new KJUR.asn1.DERObjectIdentifier({ + oid: this.oid + }); + var e = new KJUR.asn1.DEROctetString({ + hex: this.getExtnValueHex() + }); + var d = new Array(); + d.push(f); + if (this.critical) { + d.push(new KJUR.asn1.DERBoolean()) + } + d.push(e); + var c = new KJUR.asn1.DERSequence({ + array: d + }); + return c.getEncodedHex() + }; + this.critical = false; + if (typeof b != "undefined") { + if (typeof b.critical != "undefined") { + this.critical = b.critical + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.Extension, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.Extension.appendByNameToArray = function(e, c, b) { + if (e.toLowerCase() == "basicconstraints") { + var d = new KJUR.asn1.x509.BasicConstraints(c); + b.push(d) + } else { + if (e.toLowerCase() == "keyusage") { + var d = new KJUR.asn1.x509.KeyUsage(c); + b.push(d) + } else { + if (e.toLowerCase() == "crldistributionpoints") { + var d = new KJUR.asn1.x509.CRLDistributionPoints(c); + b.push(d) + } else { + if (e.toLowerCase() == "extkeyusage") { + var d = new KJUR.asn1.x509.ExtKeyUsage(c); + b.push(d) + } else { + if (e.toLowerCase() == "authoritykeyidentifier") { + var d = new KJUR.asn1.x509.AuthorityKeyIdentifier(c); + b.push(d) + } else { + if (e.toLowerCase() == "authorityinfoaccess") { + var d = new KJUR.asn1.x509.AuthorityInfoAccess(c); + b.push(d) + } else { + if (e.toLowerCase() == "subjectaltname") { + var d = new KJUR.asn1.x509.SubjectAltName(c); + b.push(d) + } else { + if (e.toLowerCase() == "issueraltname") { + var d = new KJUR.asn1.x509.IssuerAltName(c); + b.push(d) + } else { + throw "unsupported extension name: " + e + } + } + } + } + } + } + } + } +}; +KJUR.asn1.x509.KeyUsage = function(a) { + KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this, a); + this.getExtnValueHex = function() { + return this.asn1ExtnValue.getEncodedHex() + }; + this.oid = "2.5.29.15"; + if (typeof a != "undefined") { + if (typeof a.bin != "undefined") { + this.asn1ExtnValue = new KJUR.asn1.DERBitString(a) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.KeyUsage, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.BasicConstraints = function(c) { + KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this, c); + var a = false; + var b = -1; + this.getExtnValueHex = function() { + var e = new Array(); + if (this.cA) { + e.push(new KJUR.asn1.DERBoolean()) + } + if (this.pathLen > -1) { + e.push(new KJUR.asn1.DERInteger({ + "int": this.pathLen + })) + } + var d = new KJUR.asn1.DERSequence({ + array: e + }); + this.asn1ExtnValue = d; + return this.asn1ExtnValue.getEncodedHex() + }; + this.oid = "2.5.29.19"; + this.cA = false; + this.pathLen = -1; + if (typeof c != "undefined") { + if (typeof c.cA != "undefined") { + this.cA = c.cA + } + if (typeof c.pathLen != "undefined") { + this.pathLen = c.pathLen + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.BasicConstraints, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.CRLDistributionPoints = function(a) { + KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, a); + this.getExtnValueHex = function() { + return this.asn1ExtnValue.getEncodedHex() + }; + this.setByDPArray = function(b) { + this.asn1ExtnValue = new KJUR.asn1.DERSequence({ + array: b + }) + }; + this.setByOneURI = function(e) { + var b = new KJUR.asn1.x509.GeneralNames([{ + uri: e + }]); + var d = new KJUR.asn1.x509.DistributionPointName(b); + var c = new KJUR.asn1.x509.DistributionPoint({ + dpobj: d + }); + this.setByDPArray([c]) + }; + this.oid = "2.5.29.31"; + if (typeof a != "undefined") { + if (typeof a.array != "undefined") { + this.setByDPArray(a.array) + } else { + if (typeof a.uri != "undefined") { + this.setByOneURI(a.uri) + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.CRLDistributionPoints, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.ExtKeyUsage = function(a) { + KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, a); + this.setPurposeArray = function(b) { + this.asn1ExtnValue = new KJUR.asn1.DERSequence(); + for (var c = 0; c < b.length; c++) { + var d = new KJUR.asn1.DERObjectIdentifier(b[c]); + this.asn1ExtnValue.appendASN1Object(d) + } + }; + this.getExtnValueHex = function() { + return this.asn1ExtnValue.getEncodedHex() + }; + this.oid = "2.5.29.37"; + if (typeof a != "undefined") { + if (typeof a.array != "undefined") { + this.setPurposeArray(a.array) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.ExtKeyUsage, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.AuthorityKeyIdentifier = function(a) { + KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, a); + this.asn1KID = null; + this.asn1CertIssuer = null; + this.asn1CertSN = null; + this.getExtnValueHex = function() { + var c = new Array(); + if (this.asn1KID) { + c.push(new KJUR.asn1.DERTaggedObject({ + explicit: false, + tag: "80", + obj: this.asn1KID + })) + } + if (this.asn1CertIssuer) { + c.push(new KJUR.asn1.DERTaggedObject({ + explicit: false, + tag: "a1", + obj: this.asn1CertIssuer + })) + } + if (this.asn1CertSN) { + c.push(new KJUR.asn1.DERTaggedObject({ + explicit: false, + tag: "82", + obj: this.asn1CertSN + })) + } + var b = new KJUR.asn1.DERSequence({ + array: c + }); + this.asn1ExtnValue = b; + return this.asn1ExtnValue.getEncodedHex() + }; + this.setKIDByParam = function(b) { + this.asn1KID = new KJUR.asn1.DEROctetString(b) + }; + this.setCertIssuerByParam = function(b) { + this.asn1CertIssuer = new KJUR.asn1.x509.X500Name(b) + }; + this.setCertSNByParam = function(b) { + this.asn1CertSN = new KJUR.asn1.DERInteger(b) + }; + this.oid = "2.5.29.35"; + if (typeof a != "undefined") { + if (typeof a.kid != "undefined") { + this.setKIDByParam(a.kid) + } + if (typeof a.issuer != "undefined") { + this.setCertIssuerByParam(a.issuer) + } + if (typeof a.sn != "undefined") { + this.setCertSNByParam(a.sn) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.AuthorityKeyIdentifier, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.AuthorityInfoAccess = function(a) { + KJUR.asn1.x509.AuthorityInfoAccess.superclass.constructor.call(this, a); + this.setAccessDescriptionArray = function(c) { + var g = new Array(); + for (var b = 0; b < c.length; b++) { + var e = new KJUR.asn1.DERObjectIdentifier(c[b].accessMethod); + var d = new KJUR.asn1.x509.GeneralName(c[b].accessLocation); + var f = new KJUR.asn1.DERSequence({ + array: [e, d] + }); + g.push(f) + } + this.asn1ExtnValue = new KJUR.asn1.DERSequence({ + array: g + }) + }; + this.getExtnValueHex = function() { + return this.asn1ExtnValue.getEncodedHex() + }; + this.oid = "1.3.6.1.5.5.7.1.1"; + if (typeof a != "undefined") { + if (typeof a.array != "undefined") { + this.setAccessDescriptionArray(a.array) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.AuthorityInfoAccess, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.SubjectAltName = function(a) { + KJUR.asn1.x509.SubjectAltName.superclass.constructor.call(this, a); + this.setNameArray = function(b) { + this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b) + }; + this.getExtnValueHex = function() { + return this.asn1ExtnValue.getEncodedHex() + }; + this.oid = "2.5.29.17"; + if (a !== undefined) { + if (a.array !== undefined) { + this.setNameArray(a.array) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.SubjectAltName, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.IssuerAltName = function(a) { + KJUR.asn1.x509.IssuerAltName.superclass.constructor.call(this, a); + this.setNameArray = function(b) { + this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b) + }; + this.getExtnValueHex = function() { + return this.asn1ExtnValue.getEncodedHex() + }; + this.oid = "2.5.29.18"; + if (a !== undefined) { + if (a.array !== undefined) { + this.setNameArray(a.array) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.IssuerAltName, KJUR.asn1.x509.Extension); +KJUR.asn1.x509.CRL = function(f) { + KJUR.asn1.x509.CRL.superclass.constructor.call(this); + var a = null; + var c = null; + var e = null; + var b = null; + var d = null; + this.setRsaPrvKeyByPEMandPass = function(h, j) { + var g = PKCS5PKEY.getDecryptedKeyHex(h, j); + var i = new RSAKey(); + i.readPrivateKeyFromASN1HexString(g); + this.rsaPrvKey = i + }; + this.sign = function() { + this.asn1SignatureAlg = this.asn1TBSCertList.asn1SignatureAlg; + sig = new KJUR.crypto.Signature({ + alg: "SHA1withRSA", + prov: "cryptojs/jsrsa" + }); + sig.initSign(this.rsaPrvKey); + sig.updateHex(this.asn1TBSCertList.getEncodedHex()); + this.hexSig = sig.sign(); + this.asn1Sig = new KJUR.asn1.DERBitString({ + hex: "00" + this.hexSig + }); + var g = new KJUR.asn1.DERSequence({ + array: [this.asn1TBSCertList, this.asn1SignatureAlg, this.asn1Sig] + }); + this.hTLV = g.getEncodedHex(); + this.isModified = false + }; + this.getEncodedHex = function() { + if (this.isModified == false && this.hTLV != null) { + return this.hTLV + } + throw "not signed yet" + }; + this.getPEMString = function() { + var i = this.getEncodedHex(); + var g = CryptoJS.enc.Hex.parse(i); + var h = CryptoJS.enc.Base64.stringify(g); + var j = h.replace(/(.{64})/g, "$1\r\n"); + return "-----BEGIN X509 CRL-----\r\n" + j + "\r\n-----END X509 CRL-----\r\n" + }; + if (typeof f != "undefined") { + if (typeof f.tbsobj != "undefined") { + this.asn1TBSCertList = f.tbsobj + } + if (typeof f.rsaprvkey != "undefined") { + this.rsaPrvKey = f.rsaprvkey + } + if ((typeof f.rsaprvpem != "undefined") && (typeof f.rsaprvpas != "undefined")) { + this.setRsaPrvKeyByPEMandPass(f.rsaprvpem, f.rsaprvpas) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.CRL, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.TBSCertList = function(b) { + KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this); + var a = null; + this.setSignatureAlgByParam = function(c) { + this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(c) + }; + this.setIssuerByParam = function(c) { + this.asn1Issuer = new KJUR.asn1.x509.X500Name(c) + }; + this.setThisUpdateByParam = function(c) { + this.asn1ThisUpdate = new KJUR.asn1.x509.Time(c) + }; + this.setNextUpdateByParam = function(c) { + this.asn1NextUpdate = new KJUR.asn1.x509.Time(c) + }; + this.addRevokedCert = function(c, d) { + var f = {}; + if (c != undefined && c != null) { + f.sn = c + } + if (d != undefined && d != null) { + f.time = d + } + var e = new KJUR.asn1.x509.CRLEntry(f); + this.aRevokedCert.push(e) + }; + this.getEncodedHex = function() { + this.asn1Array = new Array(); + if (this.asn1Version != null) { + this.asn1Array.push(this.asn1Version) + } + this.asn1Array.push(this.asn1SignatureAlg); + this.asn1Array.push(this.asn1Issuer); + this.asn1Array.push(this.asn1ThisUpdate); + if (this.asn1NextUpdate != null) { + this.asn1Array.push(this.asn1NextUpdate) + } + if (this.aRevokedCert.length > 0) { + var c = new KJUR.asn1.DERSequence({ + array: this.aRevokedCert + }); + this.asn1Array.push(c) + } + var d = new KJUR.asn1.DERSequence({ + array: this.asn1Array + }); + this.hTLV = d.getEncodedHex(); + this.isModified = false; + return this.hTLV + }; + this._initialize = function() { + this.asn1Version = null; + this.asn1SignatureAlg = null; + this.asn1Issuer = null; + this.asn1ThisUpdate = null; + this.asn1NextUpdate = null; + this.aRevokedCert = new Array() + }; + this._initialize() +}; +YAHOO.lang.extend(KJUR.asn1.x509.TBSCertList, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.CRLEntry = function(c) { + KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this); + var b = null; + var a = null; + this.setCertSerial = function(d) { + this.sn = new KJUR.asn1.DERInteger(d) + }; + this.setRevocationDate = function(d) { + this.time = new KJUR.asn1.x509.Time(d) + }; + this.getEncodedHex = function() { + var d = new KJUR.asn1.DERSequence({ + array: [this.sn, this.time] + }); + this.TLV = d.getEncodedHex(); + return this.TLV + }; + if (typeof c != "undefined") { + if (typeof c.time != "undefined") { + this.setRevocationDate(c.time) + } + if (typeof c.sn != "undefined") { + this.setCertSerial(c.sn) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.CRLEntry, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.X500Name = function(b) { + KJUR.asn1.x509.X500Name.superclass.constructor.call(this); + this.asn1Array = new Array(); + this.setByString = function(c) { + var d = c.split("/"); + d.shift(); + for (var e = 0; e < d.length; e++) { + this.asn1Array.push(new KJUR.asn1.x509.RDN({ + str: d[e] + })) + } + }; + this.setByLdapString = function(c) { + var d = KJUR.asn1.x509.X500Name.ldapToOneline(c); + this.setByString(d) + }; + this.setByObject = function(e) { + for (var c in e) { + if (e.hasOwnProperty(c)) { + var d = new KJUR.asn1.x509.RDN({ + str: c + "=" + e[c] + }); + this.asn1Array ? this.asn1Array.push(d) : this.asn1Array = [d] + } + } + }; + this.getEncodedHex = function() { + if (typeof this.hTLV == "string") { + return this.hTLV + } + var c = new KJUR.asn1.DERSequence({ + array: this.asn1Array + }); + this.hTLV = c.getEncodedHex(); + return this.hTLV + }; + if (b !== undefined) { + if (b.str !== undefined) { + this.setByString(b.str) + } else { + if (b.ldapstr !== undefined) { + this.setByLdapString(b.ldapstr) + } else { + if (typeof b === "object") { + this.setByObject(b) + } + } + } + if (b.certissuer !== undefined) { + var a = new X509(); + a.hex = ASN1HEX.pemToHex(b.certissuer); + this.hTLV = a.getIssuerHex() + } + if (b.certsubject !== undefined) { + var a = new X509(); + a.hex = ASN1HEX.pemToHex(b.certsubject); + this.hTLV = a.getSubjectHex() + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.X500Name, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.X500Name.onelineToLDAP = function(d) { + if (d.substr(0, 1) !== "/") { + throw "malformed input" + } + var b = ""; + d = d.substr(1); + var c = d.split("/"); + c.reverse(); + c = c.map(function(a) { + return a.replace(/,/, "\\,") + }); + return c.join(",") +}; +KJUR.asn1.x509.X500Name.ldapToOneline = function(g) { + var c = g.split(","); + var e = false; + var b = []; + for (var f = 0; c.length > 0; f++) { + var h = c.shift(); + if (e === true) { + var d = b.pop(); + var j = (d + "," + h).replace(/\\,/g, ","); + b.push(j); + e = false + } else { + b.push(h) + } + if (h.substr( - 1, 1) === "\\") { + e = true + } + } + b = b.map(function(a) { + return a.replace("/", "\\/") + }); + b.reverse(); + return "/" + b.join("/") +}; +KJUR.asn1.x509.RDN = function(a) { + KJUR.asn1.x509.RDN.superclass.constructor.call(this); + this.asn1Array = new Array(); + this.addByString = function(b) { + this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({ + str: b + })) + }; + this.addByMultiValuedString = function(d) { + var b = KJUR.asn1.x509.RDN.parseString(d); + for (var c = 0; c < b.length; c++) { + this.addByString(b[c]) + } + }; + this.getEncodedHex = function() { + var b = new KJUR.asn1.DERSet({ + array: this.asn1Array + }); + this.TLV = b.getEncodedHex(); + return this.TLV + }; + if (typeof a != "undefined") { + if (typeof a.str != "undefined") { + this.addByMultiValuedString(a.str) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.RDN, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.RDN.parseString = function(m) { + var j = m.split(/\+/); + var h = false; + var c = []; + for (var g = 0; j.length > 0; g++) { + var k = j.shift(); + if (h === true) { + var f = c.pop(); + var d = (f + "+" + k).replace(/\\\+/g, "+"); + c.push(d); + h = false + } else { + c.push(k) + } + if (k.substr( - 1, 1) === "\\") { + h = true + } + } + var l = false; + var b = []; + for (var g = 0; c.length > 0; g++) { + var k = c.shift(); + if (l === true) { + var e = b.pop(); + if (k.match(/"$/)) { + var d = (e + "+" + k).replace(/^([^=]+)="(.*)"$/, "$1=$2"); + b.push(d); + l = false + } else { + b.push(e + "+" + k) + } + } else { + b.push(k) + } + if (k.match(/^[^=]+="/)) { + l = true + } + } + return b +}; +KJUR.asn1.x509.AttributeTypeAndValue = function(b) { + KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this); + var d = null; + var c = null; + var a = "utf8"; + this.setByString = function(f) { + var e = f.match(/^([^=]+)=(.+)$/); + if (e) { + this.setByAttrTypeAndValueStr(e[1], e[2]) + } else { + throw "malformed attrTypeAndValueStr: " + f + } + }; + this.setByAttrTypeAndValueStr = function(g, f) { + this.typeObj = KJUR.asn1.x509.OID.atype2obj(g); + var e = a; + if (g == "C") { + e = "prn" + } + this.valueObj = this.getValueObj(e, f) + }; + this.getValueObj = function(f, e) { + if (f == "utf8") { + return new KJUR.asn1.DERUTF8String({ + str: e + }) + } + if (f == "prn") { + return new KJUR.asn1.DERPrintableString({ + str: e + }) + } + if (f == "tel") { + return new KJUR.asn1.DERTeletexString({ + str: e + }) + } + if (f == "ia5") { + return new KJUR.asn1.DERIA5String({ + str: e + }) + } + throw "unsupported directory string type: type=" + f + " value=" + e + }; + this.getEncodedHex = function() { + var e = new KJUR.asn1.DERSequence({ + array: [this.typeObj, this.valueObj] + }); + this.TLV = e.getEncodedHex(); + return this.TLV + }; + if (typeof b != "undefined") { + if (typeof b.str != "undefined") { + this.setByString(b.str) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.AttributeTypeAndValue, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.SubjectPublicKeyInfo = function(d) { + KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this); + var b = null; + var c = null; + var a = null; + this.setRSAKey = function(e) { + if (!RSAKey.prototype.isPrototypeOf(e)) { + throw "argument is not RSAKey instance" + } + this.rsaKey = e; + var g = new KJUR.asn1.DERInteger({ + bigint: e.n + }); + var f = new KJUR.asn1.DERInteger({ + "int": e.e + }); + var i = new KJUR.asn1.DERSequence({ + array: [g, f] + }); + var h = i.getEncodedHex(); + this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({ + name: "rsaEncryption" + }); + this.asn1SubjPKey = new KJUR.asn1.DERBitString({ + hex: "00" + h + }) + }; + this.setRSAPEM = function(g) { + if (g.match(/-----BEGIN PUBLIC KEY-----/)) { + var n = g; + n = n.replace(/^-----[^-]+-----/, ""); + n = n.replace(/-----[^-]+-----\s*$/, ""); + var m = n.replace(/\s+/g, ""); + var f = CryptoJS.enc.Base64.parse(m); + var i = CryptoJS.enc.Hex.stringify(f); + var k = RSAKey.getHexValueArrayOfChildrenFromHex(i); + var h = k[1]; + var l = h.substr(2); + var e = RSAKey.getHexValueArrayOfChildrenFromHex(l); + var j = new RSAKey(); + j.setPublic(e[0], e[1]); + this.setRSAKey(j) + } else { + throw "key not supported" + } + }; + this.getASN1Object = function() { + if (this.asn1AlgId == null || this.asn1SubjPKey == null) { + throw "algId and/or subjPubKey not set" + } + var e = new KJUR.asn1.DERSequence({ + array: [this.asn1AlgId, this.asn1SubjPKey] + }); + return e + }; + this.getEncodedHex = function() { + var e = this.getASN1Object(); + this.hTLV = e.getEncodedHex(); + return this.hTLV + }; + this._setRSAKey = function(e) { + var g = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": { + bigint: e.n + } + }, + { + "int": { + "int": e.e + } + }] + }); + var f = g.getEncodedHex(); + this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({ + name: "rsaEncryption" + }); + this.asn1SubjPKey = new KJUR.asn1.DERBitString({ + hex: "00" + f + }) + }; + this._setEC = function(e) { + var f = new KJUR.asn1.DERObjectIdentifier({ + name: e.curveName + }); + this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({ + name: "ecPublicKey", + asn1params: f + }); + this.asn1SubjPKey = new KJUR.asn1.DERBitString({ + hex: "00" + e.pubKeyHex + }) + }; + this._setDSA = function(e) { + var f = new KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": { + bigint: e.p + } + }, + { + "int": { + bigint: e.q + } + }, + { + "int": { + bigint: e.g + } + }] + }); + this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({ + name: "dsa", + asn1params: f + }); + var g = new KJUR.asn1.DERInteger({ + bigint: e.y + }); + this.asn1SubjPKey = new KJUR.asn1.DERBitString({ + hex: "00" + g.getEncodedHex() + }) + }; + if (typeof d != "undefined") { + if (typeof RSAKey != "undefined" && d instanceof RSAKey) { + this._setRSAKey(d) + } else { + if (typeof KJUR.crypto.ECDSA != "undefined" && d instanceof KJUR.crypto.ECDSA) { + this._setEC(d) + } else { + if (typeof KJUR.crypto.DSA != "undefined" && d instanceof KJUR.crypto.DSA) { + this._setDSA(d) + } else { + if (typeof d.rsakey != "undefined") { + this.setRSAKey(d.rsakey) + } else { + if (typeof d.rsapem != "undefined") { + this.setRSAPEM(d.rsapem) + } + } + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.SubjectPublicKeyInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.Time = function(c) { + KJUR.asn1.x509.Time.superclass.constructor.call(this); + var b = null; + var a = null; + this.setTimeParams = function(d) { + this.timeParams = d + }; + this.getEncodedHex = function() { + var d = null; + if (this.timeParams != null) { + if (this.type == "utc") { + d = new KJUR.asn1.DERUTCTime(this.timeParams) + } else { + d = new KJUR.asn1.DERGeneralizedTime(this.timeParams) + } + } else { + if (this.type == "utc") { + d = new KJUR.asn1.DERUTCTime() + } else { + d = new KJUR.asn1.DERGeneralizedTime() + } + } + this.TLV = d.getEncodedHex(); + return this.TLV + }; + this.type = "utc"; + if (typeof c != "undefined") { + if (typeof c.type != "undefined") { + this.type = c.type + } else { + if (typeof c.str != "undefined") { + if (c.str.match(/^[0-9]{12}Z$/)) { + this.type = "utc" + } + if (c.str.match(/^[0-9]{14}Z$/)) { + this.type = "gen" + } + } + } + this.timeParams = c + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.Time, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.AlgorithmIdentifier = function(b) { + KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this); + this.nameAlg = null; + this.asn1Alg = null; + this.asn1Params = null; + this.paramEmpty = false; + this.getEncodedHex = function() { + if (this.nameAlg === null && this.asn1Alg === null) { + throw "algorithm not specified" + } + if (this.nameAlg !== null && this.asn1Alg === null) { + this.asn1Alg = KJUR.asn1.x509.OID.name2obj(this.nameAlg) + } + var c = [this.asn1Alg]; + if (this.asn1Params !== null) { + c.push(this.asn1Params) + } + var d = new KJUR.asn1.DERSequence({ + array: c + }); + this.hTLV = d.getEncodedHex(); + return this.hTLV + }; + if (b !== undefined) { + if (b.name !== undefined) { + this.nameAlg = b.name + } + if (b.asn1params !== undefined) { + this.asn1Params = b.asn1params + } + if (b.paramempty !== undefined) { + this.paramEmpty = b.paramempty + } + } + if (this.asn1Params === null && this.paramEmpty === false && this.nameAlg !== null) { + var a = this.nameAlg.toLowerCase(); + if (a.substr( - 7, 7) !== "withdsa" && a.substr( - 9, 9) !== "withecdsa") { + this.asn1Params = new KJUR.asn1.DERNull() + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.AlgorithmIdentifier, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.GeneralName = function(d) { + KJUR.asn1.x509.GeneralName.superclass.constructor.call(this); + var c = null; + var b = null; + var a = { + rfc822: "81", + dns: "82", + dn: "a4", + uri: "86" + }; + this.explicit = false; + this.setByParam = function(k) { + var j = null; + var g = null; + if (k === undefined) { + return + } + if (k.rfc822 !== undefined) { + this.type = "rfc822"; + g = new KJUR.asn1.DERIA5String({ + str: k[this.type] + }) + } + if (k.dns !== undefined) { + this.type = "dns"; + g = new KJUR.asn1.DERIA5String({ + str: k[this.type] + }) + } + if (k.uri !== undefined) { + this.type = "uri"; + g = new KJUR.asn1.DERIA5String({ + str: k[this.type] + }) + } + if (k.dn !== undefined) { + this.type = "dn"; + g = new KJUR.asn1.x509.X500Name({ + str: k.dn + }) + } + if (k.ldapdn !== undefined) { + this.type = "dn"; + g = new KJUR.asn1.x509.X500Name({ + ldapstr: k.ldapdn + }) + } + if (k.certissuer !== undefined) { + this.type = "dn"; + this.explicit = true; + var h = k.certissuer; + var f = null; + if (h.match(/^[0-9A-Fa-f]+$/)) { + f == h + } + if (h.indexOf("-----BEGIN ") != -1) { + f = ASN1HEX.pemToHex(h) + } + if (f == null) { + throw "certissuer param not cert" + } + var e = new X509(); + e.hex = f; + var i = e.getIssuerHex(); + g = new KJUR.asn1.ASN1Object(); + g.hTLV = i + } + if (k.certsubj !== undefined) { + this.type = "dn"; + this.explicit = true; + var h = k.certsubj; + var f = null; + if (h.match(/^[0-9A-Fa-f]+$/)) { + f == h + } + if (h.indexOf("-----BEGIN ") != -1) { + f = ASN1HEX.pemToHex(h) + } + if (f == null) { + throw "certsubj param not cert" + } + var e = new X509(); + e.hex = f; + var i = e.getSubjectHex(); + g = new KJUR.asn1.ASN1Object(); + g.hTLV = i + } + if (this.type == null) { + throw "unsupported type in params=" + k + } + this.asn1Obj = new KJUR.asn1.DERTaggedObject({ + explicit: this.explicit, + tag: a[this.type], + obj: g + }) + }; + this.getEncodedHex = function() { + return this.asn1Obj.getEncodedHex() + }; + if (d !== undefined) { + this.setByParam(d) + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.GeneralName, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.GeneralNames = function(b) { + KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this); + var a = null; + this.setByParamArray = function(e) { + for (var c = 0; c < e.length; c++) { + var d = new KJUR.asn1.x509.GeneralName(e[c]); + this.asn1Array.push(d) + } + }; + this.getEncodedHex = function() { + var c = new KJUR.asn1.DERSequence({ + array: this.asn1Array + }); + return c.getEncodedHex() + }; + this.asn1Array = new Array(); + if (typeof b != "undefined") { + this.setByParamArray(b) + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.GeneralNames, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.DistributionPointName = function(b) { + KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this); + var e = null; + var c = null; + var a = null; + var d = null; + this.getEncodedHex = function() { + if (this.type != "full") { + throw "currently type shall be 'full': " + this.type + } + this.asn1Obj = new KJUR.asn1.DERTaggedObject({ + explicit: false, + tag: this.tag, + obj: this.asn1V + }); + this.hTLV = this.asn1Obj.getEncodedHex(); + return this.hTLV + }; + if (typeof b != "undefined") { + if (KJUR.asn1.x509.GeneralNames.prototype.isPrototypeOf(b)) { + this.type = "full"; + this.tag = "a0"; + this.asn1V = b + } else { + throw "This class supports GeneralNames only as argument" + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.DistributionPointName, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.DistributionPoint = function(b) { + KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this); + var a = null; + this.getEncodedHex = function() { + var c = new KJUR.asn1.DERSequence(); + if (this.asn1DP != null) { + var d = new KJUR.asn1.DERTaggedObject({ + explicit: true, + tag: "a0", + obj: this.asn1DP + }); + c.appendASN1Object(d) + } + this.hTLV = c.getEncodedHex(); + return this.hTLV + }; + if (typeof b != "undefined") { + if (typeof b.dpobj != "undefined") { + this.asn1DP = b.dpobj + } + } +}; +YAHOO.lang.extend(KJUR.asn1.x509.DistributionPoint, KJUR.asn1.ASN1Object); +KJUR.asn1.x509.OID = new +function(a) { + this.atype2oidList = { + CN: "2.5.4.3", + L: "2.5.4.7", + ST: "2.5.4.8", + O: "2.5.4.10", + OU: "2.5.4.11", + C: "2.5.4.6", + STREET: "2.5.4.9", + DC: "0.9.2342.19200300.100.1.25", + UID: "0.9.2342.19200300.100.1.1", + SN: "2.5.4.4", + DN: "2.5.4.49", + E: "1.2.840.113549.1.9.1", + businessCategory: "2.5.4.15", + postalCode: "2.5.4.17", + jurisdictionOfIncorporationL: "1.3.6.1.4.1.311.60.2.1.1", + jurisdictionOfIncorporationSP: "1.3.6.1.4.1.311.60.2.1.2", + jurisdictionOfIncorporationC: "1.3.6.1.4.1.311.60.2.1.3" + }; + this.name2oidList = { + sha1: "1.3.14.3.2.26", + sha256: "2.16.840.1.101.3.4.2.1", + sha384: "2.16.840.1.101.3.4.2.2", + sha512: "2.16.840.1.101.3.4.2.3", + sha224: "2.16.840.1.101.3.4.2.4", + md5: "1.2.840.113549.2.5", + md2: "1.3.14.7.2.2.1", + ripemd160: "1.3.36.3.2.1", + MD2withRSA: "1.2.840.113549.1.1.2", + MD4withRSA: "1.2.840.113549.1.1.3", + MD5withRSA: "1.2.840.113549.1.1.4", + SHA1withRSA: "1.2.840.113549.1.1.5", + SHA224withRSA: "1.2.840.113549.1.1.14", + SHA256withRSA: "1.2.840.113549.1.1.11", + SHA384withRSA: "1.2.840.113549.1.1.12", + SHA512withRSA: "1.2.840.113549.1.1.13", + SHA1withECDSA: "1.2.840.10045.4.1", + SHA224withECDSA: "1.2.840.10045.4.3.1", + SHA256withECDSA: "1.2.840.10045.4.3.2", + SHA384withECDSA: "1.2.840.10045.4.3.3", + SHA512withECDSA: "1.2.840.10045.4.3.4", + dsa: "1.2.840.10040.4.1", + SHA1withDSA: "1.2.840.10040.4.3", + SHA224withDSA: "2.16.840.1.101.3.4.3.1", + SHA256withDSA: "2.16.840.1.101.3.4.3.2", + rsaEncryption: "1.2.840.113549.1.1.1", + commonName: "2.5.4.3", + localityName: "2.5.4.7", + stateOrProvinceName: "2.5.4.8", + organizationName: "2.5.4.10", + organizationalUnitName: "2.5.4.11", + countryName: "2.5.4.6", + streetAddress: "2.5.4.9", + domainComponent: "0.9.2342.19200300.100.1.25", + userId: "0.9.2342.19200300.100.1.1", + surname: "2.5.4.4", + distinguishedName: "2.5.4.49", + emailAddress: "1.2.840.113549.1.9.1", + businessCategory: "2.5.4.15", + postalCode: "2.5.4.17", + jurisdictionOfIncorporationL: "1.3.6.1.4.1.311.60.2.1.1", + jurisdictionOfIncorporationSP: "1.3.6.1.4.1.311.60.2.1.2", + jurisdictionOfIncorporationC: "1.3.6.1.4.1.311.60.2.1.3", + subjectKeyIdentifier: "2.5.29.14", + keyUsage: "2.5.29.15", + subjectAltName: "2.5.29.17", + issuerAltName: "2.5.29.18", + basicConstraints: "2.5.29.19", + nameConstraints: "2.5.29.30", + cRLDistributionPoints: "2.5.29.31", + certificatePolicies: "2.5.29.32", + authorityKeyIdentifier: "2.5.29.35", + policyConstraints: "2.5.29.36", + extKeyUsage: "2.5.29.37", + authorityInfoAccess: "1.3.6.1.5.5.7.1.1", + ocsp: "1.3.6.1.5.5.7.48.1", + caIssuers: "1.3.6.1.5.5.7.48.2", + anyExtendedKeyUsage: "2.5.29.37.0", + serverAuth: "1.3.6.1.5.5.7.3.1", + clientAuth: "1.3.6.1.5.5.7.3.2", + codeSigning: "1.3.6.1.5.5.7.3.3", + emailProtection: "1.3.6.1.5.5.7.3.4", + timeStamping: "1.3.6.1.5.5.7.3.8", + ocspSigning: "1.3.6.1.5.5.7.3.9", + ecPublicKey: "1.2.840.10045.2.1", + secp256r1: "1.2.840.10045.3.1.7", + secp256k1: "1.3.132.0.10", + secp384r1: "1.3.132.0.34", + pkcs5PBES2: "1.2.840.113549.1.5.13", + pkcs5PBKDF2: "1.2.840.113549.1.5.12", + "des-EDE3-CBC": "1.2.840.113549.3.7", + data: "1.2.840.113549.1.7.1", + "signed-data": "1.2.840.113549.1.7.2", + "enveloped-data": "1.2.840.113549.1.7.3", + "digested-data": "1.2.840.113549.1.7.5", + "encrypted-data": "1.2.840.113549.1.7.6", + "authenticated-data": "1.2.840.113549.1.9.16.1.2", + tstinfo: "1.2.840.113549.1.9.16.1.4", + extensionRequest: "1.2.840.113549.1.9.14", + }; + this.objCache = {}; + this.name2obj = function(b) { + if (typeof this.objCache[b] != "undefined") { + return this.objCache[b] + } + if (typeof this.name2oidList[b] == "undefined") { + throw "Name of ObjectIdentifier not defined: " + b + } + var c = this.name2oidList[b]; + var d = new KJUR.asn1.DERObjectIdentifier({ + oid: c + }); + this.objCache[b] = d; + return d + }; + this.atype2obj = function(b) { + if (typeof this.objCache[b] != "undefined") { + return this.objCache[b] + } + if (typeof this.atype2oidList[b] == "undefined") { + throw "AttributeType name undefined: " + b + } + var c = this.atype2oidList[b]; + var d = new KJUR.asn1.DERObjectIdentifier({ + oid: c + }); + this.objCache[b] = d; + return d + } +}; +KJUR.asn1.x509.OID.oid2name = function(b) { + var c = KJUR.asn1.x509.OID.name2oidList; + for (var a in c) { + if (c[a] == b) { + return a + } + } + return "" +}; +KJUR.asn1.x509.OID.oid2atype = function(b) { + var c = KJUR.asn1.x509.OID.atype2oidList; + for (var a in c) { + if (c[a] == b) { + return a + } + } + return b +}; +KJUR.asn1.x509.OID.name2oid = function(a) { + var b = KJUR.asn1.x509.OID.name2oidList; + if (b[a] === undefined) { + return "" + } + return b[a] +}; +KJUR.asn1.x509.X509Util = new +function() { + this.getPKCS8PubKeyPEMfromRSAKey = function(i) { + var h = null; + var f = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(i.n); + var j = KJUR.asn1.ASN1Util.integerToByteHex(i.e); + var a = new KJUR.asn1.DERInteger({ + hex: f + }); + var g = new KJUR.asn1.DERInteger({ + hex: j + }); + var l = new KJUR.asn1.DERSequence({ + array: [a, g] + }); + var c = l.getEncodedHex(); + var d = new KJUR.asn1.x509.AlgorithmIdentifier({ + name: "rsaEncryption" + }); + var b = new KJUR.asn1.DERBitString({ + hex: "00" + c + }); + var k = new KJUR.asn1.DERSequence({ + array: [d, b] + }); + var e = k.getEncodedHex(); + var h = KJUR.asn1.ASN1Util.getPEMStringFromHex(e, "PUBLIC KEY"); + return h + } +}; +KJUR.asn1.x509.X509Util.newCertPEM = function(f) { + var c = KJUR.asn1.x509; + var e = new c.TBSCertificate(); + if (f.serial !== undefined) { + e.setSerialNumberByParam(f.serial) + } else { + throw "serial number undefined." + } + if (typeof f.sigalg.name === "string") { + e.setSignatureAlgByParam(f.sigalg) + } else { + throw "unproper signature algorithm name" + } + if (f.issuer !== undefined) { + e.setIssuerByParam(f.issuer) + } else { + throw "issuer name undefined." + } + if (f.notbefore !== undefined) { + e.setNotBeforeByParam(f.notbefore) + } else { + throw "notbefore undefined." + } + if (f.notafter !== undefined) { + e.setNotAfterByParam(f.notafter) + } else { + throw "notafter undefined." + } + if (f.subject !== undefined) { + e.setSubjectByParam(f.subject) + } else { + throw "subject name undefined." + } + if (f.sbjpubkey !== undefined) { + e.setSubjectPublicKeyByGetKey(f.sbjpubkey) + } else { + throw "subject public key undefined." + } + if (f.ext !== undefined && f.ext.length !== undefined) { + for (var b = 0; b < f.ext.length; b++) { + for (key in f.ext[b]) { + e.appendExtensionByName(key, f.ext[b][key]) + } + } + } + if (f.cakey === undefined && f.sighex === undefined) { + throw "param cakey and sighex undefined." + } + var d = null; + var a = null; + if (f.cakey) { + if (f.cakey.isPrivate === true) { + d = f.cakey + } else { + d = KEYUTIL.getKey.apply(null, f.cakey) + } + a = new c.Certificate({ + tbscertobj: e, + prvkeyobj: d + }); + a.sign() + } + if (f.sighex) { + a = new c.Certificate({ + tbscertobj: e + }); + a.setSignatureHex(f.sighex) + } + return a.getPEMString() +}; +/*! asn1cms-1.0.3.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { + KJUR.asn1 = {} +} +if (typeof KJUR.asn1.cms == "undefined" || !KJUR.asn1.cms) { + KJUR.asn1.cms = {} +} +KJUR.asn1.cms.Attribute = function(b) { + KJUR.asn1.cms.Attribute.superclass.constructor.call(this); + var a = []; + this.getEncodedHex = function() { + var f, e, c; + f = new KJUR.asn1.DERObjectIdentifier({ + oid: this.attrTypeOid + }); + e = new KJUR.asn1.DERSet({ + array: this.valueList + }); + try { + e.getEncodedHex() + } catch(d) { + throw "fail valueSet.getEncodedHex in Attribute(1)/" + d + } + c = new KJUR.asn1.DERSequence({ + array: [f, e] + }); + try { + this.hTLV = c.getEncodedHex() + } catch(d) { + throw "failed seq.getEncodedHex in Attribute(2)/" + d + } + return this.hTLV + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.Attribute, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.ContentType = function(b) { + KJUR.asn1.cms.ContentType.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.3"; + var a = null; + if (typeof b != "undefined") { + var a = new KJUR.asn1.DERObjectIdentifier(b); + this.valueList = [a] + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.ContentType, KJUR.asn1.cms.Attribute); +KJUR.asn1.cms.MessageDigest = function(e) { + KJUR.asn1.cms.MessageDigest.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.4"; + if (typeof e != "undefined") { + if (e.eciObj instanceof KJUR.asn1.cms.EncapsulatedContentInfo && typeof e.hashAlg == "string") { + var b = e.eciObj.eContentValueHex; + var a = e.hashAlg; + var c = KJUR.crypto.Util.hashHex(b, a); + var d = new KJUR.asn1.DEROctetString({ + hex: c + }); + d.getEncodedHex(); + this.valueList = [d] + } else { + var d = new KJUR.asn1.DEROctetString(e); + d.getEncodedHex(); + this.valueList = [d] + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.MessageDigest, KJUR.asn1.cms.Attribute); +KJUR.asn1.cms.SigningTime = function(c) { + KJUR.asn1.cms.SigningTime.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.5"; + if (typeof c != "undefined") { + var a = new KJUR.asn1.x509.Time(c); + try { + a.getEncodedHex() + } catch(b) { + throw "SigningTime.getEncodedHex() failed/" + b + } + this.valueList = [a] + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.SigningTime, KJUR.asn1.cms.Attribute); +KJUR.asn1.cms.SigningCertificate = function(d) { + KJUR.asn1.cms.SigningCertificate.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.16.2.12"; + var a = KJUR.asn1; + var c = KJUR.asn1.cms; + var b = KJUR.crypto; + this.setCerts = function(l) { + var j = []; + for (var h = 0; h < l.length; h++) { + var f = ASN1HEX.pemToHex(l[h]); + var e = b.Util.hashHex(f, "sha1"); + var m = new a.DEROctetString({ + hex: e + }); + m.getEncodedHex(); + var k = new c.IssuerAndSerialNumber({ + cert: l[h] + }); + k.getEncodedHex(); + var n = new a.DERSequence({ + array: [m, k] + }); + n.getEncodedHex(); + j.push(n) + } + var g = new a.DERSequence({ + array: j + }); + g.getEncodedHex(); + this.valueList = [g] + }; + if (typeof d != "undefined") { + if (typeof d.array == "object") { + this.setCerts(d.array) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificate, KJUR.asn1.cms.Attribute); +KJUR.asn1.cms.SigningCertificateV2 = function(e) { + KJUR.asn1.cms.SigningCertificateV2.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.16.2.47"; + var b = KJUR.asn1; + var f = KJUR.asn1.x509; + var d = KJUR.asn1.cms; + var c = KJUR.crypto; + this.setCerts = function(p, h) { + var n = []; + for (var l = 0; l < p.length; l++) { + var j = ASN1HEX.pemToHex(p[l]); + var r = []; + if (h != "sha256") { + r.push(new f.AlgorithmIdentifier({ + name: h + })) + } + var g = c.Util.hashHex(j, h); + var q = new b.DEROctetString({ + hex: g + }); + q.getEncodedHex(); + r.push(q); + var m = new d.IssuerAndSerialNumber({ + cert: p[l] + }); + m.getEncodedHex(); + r.push(m); + var o = new b.DERSequence({ + array: r + }); + o.getEncodedHex(); + n.push(o) + } + var k = new b.DERSequence({ + array: n + }); + k.getEncodedHex(); + this.valueList = [k] + }; + if (typeof e != "undefined") { + if (typeof e.array == "object") { + var a = "sha256"; + if (typeof e.hashAlg == "string") { + a = e.hashAlg + } + this.setCerts(e.array, a) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificateV2, KJUR.asn1.cms.Attribute); +KJUR.asn1.cms.IssuerAndSerialNumber = function(c) { + KJUR.asn1.cms.IssuerAndSerialNumber.superclass.constructor.call(this); + var e = null; + var b = null; + var a = KJUR.asn1; + var d = a.x509; + this.setByCertPEM = function(i) { + var g = ASN1HEX.pemToHex(i); + var f = new X509(); + f.hex = g; + var j = f.getIssuerHex(); + this.dIssuer = new d.X500Name(); + this.dIssuer.hTLV = j; + var h = f.getSerialNumberHex(); + this.dSerial = new a.DERInteger({ + hex: h + }) + }; + this.getEncodedHex = function() { + var f = new KJUR.asn1.DERSequence({ + array: [this.dIssuer, this.dSerial] + }); + this.hTLV = f.getEncodedHex(); + return this.hTLV + }; + if (typeof c != "undefined") { + if (typeof c == "string" && c.indexOf("-----BEGIN ") != -1) { + this.setByCertPEM(c) + } + if (c.issuer && c.serial) { + if (c.issuer instanceof KJUR.asn1.x509.X500Name) { + this.dIssuer = c.issuer + } else { + this.dIssuer = new KJUR.asn1.x509.X500Name(c.issuer) + } + if (c.serial instanceof KJUR.asn1.DERInteger) { + this.dSerial = c.serial + } else { + this.dSerial = new KJUR.asn1.DERInteger(c.serial) + } + } + if (typeof c.cert == "string") { + this.setByCertPEM(c.cert) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.IssuerAndSerialNumber, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.AttributeList = function(a) { + KJUR.asn1.cms.AttributeList.superclass.constructor.call(this); + this.list = new Array(); + this.sortFlag = true; + this.add = function(b) { + if (b instanceof KJUR.asn1.cms.Attribute) { + this.list.push(b) + } + }; + this.length = function() { + return this.list.length + }; + this.clear = function() { + this.list = new Array(); + this.hTLV = null; + this.hV = null + }; + this.getEncodedHex = function() { + if (typeof this.hTLV == "string") { + return this.hTLV + } + var b = new KJUR.asn1.DERSet({ + array: this.list, + sortflag: this.sortFlag + }); + this.hTLV = b.getEncodedHex(); + return this.hTLV + }; + if (typeof a != "undefined") { + if (typeof a.sortflag != "undefined" && a.sortflag == false) { + this.sortFlag = false + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.AttributeList, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.SignerInfo = function(c) { + KJUR.asn1.cms.SignerInfo.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.cms; + var d = KJUR.asn1.x509; + this.dCMSVersion = new a.DERInteger({ + "int": 1 + }); + this.dSignerIdentifier = null; + this.dDigestAlgorithm = null; + this.dSignedAttrs = new b.AttributeList(); + this.dSigAlg = null; + this.dSig = null; + this.dUnsignedAttrs = new b.AttributeList(); + this.setSignerIdentifier = function(f) { + if (typeof f == "string" && f.indexOf("CERTIFICATE") != -1 && f.indexOf("BEGIN") != -1 && f.indexOf("END") != -1) { + var e = f; + this.dSignerIdentifier = new b.IssuerAndSerialNumber({ + cert: f + }) + } + }; + this.setForContentAndHash = function(e) { + if (typeof e != "undefined") { + if (e.eciObj instanceof KJUR.asn1.cms.EncapsulatedContentInfo) { + this.dSignedAttrs.add(new b.ContentType({ + oid: "1.2.840.113549.1.7.1" + })); + this.dSignedAttrs.add(new b.MessageDigest({ + eciObj: e.eciObj, + hashAlg: e.hashAlg + })) + } + if (typeof e.sdObj != "undefined" && e.sdObj instanceof KJUR.asn1.cms.SignedData) { + if (e.sdObj.digestAlgNameList.join(":").indexOf(e.hashAlg) == -1) { + e.sdObj.digestAlgNameList.push(e.hashAlg) + } + } + if (typeof e.hashAlg == "string") { + this.dDigestAlgorithm = new d.AlgorithmIdentifier({ + name: e.hashAlg + }) + } + } + }; + this.sign = function(j, f) { + this.dSigAlg = new d.AlgorithmIdentifier({ + name: f + }); + var g = this.dSignedAttrs.getEncodedHex(); + var e = KEYUTIL.getKey(j); + var i = new KJUR.crypto.Signature({ + alg: f + }); + i.init(e); + i.updateHex(g); + var h = i.sign(); + this.dSig = new a.DEROctetString({ + hex: h + }) + }; + this.addUnsigned = function(e) { + this.hTLV = null; + this.dUnsignedAttrs.hTLV = null; + this.dUnsignedAttrs.add(e) + }; + this.getEncodedHex = function() { + if (this.dSignedAttrs instanceof KJUR.asn1.cms.AttributeList && this.dSignedAttrs.length() == 0) { + throw "SignedAttrs length = 0 (empty)" + } + var e = new a.DERTaggedObject({ + obj: this.dSignedAttrs, + tag: "a0", + explicit: false + }); + var h = null; + if (this.dUnsignedAttrs.length() > 0) { + h = new a.DERTaggedObject({ + obj: this.dUnsignedAttrs, + tag: "a1", + explicit: false + }) + } + var g = [this.dCMSVersion, this.dSignerIdentifier, this.dDigestAlgorithm, e, this.dSigAlg, this.dSig, ]; + if (h != null) { + g.push(h) + } + var f = new a.DERSequence({ + array: g + }); + this.hTLV = f.getEncodedHex(); + return this.hTLV + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.SignerInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.EncapsulatedContentInfo = function(c) { + KJUR.asn1.cms.EncapsulatedContentInfo.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.cms; + var d = KJUR.asn1.x509; + this.dEContentType = new a.DERObjectIdentifier({ + name: "data" + }); + this.dEContent = null; + this.isDetached = false; + this.eContentValueHex = null; + this.setContentType = function(e) { + if (e.match(/^[0-2][.][0-9.]+$/)) { + this.dEContentType = new a.DERObjectIdentifier({ + oid: e + }) + } else { + this.dEContentType = new a.DERObjectIdentifier({ + name: e + }) + } + }; + this.setContentValue = function(e) { + if (typeof e != "undefined") { + if (typeof e.hex == "string") { + this.eContentValueHex = e.hex + } else { + if (typeof e.str == "string") { + this.eContentValueHex = utf8tohex(e.str) + } + } + } + }; + this.setContentValueHex = function(e) { + this.eContentValueHex = e + }; + this.setContentValueStr = function(e) { + this.eContentValueHex = utf8tohex(e) + }; + this.getEncodedHex = function() { + if (typeof this.eContentValueHex != "string") { + throw "eContentValue not yet set" + } + var g = new a.DEROctetString({ + hex: this.eContentValueHex + }); + this.dEContent = new a.DERTaggedObject({ + obj: g, + tag: "a0", + explicit: true + }); + var e = [this.dEContentType]; + if (!this.isDetached) { + e.push(this.dEContent) + } + var f = new a.DERSequence({ + array: e + }); + this.hTLV = f.getEncodedHex(); + return this.hTLV + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.EncapsulatedContentInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.ContentInfo = function(c) { + KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.cms; + var d = KJUR.asn1.x509; + this.dContentType = null; + this.dContent = null; + this.setContentType = function(e) { + if (typeof e == "string") { + this.dContentType = d.OID.name2obj(e) + } + }; + this.getEncodedHex = function() { + var f = new a.DERTaggedObject({ + obj: this.dContent, + tag: "a0", + explicit: true + }); + var e = new a.DERSequence({ + array: [this.dContentType, f] + }); + this.hTLV = e.getEncodedHex(); + return this.hTLV + }; + if (typeof c != "undefined") { + if (c.type) { + this.setContentType(c.type) + } + if (c.obj && c.obj instanceof a.ASN1Object) { + this.dContent = c.obj + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.ContentInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.SignedData = function(c) { + KJUR.asn1.cms.SignedData.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.cms; + var d = KJUR.asn1.x509; + this.dCMSVersion = new a.DERInteger({ + "int": 1 + }); + this.dDigestAlgs = null; + this.digestAlgNameList = []; + this.dEncapContentInfo = new b.EncapsulatedContentInfo(); + this.dCerts = null; + this.certificateList = []; + this.crlList = []; + this.signerInfoList = [new b.SignerInfo()]; + this.addCertificatesByPEM = function(e) { + var f = ASN1HEX.pemToHex(e); + var g = new a.ASN1Object(); + g.hTLV = f; + this.certificateList.push(g) + }; + this.getEncodedHex = function() { + if (typeof this.hTLV == "string") { + return this.hTLV + } + if (this.dDigestAlgs == null) { + var k = []; + for (var j = 0; j < this.digestAlgNameList.length; j++) { + var h = this.digestAlgNameList[j]; + var m = new d.AlgorithmIdentifier({ + name: h + }); + k.push(m) + } + this.dDigestAlgs = new a.DERSet({ + array: k + }) + } + var e = [this.dCMSVersion, this.dDigestAlgs, this.dEncapContentInfo]; + if (this.dCerts == null) { + if (this.certificateList.length > 0) { + var l = new a.DERSet({ + array: this.certificateList + }); + this.dCerts = new a.DERTaggedObject({ + obj: l, + tag: "a0", + explicit: false + }) + } + } + if (this.dCerts != null) { + e.push(this.dCerts) + } + var g = new a.DERSet({ + array: this.signerInfoList + }); + e.push(g); + var f = new a.DERSequence({ + array: e + }); + this.hTLV = f.getEncodedHex(); + return this.hTLV + }; + this.getContentInfo = function() { + this.getEncodedHex(); + var e = new b.ContentInfo({ + type: "signed-data", + obj: this + }); + return e + }; + this.getContentInfoEncodedHex = function() { + var e = this.getContentInfo(); + var f = e.getEncodedHex(); + return f + }; + this.getPEM = function() { + var e = this.getContentInfoEncodedHex(); + var f = a.ASN1Util.getPEMStringFromHex(e, "CMS"); + return f + } +}; +YAHOO.lang.extend(KJUR.asn1.cms.SignedData, KJUR.asn1.ASN1Object); +KJUR.asn1.cms.CMSUtil = new +function() {}; +KJUR.asn1.cms.CMSUtil.newSignedData = function(a) { + var h = KJUR.asn1.cms; + var g = KJUR.asn1.cades; + var f = new h.SignedData(); + f.dEncapContentInfo.setContentValue(a.content); + if (typeof a.certs == "object") { + for (var b = 0; b < a.certs.length; b++) { + f.addCertificatesByPEM(a.certs[b]) + } + } + f.signerInfoList = []; + for (var b = 0; b < a.signerInfos.length; b++) { + var d = a.signerInfos[b]; + var c = new h.SignerInfo(); + c.setSignerIdentifier(d.signerCert); + c.setForContentAndHash({ + sdObj: f, + eciObj: f.dEncapContentInfo, + hashAlg: d.hashAlg + }); + for (attrName in d.sAttr) { + var j = d.sAttr[attrName]; + if (attrName == "SigningTime") { + var e = new h.SigningTime(j); + c.dSignedAttrs.add(e) + } + if (attrName == "SigningCertificate") { + var e = new h.SigningCertificate(j); + c.dSignedAttrs.add(e) + } + if (attrName == "SigningCertificateV2") { + var e = new h.SigningCertificateV2(j); + c.dSignedAttrs.add(e) + } + if (attrName == "SignaturePolicyIdentifier") { + var e = new g.SignaturePolicyIdentifier(j); + c.dSignedAttrs.add(e) + } + } + c.sign(d.signerPrvKey, d.sigAlg); + f.signerInfoList.push(c) + } + return f +}; +/*! asn1tsp-1.0.1.js (c) 2014 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { + KJUR.asn1 = {} +} +if (typeof KJUR.asn1.tsp == "undefined" || !KJUR.asn1.tsp) { + KJUR.asn1.tsp = {} +} +KJUR.asn1.tsp.Accuracy = function(b) { + KJUR.asn1.tsp.Accuracy.superclass.constructor.call(this); + var a = KJUR.asn1; + this.seconds = null; + this.millis = null; + this.micros = null; + this.getEncodedHex = function() { + var e = null; + var g = null; + var i = null; + var c = []; + if (this.seconds != null) { + e = new a.DERInteger({ + "int": this.seconds + }); + c.push(e) + } + if (this.millis != null) { + var h = new a.DERInteger({ + "int": this.millis + }); + g = new a.DERTaggedObject({ + obj: h, + tag: "80", + explicit: false + }); + c.push(g) + } + if (this.micros != null) { + var f = new a.DERInteger({ + "int": this.micros + }); + i = new a.DERTaggedObject({ + obj: f, + tag: "81", + explicit: false + }); + c.push(i) + } + var d = new a.DERSequence({ + array: c + }); + this.hTLV = d.getEncodedHex(); + return this.hTLV + }; + if (typeof b != "undefined") { + if (typeof b.seconds == "number") { + this.seconds = b.seconds + } + if (typeof b.millis == "number") { + this.millis = b.millis + } + if (typeof b.micros == "number") { + this.micros = b.micros + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.Accuracy, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.MessageImprint = function(b) { + KJUR.asn1.tsp.MessageImprint.superclass.constructor.call(this); + var a = KJUR.asn1; + var c = KJUR.asn1.x509; + this.dHashAlg = null; + this.dHashValue = null; + this.getEncodedHex = function() { + if (typeof this.hTLV == "string") { + return this.hTLV + } + var d = new a.DERSequence({ + array: [this.dHashAlg, this.dHashValue] + }); + return d.getEncodedHex() + }; + if (typeof b != "undefined") { + if (typeof b.hashAlg == "string") { + this.dHashAlg = new c.AlgorithmIdentifier({ + name: b.hashAlg + }) + } + if (typeof b.hashValue == "string") { + this.dHashValue = new a.DEROctetString({ + hex: b.hashValue + }) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.MessageImprint, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.TimeStampReq = function(c) { + KJUR.asn1.tsp.TimeStampReq.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.tsp; + this.dVersion = new a.DERInteger({ + "int": 1 + }); + this.dMessageImprint = null; + this.dPolicy = null; + this.dNonce = null; + this.certReq = true; + this.setMessageImprint = function(d) { + if (d instanceof KJUR.asn1.tsp.MessageImprint) { + this.dMessageImprint = d; + return + } + if (typeof d == "object") { + this.dMessageImprint = new b.MessageImprint(d) + } + }; + this.getEncodedHex = function() { + if (this.dMessageImprint == null) { + throw "messageImprint shall be specified" + } + var d = [this.dVersion, this.dMessageImprint]; + if (this.dPolicy != null) { + d.push(this.dPolicy) + } + if (this.dNonce != null) { + d.push(this.dNonce) + } + if (this.certReq) { + d.push(new a.DERBoolean()) + } + var e = new a.DERSequence({ + array: d + }); + this.hTLV = e.getEncodedHex(); + return this.hTLV + }; + if (typeof c != "undefined") { + if (typeof c.mi == "object") { + this.setMessageImprint(c.mi) + } + if (typeof c.policy == "object") { + this.dPolicy = new a.DERObjectIdentifier(c.policy) + } + if (typeof c.nonce == "object") { + this.dNonce = new a.DERInteger(c.nonce) + } + if (typeof c.certreq == "boolean") { + this.certReq = c.certreq + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampReq, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.TSTInfo = function(c) { + KJUR.asn1.tsp.TSTInfo.superclass.constructor.call(this); + var a = KJUR.asn1; + var d = KJUR.asn1.x509; + var b = KJUR.asn1.tsp; + this.dVersion = new a.DERInteger({ + "int": 1 + }); + this.dPolicy = null; + this.dMessageImprint = null; + this.dSerialNumber = null; + this.dGenTime = null; + this.dAccuracy = null; + this.dOrdering = null; + this.dNonce = null; + this.dTsa = null; + this.getEncodedHex = function() { + var e = [this.dVersion]; + if (this.dPolicy == null) { + throw "policy shall be specified." + } + e.push(this.dPolicy); + if (this.dMessageImprint == null) { + throw "messageImprint shall be specified." + } + e.push(this.dMessageImprint); + if (this.dSerialNumber == null) { + throw "serialNumber shall be specified." + } + e.push(this.dSerialNumber); + if (this.dGenTime == null) { + throw "genTime shall be specified." + } + e.push(this.dGenTime); + if (this.dAccuracy != null) { + e.push(this.dAccuracy) + } + if (this.dOrdering != null) { + e.push(this.dOrdering) + } + if (this.dNonce != null) { + e.push(this.dNonce) + } + if (this.dTsa != null) { + e.push(this.dTsa) + } + var f = new a.DERSequence({ + array: e + }); + this.hTLV = f.getEncodedHex(); + return this.hTLV + }; + if (typeof c != "undefined") { + if (typeof c.policy == "string") { + if (!c.policy.match(/^[0-9.]+$/)) { + throw "policy shall be oid like 0.1.4.134" + } + this.dPolicy = new a.DERObjectIdentifier({ + oid: c.policy + }) + } + if (typeof c.messageImprint != "undefined") { + this.dMessageImprint = new b.MessageImprint(c.messageImprint) + } + if (typeof c.serialNumber != "undefined") { + this.dSerialNumber = new a.DERInteger(c.serialNumber) + } + if (typeof c.genTime != "undefined") { + this.dGenTime = new a.DERGeneralizedTime(c.genTime) + } + if (typeof c.accuracy != "undefind") { + this.dAccuracy = new b.Accuracy(c.accuracy) + } + if (typeof c.ordering != "undefined" && c.ordering == true) { + this.dOrdering = new a.DERBoolean() + } + if (typeof c.nonce != "undefined") { + this.dNonce = new a.DERInteger(c.nonce) + } + if (typeof c.tsa != "undefined") { + this.dTsa = new d.X500Name(c.tsa) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.TSTInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.TimeStampResp = function(c) { + KJUR.asn1.tsp.TimeStampResp.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.tsp; + this.dStatus = null; + this.dTST = null; + this.getEncodedHex = function() { + if (this.dStatus == null) { + throw "status shall be specified" + } + var d = [this.dStatus]; + if (this.dTST != null) { + d.push(this.dTST) + } + var e = new a.DERSequence({ + array: d + }); + this.hTLV = e.getEncodedHex(); + return this.hTLV + }; + if (typeof c != "undefined") { + if (typeof c.status == "object") { + this.dStatus = new b.PKIStatusInfo(c.status) + } + if (typeof c.tst != "undefined" && c.tst instanceof KJUR.asn1.ASN1Object) { + this.dTST = c.tst.getContentInfo() + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampResp, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.PKIStatusInfo = function(c) { + KJUR.asn1.tsp.PKIStatusInfo.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.tsp; + this.dStatus = null; + this.dStatusString = null; + this.dFailureInfo = null; + this.getEncodedHex = function() { + if (this.dStatus == null) { + throw "status shall be specified" + } + var d = [this.dStatus]; + if (this.dStatusString != null) { + d.push(this.dStatusString) + } + if (this.dFailureInfo != null) { + d.push(this.dFailureInfo) + } + var e = new a.DERSequence({ + array: d + }); + this.hTLV = e.getEncodedHex(); + return this.hTLV + }; + if (typeof c != "undefined") { + if (typeof c.status == "object") { + this.dStatus = new b.PKIStatus(c.status) + } + if (typeof c.statstr == "object") { + this.dStatusString = new b.PKIFreeText({ + array: c.statstr + }) + } + if (typeof c.failinfo == "object") { + this.dFailureInfo = new b.PKIFailureInfo(c.failinfo) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatusInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.PKIStatus = function(e) { + KJUR.asn1.tsp.PKIStatus.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.tsp; + var d = null; + this.getEncodedHex = function() { + this.hTLV = this.dStatus.getEncodedHex(); + return this.hTLV + }; + if (typeof e != "undefined") { + if (typeof e.name != "undefined") { + var c = b.PKIStatus.valueList; + if (typeof c[e.name] == "undefined") { + throw "name undefined: " + e.name + } + this.dStatus = new a.DERInteger({ + "int": c[e.name] + }) + } else { + this.dStatus = new a.DERInteger(e) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatus, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.PKIStatus.valueList = { + granted: 0, + grantedWithMods: 1, + rejection: 2, + waiting: 3, + revocationWarning: 4, + revocationNotification: 5 +}; +KJUR.asn1.tsp.PKIFreeText = function(b) { + KJUR.asn1.tsp.PKIFreeText.superclass.constructor.call(this); + var a = KJUR.asn1; + this.textList = []; + this.getEncodedHex = function() { + var c = []; + for (var e = 0; e < this.textList.length; e++) { + c.push(new a.DERUTF8String({ + str: this.textList[e] + })) + } + var d = new a.DERSequence({ + array: c + }); + this.hTLV = d.getEncodedHex(); + return this.hTLV + }; + if (typeof b != "undefined") { + if (typeof b.array == "object") { + this.textList = b.array + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.PKIFreeText, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.PKIFailureInfo = function(d) { + KJUR.asn1.tsp.PKIFailureInfo.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.tsp; + this.value = null; + this.getEncodedHex = function() { + if (this.value == null) { + throw "value shall be specified" + } + var e = new Number(this.value).toString(2); + var f = new a.DERBitString(); + f.setByBinaryString(e); + this.hTLV = f.getEncodedHex(); + return this.hTLV + }; + if (typeof d != "undefined") { + if (typeof d.name == "string") { + var c = b.PKIFailureInfo.valueList; + if (typeof c[d.name] == "undefined") { + throw "name undefined: " + d.name + } + this.value = c[d.name] + } else { + if (typeof d["int"] == "number") { + this.value = d["int"] + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.PKIFailureInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.tsp.PKIFailureInfo.valueList = { + badAlg: 0, + badRequest: 2, + badDataFormat: 5, + timeNotAvailable: 14, + unacceptedPolicy: 15, + unacceptedExtension: 16, + addInfoNotAvailable: 17, + systemFailure: 25 +}; +KJUR.asn1.tsp.AbstractTSAAdapter = function(a) { + this.getTSTHex = function(c, b) { + throw "not implemented yet" + } +}; +KJUR.asn1.tsp.SimpleTSAAdapter = function(a) { + KJUR.asn1.tsp.SimpleTSAAdapter.superclass.constructor.call(this); + this.params = null; + this.serial = 0; + this.getTSTHex = function(c, b) { + var e = KJUR.crypto.Util.hashHex(c, b); + this.params.tstInfo.messageImprint = { + hashAlg: b, + hashValue: e + }; + this.params.tstInfo.serialNumber = { + "int": this.serial++ + }; + var d = Math.floor(Math.random() * 1000000000); + this.params.tstInfo.nonce = { + "int": d + }; + var f = KJUR.asn1.tsp.TSPUtil.newTimeStampToken(this.params); + return f.getContentInfoEncodedHex() + }; + if (typeof a != "undefined") { + this.params = a + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.SimpleTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter); +KJUR.asn1.tsp.FixedTSAAdapter = function(a) { + KJUR.asn1.tsp.FixedTSAAdapter.superclass.constructor.call(this); + this.params = null; + this.getTSTHex = function(c, b) { + var d = KJUR.crypto.Util.hashHex(c, b); + this.params.tstInfo.messageImprint = { + hashAlg: b, + hashValue: d + }; + var e = KJUR.asn1.tsp.TSPUtil.newTimeStampToken(this.params); + return e.getContentInfoEncodedHex() + }; + if (typeof a != "undefined") { + this.params = a + } +}; +YAHOO.lang.extend(KJUR.asn1.tsp.FixedTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter); +KJUR.asn1.tsp.TSPUtil = new +function() {}; +KJUR.asn1.tsp.TSPUtil.newTimeStampToken = function(b) { + var j = KJUR.asn1.cms; + var a = KJUR.asn1.tsp; + var g = new j.SignedData(); + var e = new a.TSTInfo(b.tstInfo); + var f = e.getEncodedHex(); + g.dEncapContentInfo.setContentValue({ + hex: f + }); + g.dEncapContentInfo.setContentType("tstinfo"); + if (typeof b.certs == "object") { + for (var c = 0; c < b.certs.length; c++) { + g.addCertificatesByPEM(b.certs[c]) + } + } + var d = g.signerInfoList[0]; + d.setSignerIdentifier(b.signerCert); + d.setForContentAndHash({ + sdObj: g, + eciObj: g.dEncapContentInfo, + hashAlg: b.hashAlg + }); + var h = new j.SigningCertificate({ + array: [b.signerCert] + }); + d.dSignedAttrs.add(h); + d.sign(b.signerPrvKey, b.sigAlg); + return g +}; +KJUR.asn1.tsp.TSPUtil.parseTimeStampReq = function(d) { + var f = {}; + f.certreq = false; + var h = ASN1HEX.getPosArrayOfChildren_AtObj(d, 0); + if (h.length < 2) { + throw "TimeStampReq must have at least 2 items" + } + var c = ASN1HEX.getHexOfTLV_AtObj(d, h[1]); + f.mi = KJUR.asn1.tsp.TSPUtil.parseMessageImprint(c); + for (var e = 2; e < h.length; e++) { + var b = h[e]; + var a = d.substr(b, 2); + if (a == "06") { + var g = ASN1HEX.getHexOfV_AtObj(d, b); + f.policy = ASN1HEX.hextooidstr(g) + } + if (a == "02") { + f.nonce = ASN1HEX.getHexOfV_AtObj(d, b) + } + if (a == "01") { + f.certreq = true + } + } + return f +}; +KJUR.asn1.tsp.TSPUtil.parseMessageImprint = function(c) { + var h = {}; + if (c.substr(0, 2) != "30") { + throw "head of messageImprint hex shall be '30'" + } + var a = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0); + var i = ASN1HEX.getDecendantIndexByNthList(c, 0, [0, 0]); + var d = ASN1HEX.getHexOfV_AtObj(c, i); + var e = ASN1HEX.hextooidstr(d); + var g = KJUR.asn1.x509.OID.oid2name(e); + if (g == "") { + throw "hashAlg name undefined: " + e + } + var b = g; + var f = ASN1HEX.getDecendantIndexByNthList(c, 0, [1]); + h.hashAlg = b; + h.hashValue = ASN1HEX.getHexOfV_AtObj(c, f); + return h +}; +/*! asn1cades-1.0.1.js (c) 2014-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { + KJUR.asn1 = {} +} +if (typeof KJUR.asn1.cades == "undefined" || !KJUR.asn1.cades) { + KJUR.asn1.cades = {} +} +KJUR.asn1.cades.SignaturePolicyIdentifier = function(e) { + KJUR.asn1.cades.SignaturePolicyIdentifier.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.16.2.15"; + var b = KJUR.asn1; + var d = KJUR.asn1.cades; + if (typeof e != "undefined") { + if (typeof e.oid == "string" && typeof e.hash == "object") { + var f = new b.DERObjectIdentifier({ + oid: e.oid + }); + var a = new d.OtherHashAlgAndValue(e.hash); + var c = new b.DERSequence({ + array: [f, a] + }); + this.valueList = [c] + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cades.SignaturePolicyIdentifier, KJUR.asn1.cms.Attribute); +KJUR.asn1.cades.OtherHashAlgAndValue = function(b) { + KJUR.asn1.cades.OtherHashAlgAndValue.superclass.constructor.call(this); + var a = KJUR.asn1; + var c = KJUR.asn1.x509; + this.dAlg = null; + this.dHash = null; + this.getEncodedHex = function() { + var d = new a.DERSequence({ + array: [this.dAlg, this.dHash] + }); + this.hTLV = d.getEncodedHex(); + return this.hTLV + }; + if (typeof b != "undefined") { + if (typeof b.alg == "string" && typeof b.hash == "string") { + this.dAlg = new c.AlgorithmIdentifier({ + name: b.alg + }); + this.dHash = new a.DEROctetString({ + hex: b.hash + }) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cades.OtherHashAlgAndValue, KJUR.asn1.ASN1Object); +KJUR.asn1.cades.SignatureTimeStamp = function(c) { + KJUR.asn1.cades.SignatureTimeStamp.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.16.2.14"; + this.tstHex = null; + var a = KJUR.asn1; + if (typeof c != "undefined") { + if (typeof c.res != "undefined") { + if (typeof c.res == "string" && c.res.match(/^[0-9A-Fa-f]+$/)) {} else { + if (c.res instanceof KJUR.asn1.ASN1Object) {} else { + throw "res param shall be ASN1Object or hex string" + } + } + } + if (typeof c.tst != "undefined") { + if (typeof c.tst == "string" && c.tst.match(/^[0-9A-Fa-f]+$/)) { + var b = new a.ASN1Object(); + this.tstHex = c.tst; + b.hTLV = this.tstHex; + b.getEncodedHex(); + this.valueList = [b] + } else { + if (c.tst instanceof KJUR.asn1.ASN1Object) {} else { + throw "tst param shall be ASN1Object or hex string" + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cades.SignatureTimeStamp, KJUR.asn1.cms.Attribute); +KJUR.asn1.cades.CompleteCertificateRefs = function(c) { + KJUR.asn1.cades.CompleteCertificateRefs.superclass.constructor.call(this); + this.attrTypeOid = "1.2.840.113549.1.9.16.2.21"; + var a = KJUR.asn1; + var b = KJUR.asn1.cades; + this.setByArray = function(d) { + this.valueList = []; + for (var e = 0; e < d.length; e++) { + var f = new b.OtherCertID(d[e]); + this.valueList.push(f) + } + }; + if (typeof c != "undefined") { + if (typeof c == "object" && typeof c.length == "number") { + this.setByArray(c) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cades.CompleteCertificateRefs, KJUR.asn1.cms.Attribute); +KJUR.asn1.cades.OtherCertID = function(d) { + KJUR.asn1.cades.OtherCertID.superclass.constructor.call(this); + var a = KJUR.asn1; + var c = KJUR.asn1.cms; + var b = KJUR.asn1.cades; + this.hasIssuerSerial = true; + this.dOtherCertHash = null; + this.dIssuerSerial = null; + this.setByCertPEM = function(e) { + this.dOtherCertHash = new b.OtherHash(e); + if (this.hasIssuerSerial) { + this.dIssuerSerial = new c.IssuerAndSerialNumber(e) + } + }; + this.getEncodedHex = function() { + if (this.hTLV != null) { + return this.hTLV + } + if (this.dOtherCertHash == null) { + throw "otherCertHash not set" + } + var e = [this.dOtherCertHash]; + if (this.dIssuerSerial != null) { + e.push(this.dIssuerSerial) + } + var f = new a.DERSequence({ + array: e + }); + this.hTLV = f.getEncodedHex(); + return this.hTLV + }; + if (typeof d != "undefined") { + if (typeof d == "string" && d.indexOf("-----BEGIN ") != -1) { + this.setByCertPEM(d) + } + if (typeof d == "object") { + if (d.hasis === false) { + this.hasIssuerSerial = false + } + if (typeof d.cert == "string") { + this.setByCertPEM(d.cert) + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cades.OtherCertID, KJUR.asn1.ASN1Object); +KJUR.asn1.cades.OtherHash = function(c) { + KJUR.asn1.cades.OtherHash.superclass.constructor.call(this); + var a = KJUR.asn1; + var b = KJUR.asn1.cades; + this.alg = "sha256"; + this.dOtherHash = null; + this.setByCertPEM = function(d) { + if (d.indexOf("-----BEGIN ") == -1) { + throw "certPEM not to seem PEM format" + } + var e = ASN1HEX.pemToHex(d); + var f = KJUR.crypto.Util.hashHex(e, this.alg); + this.dOtherHash = new b.OtherHashAlgAndValue({ + alg: this.alg, + hash: f + }) + }; + this.getEncodedHex = function() { + if (this.dOtherHash == null) { + throw "OtherHash not set" + } + return this.dOtherHash.getEncodedHex() + }; + if (typeof c != "undefined") { + if (typeof c == "string") { + if (c.indexOf("-----BEGIN ") != -1) { + this.setByCertPEM(c) + } else { + if (c.match(/^[0-9A-Fa-f]+$/)) { + this.dOtherHash = new a.DEROctetString({ + hex: c + }) + } else { + throw "unsupported string value for params" + } + } + } else { + if (typeof c == "object") { + if (typeof c.cert == "string") { + if (typeof c.alg == "string") { + this.alg = c.alg + } + this.setByCertPEM(c.cert) + } else { + this.dOtherHash = new b.OtherHashAlgAndValue(c) + } + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.cades.OtherHash, KJUR.asn1.ASN1Object); +KJUR.asn1.cades.CAdESUtil = new +function() {}; +KJUR.asn1.cades.CAdESUtil.addSigTS = function(c, b, a) {}; +KJUR.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned = function(d) { + var q = KJUR.asn1; + var p = KJUR.asn1.cms; + var c = KJUR.asn1.cades.CAdESUtil; + var a = {}; + if (ASN1HEX.getDecendantHexTLVByNthList(d, 0, [0]) != "06092a864886f70d010702") { + throw "hex is not CMS SignedData" + } + var s = ASN1HEX.getDecendantIndexByNthList(d, 0, [1, 0]); + var b = ASN1HEX.getPosArrayOfChildren_AtObj(d, s); + if (b.length < 4) { + throw "num of SignedData elem shall be 4 at least" + } + var f = b.shift(); + a.version = ASN1HEX.getHexOfTLV_AtObj(d, f); + var l = b.shift(); + a.algs = ASN1HEX.getHexOfTLV_AtObj(d, l); + var m = b.shift(); + a.encapcontent = ASN1HEX.getHexOfTLV_AtObj(d, m); + a.certs = null; + a.revs = null; + a.si = []; + var n = b.shift(); + if (d.substr(n, 2) == "a0") { + a.certs = ASN1HEX.getHexOfTLV_AtObj(d, n); + n = b.shift() + } + if (d.substr(n, 2) == "a1") { + a.revs = ASN1HEX.getHexOfTLV_AtObj(d, n); + n = b.shift() + } + var k = n; + if (d.substr(k, 2) != "31") { + throw "Can't find signerInfos" + } + var j = ASN1HEX.getPosArrayOfChildren_AtObj(d, k); + for (var h = 0; h < j.length; h++) { + var o = j[h]; + var e = c.parseSignerInfoForAddingUnsigned(d, o, h); + a.si[h] = e + } + var g = null; + a.obj = new p.SignedData(); + g = new q.ASN1Object(); + g.hTLV = a.version; + a.obj.dCMSVersion = g; + g = new q.ASN1Object(); + g.hTLV = a.algs; + a.obj.dDigestAlgs = g; + g = new q.ASN1Object(); + g.hTLV = a.encapcontent; + a.obj.dEncapContentInfo = g; + g = new q.ASN1Object(); + g.hTLV = a.certs; + a.obj.dCerts = g; + a.obj.signerInfoList = []; + for (var h = 0; h < a.si.length; h++) { + a.obj.signerInfoList.push(a.si[h].obj) + } + return a +}; +KJUR.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned = function(d, k, a) { + var m = KJUR.asn1; + var l = KJUR.asn1.cms; + var b = {}; + var e = ASN1HEX.getPosArrayOfChildren_AtObj(d, k); + if (e.length != 6) { + throw "not supported items for SignerInfo (!=6)" + } + var f = e.shift(); + b.version = ASN1HEX.getHexOfTLV_AtObj(d, f); + var n = e.shift(); + b.si = ASN1HEX.getHexOfTLV_AtObj(d, n); + var h = e.shift(); + b.digalg = ASN1HEX.getHexOfTLV_AtObj(d, h); + var c = e.shift(); + b.sattrs = ASN1HEX.getHexOfTLV_AtObj(d, c); + var i = e.shift(); + b.sigalg = ASN1HEX.getHexOfTLV_AtObj(d, i); + var j = e.shift(); + b.sig = ASN1HEX.getHexOfTLV_AtObj(d, j); + b.sigval = ASN1HEX.getHexOfV_AtObj(d, j); + var g = null; + b.obj = new l.SignerInfo(); + g = new m.ASN1Object(); + g.hTLV = b.version; + b.obj.dCMSVersion = g; + g = new m.ASN1Object(); + g.hTLV = b.si; + b.obj.dSignerIdentifier = g; + g = new m.ASN1Object(); + g.hTLV = b.digalg; + b.obj.dDigestAlgorithm = g; + g = new m.ASN1Object(); + g.hTLV = b.sattrs; + b.obj.dSignedAttrs = g; + g = new m.ASN1Object(); + g.hTLV = b.sigalg; + b.obj.dSigAlg = g; + g = new m.ASN1Object(); + g.hTLV = b.sig; + b.obj.dSig = g; + b.obj.dUnsignedAttrs = new l.AttributeList(); + return b +}; +/*! asn1csr-1.0.3.js (c) 2015-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR.asn1.csr == "undefined" || !KJUR.asn1.csr) { + KJUR.asn1.csr = {} +} +KJUR.asn1.csr.CertificationRequest = function(f) { + KJUR.asn1.csr.CertificationRequest.superclass.constructor.call(this); + var b = null; + var d = null; + var e = null; + var c = null; + var a = null; + this.sign = function(i, h) { + if (this.prvKey == null) { + this.prvKey = h + } + this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier({ + name: i + }); + sig = new KJUR.crypto.Signature({ + alg: i + }); + sig.initSign(this.prvKey); + sig.updateHex(this.asn1CSRInfo.getEncodedHex()); + this.hexSig = sig.sign(); + this.asn1Sig = new KJUR.asn1.DERBitString({ + hex: "00" + this.hexSig + }); + var g = new KJUR.asn1.DERSequence({ + array: [this.asn1CSRInfo, this.asn1SignatureAlg, this.asn1Sig] + }); + this.hTLV = g.getEncodedHex(); + this.isModified = false + }; + this.getPEMString = function() { + var g = KJUR.asn1.ASN1Util.getPEMStringFromHex(this.getEncodedHex(), "CERTIFICATE REQUEST"); + return g + }; + this.getEncodedHex = function() { + if (this.isModified == false && this.hTLV != null) { + return this.hTLV + } + throw "not signed yet" + }; + if (typeof f != "undefined") { + if (typeof f.csrinfo != "undefined") { + this.asn1CSRInfo = f.csrinfo + } + } +}; +YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequest, KJUR.asn1.ASN1Object); +KJUR.asn1.csr.CertificationRequestInfo = function(a) { + KJUR.asn1.csr.CertificationRequestInfo.superclass.constructor.call(this); + this._initialize = function() { + this.asn1Array = new Array(); + this.asn1Version = new KJUR.asn1.DERInteger({ + "int": 0 + }); + this.asn1Subject = null; + this.asn1SubjPKey = null; + this.extensionsArray = new Array() + }; + this.setSubjectByParam = function(b) { + this.asn1Subject = new KJUR.asn1.x509.X500Name(b) + }; + this.setSubjectPublicKeyByGetKey = function(c) { + var b = KEYUTIL.getKey(c); + this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b) + }; + this.appendExtensionByName = function(c, b) { + KJUR.asn1.x509.Extension.appendByNameToArray(c, b, this.extensionsArray) + }; + this.getEncodedHex = function() { + this.asn1Array = new Array(); + this.asn1Array.push(this.asn1Version); + this.asn1Array.push(this.asn1Subject); + this.asn1Array.push(this.asn1SubjPKey); + if (this.extensionsArray.length > 0) { + var e = new KJUR.asn1.DERSequence({ + array: this.extensionsArray + }); + var d = new KJUR.asn1.DERSet({ + array: [e] + }); + var c = new KJUR.asn1.DERSequence({ + array: [new KJUR.asn1.DERObjectIdentifier({ + oid: "1.2.840.113549.1.9.14" + }), d] + }); + var b = new KJUR.asn1.DERTaggedObject({ + explicit: true, + tag: "a0", + obj: c + }); + this.asn1Array.push(b) + } else { + var b = new KJUR.asn1.DERTaggedObject({ + explicit: false, + tag: "a0", + obj: new KJUR.asn1.DERNull() + }); + this.asn1Array.push(b) + } + var f = new KJUR.asn1.DERSequence({ + array: this.asn1Array + }); + this.hTLV = f.getEncodedHex(); + this.isModified = false; + return this.hTLV + }; + this._initialize() +}; +YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequestInfo, KJUR.asn1.ASN1Object); +KJUR.asn1.csr.CSRUtil = new +function() {}; +KJUR.asn1.csr.CSRUtil.newCSRPEM = function(g) { + var d = KJUR.asn1.csr; + if (g.subject === undefined) { + throw "parameter subject undefined" + } + if (g.sbjpubkey === undefined) { + throw "parameter sbjpubkey undefined" + } + if (g.sigalg === undefined) { + throw "parameter sigalg undefined" + } + if (g.sbjprvkey === undefined) { + throw "parameter sbjpubkey undefined" + } + var b = new d.CertificationRequestInfo(); + b.setSubjectByParam(g.subject); + b.setSubjectPublicKeyByGetKey(g.sbjpubkey); + if (g.ext !== undefined && g.ext.length !== undefined) { + for (var c = 0; c < g.ext.length; c++) { + for (key in g.ext[c]) { + b.appendExtensionByName(key, g.ext[c][key]) + } + } + } + var e = new d.CertificationRequest({ + csrinfo: b + }); + var a = KEYUTIL.getKey(g.sbjprvkey); + e.sign(g.sigalg, a); + var f = e.getPEMString(); + return f +}; +KJUR.asn1.csr.CSRUtil.getInfo = function(b) { + var a = {}; + a.subject = {}; + a.pubkey = {}; + if (b.indexOf("-----BEGIN CERTIFICATE REQUEST") == -1) { + throw "argument is not PEM file" + } + var c = ASN1HEX.pemToHex(b, "CERTIFICATE REQUEST"); + a.subject.hex = ASN1HEX.getDecendantHexTLVByNthList(c, 0, [0, 1]); + a.subject.name = X509.hex2dn(a.subject.hex); + a.pubkey.hex = ASN1HEX.getDecendantHexTLVByNthList(c, 0, [0, 2]); + a.pubkey.obj = KEYUTIL.getKey(a.pubkey.hex, null, "pkcs8pub"); + return a +}; +/*! asn1ocsp-1.0.1.js (c) 2016 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) { + KJUR.asn1 = {} +} +if (typeof KJUR.asn1.ocsp == "undefined" || !KJUR.asn1.ocsp) { + KJUR.asn1.ocsp = {} +} +KJUR.asn1.ocsp.DEFAULT_HASH = "sha1"; +KJUR.asn1.ocsp.CertID = function(c) { + KJUR.asn1.ocsp.CertID.superclass.constructor.call(this); + var a = KJUR.asn1; + var e = KJUR.asn1.x509; + this.dHashAlg = null; + this.dIssuerNameHash = null; + this.dIssuerKeyHash = null; + this.dSerialNumber = null; + this.setByValue = function(i, h, f, g) { + if (g === undefined) { + g = KJUR.asn1.ocsp.DEFAULT_HASH + } + this.dHashAlg = new e.AlgorithmIdentifier({ + name: g + }); + this.dIssuerNameHash = new a.DEROctetString({ + hex: i + }); + this.dIssuerKeyHash = new a.DEROctetString({ + hex: h + }); + this.dSerialNumber = new a.DERInteger({ + hex: f + }) + }; + this.setByCert = function(m, i, k) { + if (k === undefined) { + k = KJUR.asn1.ocsp.DEFAULT_HASH + } + var f = new X509(); + f.readCertPEM(i); + var n = new X509(); + n.readCertPEM(m); + var o = X509.getPublicKeyInfoPropOfCertPEM(m); + var l = o.keyhex; + var g = f.getSerialNumberHex(); + var h = KJUR.crypto.Util.hashHex(n.getSubjectHex(), k); + var j = KJUR.crypto.Util.hashHex(l, k); + this.setByValue(h, j, g, k); + this.hoge = f.getSerialNumberHex() + }; + this.getEncodedHex = function() { + if (this.dHashAlg === null && this.dIssuerNameHash === null && this.dIssuerKeyHash === null && this.dSerialNumber === null) { + throw "not yet set values" + } + var f = [this.dHashAlg, this.dIssuerNameHash, this.dIssuerKeyHash, this.dSerialNumber]; + var g = new a.DERSequence({ + array: f + }); + this.hTLV = g.getEncodedHex(); + return this.hTLV + }; + if (typeof c !== "undefined") { + var b = c; + if (typeof b.issuerCert !== "undefined" && typeof b.subjectCert !== "undefined") { + var d = KJUR.asn1.ocsp.DEFAULT_HASH; + if (typeof b.alg === "undefined") { + d = undefined + } + this.setByCert(b.issuerCert, b.subjectCert, d) + } else { + if (typeof b.namehash !== "undefined" && typeof b.keyhash !== "undefined" && typeof b.serial !== "undefined") { + var d = KJUR.asn1.ocsp.DEFAULT_HASH; + if (typeof b.alg === "undefined") { + d = undefined + } + this.setByValue(b.namehash, b.keyhash, b.serial, d) + } else { + throw "invalid constructor arguments" + } + } + } +}; +YAHOO.lang.extend(KJUR.asn1.ocsp.CertID, KJUR.asn1.ASN1Object); +KJUR.asn1.ocsp.Request = function(b) { + KJUR.asn1.ocsp.Request.superclass.constructor.call(this); + this.dReqCert = null; + this.dExt = null; + this.getEncodedHex = function() { + var c = []; + if (this.dReqCert === null) { + throw "reqCert not set" + } + c.push(this.dReqCert); + var d = new KJUR.asn1.DERSequence({ + array: c + }); + this.hTLV = d.getEncodedHex(); + return this.hTLV + }; + if (typeof b !== "undefined") { + var a = new KJUR.asn1.ocsp.CertID(b); + this.dReqCert = a + } +}; +YAHOO.lang.extend(KJUR.asn1.ocsp.Request, KJUR.asn1.ASN1Object); +KJUR.asn1.ocsp.TBSRequest = function(a) { + KJUR.asn1.ocsp.TBSRequest.superclass.constructor.call(this); + this.version = 0; + this.dRequestorName = null; + this.dRequestList = []; + this.dRequestExt = null; + this.setRequestListByParam = function(d) { + var b = []; + for (var c = 0; c < d.length; c++) { + var e = new KJUR.asn1.ocsp.Request(d[0]); + b.push(e) + } + this.dRequestList = b + }; + this.getEncodedHex = function() { + var b = []; + if (this.version !== 0) { + throw "not supported version: " + this.version + } + if (this.dRequestorName !== null) { + throw "requestorName not supported" + } + var d = new KJUR.asn1.DERSequence({ + array: this.dRequestList + }); + b.push(d); + if (this.dRequestExt !== null) { + throw "requestExtensions not supported" + } + var c = new KJUR.asn1.DERSequence({ + array: b + }); + this.hTLV = c.getEncodedHex(); + return this.hTLV + }; + if (typeof a !== "undefined") { + if (typeof a.reqList !== "undefined") { + this.setRequestListByParam(a.reqList) + } + } +}; +YAHOO.lang.extend(KJUR.asn1.ocsp.TBSRequest, KJUR.asn1.ASN1Object); +KJUR.asn1.ocsp.OCSPRequest = function(b) { + KJUR.asn1.ocsp.OCSPRequest.superclass.constructor.call(this); + this.dTbsRequest = null; + this.dOptionalSignature = null; + this.getEncodedHex = function() { + var c = []; + if (this.dTbsRequest !== null) { + c.push(this.dTbsRequest) + } else { + throw "tbsRequest not set" + } + if (this.dOptionalSignature !== null) { + throw "optionalSignature not supported" + } + var d = new KJUR.asn1.DERSequence({ + array: c + }); + this.hTLV = d.getEncodedHex(); + return this.hTLV + }; + if (typeof b !== "undefined") { + if (typeof b.reqList !== "undefined") { + var a = new KJUR.asn1.ocsp.TBSRequest(b); + this.dTbsRequest = a + } + } +}; +YAHOO.lang.extend(KJUR.asn1.ocsp.OCSPRequest, KJUR.asn1.ASN1Object); +KJUR.asn1.ocsp.OCSPUtil = {}; +KJUR.asn1.ocsp.OCSPUtil.getRequestHex = function(a, b, e) { + if (e === undefined) { + e = KJUR.asn1.ocsp.DEFAULT_HASH + } + var d = { + alg: e, + issuerCert: a, + subjectCert: b + }; + var c = new KJUR.asn1.ocsp.OCSPRequest({ + reqList: [d] + }); + return c.getEncodedHex() +}; +KJUR.asn1.ocsp.OCSPUtil.getOCSPResponseInfo = function(f) { + var a = {}; + try { + var b = ASN1HEX.getVbyList(f, 0, [0], "0a"); + a.responseStatus = parseInt(b, 16) + } catch(d) {} + if (a.responseStatus !== 0) { + return a + } + try { + var e = ASN1HEX.getDecendantIndexByNthList(f, 0, [1, 0, 1, 0, 0, 2, 0, 1]); + if (f.substr(e, 2) === "80") { + a.certStatus = "good" + } else { + if (f.substr(e, 2) === "a1") { + a.certStatus = "revoked"; + a.revocationTime = hextoutf8(ASN1HEX.getDecendantHexVByNthList(f, e, [0])) + } else { + if (f.substr(e, 2) === "82") { + a.certStatus = "unknown" + } + } + } + } catch(d) {} + try { + var c = ASN1HEX.getDecendantIndexByNthList(f, 0, [1, 0, 1, 0, 0, 2, 0, 2]); + a.thisUpdate = hextoutf8(ASN1HEX.getHexOfV_AtObj(f, c)) + } catch(d) {} + try { + var g = ASN1HEX.getDecendantIndexByNthList(f, 0, [1, 0, 1, 0, 0, 2, 0, 3]); + if (f.substr(g, 2) === "a0") { + a.nextUpdate = hextoutf8(ASN1HEX.getDecendantHexVByNthList(f, g, [0])) + } + } catch(d) {} + return a +}; +/*! base64x-1.1.8 (c) 2012-2016 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var KJUR; +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.lang == "undefined" || !KJUR.lang) { + KJUR.lang = {} +} +KJUR.lang.String = function() {}; +function Base64x() {} +function stoBA(d) { + var b = new Array(); + for (var c = 0; c < d.length; c++) { + b[c] = d.charCodeAt(c) + } + return b +} +function BAtos(b) { + var d = ""; + for (var c = 0; c < b.length; c++) { + d = d + String.fromCharCode(b[c]) + } + return d +} +function BAtohex(b) { + var e = ""; + for (var d = 0; d < b.length; d++) { + var c = b[d].toString(16); + if (c.length == 1) { + c = "0" + c + } + e = e + c + } + return e +} +function stohex(a) { + return BAtohex(stoBA(a)) +} +function stob64(a) { + return hex2b64(stohex(a)) +} +function stob64u(a) { + return b64tob64u(hex2b64(stohex(a))) +} +function b64utos(a) { + return BAtos(b64toBA(b64utob64(a))) +} +function b64tob64u(a) { + a = a.replace(/\=/g, ""); + a = a.replace(/\+/g, "-"); + a = a.replace(/\//g, "_"); + return a +} +function b64utob64(a) { + if (a.length % 4 == 2) { + a = a + "==" + } else { + if (a.length % 4 == 3) { + a = a + "=" + } + } + a = a.replace(/-/g, "+"); + a = a.replace(/_/g, "/"); + return a +} +function hextob64u(a) { + if (a.length % 2 == 1) { + a = "0" + a + } + return b64tob64u(hex2b64(a)) +} +function b64utohex(a) { + return b64tohex(b64utob64(a)) +} +var utf8tob64u, b64utoutf8; +if (typeof Buffer === "function") { + utf8tob64u = function(a) { + return b64tob64u(new Buffer(a, "utf8").toString("base64")) + }; + b64utoutf8 = function(a) { + return new Buffer(b64utob64(a), "base64").toString("utf8") + } +} else { + utf8tob64u = function(a) { + return hextob64u(uricmptohex(encodeURIComponentAll(a))) + }; + b64utoutf8 = function(a) { + return decodeURIComponent(hextouricmp(b64utohex(a))) + } +} +function utf8tob64(a) { + return hex2b64(uricmptohex(encodeURIComponentAll(a))) +} +function b64toutf8(a) { + return decodeURIComponent(hextouricmp(b64tohex(a))) +} +function utf8tohex(a) { + return uricmptohex(encodeURIComponentAll(a)) +} +function hextoutf8(a) { + return decodeURIComponent(hextouricmp(a)) +} +function hextorstr(c) { + var b = ""; + for (var a = 0; a < c.length - 1; a += 2) { + b += String.fromCharCode(parseInt(c.substr(a, 2), 16)) + } + return b +} +function rstrtohex(c) { + var a = ""; + for (var b = 0; b < c.length; b++) { + a += ("0" + c.charCodeAt(b).toString(16)).slice( - 2) + } + return a +} +function hextob64(a) { + return hex2b64(a) +} +function hextob64nl(b) { + var a = hextob64(b); + var c = a.replace(/(.{64})/g, "$1\r\n"); + c = c.replace(/\r\n$/, ""); + return c +} +function b64nltohex(b) { + var a = b.replace(/[^0-9A-Za-z\/+=]*/g, ""); + var c = b64tohex(a); + return c +} +function hextoArrayBuffer(d) { + if (d.length % 2 != 0) { + throw "input is not even length" + } + if (d.match(/^[0-9A-Fa-f]+$/) == null) { + throw "input is not hexadecimal" + } + var b = new ArrayBuffer(d.length / 2); + var a = new DataView(b); + for (var c = 0; c < d.length / 2; c++) { + a.setUint8(c, parseInt(d.substr(c * 2, 2), 16)) + } + return b +} +function ArrayBuffertohex(b) { + var d = ""; + var a = new DataView(b); + for (var c = 0; c < b.byteLength; c++) { + d += ("00" + a.getUint8(c).toString(16)).slice( - 2) + } + return d +} +function uricmptohex(a) { + return a.replace(/%/g, "") +} +function hextouricmp(a) { + return a.replace(/(..)/g, "%$1") +} +function encodeURIComponentAll(a) { + var d = encodeURIComponent(a); + var b = ""; + for (var c = 0; c < d.length; c++) { + if (d[c] == "%") { + b = b + d.substr(c, 3); + c = c + 2 + } else { + b = b + "%" + stohex(d[c]) + } + } + return b +} +function newline_toUnix(a) { + a = a.replace(/\r\n/mg, "\n"); + return a +} +function newline_toDos(a) { + a = a.replace(/\r\n/mg, "\n"); + a = a.replace(/\n/mg, "\r\n"); + return a +} +KJUR.lang.String.isInteger = function(a) { + if (a.match(/^[0-9]+$/)) { + return true + } else { + if (a.match(/^-[0-9]+$/)) { + return true + } else { + return false + } + } +}; +KJUR.lang.String.isHex = function(a) { + if (a.length % 2 == 0 && (a.match(/^[0-9a-f]+$/) || a.match(/^[0-9A-F]+$/))) { + return true + } else { + return false + } +}; +KJUR.lang.String.isBase64 = function(a) { + a = a.replace(/\s+/g, ""); + if (a.match(/^[0-9A-Za-z+\/]+={0,3}$/) && a.length % 4 == 0) { + return true + } else { + return false + } +}; +KJUR.lang.String.isBase64URL = function(a) { + if (a.match(/[+/ = ] / )) { + return false + } + a = b64utob64(a); + return KJUR.lang.String.isBase64(a) +}; +KJUR.lang.String.isIntegerArray = function(a) { + a = a.replace(/\s+/g, ""); + if (a.match(/^\[[0-9,]+\]$/)) { + return true + } else { + return false + } +}; +function intarystrtohex(b) { + b = b.replace(/^\s*\[\s*/, ""); + b = b.replace(/\s*\]\s*$/, ""); + b = b.replace(/\s*/g, ""); + try { + var c = b.split(/,/).map(function(g, e, h) { + var f = parseInt(g); + if (f < 0 || 255 < f) { + throw "integer not in range 0-255" + } + var d = ("00" + f.toString(16)).slice( - 2); + return d + }).join(""); + return c + } catch(a) { + throw "malformed integer array string: " + a + } +} +var strdiffidx = function(c, a) { + var d = c.length; + if (c.length > a.length) { + d = a.length + } + for (var b = 0; b < d; b++) { + if (c.charCodeAt(b) != a.charCodeAt(b)) { + return b + } + } + if (c.length != a.length) { + return d + } + return - 1 +}; +/*! crypto-1.1.12.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { + KJUR.crypto = {} +} +KJUR.crypto.Util = new +function() { + this.DIGESTINFOHEAD = { + sha1: "3021300906052b0e03021a05000414", + sha224: "302d300d06096086480165030402040500041c", + sha256: "3031300d060960864801650304020105000420", + sha384: "3041300d060960864801650304020205000430", + sha512: "3051300d060960864801650304020305000440", + md2: "3020300c06082a864886f70d020205000410", + md5: "3020300c06082a864886f70d020505000410", + ripemd160: "3021300906052b2403020105000414", + }; + this.DEFAULTPROVIDER = { + md5: "cryptojs", + sha1: "cryptojs", + sha224: "cryptojs", + sha256: "cryptojs", + sha384: "cryptojs", + sha512: "cryptojs", + ripemd160: "cryptojs", + hmacmd5: "cryptojs", + hmacsha1: "cryptojs", + hmacsha224: "cryptojs", + hmacsha256: "cryptojs", + hmacsha384: "cryptojs", + hmacsha512: "cryptojs", + hmacripemd160: "cryptojs", + MD5withRSA: "cryptojs/jsrsa", + SHA1withRSA: "cryptojs/jsrsa", + SHA224withRSA: "cryptojs/jsrsa", + SHA256withRSA: "cryptojs/jsrsa", + SHA384withRSA: "cryptojs/jsrsa", + SHA512withRSA: "cryptojs/jsrsa", + RIPEMD160withRSA: "cryptojs/jsrsa", + MD5withECDSA: "cryptojs/jsrsa", + SHA1withECDSA: "cryptojs/jsrsa", + SHA224withECDSA: "cryptojs/jsrsa", + SHA256withECDSA: "cryptojs/jsrsa", + SHA384withECDSA: "cryptojs/jsrsa", + SHA512withECDSA: "cryptojs/jsrsa", + RIPEMD160withECDSA: "cryptojs/jsrsa", + SHA1withDSA: "cryptojs/jsrsa", + SHA224withDSA: "cryptojs/jsrsa", + SHA256withDSA: "cryptojs/jsrsa", + MD5withRSAandMGF1: "cryptojs/jsrsa", + SHA1withRSAandMGF1: "cryptojs/jsrsa", + SHA224withRSAandMGF1: "cryptojs/jsrsa", + SHA256withRSAandMGF1: "cryptojs/jsrsa", + SHA384withRSAandMGF1: "cryptojs/jsrsa", + SHA512withRSAandMGF1: "cryptojs/jsrsa", + RIPEMD160withRSAandMGF1: "cryptojs/jsrsa", + }; + this.CRYPTOJSMESSAGEDIGESTNAME = { + md5: CryptoJS.algo.MD5, + sha1: CryptoJS.algo.SHA1, + sha224: CryptoJS.algo.SHA224, + sha256: CryptoJS.algo.SHA256, + sha384: CryptoJS.algo.SHA384, + sha512: CryptoJS.algo.SHA512, + ripemd160: CryptoJS.algo.RIPEMD160 + }; + this.getDigestInfoHex = function(a, b) { + if (typeof this.DIGESTINFOHEAD[b] == "undefined") { + throw "alg not supported in Util.DIGESTINFOHEAD: " + b + } + return this.DIGESTINFOHEAD[b] + a + }; + this.getPaddedDigestInfoHex = function(h, a, j) { + var c = this.getDigestInfoHex(h, a); + var d = j / 4; + if (c.length + 22 > d) { + throw "key is too short for SigAlg: keylen=" + j + "," + a + } + var b = "0001"; + var k = "00" + c; + var g = ""; + var l = d - b.length - k.length; + for (var f = 0; f < l; f += 2) { + g += "ff" + } + var e = b + g + k; + return e + }; + this.hashString = function(a, c) { + var b = new KJUR.crypto.MessageDigest({ + alg: c + }); + return b.digestString(a) + }; + this.hashHex = function(b, c) { + var a = new KJUR.crypto.MessageDigest({ + alg: c + }); + return a.digestHex(b) + }; + this.sha1 = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "sha1", + prov: "cryptojs" + }); + return b.digestString(a) + }; + this.sha256 = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "sha256", + prov: "cryptojs" + }); + return b.digestString(a) + }; + this.sha256Hex = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "sha256", + prov: "cryptojs" + }); + return b.digestHex(a) + }; + this.sha512 = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "sha512", + prov: "cryptojs" + }); + return b.digestString(a) + }; + this.sha512Hex = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "sha512", + prov: "cryptojs" + }); + return b.digestHex(a) + } +}; +KJUR.crypto.Util.md5 = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "md5", + prov: "cryptojs" + }); + return b.digestString(a) +}; +KJUR.crypto.Util.ripemd160 = function(a) { + var b = new KJUR.crypto.MessageDigest({ + alg: "ripemd160", + prov: "cryptojs" + }); + return b.digestString(a) +}; +KJUR.crypto.Util.SECURERANDOMGEN = new SecureRandom(); +KJUR.crypto.Util.getRandomHexOfNbytes = function(b) { + var a = new Array(b); + KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(a); + return BAtohex(a) +}; +KJUR.crypto.Util.getRandomBigIntegerOfNbytes = function(a) { + return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbytes(a), 16) +}; +KJUR.crypto.Util.getRandomHexOfNbits = function(d) { + var c = d % 8; + var a = (d - c) / 8; + var b = new Array(a + 1); + KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(b); + b[0] = (((255 << c) & 255) ^ 255) & b[0]; + return BAtohex(b) +}; +KJUR.crypto.Util.getRandomBigIntegerOfNbits = function(a) { + return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbits(a), 16) +}; +KJUR.crypto.Util.getRandomBigIntegerZeroToMax = function(b) { + var a = b.bitLength(); + while (1) { + var c = KJUR.crypto.Util.getRandomBigIntegerOfNbits(a); + if (b.compareTo(c) != -1) { + return c + } + } +}; +KJUR.crypto.Util.getRandomBigIntegerMinToMax = function(e, b) { + var c = e.compareTo(b); + if (c == 1) { + throw "biMin is greater than biMax" + } + if (c == 0) { + return e + } + var a = b.subtract(e); + var d = KJUR.crypto.Util.getRandomBigIntegerZeroToMax(a); + return d.add(e) +}; +KJUR.crypto.MessageDigest = function(c) { + var b = null; + var a = null; + var d = null; + this.setAlgAndProvider = function(g, f) { + g = KJUR.crypto.MessageDigest.getCanonicalAlgName(g); + if (g !== null && f === undefined) { + f = KJUR.crypto.Util.DEFAULTPROVIDER[g] + } + if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(g) != -1 && f == "cryptojs") { + try { + this.md = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g].create() + } catch(e) { + throw "setAlgAndProvider hash alg set fail alg=" + g + "/" + e + } + this.updateString = function(h) { + this.md.update(h) + }; + this.updateHex = function(h) { + var i = CryptoJS.enc.Hex.parse(h); + this.md.update(i) + }; + this.digest = function() { + var h = this.md.finalize(); + return h.toString(CryptoJS.enc.Hex) + }; + this.digestString = function(h) { + this.updateString(h); + return this.digest() + }; + this.digestHex = function(h) { + this.updateHex(h); + return this.digest() + } + } + if (":sha256:".indexOf(g) != -1 && f == "sjcl") { + try { + this.md = new sjcl.hash.sha256() + } catch(e) { + throw "setAlgAndProvider hash alg set fail alg=" + g + "/" + e + } + this.updateString = function(h) { + this.md.update(h) + }; + this.updateHex = function(i) { + var h = sjcl.codec.hex.toBits(i); + this.md.update(h) + }; + this.digest = function() { + var h = this.md.finalize(); + return sjcl.codec.hex.fromBits(h) + }; + this.digestString = function(h) { + this.updateString(h); + return this.digest() + }; + this.digestHex = function(h) { + this.updateHex(h); + return this.digest() + } + } + }; + this.updateString = function(e) { + throw "updateString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName + }; + this.updateHex = function(e) { + throw "updateHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName + }; + this.digest = function() { + throw "digest() not supported for this alg/prov: " + this.algName + "/" + this.provName + }; + this.digestString = function(e) { + throw "digestString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName + }; + this.digestHex = function(e) { + throw "digestHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName + }; + if (c !== undefined) { + if (c.alg !== undefined) { + this.algName = c.alg; + if (c.prov === undefined) { + this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName] + } + this.setAlgAndProvider(this.algName, this.provName) + } + } +}; +KJUR.crypto.MessageDigest.getCanonicalAlgName = function(a) { + if (typeof a === "string") { + a = a.toLowerCase(); + a = a.replace(/-/, "") + } + return a +}; +KJUR.crypto.MessageDigest.getHashLength = function(c) { + var b = KJUR.crypto.MessageDigest; + var a = b.getCanonicalAlgName(c); + if (b.HASHLENGTH[a] === undefined) { + throw "not supported algorithm: " + c + } + return b.HASHLENGTH[a] +}; +KJUR.crypto.MessageDigest.HASHLENGTH = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + ripemd160: 20 +}; +KJUR.crypto.Mac = function(d) { + var f = null; + var c = null; + var a = null; + var e = null; + var b = null; + this.setAlgAndProvider = function(k, i) { + k = k.toLowerCase(); + if (k == null) { + k = "hmacsha1" + } + k = k.toLowerCase(); + if (k.substr(0, 4) != "hmac") { + throw "setAlgAndProvider unsupported HMAC alg: " + k + } + if (i === undefined) { + i = KJUR.crypto.Util.DEFAULTPROVIDER[k] + } + this.algProv = k + "/" + i; + var g = k.substr(4); + if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(g) != -1 && i == "cryptojs") { + try { + var j = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g]; + this.mac = CryptoJS.algo.HMAC.create(j, this.pass) + } catch(h) { + throw "setAlgAndProvider hash alg set fail hashAlg=" + g + "/" + h + } + this.updateString = function(l) { + this.mac.update(l) + }; + this.updateHex = function(l) { + var m = CryptoJS.enc.Hex.parse(l); + this.mac.update(m) + }; + this.doFinal = function() { + var l = this.mac.finalize(); + return l.toString(CryptoJS.enc.Hex) + }; + this.doFinalString = function(l) { + this.updateString(l); + return this.doFinal() + }; + this.doFinalHex = function(l) { + this.updateHex(l); + return this.doFinal() + } + } + }; + this.updateString = function(g) { + throw "updateString(str) not supported for this alg/prov: " + this.algProv + }; + this.updateHex = function(g) { + throw "updateHex(hex) not supported for this alg/prov: " + this.algProv + }; + this.doFinal = function() { + throw "digest() not supported for this alg/prov: " + this.algProv + }; + this.doFinalString = function(g) { + throw "digestString(str) not supported for this alg/prov: " + this.algProv + }; + this.doFinalHex = function(g) { + throw "digestHex(hex) not supported for this alg/prov: " + this.algProv + }; + this.setPassword = function(h) { + if (typeof h == "string") { + var g = h; + if (h.length % 2 == 1 || !h.match(/^[0-9A-Fa-f]+$/)) { + g = rstrtohex(h) + } + this.pass = CryptoJS.enc.Hex.parse(g); + return + } + if (typeof h != "object") { + throw "KJUR.crypto.Mac unsupported password type: " + h + } + var g = null; + if (h.hex !== undefined) { + if (h.hex.length % 2 != 0 || !h.hex.match(/^[0-9A-Fa-f]+$/)) { + throw "Mac: wrong hex password: " + h.hex + } + g = h.hex + } + if (h.utf8 !== undefined) { + g = utf8tohex(h.utf8) + } + if (h.rstr !== undefined) { + g = rstrtohex(h.rstr) + } + if (h.b64 !== undefined) { + g = b64tohex(h.b64) + } + if (h.b64u !== undefined) { + g = b64utohex(h.b64u) + } + if (g == null) { + throw "KJUR.crypto.Mac unsupported password type: " + h + } + this.pass = CryptoJS.enc.Hex.parse(g) + }; + if (d !== undefined) { + if (d.pass !== undefined) { + this.setPassword(d.pass) + } + if (d.alg !== undefined) { + this.algName = d.alg; + if (d.prov === undefined) { + this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName] + } + this.setAlgAndProvider(this.algName, this.provName) + } + } +}; +KJUR.crypto.Signature = function(o) { + var q = null; + var n = null; + var r = null; + var c = null; + var l = null; + var d = null; + var k = null; + var h = null; + var p = null; + var e = null; + var b = -1; + var g = null; + var j = null; + var a = null; + var i = null; + var f = null; + this._setAlgNames = function() { + var s = this.algName.match(/^(.+)with(.+)$/); + if (s) { + this.mdAlgName = s[1].toLowerCase(); + this.pubkeyAlgName = s[2].toLowerCase() + } + }; + this._zeroPaddingOfSignature = function(x, w) { + var v = ""; + var t = w / 4 - x.length; + for (var u = 0; u < t; u++) { + v = v + "0" + } + return v + x + }; + this.setAlgAndProvider = function(u, t) { + this._setAlgNames(); + if (t != "cryptojs/jsrsa") { + throw "provider not supported: " + t + } + if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(this.mdAlgName) != -1) { + try { + this.md = new KJUR.crypto.MessageDigest({ + alg: this.mdAlgName + }) + } catch(s) { + throw "setAlgAndProvider hash alg set fail alg=" + this.mdAlgName + "/" + s + } + this.init = function(w, x) { + var y = null; + try { + if (x === undefined) { + y = KEYUTIL.getKey(w) + } else { + y = KEYUTIL.getKey(w, x) + } + } catch(v) { + throw "init failed:" + v + } + if (y.isPrivate === true) { + this.prvKey = y; + this.state = "SIGN" + } else { + if (y.isPublic === true) { + this.pubKey = y; + this.state = "VERIFY" + } else { + throw "init failed.:" + y + } + } + }; + this.initSign = function(v) { + if (typeof v.ecprvhex == "string" && typeof v.eccurvename == "string") { + this.ecprvhex = v.ecprvhex; + this.eccurvename = v.eccurvename + } else { + this.prvKey = v + } + this.state = "SIGN" + }; + this.initVerifyByPublicKey = function(v) { + if (typeof v.ecpubhex == "string" && typeof v.eccurvename == "string") { + this.ecpubhex = v.ecpubhex; + this.eccurvename = v.eccurvename + } else { + if (v instanceof KJUR.crypto.ECDSA) { + this.pubKey = v + } else { + if (v instanceof RSAKey) { + this.pubKey = v + } + } + } + this.state = "VERIFY" + }; + this.initVerifyByCertificatePEM = function(v) { + var w = new X509(); + w.readCertPEM(v); + this.pubKey = w.subjectPublicKeyRSA; + this.state = "VERIFY" + }; + this.updateString = function(v) { + this.md.updateString(v) + }; + this.updateHex = function(v) { + this.md.updateHex(v) + }; + this.sign = function() { + this.sHashHex = this.md.digest(); + if (typeof this.ecprvhex != "undefined" && typeof this.eccurvename != "undefined") { + var v = new KJUR.crypto.ECDSA({ + curve: this.eccurvename + }); + this.hSign = v.signHex(this.sHashHex, this.ecprvhex) + } else { + if (this.prvKey instanceof RSAKey && this.pubkeyAlgName == "rsaandmgf1") { + this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen) + } else { + if (this.prvKey instanceof RSAKey && this.pubkeyAlgName == "rsa") { + this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName) + } else { + if (this.prvKey instanceof KJUR.crypto.ECDSA) { + this.hSign = this.prvKey.signWithMessageHash(this.sHashHex) + } else { + if (this.prvKey instanceof KJUR.crypto.DSA) { + this.hSign = this.prvKey.signWithMessageHash(this.sHashHex) + } else { + throw "Signature: unsupported public key alg: " + this.pubkeyAlgName + } + } + } + } + } + return this.hSign + }; + this.signString = function(v) { + this.updateString(v); + return this.sign() + }; + this.signHex = function(v) { + this.updateHex(v); + return this.sign() + }; + this.verify = function(v) { + this.sHashHex = this.md.digest(); + if (typeof this.ecpubhex != "undefined" && typeof this.eccurvename != "undefined") { + var w = new KJUR.crypto.ECDSA({ + curve: this.eccurvename + }); + return w.verifyHex(this.sHashHex, v, this.ecpubhex) + } else { + if (this.pubKey instanceof RSAKey && this.pubkeyAlgName == "rsaandmgf1") { + return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, v, this.mdAlgName, this.pssSaltLen) + } else { + if (this.pubKey instanceof RSAKey && this.pubkeyAlgName == "rsa") { + return this.pubKey.verifyWithMessageHash(this.sHashHex, v) + } else { + if (this.pubKey instanceof KJUR.crypto.ECDSA) { + return this.pubKey.verifyWithMessageHash(this.sHashHex, v) + } else { + if (this.pubKey instanceof KJUR.crypto.DSA) { + return this.pubKey.verifyWithMessageHash(this.sHashHex, v) + } else { + throw "Signature: unsupported public key alg: " + this.pubkeyAlgName + } + } + } + } + } + } + } + }; + this.init = function(s, t) { + throw "init(key, pass) not supported for this alg:prov=" + this.algProvName + }; + this.initVerifyByPublicKey = function(s) { + throw "initVerifyByPublicKey(rsaPubKeyy) not supported for this alg:prov=" + this.algProvName + }; + this.initVerifyByCertificatePEM = function(s) { + throw "initVerifyByCertificatePEM(certPEM) not supported for this alg:prov=" + this.algProvName + }; + this.initSign = function(s) { + throw "initSign(prvKey) not supported for this alg:prov=" + this.algProvName + }; + this.updateString = function(s) { + throw "updateString(str) not supported for this alg:prov=" + this.algProvName + }; + this.updateHex = function(s) { + throw "updateHex(hex) not supported for this alg:prov=" + this.algProvName + }; + this.sign = function() { + throw "sign() not supported for this alg:prov=" + this.algProvName + }; + this.signString = function(s) { + throw "digestString(str) not supported for this alg:prov=" + this.algProvName + }; + this.signHex = function(s) { + throw "digestHex(hex) not supported for this alg:prov=" + this.algProvName + }; + this.verify = function(s) { + throw "verify(hSigVal) not supported for this alg:prov=" + this.algProvName + }; + this.initParams = o; + if (o !== undefined) { + if (o.alg !== undefined) { + this.algName = o.alg; + if (o.prov === undefined) { + this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName] + } else { + this.provName = o.prov + } + this.algProvName = this.algName + ":" + this.provName; + this.setAlgAndProvider(this.algName, this.provName); + this._setAlgNames() + } + if (o.psssaltlen !== undefined) { + this.pssSaltLen = o.psssaltlen + } + if (o.prvkeypem !== undefined) { + if (o.prvkeypas !== undefined) { + throw "both prvkeypem and prvkeypas parameters not supported" + } else { + try { + var q = new RSAKey(); + q.readPrivateKeyFromPEMString(o.prvkeypem); + this.initSign(q) + } catch(m) { + throw "fatal error to load pem private key: " + m + } + } + } + } +}; +KJUR.crypto.Cipher = function(a) {}; +KJUR.crypto.Cipher.encrypt = function(e, f, d) { + if (f instanceof RSAKey && f.isPublic) { + var c = KJUR.crypto.Cipher.getAlgByKeyAndName(f, d); + if (c === "RSA") { + return f.encrypt(e) + } + if (c === "RSAOAEP") { + return f.encryptOAEP(e, "sha1") + } + var b = c.match(/^RSAOAEP(\d+)$/); + if (b !== null) { + return f.encryptOAEP(e, "sha" + b[1]) + } + throw "Cipher.encrypt: unsupported algorithm for RSAKey: " + d + } else { + throw "Cipher.encrypt: unsupported key or algorithm" + } +}; +KJUR.crypto.Cipher.decrypt = function(e, f, d) { + if (f instanceof RSAKey && f.isPrivate) { + var c = KJUR.crypto.Cipher.getAlgByKeyAndName(f, d); + if (c === "RSA") { + return f.decrypt(e) + } + if (c === "RSAOAEP") { + return f.decryptOAEP(e, "sha1") + } + var b = c.match(/^RSAOAEP(\d+)$/); + if (b !== null) { + return f.decryptOAEP(e, "sha" + b[1]) + } + throw "Cipher.decrypt: unsupported algorithm for RSAKey: " + d + } else { + throw "Cipher.decrypt: unsupported key or algorithm" + } +}; +KJUR.crypto.Cipher.getAlgByKeyAndName = function(b, a) { + if (b instanceof RSAKey) { + if (":RSA:RSAOAEP:RSAOAEP224:RSAOAEP256:RSAOAEP384:RSAOAEP512:".indexOf(a) != -1) { + return a + } + if (a === null || a === undefined) { + return "RSA" + } + throw "getAlgByKeyAndName: not supported algorithm name for RSAKey: " + a + } + throw "getAlgByKeyAndName: not supported algorithm name: " + a +}; +KJUR.crypto.OID = new +function() { + this.oidhex2name = { + "2a864886f70d010101": "rsaEncryption", + "2a8648ce3d0201": "ecPublicKey", + "2a8648ce380401": "dsa", + "2a8648ce3d030107": "secp256r1", + "2b8104001f": "secp192k1", + "2b81040021": "secp224r1", + "2b8104000a": "secp256k1", + "2b81040023": "secp521r1", + "2b81040022": "secp384r1", + "2a8648ce380403": "SHA1withDSA", + "608648016503040301": "SHA224withDSA", + "608648016503040302": "SHA256withDSA", + } +}; +/*! ecdsa-modified-1.1.0.js (c) Stephan Thomas, Kenji Urushima | github.com/bitcoinjs/bitcoinjs-lib/blob/master/LICENSE + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { + KJUR.crypto = {} +} +KJUR.crypto.ECDSA = function(h) { + var e = "secp256r1"; + var g = null; + var b = null; + var f = null; + var a = new SecureRandom(); + var d = null; + this.type = "EC"; + this.isPrivate = false; + this.isPublic = false; + function c(s, o, r, n) { + var j = Math.max(o.bitLength(), n.bitLength()); + var t = s.add2D(r); + var q = s.curve.getInfinity(); + for (var p = j - 1; p >= 0; --p) { + q = q.twice2D(); + q.z = BigInteger.ONE; + if (o.testBit(p)) { + if (n.testBit(p)) { + q = q.add2D(t) + } else { + q = q.add2D(s) + } + } else { + if (n.testBit(p)) { + q = q.add2D(r) + } + } + } + return q + } + this.getBigRandom = function(i) { + return new BigInteger(i.bitLength(), a).mod(i.subtract(BigInteger.ONE)).add(BigInteger.ONE) + }; + this.setNamedCurve = function(i) { + this.ecparams = KJUR.crypto.ECParameterDB.getByName(i); + this.prvKeyHex = null; + this.pubKeyHex = null; + this.curveName = i + }; + this.setPrivateKeyHex = function(i) { + this.isPrivate = true; + this.prvKeyHex = i + }; + this.setPublicKeyHex = function(i) { + this.isPublic = true; + this.pubKeyHex = i + }; + this.getPublicKeyXYHex = function() { + var k = this.pubKeyHex; + if (k.substr(0, 2) !== "04") { + throw "this method supports uncompressed format(04) only" + } + var j = this.ecparams.keylen / 4; + if (k.length !== 2 + j * 2) { + throw "malformed public key hex length" + } + var i = {}; + i.x = k.substr(2, j); + i.y = k.substr(2 + j); + return i + }; + this.getShortNISTPCurveName = function() { + var i = this.curveName; + if (i === "secp256r1" || i === "NIST P-256" || i === "P-256" || i === "prime256v1") { + return "P-256" + } + if (i === "secp384r1" || i === "NIST P-384" || i === "P-384") { + return "P-384" + } + return null + }; + this.generateKeyPairHex = function() { + var k = this.ecparams.n; + var n = this.getBigRandom(k); + var l = this.ecparams.G.multiply(n); + var q = l.getX().toBigInteger(); + var o = l.getY().toBigInteger(); + var i = this.ecparams.keylen / 4; + var m = ("0000000000" + n.toString(16)).slice( - i); + var r = ("0000000000" + q.toString(16)).slice( - i); + var p = ("0000000000" + o.toString(16)).slice( - i); + var j = "04" + r + p; + this.setPrivateKeyHex(m); + this.setPublicKeyHex(j); + return { + ecprvhex: m, + ecpubhex: j + } + }; + this.signWithMessageHash = function(i) { + return this.signHex(i, this.prvKeyHex) + }; + this.signHex = function(o, j) { + var t = new BigInteger(j, 16); + var l = this.ecparams.n; + var q = new BigInteger(o, 16); + do { + var m = this.getBigRandom(l); + var u = this.ecparams.G; + var p = u.multiply(m); + var i = p.getX().toBigInteger().mod(l) + } while ( i . compareTo ( BigInteger . ZERO ) <= 0); + var v = m.modInverse(l).multiply(q.add(t.multiply(i))).mod(l); + return KJUR.crypto.ECDSA.biRSSigToASN1Sig(i, v) + }; + this.sign = function(m, u) { + var q = u; + var j = this.ecparams.n; + var p = BigInteger.fromByteArrayUnsigned(m); + do { + var l = this.getBigRandom(j); + var t = this.ecparams.G; + var o = t.multiply(l); + var i = o.getX().toBigInteger().mod(j) + } while ( i . compareTo ( BigInteger . ZERO ) <= 0); + var v = l.modInverse(j).multiply(p.add(q.multiply(i))).mod(j); + return this.serializeSig(i, v) + }; + this.verifyWithMessageHash = function(j, i) { + return this.verifyHex(j, i, this.pubKeyHex) + }; + this.verifyHex = function(m, i, p) { + var l, j; + var o = KJUR.crypto.ECDSA.parseSigHex(i); + l = o.r; + j = o.s; + var k; + k = ECPointFp.decodeFromHex(this.ecparams.curve, p); + var n = new BigInteger(m, 16); + return this.verifyRaw(n, l, j, k) + }; + this.verify = function(o, p, j) { + var l, i; + if (Bitcoin.Util.isArray(p)) { + var n = this.parseSig(p); + l = n.r; + i = n.s + } else { + if ("object" === typeof p && p.r && p.s) { + l = p.r; + i = p.s + } else { + throw "Invalid value for signature" + } + } + var k; + if (j instanceof ECPointFp) { + k = j + } else { + if (Bitcoin.Util.isArray(j)) { + k = ECPointFp.decodeFrom(this.ecparams.curve, j) + } else { + throw "Invalid format for pubkey value, must be byte array or ECPointFp" + } + } + var m = BigInteger.fromByteArrayUnsigned(o); + return this.verifyRaw(m, l, i, k) + }; + this.verifyRaw = function(o, i, w, m) { + var l = this.ecparams.n; + var u = this.ecparams.G; + if (i.compareTo(BigInteger.ONE) < 0 || i.compareTo(l) >= 0) { + return false + } + if (w.compareTo(BigInteger.ONE) < 0 || w.compareTo(l) >= 0) { + return false + } + var p = w.modInverse(l); + var k = o.multiply(p).mod(l); + var j = i.multiply(p).mod(l); + var q = u.multiply(k).add(m.multiply(j)); + var t = q.getX().toBigInteger().mod(l); + return t.equals(i) + }; + this.serializeSig = function(k, j) { + var l = k.toByteArraySigned(); + var i = j.toByteArraySigned(); + var m = []; + m.push(2); + m.push(l.length); + m = m.concat(l); + m.push(2); + m.push(i.length); + m = m.concat(i); + m.unshift(m.length); + m.unshift(48); + return m + }; + this.parseSig = function(n) { + var m; + if (n[0] != 48) { + throw new Error("Signature not a valid DERSequence") + } + m = 2; + if (n[m] != 2) { + throw new Error("First element in signature must be a DERInteger") + } + var l = n.slice(m + 2, m + 2 + n[m + 1]); + m += 2 + n[m + 1]; + if (n[m] != 2) { + throw new Error("Second element in signature must be a DERInteger") + } + var i = n.slice(m + 2, m + 2 + n[m + 1]); + m += 2 + n[m + 1]; + var k = BigInteger.fromByteArrayUnsigned(l); + var j = BigInteger.fromByteArrayUnsigned(i); + return { + r: k, + s: j + } + }; + this.parseSigCompact = function(m) { + if (m.length !== 65) { + throw "Signature has the wrong length" + } + var j = m[0] - 27; + if (j < 0 || j > 7) { + throw "Invalid signature type" + } + var o = this.ecparams.n; + var l = BigInteger.fromByteArrayUnsigned(m.slice(1, 33)).mod(o); + var k = BigInteger.fromByteArrayUnsigned(m.slice(33, 65)).mod(o); + return { + r: l, + s: k, + i: j + } + }; + this.readPKCS5PrvKeyHex = function(l) { + var n = ASN1HEX; + var m = KJUR.crypto.ECDSA.getName; + var p = n.getVbyList; + if (n.isASN1HEX(l) === false) { + throw "not ASN.1 hex string" + } + var i, k, o; + try { + i = p(l, 0, [2, 0], "06"); + k = p(l, 0, [1], "04"); + try { + o = p(l, 0, [3, 0], "03").substr(2) + } catch(j) {} + } catch(j) { + throw "malformed PKCS#1/5 plain ECC private key" + } + this.curveName = m(i); + if (this.curveName === undefined) { + throw "unsupported curve name" + } + this.setNamedCurve(this.curveName); + this.setPublicKeyHex(o); + this.setPrivateKeyHex(k); + this.isPublic = false + }; + this.readPKCS8PrvKeyHex = function(l) { + var q = ASN1HEX; + var i = KJUR.crypto.ECDSA.getName; + var n = q.getVbyList; + if (q.isASN1HEX(l) === false) { + throw "not ASN.1 hex string" + } + var j, p, m, k; + try { + j = n(l, 0, [1, 0], "06"); + p = n(l, 0, [1, 1], "06"); + m = n(l, 0, [2, 0, 1], "04"); + try { + k = n(l, 0, [2, 0, 2, 0], "03").substr(2) + } catch(o) {} + } catch(o) { + throw "malformed PKCS#8 plain ECC private key" + } + this.curveName = i(p); + if (this.curveName === undefined) { + throw "unsupported curve name" + } + this.setNamedCurve(this.curveName); + this.setPublicKeyHex(k); + this.setPrivateKeyHex(m); + this.isPublic = false + }; + this.readPKCS8PubKeyHex = function(l) { + var n = ASN1HEX; + var m = KJUR.crypto.ECDSA.getName; + var p = n.getVbyList; + if (n.isASN1HEX(l) === false) { + throw "not ASN.1 hex string" + } + var k, i, o; + try { + k = p(l, 0, [0, 0], "06"); + i = p(l, 0, [0, 1], "06"); + o = p(l, 0, [1], "03").substr(2) + } catch(j) { + throw "malformed PKCS#8 ECC public key" + } + this.curveName = m(i); + if (this.curveName === null) { + throw "unsupported curve name" + } + this.setNamedCurve(this.curveName); + this.setPublicKeyHex(o) + }; + this.readCertPubKeyHex = function(k, p) { + if (p !== 5) { + p = 6 + } + var m = ASN1HEX; + var l = KJUR.crypto.ECDSA.getName; + var o = m.getVbyList; + if (m.isASN1HEX(k) === false) { + throw "not ASN.1 hex string" + } + var i, n; + try { + i = o(k, 0, [0, p, 0, 1], "06"); + n = o(k, 0, [0, p, 1], "03").substr(2) + } catch(j) { + throw "malformed X.509 certificate ECC public key" + } + this.curveName = l(i); + if (this.curveName === null) { + throw "unsupported curve name" + } + this.setNamedCurve(this.curveName); + this.setPublicKeyHex(n) + }; + if (h !== undefined) { + if (h.curve !== undefined) { + this.curveName = h.curve + } + } + if (this.curveName === undefined) { + this.curveName = e + } + this.setNamedCurve(this.curveName); + if (h !== undefined) { + if (h.prv !== undefined) { + this.setPrivateKeyHex(h.prv) + } + if (h.pub !== undefined) { + this.setPublicKeyHex(h.pub) + } + } +}; +KJUR.crypto.ECDSA.parseSigHex = function(a) { + var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a); + var d = new BigInteger(b.r, 16); + var c = new BigInteger(b.s, 16); + return { + r: d, + s: c + } +}; +KJUR.crypto.ECDSA.parseSigHexInHexRS = function(c) { + if (c.substr(0, 2) != "30") { + throw "signature is not a ASN.1 sequence" + } + var b = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0); + if (b.length != 2) { + throw "number of signature ASN.1 sequence elements seem wrong" + } + var g = b[0]; + var f = b[1]; + if (c.substr(g, 2) != "02") { + throw "1st item of sequene of signature is not ASN.1 integer" + } + if (c.substr(f, 2) != "02") { + throw "2nd item of sequene of signature is not ASN.1 integer" + } + var e = ASN1HEX.getHexOfV_AtObj(c, g); + var d = ASN1HEX.getHexOfV_AtObj(c, f); + return { + r: e, + s: d + } +}; +KJUR.crypto.ECDSA.asn1SigToConcatSig = function(c) { + var d = KJUR.crypto.ECDSA.parseSigHexInHexRS(c); + var b = d.r; + var a = d.s; + if (b.substr(0, 2) == "00" && (((b.length / 2) * 8) % (16 * 8)) == 8) { + b = b.substr(2) + } + if (a.substr(0, 2) == "00" && (((a.length / 2) * 8) % (16 * 8)) == 8) { + a = a.substr(2) + } + if ((((b.length / 2) * 8) % (16 * 8)) != 0) { + throw "unknown ECDSA sig r length error" + } + if ((((a.length / 2) * 8) % (16 * 8)) != 0) { + throw "unknown ECDSA sig s length error" + } + return b + a +}; +KJUR.crypto.ECDSA.concatSigToASN1Sig = function(a) { + if ((((a.length / 2) * 8) % (16 * 8)) != 0) { + throw "unknown ECDSA concatinated r-s sig length error" + } + var c = a.substr(0, a.length / 2); + var b = a.substr(a.length / 2); + return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c, b) +}; +KJUR.crypto.ECDSA.hexRSSigToASN1Sig = function(b, a) { + var d = new BigInteger(b, 16); + var c = new BigInteger(a, 16); + return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d, c) +}; +KJUR.crypto.ECDSA.biRSSigToASN1Sig = function(e, c) { + var b = new KJUR.asn1.DERInteger({ + bigint: e + }); + var a = new KJUR.asn1.DERInteger({ + bigint: c + }); + var d = new KJUR.asn1.DERSequence({ + array: [b, a] + }); + return d.getEncodedHex() +}; +KJUR.crypto.ECDSA.getName = function(a) { + if (a === "2a8648ce3d030107") { + return "secp256r1" + } + if (a === "2b8104000a") { + return "secp256k1" + } + if (a === "2b81040022") { + return "secp384r1" + } + if ("|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(a) !== -1) { + return "secp256r1" + } + if ("|secp256k1|".indexOf(a) !== -1) { + return "secp256k1" + } + if ("|secp384r1|NIST P-384|P-384|".indexOf(a) !== -1) { + return "secp384r1" + } + return null +}; +/*! ecparam-1.0.0.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { + KJUR.crypto = {} +} +KJUR.crypto.ECParameterDB = new +function() { + var b = {}; + var c = {}; + function a(d) { + return new BigInteger(d, 16) + } + this.getByName = function(e) { + var d = e; + if (typeof c[d] != "undefined") { + d = c[e] + } + if (typeof b[d] != "undefined") { + return b[d] + } + throw "unregistered EC curve name: " + d + }; + this.regist = function(A, l, o, g, m, e, j, f, k, u, d, x) { + b[A] = {}; + var s = a(o); + var z = a(g); + var y = a(m); + var t = a(e); + var w = a(j); + var r = new ECCurveFp(s, z, y); + var q = r.decodePointHex("04" + f + k); + b[A]["name"] = A; + b[A]["keylen"] = l; + b[A]["curve"] = r; + b[A]["G"] = q; + b[A]["n"] = t; + b[A]["h"] = w; + b[A]["oid"] = d; + b[A]["info"] = x; + for (var v = 0; v < u.length; v++) { + c[u[v]] = A + } + } +}; +KJUR.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field"); +KJUR.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field"); +KJUR.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field"); +KJUR.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []); +KJUR.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []); +KJUR.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []); +KJUR.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []); +KJUR.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]); +KJUR.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]); +KJUR.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]); +/*! dsa-2.1.0.js (c) 2016-2017 Kenji Urushimma | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) { + KJUR.crypto = {} +} +KJUR.crypto.DSA = function() { + this.p = null; + this.q = null; + this.g = null; + this.y = null; + this.x = null; + this.type = "DSA"; + this.isPrivate = false; + this.isPublic = false; + this.setPrivate = function(d, c, b, e, a) { + this.isPrivate = true; + this.p = d; + this.q = c; + this.g = b; + this.y = e; + this.x = a + }; + this.setPrivateHex = function(d, b, f, i, j) { + var c, a, e, g, h; + c = new BigInteger(d, 16); + a = new BigInteger(b, 16); + e = new BigInteger(f, 16); + if (typeof i === "string" && i.length > 1) { + g = new BigInteger(i, 16) + } else { + g = null + } + h = new BigInteger(j, 16); + this.setPrivate(c, a, e, g, h) + }; + this.setPublic = function(c, b, a, d) { + this.isPublic = true; + this.p = c; + this.q = b; + this.g = a; + this.y = d; + this.x = null + }; + this.setPublicHex = function(f, e, d, g) { + var b, a, h, c; + b = new BigInteger(f, 16); + a = new BigInteger(e, 16); + h = new BigInteger(d, 16); + c = new BigInteger(g, 16); + this.setPublic(b, a, h, c) + }; + this.signWithMessageHash = function(d) { + var c = this.p; + var b = this.q; + var f = this.g; + var i = this.y; + var j = this.x; + var e = KJUR.crypto.Util.getRandomBigIntegerMinToMax(BigInteger.ONE.add(BigInteger.ONE), b.subtract(BigInteger.ONE)); + var l = d.substr(0, b.bitLength() / 4); + var h = new BigInteger(l, 16); + var a = (f.modPow(e, c)).mod(b); + var n = (e.modInverse(b).multiply(h.add(j.multiply(a)))).mod(b); + var m = KJUR.asn1.ASN1Util.jsonToASN1HEX({ + seq: [{ + "int": { + bigint: a + } + }, + { + "int": { + bigint: n + } + }] + }); + return m + }; + this.verifyWithMessageHash = function(h, f) { + var d = this.p; + var b = this.q; + var j = this.g; + var l = this.y; + var i = this.parseASN1Signature(f); + var a = i[0]; + var t = i[1]; + var o = h.substr(0, b.bitLength() / 4); + var k = new BigInteger(o, 16); + if (BigInteger.ZERO.compareTo(a) > 0 || a.compareTo(b) > 0) { + throw "invalid DSA signature" + } + if (BigInteger.ZERO.compareTo(t) > 0 || t.compareTo(b) > 0) { + throw "invalid DSA signature" + } + var m = t.modInverse(b); + var e = k.multiply(m).mod(b); + var c = a.multiply(m).mod(b); + var n = j.modPow(e, d).multiply(l.modPow(c, d)).mod(d).mod(b); + return n.compareTo(a) == 0 + }; + this.parseASN1Signature = function(a) { + try { + var d = new BigInteger(ASN1HEX.getVbyList(a, 0, [0], "02"), 16); + var c = new BigInteger(ASN1HEX.getVbyList(a, 0, [1], "02"), 16); + return [d, c] + } catch(b) { + throw "malformed ASN.1 DSA signature" + } + }; + this.readPKCS5PrvKeyHex = function(c) { + var b, a, f, g, i; + var j = ASN1HEX; + var d = j.getVbyList; + if (j.isASN1HEX(c) === false) { + throw "not ASN.1 hex string" + } + try { + b = d(c, 0, [1], "02"); + a = d(c, 0, [2], "02"); + f = d(c, 0, [3], "02"); + g = d(c, 0, [4], "02"); + i = d(c, 0, [5], "02") + } catch(e) { + console.log("EXCEPTION:" + e); + throw "malformed PKCS#1/5 plain DSA private key" + } + this.setPrivateHex(b, a, f, g, i) + }; + this.readPKCS8PrvKeyHex = function(d) { + var f, c, b, g; + var e = ASN1HEX; + var i = e.getVbyList; + if (e.isASN1HEX(d) === false) { + throw "not ASN.1 hex string" + } + try { + f = i(d, 0, [1, 1, 0], "02"); + c = i(d, 0, [1, 1, 1], "02"); + b = i(d, 0, [1, 1, 2], "02"); + g = i(d, 0, [2, 0], "02") + } catch(a) { + console.log("EXCEPTION:" + a); + throw "malformed PKCS#8 plain DSA private key" + } + this.setPrivateHex(f, c, b, null, g) + }; + this.readPKCS8PubKeyHex = function(d) { + var f, c, b, g; + var e = ASN1HEX; + var i = e.getVbyList; + if (e.isASN1HEX(d) === false) { + throw "not ASN.1 hex string" + } + try { + f = i(d, 0, [0, 1, 0], "02"); + c = i(d, 0, [0, 1, 1], "02"); + b = i(d, 0, [0, 1, 2], "02"); + g = i(d, 0, [1, 0], "02") + } catch(a) { + console.log("EXCEPTION:" + a); + throw "malformed PKCS#8 DSA public key" + } + this.setPublicHex(f, c, b, g) + }; + this.readCertPubKeyHex = function(c, f) { + if (f !== 5) { + f = 6 + } + var b, a, g, i; + var j = ASN1HEX; + var d = j.getVbyList; + if (j.isASN1HEX(c) === false) { + throw "not ASN.1 hex string" + } + try { + b = d(c, 0, [0, f, 0, 1, 0], "02"); + a = d(c, 0, [0, f, 0, 1, 1], "02"); + g = d(c, 0, [0, f, 0, 1, 2], "02"); + i = d(c, 0, [0, f, 1, 0], "02") + } catch(e) { + console.log("EXCEPTION:" + e); + throw "malformed X.509 certificate DSA public key" + } + this.setPublicHex(b, a, g, i) + } +}; +/*! pkcs5pkey-1.1.0.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var PKCS5PKEY = function() { + var c = function(o, q, p) { + return j(CryptoJS.AES, o, q, p) + }; + var d = function(o, q, p) { + return j(CryptoJS.TripleDES, o, q, p) + }; + var j = function(r, w, t, p) { + var q = CryptoJS.enc.Hex.parse(w); + var v = CryptoJS.enc.Hex.parse(t); + var o = CryptoJS.enc.Hex.parse(p); + var s = {}; + s.key = v; + s.iv = o; + s.ciphertext = q; + var u = r.decrypt(s, v, { + iv: o + }); + return CryptoJS.enc.Hex.stringify(u) + }; + var k = function(o, q, p) { + return e(CryptoJS.AES, o, q, p) + }; + var n = function(o, q, p) { + return e(CryptoJS.TripleDES, o, q, p) + }; + var e = function(t, y, w, q) { + var s = CryptoJS.enc.Hex.parse(y); + var x = CryptoJS.enc.Hex.parse(w); + var p = CryptoJS.enc.Hex.parse(q); + var o = {}; + var v = t.encrypt(s, x, { + iv: p + }); + var r = CryptoJS.enc.Hex.parse(v.toString()); + var u = CryptoJS.enc.Base64.stringify(r); + return u + }; + var g = { + "AES-256-CBC": { + proc: c, + eproc: k, + keylen: 32, + ivlen: 16 + }, + "AES-192-CBC": { + proc: c, + eproc: k, + keylen: 24, + ivlen: 16 + }, + "AES-128-CBC": { + proc: c, + eproc: k, + keylen: 16, + ivlen: 16 + }, + "DES-EDE3-CBC": { + proc: d, + eproc: n, + keylen: 24, + ivlen: 8 + } + }; + var b = function(o) { + return g[o]["proc"] + }; + var l = function(o) { + var q = CryptoJS.lib.WordArray.random(o); + var p = CryptoJS.enc.Hex.stringify(q); + return p + }; + var m = function(u) { + var v = {}; + var p = u.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m")); + if (p) { + v.cipher = p[1]; + v.ivsalt = p[2] + } + var o = u.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----")); + if (o) { + v.type = o[1] + } + var t = -1; + var w = 0; + if (u.indexOf("\r\n\r\n") != -1) { + t = u.indexOf("\r\n\r\n"); + w = 2 + } + if (u.indexOf("\n\n") != -1) { + t = u.indexOf("\n\n"); + w = 1 + } + var r = u.indexOf("-----END"); + if (t != -1 && r != -1) { + var q = u.substring(t + w * 2, r - w); + q = q.replace(/\s+/g, ""); + v.data = q + } + return v + }; + var i = function(p, x, o) { + var u = o.substring(0, 16); + var s = CryptoJS.enc.Hex.parse(u); + var q = CryptoJS.enc.Utf8.parse(x); + var t = g[p]["keylen"] + g[p]["ivlen"]; + var w = ""; + var v = null; + for (;;) { + var r = CryptoJS.algo.MD5.create(); + if (v != null) { + r.update(v) + } + r.update(q); + r.update(s); + v = r.finalize(); + w = w + CryptoJS.enc.Hex.stringify(v); + if (w.length >= t * 2) { + break + } + } + var y = {}; + y.keyhex = w.substr(0, g[p]["keylen"] * 2); + y.ivhex = w.substr(g[p]["keylen"] * 2, g[p]["ivlen"] * 2); + return y + }; + var a = function(o, u, q, v) { + var r = CryptoJS.enc.Base64.parse(o); + var p = CryptoJS.enc.Hex.stringify(r); + var t = g[u]["proc"]; + var s = t(p, q, v); + return s + }; + var f = function(o, r, p, t) { + var q = g[r]["eproc"]; + var s = q(o, p, t); + return s + }; + return { + version: "1.0.5", + getHexFromPEM: function(o, p) { + return ASN1HEX.pemToHex(o, p) + }, + getDecryptedKeyHexByKeyIV: function(p, s, r, q) { + var o = b(s); + return o(p, r, q) + }, + parsePKCS5PEM: function(o) { + return m(o) + }, + getKeyAndUnusedIvByPasscodeAndIvsalt: function(p, o, q) { + return i(p, o, q) + }, + decryptKeyB64: function(o, q, p, r) { + return a(o, q, p, r) + }, + getDecryptedKeyHex: function(x, w) { + var p = m(x); + var s = p.type; + var q = p.cipher; + var o = p.ivsalt; + var r = p.data; + var v = i(q, w, o); + var u = v.keyhex; + var t = a(r, q, u, o); + return t + }, + getRSAKeyFromEncryptedPKCS5PEM: function(q, p) { + var r = this.getDecryptedKeyHex(q, p); + var o = new RSAKey(); + o.readPrivateKeyFromASN1HexString(r); + return o + }, + getEncryptedPKCS5PEMFromPrvKeyHex: function(r, y, s, q) { + if (typeof s == "undefined" || s == null) { + s = "AES-256-CBC" + } + if (typeof g[s] == "undefined") { + throw "PKCS5PKEY unsupported algorithm: " + s + } + if (typeof q == "undefined" || q == null) { + var u = g[s]["ivlen"]; + var t = l(u); + q = t.toUpperCase() + } + var x = i(s, y, q); + var w = x.keyhex; + var v = f(r, s, w, q); + var p = v.replace(/(.{64})/g, "$1\r\n"); + var o = "-----BEGIN RSA PRIVATE KEY-----\r\n"; + o += "Proc-Type: 4,ENCRYPTED\r\n"; + o += "DEK-Info: " + s + "," + q + "\r\n"; + o += "\r\n"; + o += p; + o += "\r\n-----END RSA PRIVATE KEY-----\r\n"; + return o + }, + getEncryptedPKCS5PEMFromRSAKey: function(C, D, o, s) { + var A = new KJUR.asn1.DERInteger({ + "int": 0 + }); + var v = new KJUR.asn1.DERInteger({ + bigint: C.n + }); + var z = new KJUR.asn1.DERInteger({ + "int": C.e + }); + var B = new KJUR.asn1.DERInteger({ + bigint: C.d + }); + var t = new KJUR.asn1.DERInteger({ + bigint: C.p + }); + var r = new KJUR.asn1.DERInteger({ + bigint: C.q + }); + var y = new KJUR.asn1.DERInteger({ + bigint: C.dmp1 + }); + var u = new KJUR.asn1.DERInteger({ + bigint: C.dmq1 + }); + var x = new KJUR.asn1.DERInteger({ + bigint: C.coeff + }); + var E = new KJUR.asn1.DERSequence({ + array: [A, v, z, B, t, r, y, u, x] + }); + var w = E.getEncodedHex(); + return this.getEncryptedPKCS5PEMFromPrvKeyHex(w, D, o, s) + }, + newEncryptedPKCS5PEM: function(o, p, s, t) { + if (typeof p == "undefined" || p == null) { + p = 1024 + } + if (typeof s == "undefined" || s == null) { + s = "10001" + } + var q = new RSAKey(); + q.generate(p, s); + var r = null; + if (typeof t == "undefined" || t == null) { + r = this.getEncryptedPKCS5PEMFromRSAKey(pkey, o) + } else { + r = this.getEncryptedPKCS5PEMFromRSAKey(pkey, o, t) + } + return r + }, + getRSAKeyFromPlainPKCS8PEM: function(q) { + if (q.match(/ENCRYPTED/)) { + throw "pem shall be not ENCRYPTED" + } + var p = ASN1HEX.pemToHex(q, "PRIVATE KEY"); + var o = this.getRSAKeyFromPlainPKCS8Hex(p); + return o + }, + getRSAKeyFromPlainPKCS8Hex: function(p) { + var o = new RSAKey(); + o.readPKCS8PrvKeyHex(p); + return o + }, + parseHexOfEncryptedPKCS8: function(v) { + var r = {}; + var q = ASN1HEX.getPosArrayOfChildren_AtObj(v, 0); + if (q.length != 2) { + throw "malformed format: SEQUENCE(0).items != 2: " + q.length + } + r.ciphertext = ASN1HEX.getHexOfV_AtObj(v, q[1]); + var x = ASN1HEX.getPosArrayOfChildren_AtObj(v, q[0]); + if (x.length != 2) { + throw "malformed format: SEQUENCE(0.0).items != 2: " + x.length + } + if (ASN1HEX.getHexOfV_AtObj(v, x[0]) != "2a864886f70d01050d") { + throw "this only supports pkcs5PBES2" + } + var o = ASN1HEX.getPosArrayOfChildren_AtObj(v, x[1]); + if (x.length != 2) { + throw "malformed format: SEQUENCE(0.0.1).items != 2: " + o.length + } + var p = ASN1HEX.getPosArrayOfChildren_AtObj(v, o[1]); + if (p.length != 2) { + throw "malformed format: SEQUENCE(0.0.1.1).items != 2: " + p.length + } + if (ASN1HEX.getHexOfV_AtObj(v, p[0]) != "2a864886f70d0307") { + throw "this only supports TripleDES" + } + r.encryptionSchemeAlg = "TripleDES"; + r.encryptionSchemeIV = ASN1HEX.getHexOfV_AtObj(v, p[1]); + var s = ASN1HEX.getPosArrayOfChildren_AtObj(v, o[0]); + if (s.length != 2) { + throw "malformed format: SEQUENCE(0.0.1.0).items != 2: " + s.length + } + if (ASN1HEX.getHexOfV_AtObj(v, s[0]) != "2a864886f70d01050c") { + throw "this only supports pkcs5PBKDF2" + } + var w = ASN1HEX.getPosArrayOfChildren_AtObj(v, s[1]); + if (w.length < 2) { + throw "malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + w.length + } + r.pbkdf2Salt = ASN1HEX.getHexOfV_AtObj(v, w[0]); + var t = ASN1HEX.getHexOfV_AtObj(v, w[1]); + try { + r.pbkdf2Iter = parseInt(t, 16) + } catch(u) { + throw "malformed format pbkdf2Iter: " + t + } + return r + }, + getPBKDF2KeyHexFromParam: function(t, o) { + var s = CryptoJS.enc.Hex.parse(t.pbkdf2Salt); + var p = t.pbkdf2Iter; + var r = CryptoJS.PBKDF2(o, s, { + keySize: 192 / 32, + iterations: p + }); + var q = CryptoJS.enc.Hex.stringify(r); + return q + }, + getPlainPKCS8HexFromEncryptedPKCS8PEM: function(w, x) { + var q = ASN1HEX.pemToHex(w, "ENCRYPTED PRIVATE KEY"); + var o = this.parseHexOfEncryptedPKCS8(q); + var t = PKCS5PKEY.getPBKDF2KeyHexFromParam(o, x); + var u = {}; + u.ciphertext = CryptoJS.enc.Hex.parse(o.ciphertext); + var s = CryptoJS.enc.Hex.parse(t); + var r = CryptoJS.enc.Hex.parse(o.encryptionSchemeIV); + var v = CryptoJS.TripleDES.decrypt(u, s, { + iv: r + }); + var p = CryptoJS.enc.Hex.stringify(v); + return p + }, + getRSAKeyFromEncryptedPKCS8PEM: function(r, q) { + var p = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(r, q); + var o = this.getRSAKeyFromPlainPKCS8Hex(p); + return o + }, + getKeyFromEncryptedPKCS8PEM: function(r, p) { + var o = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(r, p); + var q = this.getKeyFromPlainPrivatePKCS8Hex(o); + return q + }, + parsePlainPrivatePKCS8Hex: function(r) { + var p = {}; + p.algparam = null; + if (r.substr(0, 2) != "30") { + throw "malformed plain PKCS8 private key(code:001)" + } + var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0); + if (q.length != 3) { + throw "malformed plain PKCS8 private key(code:002)" + } + if (r.substr(q[1], 2) != "30") { + throw "malformed PKCS8 private key(code:003)" + } + var o = ASN1HEX.getPosArrayOfChildren_AtObj(r, q[1]); + if (o.length != 2) { + throw "malformed PKCS8 private key(code:004)" + } + if (r.substr(o[0], 2) != "06") { + throw "malformed PKCS8 private key(code:005)" + } + p.algoid = ASN1HEX.getHexOfV_AtObj(r, o[0]); + if (r.substr(o[1], 2) == "06") { + p.algparam = ASN1HEX.getHexOfV_AtObj(r, o[1]) + } + if (r.substr(q[2], 2) != "04") { + throw "malformed PKCS8 private key(code:006)" + } + p.keyidx = ASN1HEX.getStartPosOfV_AtObj(r, q[2]); + return p + }, + getKeyFromPlainPrivatePKCS8PEM: function(p) { + var o = ASN1HEX.pemToHex(p, "PRIVATE KEY"); + var q = this.getKeyFromPlainPrivatePKCS8Hex(o); + return q + }, + getKeyFromPlainPrivatePKCS8Hex: function(o) { + var p = this.parsePlainPrivatePKCS8Hex(o); + var q; + if (p.algoid == "2a864886f70d010101") { + q = new RSAKey() + } else { + if (p.algoid == "2a8648ce380401") { + q = new KJUR.crypto.DSA() + } else { + if (p.algoid == "2a8648ce3d0201") { + q = new KJUR.crypto.ECDSA() + } else { + throw "unsupported private key algorithm" + } + } + } + q.readPKCS8PrvKeyHex(o); + return q + }, + getRSAKeyFromPublicPKCS8PEM: function(p) { + var q = ASN1HEX.pemToHex(p, "PUBLIC KEY"); + var o = this.getRSAKeyFromPublicPKCS8Hex(q); + return o + }, + getKeyFromPublicPKCS8PEM: function(p) { + var q = ASN1HEX.pemToHex(p, "PUBLIC KEY"); + var o = this.getKeyFromPublicPKCS8Hex(q); + return o + }, + getKeyFromPublicPKCS8Hex: function(o) { + var p; + var q = ASN1HEX.getVbyList(h, 0, [0, 0], "06"); + if (q === "2a864886f70d010101") { + p = new RSAKey() + } else { + if (q === "2a8648ce380401") { + p = new KJUR.crypto.DSA() + } else { + if (q === "2a8648ce3d0201") { + p = new KJUR.crypto.ECDSA() + } else { + throw "unsupported PKCS#8 public key hex" + } + } + } + p.readPKCS8PubKeyHex(h); + return p + }, + parsePublicRawRSAKeyHex: function(q) { + var o = {}; + if (q.substr(0, 2) != "30") { + throw "malformed RSA key(code:001)" + } + var p = ASN1HEX.getPosArrayOfChildren_AtObj(q, 0); + if (p.length != 2) { + throw "malformed RSA key(code:002)" + } + if (q.substr(p[0], 2) != "02") { + throw "malformed RSA key(code:003)" + } + o.n = ASN1HEX.getHexOfV_AtObj(q, p[0]); + if (q.substr(p[1], 2) != "02") { + throw "malformed RSA key(code:004)" + } + o.e = ASN1HEX.getHexOfV_AtObj(q, p[1]); + return o + }, + parsePrivateRawRSAKeyHexAtObj: function(p, r) { + var q = r.keyidx; + if (p.substr(q, 2) != "30") { + throw "malformed RSA private key(code:001)" + } + var o = ASN1HEX.getPosArrayOfChildren_AtObj(p, q); + if (o.length != 9) { + throw "malformed RSA private key(code:002)" + } + r.key = {}; + r.key.n = ASN1HEX.getHexOfV_AtObj(p, o[1]); + r.key.e = ASN1HEX.getHexOfV_AtObj(p, o[2]); + r.key.d = ASN1HEX.getHexOfV_AtObj(p, o[3]); + r.key.p = ASN1HEX.getHexOfV_AtObj(p, o[4]); + r.key.q = ASN1HEX.getHexOfV_AtObj(p, o[5]); + r.key.dp = ASN1HEX.getHexOfV_AtObj(p, o[6]); + r.key.dq = ASN1HEX.getHexOfV_AtObj(p, o[7]); + r.key.co = ASN1HEX.getHexOfV_AtObj(p, o[8]) + }, + parsePrivateRawECKeyHexAtObj: function(p, r) { + var q = r.keyidx; + if (p.substr(q, 2) != "30") { + throw "malformed ECC private key(code:001)" + } + var o = ASN1HEX.getPosArrayOfChildren_AtObj(p, q); + if (o.length != 3) { + throw "malformed ECC private key(code:002)" + } + if (p.substr(o[1], 2) != "04") { + throw "malformed ECC private key(code:003)" + } + r.key = ASN1HEX.getHexOfV_AtObj(p, o[1]) + }, + parsePublicPKCS8Hex: function(r) { + var p = {}; + p.algparam = null; + var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0); + if (q.length != 2) { + throw "outer DERSequence shall have 2 elements: " + q.length + } + var s = q[0]; + if (r.substr(s, 2) != "30") { + throw "malformed PKCS8 public key(code:001)" + } + var o = ASN1HEX.getPosArrayOfChildren_AtObj(r, s); + if (o.length != 2) { + throw "malformed PKCS8 public key(code:002)" + } + if (r.substr(o[0], 2) != "06") { + throw "malformed PKCS8 public key(code:003)" + } + p.algoid = ASN1HEX.getHexOfV_AtObj(r, o[0]); + if (r.substr(o[1], 2) == "06") { + p.algparam = ASN1HEX.getHexOfV_AtObj(r, o[1]) + } + if (r.substr(q[1], 2) != "03") { + throw "malformed PKCS8 public key(code:004)" + } + p.key = ASN1HEX.getHexOfV_AtObj(r, q[1]).substr(2); + return p + }, + getRSAKeyFromPublicPKCS8Hex: function(o) { + var p = new RSAKey(); + p.readPKCS8PubKeyHex(o); + return p + }, + } +} (); +/*! keyutil-1.0.15.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var KEYUTIL = function() { + var d = function(p, r, q) { + return k(CryptoJS.AES, p, r, q) + }; + var e = function(p, r, q) { + return k(CryptoJS.TripleDES, p, r, q) + }; + var a = function(p, r, q) { + return k(CryptoJS.DES, p, r, q) + }; + var k = function(s, x, u, q) { + var r = CryptoJS.enc.Hex.parse(x); + var w = CryptoJS.enc.Hex.parse(u); + var p = CryptoJS.enc.Hex.parse(q); + var t = {}; + t.key = w; + t.iv = p; + t.ciphertext = r; + var v = s.decrypt(t, w, { + iv: p + }); + return CryptoJS.enc.Hex.stringify(v) + }; + var l = function(p, r, q) { + return g(CryptoJS.AES, p, r, q) + }; + var o = function(p, r, q) { + return g(CryptoJS.TripleDES, p, r, q) + }; + var f = function(p, r, q) { + return g(CryptoJS.DES, p, r, q) + }; + var g = function(t, y, v, q) { + var s = CryptoJS.enc.Hex.parse(y); + var x = CryptoJS.enc.Hex.parse(v); + var p = CryptoJS.enc.Hex.parse(q); + var w = t.encrypt(s, x, { + iv: p + }); + var r = CryptoJS.enc.Hex.parse(w.toString()); + var u = CryptoJS.enc.Base64.stringify(r); + return u + }; + var i = { + "AES-256-CBC": { + proc: d, + eproc: l, + keylen: 32, + ivlen: 16 + }, + "AES-192-CBC": { + proc: d, + eproc: l, + keylen: 24, + ivlen: 16 + }, + "AES-128-CBC": { + proc: d, + eproc: l, + keylen: 16, + ivlen: 16 + }, + "DES-EDE3-CBC": { + proc: e, + eproc: o, + keylen: 24, + ivlen: 8 + }, + "DES-CBC": { + proc: a, + eproc: f, + keylen: 8, + ivlen: 8 + } + }; + var c = function(p) { + return i[p]["proc"] + }; + var m = function(p) { + var r = CryptoJS.lib.WordArray.random(p); + var q = CryptoJS.enc.Hex.stringify(r); + return q + }; + var n = function(v) { + var w = {}; + var q = v.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m")); + if (q) { + w.cipher = q[1]; + w.ivsalt = q[2] + } + var p = v.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----")); + if (p) { + w.type = p[1] + } + var u = -1; + var x = 0; + if (v.indexOf("\r\n\r\n") != -1) { + u = v.indexOf("\r\n\r\n"); + x = 2 + } + if (v.indexOf("\n\n") != -1) { + u = v.indexOf("\n\n"); + x = 1 + } + var t = v.indexOf("-----END"); + if (u != -1 && t != -1) { + var r = v.substring(u + x * 2, t - x); + r = r.replace(/\s+/g, ""); + w.data = r + } + return w + }; + var j = function(q, y, p) { + var v = p.substring(0, 16); + var t = CryptoJS.enc.Hex.parse(v); + var r = CryptoJS.enc.Utf8.parse(y); + var u = i[q]["keylen"] + i[q]["ivlen"]; + var x = ""; + var w = null; + for (;;) { + var s = CryptoJS.algo.MD5.create(); + if (w != null) { + s.update(w) + } + s.update(r); + s.update(t); + w = s.finalize(); + x = x + CryptoJS.enc.Hex.stringify(w); + if (x.length >= u * 2) { + break + } + } + var z = {}; + z.keyhex = x.substr(0, i[q]["keylen"] * 2); + z.ivhex = x.substr(i[q]["keylen"] * 2, i[q]["ivlen"] * 2); + return z + }; + var b = function(p, v, r, w) { + var s = CryptoJS.enc.Base64.parse(p); + var q = CryptoJS.enc.Hex.stringify(s); + var u = i[v]["proc"]; + var t = u(q, r, w); + return t + }; + var h = function(p, s, q, u) { + var r = i[s]["eproc"]; + var t = r(p, q, u); + return t + }; + return { + version: "1.0.0", + getHexFromPEM: function(p, q) { + return ASN1HEX.pemToHex(p, q) + }, + getDecryptedKeyHexByKeyIV: function(q, t, s, r) { + var p = c(t); + return p(q, s, r) + }, + parsePKCS5PEM: function(p) { + return n(p) + }, + getKeyAndUnusedIvByPasscodeAndIvsalt: function(q, p, r) { + return j(q, p, r) + }, + decryptKeyB64: function(p, r, q, s) { + return b(p, r, q, s) + }, + getDecryptedKeyHex: function(y, x) { + var q = n(y); + var t = q.type; + var r = q.cipher; + var p = q.ivsalt; + var s = q.data; + var w = j(r, x, p); + var v = w.keyhex; + var u = b(s, r, v, p); + return u + }, + getRSAKeyFromEncryptedPKCS5PEM: function(r, q) { + var s = this.getDecryptedKeyHex(r, q); + var p = new RSAKey(); + p.readPrivateKeyFromASN1HexString(s); + return p + }, + getEncryptedPKCS5PEMFromPrvKeyHex: function(x, s, A, t, r) { + var p = ""; + if (typeof t == "undefined" || t == null) { + t = "AES-256-CBC" + } + if (typeof i[t] == "undefined") { + throw "KEYUTIL unsupported algorithm: " + t + } + if (typeof r == "undefined" || r == null) { + var v = i[t]["ivlen"]; + var u = m(v); + r = u.toUpperCase() + } + var z = j(t, A, r); + var y = z.keyhex; + var w = h(s, t, y, r); + var q = w.replace(/(.{64})/g, "$1\r\n"); + var p = "-----BEGIN " + x + " PRIVATE KEY-----\r\n"; + p += "Proc-Type: 4,ENCRYPTED\r\n"; + p += "DEK-Info: " + t + "," + r + "\r\n"; + p += "\r\n"; + p += q; + p += "\r\n-----END " + x + " PRIVATE KEY-----\r\n"; + return p + }, + getEncryptedPKCS5PEMFromRSAKey: function(D, E, r, t) { + var B = new KJUR.asn1.DERInteger({ + "int": 0 + }); + var w = new KJUR.asn1.DERInteger({ + bigint: D.n + }); + var A = new KJUR.asn1.DERInteger({ + "int": D.e + }); + var C = new KJUR.asn1.DERInteger({ + bigint: D.d + }); + var u = new KJUR.asn1.DERInteger({ + bigint: D.p + }); + var s = new KJUR.asn1.DERInteger({ + bigint: D.q + }); + var z = new KJUR.asn1.DERInteger({ + bigint: D.dmp1 + }); + var v = new KJUR.asn1.DERInteger({ + bigint: D.dmq1 + }); + var y = new KJUR.asn1.DERInteger({ + bigint: D.coeff + }); + var F = new KJUR.asn1.DERSequence({ + array: [B, w, A, C, u, s, z, v, y] + }); + var x = F.getEncodedHex(); + return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", x, E, r, t) + }, + newEncryptedPKCS5PEM: function(p, q, t, u) { + if (typeof q == "undefined" || q == null) { + q = 1024 + } + if (typeof t == "undefined" || t == null) { + t = "10001" + } + var r = new RSAKey(); + r.generate(q, t); + var s = null; + if (typeof u == "undefined" || u == null) { + s = this.getEncryptedPKCS5PEMFromRSAKey(r, p) + } else { + s = this.getEncryptedPKCS5PEMFromRSAKey(r, p, u) + } + return s + }, + getRSAKeyFromPlainPKCS8PEM: function(r) { + if (r.match(/ENCRYPTED/)) { + throw "pem shall be not ENCRYPTED" + } + var q = ASN1HEX.pemToHex(r, "PRIVATE KEY"); + var p = this.getRSAKeyFromPlainPKCS8Hex(q); + return p + }, + getRSAKeyFromPlainPKCS8Hex: function(q) { + var p = new RSAKey(); + p.readPKCS8PrvKeyHex(q); + return p + }, + parseHexOfEncryptedPKCS8: function(w) { + var s = {}; + var r = ASN1HEX.getPosArrayOfChildren_AtObj(w, 0); + if (r.length != 2) { + throw "malformed format: SEQUENCE(0).items != 2: " + r.length + } + s.ciphertext = ASN1HEX.getHexOfV_AtObj(w, r[1]); + var y = ASN1HEX.getPosArrayOfChildren_AtObj(w, r[0]); + if (y.length != 2) { + throw "malformed format: SEQUENCE(0.0).items != 2: " + y.length + } + if (ASN1HEX.getHexOfV_AtObj(w, y[0]) != "2a864886f70d01050d") { + throw "this only supports pkcs5PBES2" + } + var p = ASN1HEX.getPosArrayOfChildren_AtObj(w, y[1]); + if (y.length != 2) { + throw "malformed format: SEQUENCE(0.0.1).items != 2: " + p.length + } + var q = ASN1HEX.getPosArrayOfChildren_AtObj(w, p[1]); + if (q.length != 2) { + throw "malformed format: SEQUENCE(0.0.1.1).items != 2: " + q.length + } + if (ASN1HEX.getHexOfV_AtObj(w, q[0]) != "2a864886f70d0307") { + throw "this only supports TripleDES" + } + s.encryptionSchemeAlg = "TripleDES"; + s.encryptionSchemeIV = ASN1HEX.getHexOfV_AtObj(w, q[1]); + var t = ASN1HEX.getPosArrayOfChildren_AtObj(w, p[0]); + if (t.length != 2) { + throw "malformed format: SEQUENCE(0.0.1.0).items != 2: " + t.length + } + if (ASN1HEX.getHexOfV_AtObj(w, t[0]) != "2a864886f70d01050c") { + throw "this only supports pkcs5PBKDF2" + } + var x = ASN1HEX.getPosArrayOfChildren_AtObj(w, t[1]); + if (x.length < 2) { + throw "malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + x.length + } + s.pbkdf2Salt = ASN1HEX.getHexOfV_AtObj(w, x[0]); + var u = ASN1HEX.getHexOfV_AtObj(w, x[1]); + try { + s.pbkdf2Iter = parseInt(u, 16) + } catch(v) { + throw "malformed format pbkdf2Iter: " + u + } + return s + }, + getPBKDF2KeyHexFromParam: function(u, p) { + var t = CryptoJS.enc.Hex.parse(u.pbkdf2Salt); + var q = u.pbkdf2Iter; + var s = CryptoJS.PBKDF2(p, t, { + keySize: 192 / 32, + iterations: q + }); + var r = CryptoJS.enc.Hex.stringify(s); + return r + }, + getPlainPKCS8HexFromEncryptedPKCS8PEM: function(x, y) { + var r = ASN1HEX.pemToHex(x, "ENCRYPTED PRIVATE KEY"); + var p = this.parseHexOfEncryptedPKCS8(r); + var u = KEYUTIL.getPBKDF2KeyHexFromParam(p, y); + var v = {}; + v.ciphertext = CryptoJS.enc.Hex.parse(p.ciphertext); + var t = CryptoJS.enc.Hex.parse(u); + var s = CryptoJS.enc.Hex.parse(p.encryptionSchemeIV); + var w = CryptoJS.TripleDES.decrypt(v, t, { + iv: s + }); + var q = CryptoJS.enc.Hex.stringify(w); + return q + }, + getRSAKeyFromEncryptedPKCS8PEM: function(s, r) { + var q = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s, r); + var p = this.getRSAKeyFromPlainPKCS8Hex(q); + return p + }, + getKeyFromEncryptedPKCS8PEM: function(s, q) { + var p = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s, q); + var r = this.getKeyFromPlainPrivatePKCS8Hex(p); + return r + }, + parsePlainPrivatePKCS8Hex: function(s) { + var q = {}; + q.algparam = null; + if (s.substr(0, 2) != "30") { + throw "malformed plain PKCS8 private key(code:001)" + } + var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0); + if (r.length != 3) { + throw "malformed plain PKCS8 private key(code:002)" + } + if (s.substr(r[1], 2) != "30") { + throw "malformed PKCS8 private key(code:003)" + } + var p = ASN1HEX.getPosArrayOfChildren_AtObj(s, r[1]); + if (p.length != 2) { + throw "malformed PKCS8 private key(code:004)" + } + if (s.substr(p[0], 2) != "06") { + throw "malformed PKCS8 private key(code:005)" + } + q.algoid = ASN1HEX.getHexOfV_AtObj(s, p[0]); + if (s.substr(p[1], 2) == "06") { + q.algparam = ASN1HEX.getHexOfV_AtObj(s, p[1]) + } + if (s.substr(r[2], 2) != "04") { + throw "malformed PKCS8 private key(code:006)" + } + q.keyidx = ASN1HEX.getStartPosOfV_AtObj(s, r[2]); + return q + }, + getKeyFromPlainPrivatePKCS8PEM: function(q) { + var p = ASN1HEX.pemToHex(q, "PRIVATE KEY"); + var r = this.getKeyFromPlainPrivatePKCS8Hex(p); + return r + }, + getKeyFromPlainPrivatePKCS8Hex: function(p) { + var q = this.parsePlainPrivatePKCS8Hex(p); + var r; + if (q.algoid == "2a864886f70d010101") { + r = new RSAKey() + } else { + if (q.algoid == "2a8648ce380401") { + r = new KJUR.crypto.DSA() + } else { + if (q.algoid == "2a8648ce3d0201") { + r = new KJUR.crypto.ECDSA() + } else { + throw "unsupported private key algorithm" + } + } + } + r.readPKCS8PrvKeyHex(p); + return r + }, + getRSAKeyFromPublicPKCS8PEM: function(q) { + var r = ASN1HEX.pemToHex(q, "PUBLIC KEY"); + var p = this.getRSAKeyFromPublicPKCS8Hex(r); + return p + }, + getKeyFromPublicPKCS8PEM: function(q) { + var r = ASN1HEX.pemToHex(q, "PUBLIC KEY"); + var p = this.getKeyFromPublicPKCS8Hex(r); + return p + }, + getKeyFromPublicPKCS8Hex: function(q) { + var p; + var r = ASN1HEX.getVbyList(q, 0, [0, 0], "06"); + if (r === "2a864886f70d010101") { + p = new RSAKey() + } else { + if (r === "2a8648ce380401") { + p = new KJUR.crypto.DSA() + } else { + if (r === "2a8648ce3d0201") { + p = new KJUR.crypto.ECDSA() + } else { + throw "unsupported PKCS#8 public key hex" + } + } + } + p.readPKCS8PubKeyHex(q); + return p + }, + parsePublicRawRSAKeyHex: function(r) { + var p = {}; + if (r.substr(0, 2) != "30") { + throw "malformed RSA key(code:001)" + } + var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0); + if (q.length != 2) { + throw "malformed RSA key(code:002)" + } + if (r.substr(q[0], 2) != "02") { + throw "malformed RSA key(code:003)" + } + p.n = ASN1HEX.getHexOfV_AtObj(r, q[0]); + if (r.substr(q[1], 2) != "02") { + throw "malformed RSA key(code:004)" + } + p.e = ASN1HEX.getHexOfV_AtObj(r, q[1]); + return p + }, + parsePrivateRawRSAKeyHexAtObj: function(q, u) { + var t = ASN1HEX; + var r = t.getHexOfV_AtObj; + var s = t.getDecendantIndexByNthList(q, 0, [2, 0]); + var p = t.getPosArrayOfChildren_AtObj(q, s); + if (p.length !== 9) { + throw "malformed PKCS#8 plain RSA private key" + } + u.key = {}; + u.key.n = r(q, p[1]); + u.key.e = r(q, p[2]); + u.key.d = r(q, p[3]); + u.key.p = r(q, p[4]); + u.key.q = r(q, p[5]); + u.key.dp = r(q, p[6]); + u.key.dq = r(q, p[7]); + u.key.co = r(q, p[8]) + }, + parsePrivateRawECKeyHexAtObj: function(p, t) { + var s = ASN1HEX; + var q = t.keyidx; + var r = new KJUR.crypto.ECDSA(); + r.readPKCS8PrvKeyHex(p); + t.key = r.prvKeyHex; + t.pubkey = r.pubKeyHex + }, + parsePublicPKCS8Hex: function(s) { + var q = {}; + q.algparam = null; + var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0); + if (r.length != 2) { + throw "outer DERSequence shall have 2 elements: " + r.length + } + var t = r[0]; + if (s.substr(t, 2) != "30") { + throw "malformed PKCS8 public key(code:001)" + } + var p = ASN1HEX.getPosArrayOfChildren_AtObj(s, t); + if (p.length != 2) { + throw "malformed PKCS8 public key(code:002)" + } + if (s.substr(p[0], 2) != "06") { + throw "malformed PKCS8 public key(code:003)" + } + q.algoid = ASN1HEX.getHexOfV_AtObj(s, p[0]); + if (s.substr(p[1], 2) == "06") { + q.algparam = ASN1HEX.getHexOfV_AtObj(s, p[1]) + } else { + if (s.substr(p[1], 2) == "30") { + q.algparam = {}; + q.algparam.p = ASN1HEX.getVbyList(s, p[1], [0], "02"); + q.algparam.q = ASN1HEX.getVbyList(s, p[1], [1], "02"); + q.algparam.g = ASN1HEX.getVbyList(s, p[1], [2], "02") + } + } + if (s.substr(r[1], 2) != "03") { + throw "malformed PKCS8 public key(code:004)" + } + q.key = ASN1HEX.getHexOfV_AtObj(s, r[1]).substr(2); + return q + }, + getRSAKeyFromPublicPKCS8Hex: function(p) { + var q = new RSAKey(); + q.readPKCS8PubKeyHex(p); + return q + }, + } +} (); +KEYUTIL.getKey = function(i, f, j) { + if (typeof RSAKey != "undefined" && i instanceof RSAKey) { + return i + } + if (typeof KJUR.crypto.ECDSA != "undefined" && i instanceof KJUR.crypto.ECDSA) { + return i + } + if (typeof KJUR.crypto.DSA != "undefined" && i instanceof KJUR.crypto.DSA) { + return i + } + if (i.curve !== undefined && i.xy !== undefined && i.d === undefined) { + return new KJUR.crypto.ECDSA({ + pub: i.xy, + curve: i.curve + }) + } + if (i.curve !== undefined && i.d !== undefined) { + return new KJUR.crypto.ECDSA({ + prv: i.d, + curve: i.curve + }) + } + if (i.kty === undefined && i.n !== undefined && i.e !== undefined && i.d === undefined) { + var D = new RSAKey(); + D.setPublic(i.n, i.e); + return D + } + if (i.kty === undefined && i.n !== undefined && i.e !== undefined && i.d !== undefined && i.p !== undefined && i.q !== undefined && i.dp !== undefined && i.dq !== undefined && i.co !== undefined && i.qi === undefined) { + var D = new RSAKey(); + D.setPrivateEx(i.n, i.e, i.d, i.p, i.q, i.dp, i.dq, i.co); + return D + } + if (i.kty === undefined && i.n !== undefined && i.e !== undefined && i.d !== undefined && i.p === undefined) { + var D = new RSAKey(); + D.setPrivate(i.n, i.e, i.d); + return D + } + if (i.p !== undefined && i.q !== undefined && i.g !== undefined && i.y !== undefined && i.x === undefined) { + var D = new KJUR.crypto.DSA(); + D.setPublic(i.p, i.q, i.g, i.y); + return D + } + if (i.p !== undefined && i.q !== undefined && i.g !== undefined && i.y !== undefined && i.x !== undefined) { + var D = new KJUR.crypto.DSA(); + D.setPrivate(i.p, i.q, i.g, i.y, i.x); + return D + } + if (i.kty === "RSA" && i.n !== undefined && i.e !== undefined && i.d === undefined) { + var D = new RSAKey(); + D.setPublic(b64utohex(i.n), b64utohex(i.e)); + return D + } + if (i.kty === "RSA" && i.n !== undefined && i.e !== undefined && i.d !== undefined && i.p !== undefined && i.q !== undefined && i.dp !== undefined && i.dq !== undefined && i.qi !== undefined) { + + var D = new RSAKey(); + D.setPrivateEx(b64utohex(i.n), b64utohex(i.e), b64utohex(i.d), b64utohex(i.p), b64utohex(i.q), b64utohex(i.dp), b64utohex(i.dq), b64utohex(i.qi)); + return D + } + if (i.kty === "RSA" && i.n !== undefined && i.e !== undefined && i.d !== undefined) { + + var D = new RSAKey(); + D.setPrivate(b64utohex(i.n), b64utohex(i.e), b64utohex(i.d)); + return D + } + if (i.kty === "EC" && i.crv !== undefined && i.x !== undefined && i.y !== undefined && i.d === undefined) { + var e = new KJUR.crypto.ECDSA({ + curve: i.crv + }); + var n = e.ecparams.keylen / 4; + var t = ("0000000000" + b64utohex(i.x)).slice( - n); + var r = ("0000000000" + b64utohex(i.y)).slice( - n); + var o = "04" + t + r; + e.setPublicKeyHex(o); + return e + } + if (i.kty === "EC" && i.crv !== undefined && i.x !== undefined && i.y !== undefined && i.d !== undefined) { + var e = new KJUR.crypto.ECDSA({ + curve: i.crv + }); + var n = e.ecparams.keylen / 4; + var t = ("0000000000" + b64utohex(i.x)).slice( - n); + var r = ("0000000000" + b64utohex(i.y)).slice( - n); + var o = "04" + t + r; + var b = ("0000000000" + b64utohex(i.d)).slice( - n); + e.setPublicKeyHex(o); + e.setPrivateKeyHex(b); + return e + } + if (j === "pkcs5prv") { + + var A = i, + w = ASN1HEX, + C, D; + C = w.getPosArrayOfChildren_AtObj(A, 0); + + if (C.length === 9) { + D = new RSAKey(); + D.readPrivateKeyFromASN1HexString(i) + } else { + if (C.length === 6) { + D = new KJUR.crypto.DSA(); + D.readPKCS5PrvKeyHex(A) + } else { + if (C.length > 2 && A.substr(C[1], 2) === "04") { + D = new KJUR.crypto.ECDSA(); + D.readPKCS5PrvKeyHex(A) + } else { + throw "unsupported PKCS#1/5 hexadecimal key" + } + } + } + + return D + } + if (j === "pkcs8prv") { + var D = KEYUTIL.getKeyFromPlainPrivatePKCS8Hex(i); + return D + } + if (j === "pkcs8pub") { + return KEYUTIL.getKeyFromPublicPKCS8Hex(i) + } + if (j === "x509pub") { + return X509.getPublicKeyFromCertHex(i) + } + if (i.indexOf("-END CERTIFICATE-", 0) != -1 || i.indexOf("-END X509 CERTIFICATE-", 0) != -1 || i.indexOf("-END TRUSTED CERTIFICATE-", 0) != -1) { + return X509.getPublicKeyFromCertPEM(i) + } + if (i.indexOf("-END PUBLIC KEY-") != -1) { + return KEYUTIL.getKeyFromPublicPKCS8PEM(i) + } + if (i.indexOf("-END RSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") == -1) { + var k = ASN1HEX.pemToHex(i, "RSA PRIVATE KEY"); + return KEYUTIL.getKey(k, null, "pkcs5prv") + } + if (i.indexOf("-END DSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") == -1) { + var z = ASN1HEX.pemToHex(i, "DSA PRIVATE KEY"); + var v = ASN1HEX.getVbyList(z, 0, [1], "02"); + var u = ASN1HEX.getVbyList(z, 0, [2], "02"); + var B = ASN1HEX.getVbyList(z, 0, [3], "02"); + var l = ASN1HEX.getVbyList(z, 0, [4], "02"); + var m = ASN1HEX.getVbyList(z, 0, [5], "02"); + var D = new KJUR.crypto.DSA(); + D.setPrivate(new BigInteger(v, 16), new BigInteger(u, 16), new BigInteger(B, 16), new BigInteger(l, 16), new BigInteger(m, 16)); + return D + } + if (i.indexOf("-END PRIVATE KEY-") != -1) { + return KEYUTIL.getKeyFromPlainPrivatePKCS8PEM(i) + } + if (i.indexOf("-END RSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") != -1) { + return KEYUTIL.getRSAKeyFromEncryptedPKCS5PEM(i, f) + } + if (i.indexOf("-END EC PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") != -1) { + var z = KEYUTIL.getDecryptedKeyHex(i, f); + var D = ASN1HEX.getVbyList(z, 0, [1], "04"); + var d = ASN1HEX.getVbyList(z, 0, [2, 0], "06"); + var s = ASN1HEX.getVbyList(z, 0, [3, 0], "03").substr(2); + var c = ""; + if (KJUR.crypto.OID.oidhex2name[d] !== undefined) { + c = KJUR.crypto.OID.oidhex2name[d] + } else { + throw "undefined OID(hex) in KJUR.crypto.OID: " + d + } + var e = new KJUR.crypto.ECDSA({ + curve: c + }); + e.setPublicKeyHex(s); + e.setPrivateKeyHex(D); + e.isPublic = false; + return e + } + if (i.indexOf("-END DSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") != -1) { + var z = KEYUTIL.getDecryptedKeyHex(i, f); + var v = ASN1HEX.getVbyList(z, 0, [1], "02"); + var u = ASN1HEX.getVbyList(z, 0, [2], "02"); + var B = ASN1HEX.getVbyList(z, 0, [3], "02"); + var l = ASN1HEX.getVbyList(z, 0, [4], "02"); + var m = ASN1HEX.getVbyList(z, 0, [5], "02"); + var D = new KJUR.crypto.DSA(); + D.setPrivate(new BigInteger(v, 16), new BigInteger(u, 16), new BigInteger(B, 16), new BigInteger(l, 16), new BigInteger(m, 16)); + return D + } + if (i.indexOf("-END ENCRYPTED PRIVATE KEY-") != -1) { + return KEYUTIL.getKeyFromEncryptedPKCS8PEM(i, f) + } + throw "not supported argument" +}; +KEYUTIL.generateKeypair = function(a, c) { + if (a == "RSA") { + var b = c; + var h = new RSAKey(); + h.generate(b, "10001"); + h.isPrivate = true; + h.isPublic = true; + var f = new RSAKey(); + var e = h.n.toString(16); + var i = h.e.toString(16); + f.setPublic(e, i); + f.isPrivate = false; + f.isPublic = true; + var k = {}; + k.prvKeyObj = h; + k.pubKeyObj = f; + return k + } else { + if (a == "EC") { + var d = c; + var g = new KJUR.crypto.ECDSA({ + curve: d + }); + var j = g.generateKeyPairHex(); + var h = new KJUR.crypto.ECDSA({ + curve: d + }); + h.setPublicKeyHex(j.ecpubhex); + h.setPrivateKeyHex(j.ecprvhex); + h.isPrivate = true; + h.isPublic = false; + var f = new KJUR.crypto.ECDSA({ + curve: d + }); + f.setPublicKeyHex(j.ecpubhex); + f.isPrivate = false; + f.isPublic = true; + var k = {}; + k.prvKeyObj = h; + k.pubKeyObj = f; + return k + } else { + throw "unknown algorithm: " + a + } + } +}; +KEYUTIL.getPEM = function(a, r, o, g, j) { + var v = KJUR.asn1; + var u = KJUR.crypto; + function p(s) { + var w = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 0 + }, + { + "int": { + bigint: s.n + } + }, + { + "int": s.e + }, + { + "int": { + bigint: s.d + } + }, + { + "int": { + bigint: s.p + } + }, + { + "int": { + bigint: s.q + } + }, + { + "int": { + bigint: s.dmp1 + } + }, + { + "int": { + bigint: s.dmq1 + } + }, + { + "int": { + bigint: s.coeff + } + }] + }); + return w + } + function q(w) { + var s = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 1 + }, + { + octstr: { + hex: w.prvKeyHex + } + }, + { + tag: ["a0", true, { + oid: { + name: w.curveName + } + }] + }, + { + tag: ["a1", true, { + bitstr: { + hex: "00" + w.pubKeyHex + } + }] + }] + }); + return s + } + function n(s) { + var w = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 0 + }, + { + "int": { + bigint: s.p + } + }, + { + "int": { + bigint: s.q + } + }, + { + "int": { + bigint: s.g + } + }, + { + "int": { + bigint: s.y + } + }, + { + "int": { + bigint: s.x + } + }] + }); + return w + } + if (((typeof RSAKey != "undefined" && a instanceof RSAKey) || (typeof u.DSA != "undefined" && a instanceof u.DSA) || (typeof u.ECDSA != "undefined" && a instanceof u.ECDSA)) && a.isPublic == true && (r === undefined || r == "PKCS8PUB")) { + var t = new KJUR.asn1.x509.SubjectPublicKeyInfo(a); + var m = t.getEncodedHex(); + return v.ASN1Util.getPEMStringFromHex(m, "PUBLIC KEY") + } + if (r == "PKCS1PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && (o === undefined || o == null) && a.isPrivate == true) { + var t = p(a); + var m = t.getEncodedHex(); + return v.ASN1Util.getPEMStringFromHex(m, "RSA PRIVATE KEY") + } + if (r == "PKCS1PRV" && typeof RSAKey != "undefined" && a instanceof KJUR.crypto.ECDSA && (o === undefined || o == null) && a.isPrivate == true) { + var f = new KJUR.asn1.DERObjectIdentifier({ + name: a.curveName + }); + var l = f.getEncodedHex(); + var e = q(a); + var k = e.getEncodedHex(); + var i = ""; + i += v.ASN1Util.getPEMStringFromHex(l, "EC PARAMETERS"); + i += v.ASN1Util.getPEMStringFromHex(k, "EC PRIVATE KEY"); + return i + } + if (r == "PKCS1PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && (o === undefined || o == null) && a.isPrivate == true) { + var t = n(a); + var m = t.getEncodedHex(); + return v.ASN1Util.getPEMStringFromHex(m, "DSA PRIVATE KEY") + } + if (r == "PKCS5PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && (o !== undefined && o != null) && a.isPrivate == true) { + var t = p(a); + var m = t.getEncodedHex(); + if (g === undefined) { + g = "DES-EDE3-CBC" + } + return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", m, o, g) + } + if (r == "PKCS5PRV" && typeof KJUR.crypto.ECDSA != "undefined" && a instanceof KJUR.crypto.ECDSA && (o !== undefined && o != null) && a.isPrivate == true) { + var t = q(a); + var m = t.getEncodedHex(); + if (g === undefined) { + g = "DES-EDE3-CBC" + } + return this.getEncryptedPKCS5PEMFromPrvKeyHex("EC", m, o, g) + } + if (r == "PKCS5PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && (o !== undefined && o != null) && a.isPrivate == true) { + var t = n(a); + var m = t.getEncodedHex(); + if (g === undefined) { + g = "DES-EDE3-CBC" + } + return this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA", m, o, g) + } + var h = function(w, s) { + var y = b(w, s); + var x = new KJUR.asn1.ASN1Util.newObject({ + seq: [{ + seq: [{ + oid: { + name: "pkcs5PBES2" + } + }, + { + seq: [{ + seq: [{ + oid: { + name: "pkcs5PBKDF2" + } + }, + { + seq: [{ + octstr: { + hex: y.pbkdf2Salt + } + }, + { + "int": y.pbkdf2Iter + }] + }] + }, + { + seq: [{ + oid: { + name: "des-EDE3-CBC" + } + }, + { + octstr: { + hex: y.encryptionSchemeIV + } + }] + }] + }] + }, + { + octstr: { + hex: y.ciphertext + } + }] + }); + return x.getEncodedHex() + }; + var b = function(D, E) { + var x = 100; + var C = CryptoJS.lib.WordArray.random(8); + var B = "DES-EDE3-CBC"; + var s = CryptoJS.lib.WordArray.random(8); + var y = CryptoJS.PBKDF2(E, C, { + keySize: 192 / 32, + iterations: x + }); + var z = CryptoJS.enc.Hex.parse(D); + var A = CryptoJS.TripleDES.encrypt(z, y, { + iv: s + }) + ""; + var w = {}; + w.ciphertext = A; + w.pbkdf2Salt = CryptoJS.enc.Hex.stringify(C); + w.pbkdf2Iter = x; + w.encryptionSchemeAlg = B; + w.encryptionSchemeIV = CryptoJS.enc.Hex.stringify(s); + return w + }; + if (r == "PKCS8PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && a.isPrivate == true) { + var d = p(a); + var c = d.getEncodedHex(); + var t = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 0 + }, + { + seq: [{ + oid: { + name: "rsaEncryption" + } + }, + { + "null": true + }] + }, + { + octstr: { + hex: c + } + }] + }); + var m = t.getEncodedHex(); + if (o === undefined || o == null) { + return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY") + } else { + var k = h(m, o); + return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY") + } + } + if (r == "PKCS8PRV" && typeof KJUR.crypto.ECDSA != "undefined" && a instanceof KJUR.crypto.ECDSA && a.isPrivate == true) { + var d = new KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 1 + }, + { + octstr: { + hex: a.prvKeyHex + } + }, + { + tag: ["a1", true, { + bitstr: { + hex: "00" + a.pubKeyHex + } + }] + }] + }); + var c = d.getEncodedHex(); + var t = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 0 + }, + { + seq: [{ + oid: { + name: "ecPublicKey" + } + }, + { + oid: { + name: a.curveName + } + }] + }, + { + octstr: { + hex: c + } + }] + }); + var m = t.getEncodedHex(); + if (o === undefined || o == null) { + return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY") + } else { + var k = h(m, o); + return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY") + } + } + if (r == "PKCS8PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && a.isPrivate == true) { + var d = new KJUR.asn1.DERInteger({ + bigint: a.x + }); + var c = d.getEncodedHex(); + var t = KJUR.asn1.ASN1Util.newObject({ + seq: [{ + "int": 0 + }, + { + seq: [{ + oid: { + name: "dsa" + } + }, + { + seq: [{ + "int": { + bigint: a.p + } + }, + { + "int": { + bigint: a.q + } + }, + { + "int": { + bigint: a.g + } + }] + }] + }, + { + octstr: { + hex: c + } + }] + }); + var m = t.getEncodedHex(); + if (o === undefined || o == null) { + return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY") + } else { + var k = h(m, o); + return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY") + } + } + throw "unsupported object nor format" +}; +KEYUTIL.getKeyFromCSRPEM = function(b) { + var a = ASN1HEX.pemToHex(b, "CERTIFICATE REQUEST"); + var c = KEYUTIL.getKeyFromCSRHex(a); + return c +}; +KEYUTIL.getKeyFromCSRHex = function(a) { + var c = KEYUTIL.parseCSRHex(a); + var b = KEYUTIL.getKey(c.p8pubkeyhex, null, "pkcs8pub"); + return b +}; +KEYUTIL.parseCSRHex = function(c) { + var b = {}; + var e = c; + if (e.substr(0, 2) != "30") { + throw "malformed CSR(code:001)" + } + var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0); + if (d.length < 1) { + throw "malformed CSR(code:002)" + } + if (e.substr(d[0], 2) != "30") { + throw "malformed CSR(code:003)" + } + var a = ASN1HEX.getPosArrayOfChildren_AtObj(e, d[0]); + if (a.length < 3) { + throw "malformed CSR(code:004)" + } + b.p8pubkeyhex = ASN1HEX.getHexOfTLV_AtObj(e, a[2]); + return b +}; +KEYUTIL.getJWKFromKey = function(d) { + var b = {}; + if (d instanceof RSAKey && d.isPrivate) { + b.kty = "RSA"; + b.n = hextob64u(d.n.toString(16)); + b.e = hextob64u(d.e.toString(16)); + b.d = hextob64u(d.d.toString(16)); + b.p = hextob64u(d.p.toString(16)); + b.q = hextob64u(d.q.toString(16)); + b.dp = hextob64u(d.dmp1.toString(16)); + b.dq = hextob64u(d.dmq1.toString(16)); + b.qi = hextob64u(d.coeff.toString(16)); + return b + } else { + if (d instanceof RSAKey && d.isPublic) { + b.kty = "RSA"; + b.n = hextob64u(d.n.toString(16)); + b.e = hextob64u(d.e.toString(16)); + return b + } else { + if (d instanceof KJUR.crypto.ECDSA && d.isPrivate) { + var a = d.getShortNISTPCurveName(); + if (a !== "P-256" && a !== "P-384") { + throw "unsupported curve name for JWT: " + a + } + var c = d.getPublicKeyXYHex(); + b.kty = "EC"; + b.crv = a; + b.x = hextob64u(c.x); + b.y = hextob64u(c.y); + b.d = hextob64u(d.prvKeyHex); + return b + } else { + if (d instanceof KJUR.crypto.ECDSA && d.isPublic) { + var a = d.getShortNISTPCurveName(); + if (a !== "P-256" && a !== "P-384") { + throw "unsupported curve name for JWT: " + a + } + var c = d.getPublicKeyXYHex(); + b.kty = "EC"; + b.crv = a; + b.x = hextob64u(c.x); + b.y = hextob64u(c.y); + return b + } + } + } + } + throw "not supported key object" +}; +/*! rsapem-1.2.0.js (c) 2012-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +RSAKey.pemToBase64 = function(b) { + var a = b; + a = a.replace("-----BEGIN RSA PRIVATE KEY-----", ""); + a = a.replace("-----END RSA PRIVATE KEY-----", ""); + a = a.replace(/[ \n]+/g, ""); + return a +}; +RSAKey.getPosArrayOfChildrenFromHex = function(g) { + var j = new Array(); + var i = ASN1HEX.getStartPosOfV_AtObj(g, 0); + var b = ASN1HEX.getPosOfNextSibling_AtObj(g, i); + var e = ASN1HEX.getPosOfNextSibling_AtObj(g, b); + var f = ASN1HEX.getPosOfNextSibling_AtObj(g, e); + var l = ASN1HEX.getPosOfNextSibling_AtObj(g, f); + var k = ASN1HEX.getPosOfNextSibling_AtObj(g, l); + var d = ASN1HEX.getPosOfNextSibling_AtObj(g, k); + var c = ASN1HEX.getPosOfNextSibling_AtObj(g, d); + var h = ASN1HEX.getPosOfNextSibling_AtObj(g, c); + j.push(i, b, e, f, l, k, d, c, h); + return j +}; +RSAKey.getHexValueArrayOfChildrenFromHex = function(f) { + var l = RSAKey.getPosArrayOfChildrenFromHex(f); + var e = ASN1HEX.getHexOfV_AtObj(f, l[0]); + var j = ASN1HEX.getHexOfV_AtObj(f, l[1]); + var b = ASN1HEX.getHexOfV_AtObj(f, l[2]); + var c = ASN1HEX.getHexOfV_AtObj(f, l[3]); + var h = ASN1HEX.getHexOfV_AtObj(f, l[4]); + var g = ASN1HEX.getHexOfV_AtObj(f, l[5]); + var m = ASN1HEX.getHexOfV_AtObj(f, l[6]); + var k = ASN1HEX.getHexOfV_AtObj(f, l[7]); + var d = ASN1HEX.getHexOfV_AtObj(f, l[8]); + var i = new Array(); + i.push(e, j, b, c, h, g, m, k, d); + return i +}; +RSAKey.prototype.readPrivateKeyFromPEMString = function(e) { + var c = RSAKey.pemToBase64(e); + var d = b64tohex(c); + var b = RSAKey.getHexValueArrayOfChildrenFromHex(d); + this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]) +}; +RSAKey.prototype.readPrivateKeyFromASN1HexString = function(a) { + this.readPKCS5PrvKeyHex(a) +}; +RSAKey.prototype.readPKCS5PrvKeyHex = function(c) { + var b = RSAKey.getHexValueArrayOfChildrenFromHex(c); + this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]) +}; +RSAKey.prototype.readPKCS8PrvKeyHex = function(e) { + var c, j, l, b, a, f, d, k; + var m = ASN1HEX; + var g = m.getVbyList; + if (m.isASN1HEX(e) === false) { + throw "not ASN.1 hex string" + } + try { + c = g(e, 0, [2, 0, 1], "02"); + j = g(e, 0, [2, 0, 2], "02"); + l = g(e, 0, [2, 0, 3], "02"); + b = g(e, 0, [2, 0, 4], "02"); + a = g(e, 0, [2, 0, 5], "02"); + f = g(e, 0, [2, 0, 6], "02"); + d = g(e, 0, [2, 0, 7], "02"); + k = g(e, 0, [2, 0, 8], "02") + } catch(i) { + throw "malformed PKCS#8 plain RSA private key" + } + this.setPrivateEx(c, j, l, b, a, f, d, k) +}; +RSAKey.prototype.readPKCS5PubKeyHex = function(b) { + if (ASN1HEX.isASN1HEX(b) === false) { + throw "keyHex is not ASN.1 hex string" + } + var a = ASN1HEX.getPosArrayOfChildren_AtObj(b, 0); + if (a.length !== 2 || b.substr(a[0], 2) !== "02" || b.substr(a[1], 2) !== "02") { + throw "wrong hex for PKCS#5 public key" + } + var d = ASN1HEX.getHexOfV_AtObj(b, a[0]); + var c = ASN1HEX.getHexOfV_AtObj(b, a[1]); + this.setPublic(d, c) +}; +RSAKey.prototype.readPKCS8PubKeyHex = function(b) { + if (ASN1HEX.isASN1HEX(b) === false) { + throw "not ASN.1 hex string" + } + if (ASN1HEX.getDecendantHexTLVByNthList(b, 0, [0, 0]) !== "06092a864886f70d010101") { + throw "not PKCS8 RSA public key" + } + var a = ASN1HEX.getDecendantHexTLVByNthList(b, 0, [1, 0]); + this.readPKCS5PubKeyHex(a) +}; +RSAKey.prototype.readCertPubKeyHex = function(b, c) { + if (c !== 5) { + c = 6 + } + if (ASN1HEX.isASN1HEX(b) === false) { + throw "not ASN.1 hex string" + } + var a = ASN1HEX.getDecendantHexTLVByNthList(b, 0, [0, c]); + this.readPKCS8PubKeyHex(a) +}; +/*! rsasign-1.2.7.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +var _RE_HEXDECONLY = new RegExp(""); +_RE_HEXDECONLY.compile("[^0-9a-f]", "gi"); +function _rsasign_getHexPaddedDigestInfoForString(d, e, a) { + var b = function(f) { + return KJUR.crypto.Util.hashString(f, a) + }; + var c = b(d); + return KJUR.crypto.Util.getPaddedDigestInfoHex(c, a, e) +} +function _zeroPaddingOfSignature(e, d) { + var c = ""; + var a = d / 4 - e.length; + for (var b = 0; b < a; b++) { + c = c + "0" + } + return c + e +} +function _rsasign_signString(d, a) { + + var b = function(e) { + return KJUR.crypto.Util.hashString(e, a) + }; + var c = b(d); + return this.signWithMessageHash(c, a) +} +function _rsasign_signWithMessageHash(e, c) { + var f = KJUR.crypto.Util.getPaddedDigestInfoHex(e, c, this.n.bitLength()); + var b = parseBigInt(f, 16); + var d = this.doPrivate(b); + var a = d.toString(16); + return _zeroPaddingOfSignature(a, this.n.bitLength()) +} +function _rsasign_signStringWithSHA1(a) { + return _rsasign_signString.call(this, a, "sha1") +} +function _rsasign_signStringWithSHA256(a) { + return _rsasign_signString.call(this, a, "sha256") +} +function pss_mgf1_str(c, a, e) { + var b = "", + d = 0; + while (b.length < a) { + b += hextorstr(e(rstrtohex(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])))); + d += 1 + } + return b +} +function _rsasign_signStringPSS(e, a, d) { + var c = function(f) { + return KJUR.crypto.Util.hashHex(f, a) + }; + var b = c(rstrtohex(e)); + if (d === undefined) { + d = -1 + } + return this.signWithMessageHashPSS(b, a, d) +} +function _rsasign_signWithMessageHashPSS(l, a, k) { + var b = hextorstr(l); + var g = b.length; + var m = this.n.bitLength() - 1; + var c = Math.ceil(m / 8); + var d; + var o = function(i) { + return KJUR.crypto.Util.hashHex(i, a) + }; + if (k === -1 || k === undefined) { + k = g + } else { + if (k === -2) { + k = c - g - 2 + } else { + if (k < -2) { + throw "invalid salt length" + } + } + } + if (c < (g + k + 2)) { + throw "data too long" + } + var f = ""; + if (k > 0) { + f = new Array(k); + new SecureRandom().nextBytes(f); + f = String.fromCharCode.apply(String, f) + } + var n = hextorstr(o(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + b + f))); + var j = []; + for (d = 0; d < c - k - g - 2; d += 1) { + j[d] = 0 + } + var e = String.fromCharCode.apply(String, j) + "\x01" + f; + var h = pss_mgf1_str(n, e.length, o); + var q = []; + for (d = 0; d < e.length; d += 1) { + q[d] = e.charCodeAt(d) ^ h.charCodeAt(d) + } + var p = (65280 >> (8 * c - m)) & 255; + q[0] &= ~p; + for (d = 0; d < g; d++) { + q.push(n.charCodeAt(d)) + } + q.push(188); + return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16), this.n.bitLength()) +} +function _rsasign_getDecryptSignatureBI(a, d, c) { + var b = new RSAKey(); + b.setPublic(d, c); + var e = b.doPublic(a); + return e +} +function _rsasign_getHexDigestInfoFromSig(a, c, b) { + var e = _rsasign_getDecryptSignatureBI(a, c, b); + var d = e.toString(16).replace(/^1f+00/, ""); + return d +} +function _rsasign_getAlgNameAndHashFromHexDisgestInfo(f) { + for (var e in KJUR.crypto.Util.DIGESTINFOHEAD) { + var d = KJUR.crypto.Util.DIGESTINFOHEAD[e]; + var b = d.length; + if (f.substring(0, b) == d) { + var c = [e, f.substring(b)]; + return c + } + } + return [] +} +function _rsasign_verifySignatureWithArgs(f, b, g, j) { + var e = _rsasign_getHexDigestInfoFromSig(b, g, j); + var h = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e); + if (h.length == 0) { + return false + } + var d = h[0]; + var i = h[1]; + var a = function(k) { + return KJUR.crypto.Util.hashString(k, d) + }; + var c = a(f); + return (i == c) +} +function _rsasign_verifyHexSignatureForMessage(c, b) { + var d = parseBigInt(c, 16); + var a = _rsasign_verifySignatureWithArgs(b, d, this.n.toString(16), this.e.toString(16)); + return a +} +function _rsasign_verifyString(f, j) { + j = j.replace(_RE_HEXDECONLY, ""); + j = j.replace(/[ \n]+/g, ""); + var b = parseBigInt(j, 16); + if (b.bitLength() > this.n.bitLength()) { + return 0 + } + var i = this.doPublic(b); + var e = i.toString(16).replace(/^1f+00/, ""); + var g = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e); + if (g.length == 0) { + return false + } + var d = g[0]; + var h = g[1]; + var a = function(k) { + return KJUR.crypto.Util.hashString(k, d) + }; + var c = a(f); + return (h == c) +} +function _rsasign_verifyWithMessageHash(e, a) { + a = a.replace(_RE_HEXDECONLY, ""); + a = a.replace(/[ \n]+/g, ""); + var b = parseBigInt(a, 16); + if (b.bitLength() > this.n.bitLength()) { + return 0 + } + var h = this.doPublic(b); + var g = h.toString(16).replace(/^1f+00/, ""); + var c = _rsasign_getAlgNameAndHashFromHexDisgestInfo(g); + if (c.length == 0) { + return false + } + var d = c[0]; + var f = c[1]; + return (f == e) +} +function _rsasign_verifyStringPSS(c, b, a, f) { + var e = function(g) { + return KJUR.crypto.Util.hashHex(g, a) + }; + var d = e(rstrtohex(c)); + if (f === undefined) { + f = -1 + } + return this.verifyWithMessageHashPSS(d, b, a, f) +} +function _rsasign_verifyWithMessageHashPSS(f, s, l, c) { + var k = new BigInteger(s, 16); + if (k.bitLength() > this.n.bitLength()) { + return false + } + var r = function(i) { + return KJUR.crypto.Util.hashHex(i, l) + }; + var j = hextorstr(f); + var h = j.length; + var g = this.n.bitLength() - 1; + var m = Math.ceil(g / 8); + var q; + if (c === -1 || c === undefined) { + c = h + } else { + if (c === -2) { + c = m - h - 2 + } else { + if (c < -2) { + throw "invalid salt length" + } + } + } + if (m < (h + c + 2)) { + throw "data too long" + } + var a = this.doPublic(k).toByteArray(); + for (q = 0; q < a.length; q += 1) { + a[q] &= 255 + } + while (a.length < m) { + a.unshift(0) + } + if (a[m - 1] !== 188) { + throw "encoded message does not end in 0xbc" + } + a = String.fromCharCode.apply(String, a); + var d = a.substr(0, m - h - 1); + var e = a.substr(d.length, h); + var p = (65280 >> (8 * m - g)) & 255; + if ((d.charCodeAt(0) & p) !== 0) { + throw "bits beyond keysize not zero" + } + var n = pss_mgf1_str(e, d.length, r); + var o = []; + for (q = 0; q < d.length; q += 1) { + o[q] = d.charCodeAt(q) ^ n.charCodeAt(q) + } + o[0] &= ~p; + var b = m - h - c - 2; + for (q = 0; q < b; q += 1) { + if (o[q] !== 0) { + throw "leftmost octets not zero" + } + } + if (o[b] !== 1) { + throw "0x01 marker not found" + } + return e === hextorstr(r(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + j + String.fromCharCode.apply(String, o.slice( - c))))) +} +RSAKey.prototype.signWithMessageHash = _rsasign_signWithMessageHash; +RSAKey.prototype.signString = _rsasign_signString; +RSAKey.prototype.signStringWithSHA1 = _rsasign_signStringWithSHA1; +RSAKey.prototype.signStringWithSHA256 = _rsasign_signStringWithSHA256; +RSAKey.prototype.sign = _rsasign_signString; +RSAKey.prototype.signWithSHA1 = _rsasign_signStringWithSHA1; +RSAKey.prototype.signWithSHA256 = _rsasign_signStringWithSHA256; +RSAKey.prototype.signWithMessageHashPSS = _rsasign_signWithMessageHashPSS; +RSAKey.prototype.signStringPSS = _rsasign_signStringPSS; +RSAKey.prototype.signPSS = _rsasign_signStringPSS; +RSAKey.SALT_LEN_HLEN = -1; +RSAKey.SALT_LEN_MAX = -2; +RSAKey.prototype.verifyWithMessageHash = _rsasign_verifyWithMessageHash; +RSAKey.prototype.verifyString = _rsasign_verifyString; +RSAKey.prototype.verifyHexSignatureForMessage = _rsasign_verifyHexSignatureForMessage; +RSAKey.prototype.verify = _rsasign_verifyString; +RSAKey.prototype.verifyHexSignatureForByteArrayMessage = _rsasign_verifyHexSignatureForMessage; +RSAKey.prototype.verifyWithMessageHashPSS = _rsasign_verifyWithMessageHashPSS; +RSAKey.prototype.verifyStringPSS = _rsasign_verifyStringPSS; +RSAKey.prototype.verifyPSS = _rsasign_verifyStringPSS; +RSAKey.SALT_LEN_RECOVER = -2; +/*! x509-1.1.12.js (c) 2012-2017 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +function X509() { + this.subjectPublicKeyRSA = null; + this.subjectPublicKeyRSA_hN = null; + this.subjectPublicKeyRSA_hE = null; + this.hex = null; + this.getSerialNumberHex = function() { + return ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 1]) + }; + this.getSignatureAlgorithmField = function() { + var b = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 2, 0]); + var a = KJUR.asn1.ASN1Util.oidHexToInt(b); + var c = KJUR.asn1.x509.OID.oid2name(a); + return c + }; + this.getIssuerHex = function() { + return ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 3]) + }; + this.getIssuerString = function() { + return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 3])) + }; + this.getSubjectHex = function() { + return ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 5]) + }; + this.getSubjectString = function() { + return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 5])) + }; + this.getNotBefore = function() { + var a = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 4, 0]); + a = a.replace(/(..)/g, "%$1"); + a = decodeURIComponent(a); + return a + }; + this.getNotAfter = function() { + var a = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 4, 1]); + a = a.replace(/(..)/g, "%$1"); + a = decodeURIComponent(a); + return a + }; + this.readCertPEM = function(c) { + var e = ASN1HEX.pemToHex(c); + var b = X509.getPublicKeyHexArrayFromCertHex(e); + var d = new RSAKey(); + d.setPublic(b[0], b[1]); + this.subjectPublicKeyRSA = d; + this.subjectPublicKeyRSA_hN = b[0]; + this.subjectPublicKeyRSA_hE = b[1]; + this.hex = e + }; + this.readCertPEMWithoutRSAInit = function(c) { + var d = ASN1HEX.pemToHex(c); + var b = X509.getPublicKeyHexArrayFromCertHex(d); + if (typeof this.subjectPublicKeyRSA.setPublic === "function") { + this.subjectPublicKeyRSA.setPublic(b[0], b[1]) + } + this.subjectPublicKeyRSA_hN = b[0]; + this.subjectPublicKeyRSA_hE = b[1]; + this.hex = d + }; + this.getInfo = function() { + var p = "Basic Fields\n"; + p += " serial number: " + this.getSerialNumberHex() + "\n"; + p += " signature algorithm: " + this.getSignatureAlgorithmField() + "\n"; + p += " issuer: " + this.getIssuerString() + "\n"; + p += " notBefore: " + this.getNotBefore() + "\n"; + p += " notAfter: " + this.getNotAfter() + "\n"; + p += " subject: " + this.getSubjectString() + "\n"; + p += " subject public key info: \n"; + var j = X509.getSubjectPublicKeyInfoPosFromCertHex(this.hex); + var d = ASN1HEX.getHexOfTLV_AtObj(this.hex, j); + var n = KEYUTIL.getKey(d, null, "pkcs8pub"); + if (n instanceof RSAKey) { + p += " key algorithm: RSA\n"; + p += " n=" + n.n.toString(16).substr(0, 16) + "...\n"; + p += " e=" + n.e.toString(16) + "\n" + } + p += "X509v3 Extensions:\n"; + var m = X509.getV3ExtInfoListOfCertHex(this.hex); + for (var e = 0; e < m.length; e++) { + var b = m[e]; + var o = KJUR.asn1.x509.OID.oid2name(b.oid); + if (o === "") { + o = b.oid + } + var k = ""; + if (b.critical === true) { + k = "CRITICAL" + } + p += " " + o + " " + k + ":\n"; + if (o === "basicConstraints") { + var g = X509.getExtBasicConstraints(this.hex); + if (g.cA === undefined) { + p += " {}\n" + } else { + p += " cA=true"; + if (g.pathLen !== undefined) { + p += ", pathLen=" + g.pathLen + } + p += "\n" + } + } else { + if (o === "keyUsage") { + p += " " + X509.getExtKeyUsageString(this.hex) + "\n" + } else { + if (o === "subjectKeyIdentifier") { + p += " " + X509.getExtSubjectKeyIdentifier(this.hex) + "\n" + } else { + if (o === "authorityKeyIdentifier") { + var a = X509.getExtAuthorityKeyIdentifier(this.hex); + if (a.kid !== undefined) { + p += " kid=" + a.kid + "\n" + } + } else { + if (o === "extKeyUsage") { + var h = X509.getExtExtKeyUsageName(this.hex); + p += " " + h.join(", ") + "\n" + } else { + if (o === "subjectAltName") { + var f = X509.getExtSubjectAltName(this.hex); + p += " " + f.join(", ") + "\n" + } else { + if (o === "cRLDistributionPoints") { + var l = X509.getExtCRLDistributionPointsURI(this.hex); + p += " " + l + "\n" + } else { + if (o === "authorityInfoAccess") { + var c = X509.getExtAIAInfo(this.hex); + if (c.ocsp !== undefined) { + p += " ocsp: " + c.ocsp.join(",") + "\n" + } + if (c.caissuer !== undefined) { + p += " caissuer: " + c.caissuer.join(",") + "\n" + } + } + } + } + } + } + } + } + } + } + p += "signature algorithm: " + X509.getSignatureAlgorithmName(this.hex) + "\n"; + p += "signature: " + X509.getSignatureValueHex(this.hex).substr(0, 16) + "...\n"; + return p + } +} +X509.pemToBase64 = function(a) { + var b = a; + b = b.replace("-----BEGIN CERTIFICATE-----", ""); + b = b.replace("-----END CERTIFICATE-----", ""); + b = b.replace(/[ \n]+/g, ""); + return b +}; +X509.pemToHex = function(a) { + return ASN1HEX.pemToHex(a) +}; +X509.getSubjectPublicKeyPosFromCertHex = function(f) { + var e = X509.getSubjectPublicKeyInfoPosFromCertHex(f); + if (e == -1) { + return - 1 + } + var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, e); + if (b.length != 2) { + return - 1 + } + var d = b[1]; + if (f.substring(d, d + 2) != "03") { + return - 1 + } + var c = ASN1HEX.getStartPosOfV_AtObj(f, d); + if (f.substring(c, c + 2) != "00") { + return - 1 + } + return c + 2 +}; +X509.getSubjectPublicKeyInfoPosFromCertHex = function(d) { + var c = ASN1HEX.getStartPosOfV_AtObj(d, 0); + var b = ASN1HEX.getPosArrayOfChildren_AtObj(d, c); + if (b.length < 1) { + return - 1 + } + if (d.substring(b[0], b[0] + 10) == "a003020102") { + if (b.length < 6) { + return - 1 + } + return b[6] + } else { + if (b.length < 5) { + return - 1 + } + return b[5] + } +}; +X509.getPublicKeyHexArrayFromCertHex = function(f) { + var e = X509.getSubjectPublicKeyPosFromCertHex(f); + var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, e); + if (b.length != 2) { + return [] + } + var d = ASN1HEX.getHexOfV_AtObj(f, b[0]); + var c = ASN1HEX.getHexOfV_AtObj(f, b[1]); + if (d != null && c != null) { + return [d, c] + } else { + return [] + } +}; +X509.getHexTbsCertificateFromCert = function(b) { + var a = ASN1HEX.getStartPosOfV_AtObj(b, 0); + return a +}; +X509.getPublicKeyHexArrayFromCertPEM = function(c) { + var d = ASN1HEX.pemToHex(c); + var b = X509.getPublicKeyHexArrayFromCertHex(d); + return b +}; +X509.hex2dn = function(f, b) { + if (b === undefined) { + b = 0 + } + if (f.substr(b, 2) !== "30") { + throw "malformed DN" + } + var c = new Array(); + var d = ASN1HEX.getPosArrayOfChildren_AtObj(f, b); + for (var e = 0; e < d.length; e++) { + c.push(X509.hex2rdn(f, d[e])) + } + c = c.map(function(a) { + return a.replace("/", "\\/") + }); + return "/" + c.join("/") +}; +X509.hex2rdn = function(f, b) { + if (b === undefined) { + b = 0 + } + if (f.substr(b, 2) !== "31") { + throw "malformed RDN" + } + var c = new Array(); + var d = ASN1HEX.getPosArrayOfChildren_AtObj(f, b); + for (var e = 0; e < d.length; e++) { + c.push(X509.hex2attrTypeValue(f, d[e])) + } + c = c.map(function(a) { + return a.replace("+", "\\+") + }); + return c.join("+") +}; +X509.hex2attrTypeValue = function(g, b) { + if (b === undefined) { + b = 0 + } + if (g.substr(b, 2) !== "30") { + throw "malformed attribute type and value" + } + var c = ASN1HEX.getPosArrayOfChildren_AtObj(g, b); + if (c.length !== 2 || g.substr(c[0], 2) !== "06") { + "malformed attribute type and value" + } + var d = ASN1HEX.getHexOfV_AtObj(g, c[0]); + var h = KJUR.asn1.ASN1Util.oidHexToInt(d); + var f = KJUR.asn1.x509.OID.oid2atype(h); + var a = ASN1HEX.getHexOfV_AtObj(g, c[1]); + var e = hextorstr(a); + return f + "=" + e +}; +X509.getPublicKeyFromCertHex = function(c) { + var a, e, b; + var g = 6; + var d = ASN1HEX; + var f = d.getVbyList; + b = d.getDecendantHexTLVByNthList(c, 0, [0, 0]); + if (b !== "a003020102") { + g = 5 + } + e = f(c, 0, [0, g, 0, 0], "06"); + if (e === "2a864886f70d010101") { + a = new RSAKey() + } else { + if (e === "2a8648ce380401") { + a = new KJUR.crypto.DSA() + } else { + if (e === "2a8648ce3d0201") { + a = new KJUR.crypto.ECDSA() + } else { + throw "unsupported public key in X.509 cert" + } + } + } + a.readCertPubKeyHex(c, g); + return a +}; +X509.getPublicKeyFromCertPEM = function(a) { + var c = ASN1HEX; + var b = c.pemToHex(a); + return X509.getPublicKeyFromCertHex(b) +}; +X509.getPublicKeyInfoPropOfCertPEM = function(e) { + var i = {}; + i.algparam = null; + var f = ASN1HEX.pemToHex(e); + var d = ASN1HEX.getPosArrayOfChildren_AtObj(f, 0); + if (d.length != 3) { + throw "malformed X.509 certificate PEM (code:001)" + } + if (f.substr(d[0], 2) != "30") { + throw "malformed X.509 certificate PEM (code:002)" + } + var c = ASN1HEX.getPosArrayOfChildren_AtObj(f, d[0]); + var g = 6; + if (f.substr(c[0], 2) !== "a0") { + g = 5 + } + if (c.length < g + 1) { + throw "malformed X.509 certificate PEM (code:003)" + } + var a = ASN1HEX.getPosArrayOfChildren_AtObj(f, c[g]); + if (a.length != 2) { + throw "malformed X.509 certificate PEM (code:004)" + } + var h = ASN1HEX.getPosArrayOfChildren_AtObj(f, a[0]); + if (h.length != 2) { + throw "malformed X.509 certificate PEM (code:005)" + } + i.algoid = ASN1HEX.getHexOfV_AtObj(f, h[0]); + if (f.substr(h[1], 2) == "06") { + i.algparam = ASN1HEX.getHexOfV_AtObj(f, h[1]) + } else { + if (f.substr(h[1], 2) == "30") { + i.algparam = ASN1HEX.getHexOfTLV_AtObj(f, h[1]) + } + } + if (f.substr(a[1], 2) != "03") { + throw "malformed X.509 certificate PEM (code:006)" + } + var b = ASN1HEX.getHexOfV_AtObj(f, a[1]); + i.keyhex = b.substr(2); + return i +}; +X509.getPublicKeyInfoPosOfCertHEX = function(c) { + var b = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0); + if (b.length != 3) { + throw "malformed X.509 certificate PEM (code:001)" + } + if (c.substr(b[0], 2) != "30") { + throw "malformed X.509 certificate PEM (code:002)" + } + var a = ASN1HEX.getPosArrayOfChildren_AtObj(c, b[0]); + if (a.length < 7) { + throw "malformed X.509 certificate PEM (code:003)" + } + return a[6] +}; +X509.getV3ExtInfoListOfCertHex = function(g) { + var b = ASN1HEX.getPosArrayOfChildren_AtObj(g, 0); + if (b.length != 3) { + throw "malformed X.509 certificate PEM (code:001)" + } + if (g.substr(b[0], 2) != "30") { + throw "malformed X.509 certificate PEM (code:002)" + } + var a = ASN1HEX.getPosArrayOfChildren_AtObj(g, b[0]); + if (a.length < 8) { + throw "malformed X.509 certificate PEM (code:003)" + } + if (g.substr(a[7], 2) != "a3") { + throw "malformed X.509 certificate PEM (code:004)" + } + var h = ASN1HEX.getPosArrayOfChildren_AtObj(g, a[7]); + if (h.length != 1) { + throw "malformed X.509 certificate PEM (code:005)" + } + if (g.substr(h[0], 2) != "30") { + throw "malformed X.509 certificate PEM (code:006)" + } + var f = ASN1HEX.getPosArrayOfChildren_AtObj(g, h[0]); + var e = f.length; + var d = new Array(e); + for (var c = 0; c < e; c++) { + d[c] = X509.getV3ExtItemInfo_AtObj(g, f[c]) + } + return d +}; +X509.getV3ExtItemInfo_AtObj = function(f, g) { + var e = {}; + e.posTLV = g; + var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, g); + if (b.length != 2 && b.length != 3) { + throw "malformed X.509v3 Ext (code:001)" + } + if (f.substr(b[0], 2) != "06") { + throw "malformed X.509v3 Ext (code:002)" + } + var d = ASN1HEX.getHexOfV_AtObj(f, b[0]); + e.oid = ASN1HEX.hextooidstr(d); + e.critical = false; + if (b.length == 3) { + e.critical = true + } + var c = b[b.length - 1]; + if (f.substr(c, 2) != "04") { + throw "malformed X.509v3 Ext (code:003)" + } + e.posV = ASN1HEX.getStartPosOfV_AtObj(f, c); + return e +}; +X509.getHexOfTLV_V3ExtValue = function(b, a) { + var c = X509.getPosOfTLV_V3ExtValue(b, a); + if (c == -1) { + return null + } + return ASN1HEX.getHexOfTLV_AtObj(b, c) +}; +X509.getHexOfV_V3ExtValue = function(b, a) { + var c = X509.getPosOfTLV_V3ExtValue(b, a); + if (c == -1) { + return null + } + return ASN1HEX.getHexOfV_AtObj(b, c) +}; +X509.getPosOfTLV_V3ExtValue = function(f, b) { + var d = b; + if (!b.match(/^[0-9.]+$/)) { + d = KJUR.asn1.x509.OID.name2oid(b) + } + if (d == "") { + return - 1 + } + var c = X509.getV3ExtInfoListOfCertHex(f); + for (var a = 0; a < c.length; a++) { + var e = c[a]; + if (e.oid == d) { + return e.posV + } + } + return - 1 +}; +X509.getExtBasicConstraints = function(d) { + var a = X509.getHexOfV_V3ExtValue(d, "basicConstraints"); + if (a === null) { + return null + } + if (a === "") { + return {} + } + if (a === "0101ff") { + return { + cA: true + } + } + if (a.substr(0, 8) === "0101ff02") { + var c = ASN1HEX.getHexOfV_AtObj(a, 6); + var b = parseInt(c, 16); + return { + cA: true, + pathLen: b + } + } + throw "unknown error" +}; +X509.KEYUSAGE_NAME = ["digitalSignature", "nonRepudiation", "keyEncipherment", "dataEncipherment", "keyAgreement", "keyCertSign", "cRLSign", "encipherOnly", "decipherOnly"]; +X509.getExtKeyUsageBin = function(d) { + var b = X509.getHexOfV_V3ExtValue(d, "keyUsage"); + if (b == "") { + return "" + } + if (b.length % 2 != 0 || b.length <= 2) { + throw "malformed key usage value" + } + var a = parseInt(b.substr(0, 2)); + var c = parseInt(b.substr(2), 16).toString(2); + return c.substr(0, c.length - a) +}; +X509.getExtKeyUsageString = function(e) { + var d = X509.getExtKeyUsageBin(e); + var b = new Array(); + for (var c = 0; c < d.length; c++) { + if (d.substr(c, 1) == "1") { + b.push(X509.KEYUSAGE_NAME[c]) + } + } + return b.join(",") +}; +X509.getExtSubjectKeyIdentifier = function(b) { + var a = X509.getHexOfV_V3ExtValue(b, "subjectKeyIdentifier"); + return a +}; +X509.getExtAuthorityKeyIdentifier = function(f) { + var b = {}; + var e = X509.getHexOfTLV_V3ExtValue(f, "authorityKeyIdentifier"); + if (e === null) { + return null + } + var c = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0); + for (var d = 0; d < c.length; d++) { + if (e.substr(c[d], 2) === "80") { + b.kid = ASN1HEX.getHexOfV_AtObj(e, c[d]) + } + } + return b +}; +X509.getExtExtKeyUsageName = function(k) { + var b = new Array(); + var f = X509.getHexOfTLV_V3ExtValue(k, "extKeyUsage"); + if (f === null) { + return null + } + var c = ASN1HEX.getPosArrayOfChildren_AtObj(f, 0); + for (var e = 0; e < c.length; e++) { + var j = ASN1HEX.getHexOfV_AtObj(f, c[e]); + var g = KJUR.asn1.ASN1Util.oidHexToInt(j); + var d = KJUR.asn1.x509.OID.oid2name(g); + b.push(d) + } + return b +}; +X509.getExtSubjectAltName = function(g) { + var b = new Array(); + var f = X509.getHexOfTLV_V3ExtValue(g, "subjectAltName"); + var c = ASN1HEX.getPosArrayOfChildren_AtObj(f, 0); + for (var e = 0; e < c.length; e++) { + if (f.substr(c[e], 2) === "82") { + var d = hextoutf8(ASN1HEX.getHexOfV_AtObj(f, c[e])); + b.push(d) + } + } + return b +}; +X509.getExtCRLDistributionPointsURI = function(n) { + var p = new Array(); + var k = X509.getHexOfTLV_V3ExtValue(n, "cRLDistributionPoints"); + var o = ASN1HEX.getPosArrayOfChildren_AtObj(k, 0); + for (var g = 0; g < o.length; g++) { + var l = ASN1HEX.getHexOfTLV_AtObj(k, o[g]); + var b = ASN1HEX.getPosArrayOfChildren_AtObj(l, 0); + for (var e = 0; e < b.length; e++) { + if (l.substr(b[e], 2) === "a0") { + var f = ASN1HEX.getHexOfV_AtObj(l, b[e]); + if (f.substr(0, 2) === "a0") { + var c = ASN1HEX.getHexOfV_AtObj(f, 0); + if (c.substr(0, 2) === "86") { + var m = ASN1HEX.getHexOfV_AtObj(c, 0); + var d = hextoutf8(m); + p.push(d) + } + } + } + } + } + return p +}; +X509.getExtAIAInfo = function(g) { + var j = {}; + j.ocsp = []; + j.caissuer = []; + var h = X509.getPosOfTLV_V3ExtValue(g, "authorityInfoAccess"); + if (h == -1) { + return null + } + if (g.substr(h, 2) != "30") { + throw "malformed AIA Extn Value" + } + var d = ASN1HEX.getPosArrayOfChildren_AtObj(g, h); + for (var c = 0; c < d.length; c++) { + var a = d[c]; + var b = ASN1HEX.getPosArrayOfChildren_AtObj(g, a); + if (b.length != 2) { + throw "malformed AccessDescription of AIA Extn" + } + var e = b[0]; + var f = b[1]; + if (ASN1HEX.getHexOfV_AtObj(g, e) == "2b06010505073001") { + if (g.substr(f, 2) == "86") { + j.ocsp.push(hextoutf8(ASN1HEX.getHexOfV_AtObj(g, f))) + } + } + if (ASN1HEX.getHexOfV_AtObj(g, e) == "2b06010505073002") { + if (g.substr(f, 2) == "86") { + j.caissuer.push(hextoutf8(ASN1HEX.getHexOfV_AtObj(g, f))) + } + } + } + return j +}; +X509.getSignatureAlgorithmName = function(d) { + var b = ASN1HEX.getDecendantHexVByNthList(d, 0, [1, 0]); + var a = KJUR.asn1.ASN1Util.oidHexToInt(b); + var c = KJUR.asn1.x509.OID.oid2name(a); + return c +}; +X509.getSignatureValueHex = function(b) { + var a = ASN1HEX.getDecendantHexVByNthList(b, 0, [2]); + if (a.substr(0, 2) !== "00") { + throw "can't get signature value" + } + return a.substr(2) +}; +X509.getSerialNumberHex = function(a) { + return ASN1HEX.getDecendantHexVByNthList(a, 0, [0, 1]) +}; +X509.verifySignature = function(f, c) { + var d = X509.getSignatureAlgorithmName(f); + var a = X509.getSignatureValueHex(f); + var b = ASN1HEX.getDecendantHexTLVByNthList(f, 0, [0]); + var e = new KJUR.crypto.Signature({ + alg: d + }); + e.init(c); + e.updateHex(b); + return e.verify(a) +}; +/*! jws-3.3.5 (c) 2013-2016 Kenji Urushima | kjur.github.com/jsrsasign/license + */ +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.jws == "undefined" || !KJUR.jws) { + KJUR.jws = {} +} +KJUR.jws.JWS = function() { + var a = KJUR.jws.JWS; + this.parseJWS = function(e, h) { + if ((this.parsedJWS !== undefined) && (h || (this.parsedJWS.sigvalH !== undefined))) { + return + } + var g = e.match(/^([^.]+)\.([^.]+)\.([^.]+)$/); + if (g == null) { + throw "JWS signature is not a form of 'Head.Payload.SigValue'." + } + var i = g[1]; + var c = g[2]; + var j = g[3]; + var l = i + "." + c; + this.parsedJWS = {}; + this.parsedJWS.headB64U = i; + this.parsedJWS.payloadB64U = c; + this.parsedJWS.sigvalB64U = j; + this.parsedJWS.si = l; + if (!h) { + var f = b64utohex(j); + var d = parseBigInt(f, 16); + this.parsedJWS.sigvalH = f; + this.parsedJWS.sigvalBI = d + } + var b = b64utoutf8(i); + var k = b64utoutf8(c); + this.parsedJWS.headS = b; + this.parsedJWS.payloadS = k; + if (!a.isSafeJSONString(b, this.parsedJWS, "headP")) { + throw "malformed JSON string for JWS Head: " + b + } + } +}; +KJUR.jws.JWS.sign = function(a, i, c, m, l) { + var k = KJUR.jws.JWS; + var q, e, j; + if (typeof i != "string" && typeof i != "object") { + throw "spHeader must be JSON string or object: " + i + } + if (typeof i == "object") { + e = i; + q = JSON.stringify(e) + } + if (typeof i == "string") { + q = i; + if (!k.isSafeJSONString(q)) { + throw "JWS Head is not safe JSON string: " + q + } + e = k.readSafeJSONString(q) + } + j = c; + if (typeof c == "object") { + j = JSON.stringify(c) + } + if ((a == "" || a == null) && e.alg !== undefined) { + a = e.alg + } + if ((a != "" && a != null) && e.alg === undefined) { + e.alg = a; + q = JSON.stringify(e) + } + if (a !== e.alg) { + throw "alg and sHeader.alg doesn't match: " + a + "!=" + e.alg + } + var d = null; + if (k.jwsalg2sigalg[a] === undefined) { + throw "unsupported alg name: " + a + } else { + d = k.jwsalg2sigalg[a] + } + var b = utf8tob64u(q); + var g = utf8tob64u(j); + var o = b + "." + g; + var n = ""; + if (d.substr(0, 4) == "Hmac") { + if (m === undefined) { + throw "mac key shall be specified for HS* alg" + } + var h = new KJUR.crypto.Mac({ + alg: d, + prov: "cryptojs", + pass: m + }); + h.updateString(o); + n = h.doFinal() + } else { + if (d.indexOf("withECDSA") != -1) { + var p = new KJUR.crypto.Signature({ + alg: d + }); + p.init(m, l); + p.updateString(o); + hASN1Sig = p.sign(); + n = KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig) + } else { + if (d != "none") { + var p = new KJUR.crypto.Signature({ + alg: d + }); + p.init(m, l); + p.updateString(o); + n = p.sign() + } + } + } + var f = hextob64u(n); + return o + "." + f +}; +KJUR.jws.JWS.verify = function(p, t, j) { + var m = KJUR.jws.JWS; + var q = p.split("."); + var d = q[0]; + var l = q[1]; + var b = d + "." + l; + var r = b64utohex(q[2]); + var i = m.readSafeJSONString(b64utoutf8(q[0])); + var h = null; + var s = null; + if (i.alg === undefined) { + throw "algorithm not specified in header" + } else { + h = i.alg; + s = h.substr(0, 2) + } + if (j != null && Object.prototype.toString.call(j) === "[object Array]" && j.length > 0) { + var c = ":" + j.join(":") + ":"; + if (c.indexOf(":" + h + ":") == -1) { + throw "algorithm '" + h + "' not accepted in the list" + } + } + if (h != "none" && t === null) { + throw "key shall be specified to verify." + } + if (typeof t == "string" && t.indexOf("-----BEGIN ") != -1) { + t = KEYUTIL.getKey(t) + } + if (s == "RS" || s == "PS") { + if (! (t instanceof RSAKey)) { + throw "key shall be a RSAKey obj for RS* and PS* algs" + } + } + if (s == "ES") { + if (! (t instanceof KJUR.crypto.ECDSA)) { + throw "key shall be a ECDSA obj for ES* algs" + } + } + if (h == "none") {} + var n = null; + if (m.jwsalg2sigalg[i.alg] === undefined) { + throw "unsupported alg name: " + h + } else { + n = m.jwsalg2sigalg[h] + } + if (n == "none") { + throw "not supported" + } else { + if (n.substr(0, 4) == "Hmac") { + var k = null; + if (t === undefined) { + throw "hexadecimal key shall be specified for HMAC" + } + var g = new KJUR.crypto.Mac({ + alg: n, + pass: t + }); + g.updateString(b); + k = g.doFinal(); + return r == k + } else { + if (n.indexOf("withECDSA") != -1) { + var f = null; + try { + f = KJUR.crypto.ECDSA.concatSigToASN1Sig(r) + } catch(o) { + return false + } + var e = new KJUR.crypto.Signature({ + alg: n + }); + e.init(t); + e.updateString(b); + return e.verify(f) + } else { + var e = new KJUR.crypto.Signature({ + alg: n + }); + e.init(t); + e.updateString(b); + return e.verify(r) + } + } + } +}; +KJUR.jws.JWS.parse = function(g) { + var c = g.split("."); + var b = {}; + var f, e, d; + if (c.length != 2 && c.length != 3) { + throw "malformed sJWS: wrong number of '.' splitted elements" + } + f = c[0]; + e = c[1]; + if (c.length == 3) { + d = c[2] + } + b.headerObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f)); + b.payloadObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e)); + b.headerPP = JSON.stringify(b.headerObj, null, " "); + if (b.payloadObj == null) { + b.payloadPP = b64utoutf8(e) + } else { + b.payloadPP = JSON.stringify(b.payloadObj, null, " ") + } + if (d !== undefined) { + b.sigHex = b64utohex(d) + } + return b +}; +KJUR.jws.JWS.verifyJWT = function(d, j, l) { + var h = KJUR.jws.JWS; + var i = d.split("."); + var c = i[0]; + var g = i[1]; + var m = c + "." + g; + var k = b64utohex(i[2]); + var f = h.readSafeJSONString(b64utoutf8(c)); + var e = h.readSafeJSONString(b64utoutf8(g)); + if (f.alg === undefined) { + return false + } + if (l.alg === undefined) { + throw "acceptField.alg shall be specified" + } + if (!h.inArray(f.alg, l.alg)) { + return false + } + if (e.iss !== undefined && typeof l.iss === "object") { + if (!h.inArray(e.iss, l.iss)) { + return false + } + } + if (e.sub !== undefined && typeof l.sub === "object") { + if (!h.inArray(e.sub, l.sub)) { + return false + } + } + if (e.aud !== undefined && typeof l.aud === "object") { + if (typeof e.aud == "string") { + if (!h.inArray(e.aud, l.aud)) { + return false + } + } else { + if (typeof e.aud == "object") { + if (!h.includedArray(e.aud, l.aud)) { + return false + } + } + } + } + var b = KJUR.jws.IntDate.getNow(); + if (l.verifyAt !== undefined && typeof l.verifyAt === "number") { + b = l.verifyAt + } + if (l.gracePeriod === undefined || typeof l.gracePeriod !== "number") { + l.gracePeriod = 0 + } + if (e.exp !== undefined && typeof e.exp == "number") { + if (e.exp + l.gracePeriod < b) { + return false + } + } + if (e.nbf !== undefined && typeof e.nbf == "number") { + if (b < e.nbf - l.gracePeriod) { + return false + } + } + if (e.iat !== undefined && typeof e.iat == "number") { + if (b < e.iat - l.gracePeriod) { + return false + } + } + if (e.jti !== undefined && l.jti !== undefined) { + if (e.jti !== l.jti) { + return false + } + } + if (!KJUR.jws.JWS.verify(d, j, l.alg)) { + return false + } + return true +}; +KJUR.jws.JWS.includedArray = function(b, a) { + var d = KJUR.jws.JWS.inArray; + if (b === null) { + return false + } + if (typeof b !== "object") { + return false + } + if (typeof b.length !== "number") { + return false + } + for (var c = 0; c < b.length; c++) { + if (!d(b[c], a)) { + return false + } + } + return true +}; +KJUR.jws.JWS.inArray = function(d, b) { + if (b === null) { + return false + } + if (typeof b !== "object") { + return false + } + if (typeof b.length !== "number") { + return false + } + for (var c = 0; c < b.length; c++) { + if (b[c] == d) { + return true + } + } + return false +}; +KJUR.jws.JWS.jwsalg2sigalg = { + HS256: "HmacSHA256", + HS384: "HmacSHA384", + HS512: "HmacSHA512", + RS256: "SHA256withRSA", + RS384: "SHA384withRSA", + RS512: "SHA512withRSA", + ES256: "SHA256withECDSA", + ES384: "SHA384withECDSA", + PS256: "SHA256withRSAandMGF1", + PS384: "SHA384withRSAandMGF1", + PS512: "SHA512withRSAandMGF1", + none: "none", +}; +KJUR.jws.JWS.isSafeJSONString = function(c, b, d) { + var e = null; + try { + e = jsonParse(c); + if (typeof e != "object") { + return 0 + } + if (e.constructor === Array) { + return 0 + } + if (b) { + b[d] = e + } + return 1 + } catch(a) { + return 0 + } +}; +KJUR.jws.JWS.readSafeJSONString = function(b) { + var c = null; + try { + c = jsonParse(b); + if (typeof c != "object") { + return null + } + if (c.constructor === Array) { + return null + } + return c + } catch(a) { + return null + } +}; +KJUR.jws.JWS.getEncodedSignatureValueFromJWS = function(b) { + var a = b.match(/^[^.]+\.[^.]+\.([^.]+)$/); + if (a == null) { + throw "JWS signature is not a form of 'Head.Payload.SigValue'." + } + return a[1] +}; +KJUR.jws.JWS.getJWKthumbprint = function(d) { + if (d.kty !== "RSA" && d.kty !== "EC" && d.kty !== "oct") { + throw "unsupported algorithm for JWK Thumprint" + } + var a = "{"; + if (d.kty === "RSA") { + if (typeof d.n != "string" || typeof d.e != "string") { + throw "wrong n and e value for RSA key" + } + a += '"e":"' + d.e + '",'; + a += '"kty":"' + d.kty + '",'; + a += '"n":"' + d.n + '"}' + } else { + if (d.kty === "EC") { + if (typeof d.crv != "string" || typeof d.x != "string" || typeof d.y != "string") { + throw "wrong crv, x and y value for EC key" + } + a += '"crv":"' + d.crv + '",'; + a += '"kty":"' + d.kty + '",'; + a += '"x":"' + d.x + '",'; + a += '"y":"' + d.y + '"}' + } else { + if (d.kty === "oct") { + if (typeof d.k != "string") { + throw "wrong k value for oct(symmetric) key" + } + a += '"kty":"' + d.kty + '",'; + a += '"k":"' + d.k + '"}' + } + } + } + var b = rstrtohex(a); + var c = KJUR.crypto.Util.hashHex(b, "sha256"); + var e = hextob64u(c); + return e +}; +KJUR.jws.IntDate = {}; +KJUR.jws.IntDate.get = function(a) { + if (a == "now") { + return KJUR.jws.IntDate.getNow() + } else { + if (a == "now + 1hour") { + return KJUR.jws.IntDate.getNow() + 60 * 60 + } else { + if (a == "now + 1day") { + return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 + } else { + if (a == "now + 1month") { + return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 30 + } else { + if (a == "now + 1year") { + return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 365 + } else { + if (a.match(/Z$/)) { + return KJUR.jws.IntDate.getZulu(a) + } else { + if (a.match(/^[0-9]+$/)) { + return parseInt(a) + } + } + } + } + } + } + } + throw "unsupported format: " + a +}; +KJUR.jws.IntDate.getZulu = function(k) { + var b = k.match(/(\d+)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)Z/); + if (b) { + var a = b[1]; + var i = parseInt(a); + if (a.length == 4) {} else { + if (a.length == 2) { + if (50 <= i && i < 100) { + i = 1900 + i + } else { + if (0 <= i && i < 50) { + i = 2000 + i + } else { + throw "malformed year string for UTCTime" + } + } + } else { + throw "malformed year string" + } + } + var g = parseInt(b[2]) - 1; + var j = parseInt(b[3]); + var c = parseInt(b[4]); + var e = parseInt(b[5]); + var f = parseInt(b[6]); + var h = new Date(Date.UTC(i, g, j, c, e, f)); + return~~ (h / 1000) + } + throw "unsupported format: " + k +}; +KJUR.jws.IntDate.getNow = function() { + var a = ~~ (new Date() / 1000); + return a +}; +KJUR.jws.IntDate.intDate2UTCString = function(a) { + var b = new Date(a * 1000); + return b.toUTCString() +}; +KJUR.jws.IntDate.intDate2Zulu = function(e) { + var i = new Date(e * 1000); + var h = ("0000" + i.getUTCFullYear()).slice( - 4); + var g = ("00" + (i.getUTCMonth() + 1)).slice( - 2); + var b = ("00" + i.getUTCDate()).slice( - 2); + var a = ("00" + i.getUTCHours()).slice( - 2); + var c = ("00" + i.getUTCMinutes()).slice( - 2); + var f = ("00" + i.getUTCSeconds()).slice( - 2); + return h + g + b + a + c + f + "Z" +}; +if (typeof KJUR == "undefined" || !KJUR) { + KJUR = {} +} +if (typeof KJUR.jws == "undefined" || !KJUR.jws) { + KJUR.jws = {} +} +KJUR.jws.JWSJS = function() { + var b = KJUR.jws.JWS; + var a = KJUR.jws.JWS; + this.aHeader = []; + this.sPayload = ""; + this.aSignature = []; + this.init = function() { + this.aHeader = []; + this.sPayload = undefined; + this.aSignature = [] + }; + this.initWithJWS = function(d) { + this.init(); + var c = d.split("."); + if (c.length != 3) { + throw "malformed input JWS" + } + this.aHeader.push(c[0]); + this.sPayload = c[1]; + this.aSignature.push(c[2]) + }; + this.addSignature = function(c, f, k, i) { + if (this.sPayload === undefined || this.sPayload === null) { + throw "there's no JSON-JS signature to add." + } + var j = this.aHeader.length; + if (this.aHeader.length != this.aSignature.length) { + throw "aHeader.length != aSignature.length" + } + try { + var d = KJUR.jws.JWS.sign(c, f, this.sPayload, k, i); + var h = d.split("."); + var l = h[0]; + var e = h[2]; + this.aHeader.push(h[0]); + this.aSignature.push(h[2]) + } catch(g) { + if (this.aHeader.length > j) { + this.aHeader.pop() + } + if (this.aSignature.length > j) { + this.aSignature.pop() + } + throw "addSignature failed: " + g + } + }; + this.addSignatureByHeaderKey = function(f, c) { + var e = b64utoutf8(this.sPayload); + var d = new KJUR.jws.JWS(); + var g = d.generateJWSByP1PrvKey(f, e, c); + this.aHeader.push(d.parsedJWS.headB64U); + this.aSignature.push(d.parsedJWS.sigvalB64U) + }; + this.addSignatureByHeaderPayloadKey = function(f, e, c) { + var d = new KJUR.jws.JWS(); + var g = d.generateJWSByP1PrvKey(f, e, c); + this.aHeader.push(d.parsedJWS.headB64U); + this.sPayload = d.parsedJWS.payloadB64U; + this.aSignature.push(d.parsedJWS.sigvalB64U) + }; + this.verifyAll = function(f) { + if (this.aHeader.length !== f.length || this.aSignature.length !== f.length) { + return false + } + for (var e = 0; e < f.length; e++) { + var d = f[e]; + if (d.length !== 2) { + return false + } + var c = this.verifyNth(e, d[0], d[1]); + if (c === false) { + return false + } + } + return true + }; + this.verifyNth = function(d, h, e) { + if (this.aHeader.length <= d || this.aSignature.length <= d) { + return false + } + var f = this.aHeader[d]; + var i = this.aSignature[d]; + var j = f + "." + this.sPayload + "." + i; + var c = false; + try { + c = a.verify(j, h, e) + } catch(g) { + return false + } + return c + }; + this.verifyWithCerts = function(d) { + if (this.aHeader.length != d.length) { + throw "num headers does not match with num certs" + } + if (this.aSignature.length != d.length) { + throw "num signatures does not match with num certs" + } + var l = this.sPayload; + var h = ""; + for (var e = 0; e < d.length; e++) { + var f = d[e]; + var g = this.aHeader[e]; + var n = this.aSignature[e]; + var c = g + "." + l + "." + n; + var k = new KJUR.jws.JWS(); + try { + var m = k.verifyJWSByPemX509Cert(c, f); + if (m != 1) { + h += (e + 1) + "th signature unmatch. " + } + } catch(j) { + h += (e + 1) + "th signature fail(" + j + "). " + } + } + if (h == "") { + return 1 + } else { + throw h + } + }; + this.readJWSJS = function(e) { + if (typeof e === "string") { + var d = b.readSafeJSONString(e); + if (d == null) { + throw "argument is not safe JSON object string" + } + this.aHeader = d.headers; + this.sPayload = d.payload; + this.aSignature = d.signatures + } else { + try { + if (e.headers.length > 0) { + this.aHeader = e.headers + } else { + throw "malformed header" + } + if (typeof e.payload === "string") { + this.sPayload = e.payload + } else { + throw "malformed signatures" + } + if (e.signatures.length > 0) { + this.signatures = e.signatures + } else { + throw "malformed signatures" + } + } catch(c) { + throw "malformed JWS-JS JSON object: " + c + } + } + }; + this.getJSON = function() { + return { + headers: this.aHeader, + payload: this.sPayload, + signatures: this.aSignature + } + }; + this.isEmpty = function() { + if (this.aHeader.length == 0) { + return 1 + } + return 0 + } +}; +module.exports = { + RSAKey: RSAKey, + KEYUTIL: KEYUTIL, + hex2b64: hex2b64, + b64tohex: b64tohex +} \ No newline at end of file diff --git a/utils/util.js b/utils/util.js index 764bc2c..ac61a10 100644 --- a/utils/util.js +++ b/utils/util.js @@ -13,7 +13,227 @@ const formatNumber = n => { n = n.toString() return n[1] ? n : `0${n}` } +//获取当前时间的时间戳 +const getCurTimestamp = () => { + return Date.parse(new Date()) +} +/****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/ +// 生成随机字符串 +const randomString = (len) => { + len = len || 32; + var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; + var maxPos = $chars.length; + var pwd = ''; + for (i = 0; i < len; i++) { + pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); + } + return pwd; +} +var rotateLeft = function (lValue, iShiftBits) { + return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); +} +var addUnsigned = function (lX, lY) { + var lX4, lY4, lX8, lY8, lResult; + lX8 = (lX & 0x80000000); + lY8 = (lY & 0x80000000); + lX4 = (lX & 0x40000000); + lY4 = (lY & 0x40000000); + lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); + if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8); + if (lX4 | lY4) { + if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); + else return (lResult ^ 0x40000000 ^ lX8 ^ lY8); + } else { + return (lResult ^ lX8 ^ lY8); + } +} +var F = function (x, y, z) { + return (x & y) | ((~x) & z); +} +var G = function (x, y, z) { + return (x & z) | (y & (~z)); +} +var H = function (x, y, z) { + return (x ^ y ^ z); +} +var I = function (x, y, z) { + return (y ^ (x | (~z))); +} +var FF = function (a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); +}; +var GG = function (a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); +}; +var HH = function (a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); +}; +var II = function (a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); +}; +var convertToWordArray = function (string) { + var lWordCount; + var lMessageLength = string.length; + var lNumberOfWordsTempOne = lMessageLength + 8; + var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64; + var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16; + var lWordArray = Array(lNumberOfWords - 1); + var lBytePosition = 0; + var lByteCount = 0; + while (lByteCount < lMessageLength) { + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); + lByteCount++; + } + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); + lWordArray[lNumberOfWords - 2] = lMessageLength << 3; + lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; + return lWordArray; +}; +var wordToHex = function (lValue) { + var WordToHexValue = "", + WordToHexValueTemp = "", + lByte, lCount; + for (lCount = 0; lCount <= 3; lCount++) { + lByte = (lValue >>> (lCount * 8)) & 255; + WordToHexValueTemp = "0" + lByte.toString(16); + WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); + } + return WordToHexValue; +}; +var uTF8Encode = function (string) { + string = string.replace(/\x0d\x0a/g, "\x0a"); + var output = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + output += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + output += String.fromCharCode((c >> 6) | 192); + output += String.fromCharCode((c & 63) | 128); + } else { + output += String.fromCharCode((c >> 12) | 224); + output += String.fromCharCode(((c >> 6) & 63) | 128); + output += String.fromCharCode((c & 63) | 128); + } + } + return output; +}; + +var md5 = function (string) { + var x = Array(); + var k, AA, BB, CC, DD, a, b, c, d; + var S11 = 7, + S12 = 12, + S13 = 17, + S14 = 22; + var S21 = 5, + S22 = 9, + S23 = 14, + S24 = 20; + var S31 = 4, + S32 = 11, + S33 = 16, + S34 = 23; + var S41 = 6, + S42 = 10, + S43 = 15, + S44 = 21; + string = uTF8Encode(string); + x = convertToWordArray(string); + a = 0x67452301; + b = 0xEFCDAB89; + c = 0x98BADCFE; + d = 0x10325476; + for (k = 0; k < x.length; k += 16) { + AA = a; + BB = b; + CC = c; + DD = d; + a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); + d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); + c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); + b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); + a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); + d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); + c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); + b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); + a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); + d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); + c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); + b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); + a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); + d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); + c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); + b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); + a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); + d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); + c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); + b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); + a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); + d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); + c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); + b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); + a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); + d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); + c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); + b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); + a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); + d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); + c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); + b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); + a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); + d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); + c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); + b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); + a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); + d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); + c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); + b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); + a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); + d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); + c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); + b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); + a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); + d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); + c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); + b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); + a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); + d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); + c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); + b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); + a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); + d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); + c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); + b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); + a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); + d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); + c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); + b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); + a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); + d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); + c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); + b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); + a = addUnsigned(a, AA); + b = addUnsigned(b, BB); + c = addUnsigned(c, CC); + d = addUnsigned(d, DD); + } + var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); + return tempValue.toLowerCase(); +} + module.exports = { - formatTime -} + formatTime: formatTime, + md5: md5, + currentTimestamp: getCurTimestamp, + randomString: randomString +} \ No newline at end of file diff --git a/vant/dist/dropdown-menu/index.wxml b/vant/dist/dropdown-menu/index.wxml index 037ac3b..220dcb4 100644 --- a/vant/dist/dropdown-menu/index.wxml +++ b/vant/dist/dropdown-menu/index.wxml @@ -1,18 +1,12 @@ - - + + + style="{{ item.showPopup ? 'color:' + activeColor : '' }}"> {{ computed.displayTitle(item) }} @@ -20,4 +14,4 @@ - + \ No newline at end of file diff --git a/vant/dist/dropdown-menu/index.wxss b/vant/dist/dropdown-menu/index.wxss index ec6caff..a410188 100644 --- a/vant/dist/dropdown-menu/index.wxss +++ b/vant/dist/dropdown-menu/index.wxss @@ -1 +1,77 @@ -@import '../common/index.wxss';.van-dropdown-menu{display:-webkit-flex;display:flex;box-shadow:0 2px 12px rgba(100,101,102,.12);-webkit-user-select:none;user-select:none;height:50px;height:var(--dropdown-menu-height,50px);background-color:#fff;background-color:var(--dropdown-menu-background-color,#fff)}.van-dropdown-menu__item{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:#969799;color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:0 8px;padding:var(--dropdown-menu-title-padding,0 8px);color:#323233;color:var(--dropdown-menu-title-text-color,#323233);font-size:15px;font-size:var(--dropdown-menu-title-font-size,15px);line-height:18px;line-height:var(--dropdown-menu-title-line-height,18px)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:#ee0a24;color:var(--dropdown-menu-title-active-text-color,#ee0a24)}.van-dropdown-menu__title--down:after{margin-top:-1px;-webkit-transform:rotate(135deg);transform:rotate(135deg)} \ No newline at end of file +@import '../common/index.wxss'; + +.van-dropdown-menu { + display: -webkit-flex; + display: flex; + box-shadow: 0 2px 12px rgba(100, 101, 102, .12); + -webkit-user-select: none; + user-select: none; + height: 50px; + height: var(--dropdown-menu-height, 50px); + background-color: #fff; + background-color: var(--dropdown-menu-background-color, #fff) +} + +.van-dropdown-menu__item { + display: -webkit-flex; + display: flex; + -webkit-flex: 1; + flex: 1; + -webkit-align-items: center; + align-items: center; + -webkit-justify-content: center; + justify-content: center; + min-width: 0 +} + +.van-dropdown-menu__item:active { + opacity: .7 +} + +.van-dropdown-menu__item--disabled:active { + opacity: 1 +} + +.van-dropdown-menu__item--disabled .van-dropdown-menu__title { + color: #969799; + color: var(--dropdown-menu-title-disabled-text-color, #969799) +} + +.van-dropdown-menu__title { + position: relative; + box-sizing: border-box; + max-width: 100%; + padding: 0 8px; + padding: var(--dropdown-menu-title-padding, 0 8px); + color: #323233; + color: var(--dropdown-menu-title-text-color, #323233); + font-size: 14px; + font-size: var(--dropdown-menu-title-font-size, 14px); + line-height: 18px; + line-height: var(--dropdown-menu-title-line-height, 18px) +} + +.van-dropdown-menu__title:after { + position: absolute; + top: 50%; + right: -4px; + margin-top: -5px; + border-color: transparent transparent currentcolor currentcolor; + border-style: solid; + border-width: 3px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + opacity: .8; + content: "" +} + +.van-dropdown-menu__title--active { + color: #ee0a24; + color: var(--dropdown-menu-title-active-text-color, #ee0a24) +} + +.van-dropdown-menu__title--down:after { + margin-top: -1px; + -webkit-transform: rotate(135deg); + transform: rotate(135deg) +} \ No newline at end of file