fmode-ng 0.0.113 → 0.0.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,311 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { IonCheckbox, ToastController } from "@ionic/angular/standalone";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i2 from "@angular/router";
|
|
12
|
-
import * as i3 from "@angular/common/http";
|
|
13
|
-
import * as i4 from "@ionic/angular/standalone";
|
|
14
|
-
import * as i5 from "@angular/common";
|
|
15
|
-
import * as i6 from "@angular/forms";
|
|
16
|
-
export class ModalUserLoginComponent {
|
|
17
|
-
constructor(authServ, router, route, http, toastCtrl) {
|
|
18
|
-
this.authServ = authServ;
|
|
19
|
-
this.router = router;
|
|
20
|
-
this.route = route;
|
|
21
|
-
this.http = http;
|
|
22
|
-
this.toastCtrl = toastCtrl;
|
|
23
|
-
// 用户协议
|
|
24
|
-
this.isUserRuleChecked = false;
|
|
25
|
-
this.loginInfo = {
|
|
26
|
-
mobile: "",
|
|
27
|
-
code: "",
|
|
28
|
-
};
|
|
29
|
-
// enabledLocalCode:boolean = false; // 开启验证码
|
|
30
|
-
this.localCodeNum = ''; //输入校验码
|
|
31
|
-
this.msg = this.authServ.message;
|
|
32
|
-
this.loginSuccess = new EventEmitter();
|
|
33
|
-
//发送验证码倒计时
|
|
34
|
-
this.countdown = 60;
|
|
35
|
-
this.buttonText = "获取验证码";
|
|
36
|
-
//添加倒计时开始和结束的判断
|
|
37
|
-
this.isCountingdown = false;
|
|
38
|
-
this.drawCode = [];
|
|
39
|
-
// document.body.classList.add("dark");
|
|
40
|
-
}
|
|
41
|
-
ngOnInit() {
|
|
42
|
-
this.close();
|
|
43
|
-
}
|
|
44
|
-
ngAfterViewInit() {
|
|
45
|
-
// this.updateDrawCode()
|
|
46
|
-
this.setActiveButton(this.authServ.activeButton);
|
|
47
|
-
}
|
|
48
|
-
// 手机+密码注册
|
|
49
|
-
signMobilePassword() {
|
|
50
|
-
if (!this.mobile || !this.password) {
|
|
51
|
-
this.msg.error("请输入完整手机号和密码");
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (this.password != this.password2) {
|
|
55
|
-
this.msg.error("两次输入密码不同,请检查");
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
this.authServ
|
|
59
|
-
.signMobilePassword(this.mobile, this.password)
|
|
60
|
-
.then((res) => {
|
|
61
|
-
if (res?.id) {
|
|
62
|
-
// 注册成功,自动登录
|
|
63
|
-
this.authServ.loginMobilePassword(this.mobile, this.password, this.msg)
|
|
64
|
-
.then((data) => {
|
|
65
|
-
// 登录成功时发射事件
|
|
66
|
-
this.loginSuccess.emit({ user: Parse.User.current(), data: data });
|
|
67
|
-
this.setActiveButton("账号密码");
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
})
|
|
71
|
-
.catch((error) => {
|
|
72
|
-
this.msg.error("注册失败,请更换手机号注册");
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
// 手机+密码登录
|
|
76
|
-
loginMobilePassword() {
|
|
77
|
-
if (!this.mobile || !this.password) {
|
|
78
|
-
this.msg.error("请输入完整手机号和密码");
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
this.authServ.loginMobilePassword(this.mobile, this.password, this.msg)
|
|
82
|
-
.then((data) => {
|
|
83
|
-
console.log("登录成功", data);
|
|
84
|
-
// 登录成功时发射事件
|
|
85
|
-
this.loginSuccess.emit({ user: Parse.User.current(), data: data });
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
close() {
|
|
89
|
-
let lock = this.authServ.isGuardLock(this.router.url);
|
|
90
|
-
this.authServ.isModalShow = lock;
|
|
91
|
-
}
|
|
92
|
-
goHome() {
|
|
93
|
-
let url = this.router.url;
|
|
94
|
-
if (url?.indexOf("yuban")) {
|
|
95
|
-
this.router.navigateByUrl("/app/home");
|
|
96
|
-
}
|
|
97
|
-
if (url.indexOf("chat") > -1) {
|
|
98
|
-
this.router.navigateByUrl("/chat/home");
|
|
99
|
-
this.authServ.isModalShow = false;
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (url.indexOf("imagine") > -1) {
|
|
103
|
-
this.router.navigateByUrl("/imagine/home");
|
|
104
|
-
this.authServ.isModalShow = false;
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
this.router.navigateByUrl("/");
|
|
108
|
-
this.authServ.isModalShow = false;
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
//添加监听Esc按键关闭弹窗
|
|
112
|
-
handleEscapeKey(event) {
|
|
113
|
-
// this.closePopup();
|
|
114
|
-
this.close();
|
|
115
|
-
}
|
|
116
|
-
setActiveButton(buttonName) {
|
|
117
|
-
this.authServ.activeButton = buttonName;
|
|
118
|
-
console.log(this.authServ.activeButton);
|
|
119
|
-
this.updateDrawCode();
|
|
120
|
-
}
|
|
121
|
-
smsAutoLogin() {
|
|
122
|
-
if (this.loginInfo.code?.length == 6) {
|
|
123
|
-
this.login();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/* 获取验证码 */
|
|
127
|
-
startCountdown() {
|
|
128
|
-
let a = /^1[3456789]\d{9}$/;
|
|
129
|
-
if (!String(this.loginInfo.mobile).match(a)) {
|
|
130
|
-
this.msg.error("请填写正确手机号");
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
let str = this.drawCode.join('');
|
|
134
|
-
if (this.authServ.enabledLocalCode) {
|
|
135
|
-
if (this.localCodeNum.toLowerCase() != str.toLowerCase()) {
|
|
136
|
-
this.msg.error("校验码不正确");
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
let host = Parse.serverURL?.split("parse")?.[0] || "https://server.fmode.cn/";
|
|
141
|
-
this.isCountingdown = true;
|
|
142
|
-
this.http
|
|
143
|
-
.post(host + "api/apig/message", {
|
|
144
|
-
company: this.authServ.company,
|
|
145
|
-
mobile: this.loginInfo.mobile,
|
|
146
|
-
})
|
|
147
|
-
.subscribe((res) => {
|
|
148
|
-
console.log(res);
|
|
149
|
-
this.msg.success('发送成功');
|
|
150
|
-
this.time();
|
|
151
|
-
this.updateDrawCode();
|
|
152
|
-
this.focusSmsCodeInput();
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
focusSmsCodeInput() {
|
|
156
|
-
this.smsCodeInput.nativeElement.focus();
|
|
157
|
-
}
|
|
158
|
-
/* 倒计时 */
|
|
159
|
-
time() {
|
|
160
|
-
this.isCountingdown = true;
|
|
161
|
-
this.buttonText = `${this.countdown}秒`;
|
|
162
|
-
let timer = setInterval(() => {
|
|
163
|
-
this.countdown--;
|
|
164
|
-
this.buttonText = `${this.countdown}秒`;
|
|
165
|
-
if (this.countdown === 0 || this.countdown < 0) {
|
|
166
|
-
clearInterval(timer);
|
|
167
|
-
this.buttonText = "重新发送";
|
|
168
|
-
this.isCountingdown = false;
|
|
169
|
-
this.countdown = 0;
|
|
170
|
-
}
|
|
171
|
-
}, 1000);
|
|
172
|
-
}
|
|
173
|
-
/* 验证码登录 */
|
|
174
|
-
async login() {
|
|
175
|
-
let a = /^1[3456789]\d{9}$/;
|
|
176
|
-
if (!String(this.loginInfo.mobile).match(a)) {
|
|
177
|
-
this.msg.error("请填写正确手机号");
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
// let str = this.drawCode.join();
|
|
181
|
-
// if (this.localCodeNum != str) {
|
|
182
|
-
// this.msg.error("校验码不正确");
|
|
183
|
-
// return;
|
|
184
|
-
// }
|
|
185
|
-
if (!this.loginInfo.code) {
|
|
186
|
-
this.msg.error("请输入短信验证码");
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
this.loginInfo.code = this.loginInfo.code?.slice(0, 6);
|
|
191
|
-
}
|
|
192
|
-
let res;
|
|
193
|
-
try {
|
|
194
|
-
res = await this.authServ.loginCode(this.loginInfo.mobile, this.loginInfo.code, this.msg);
|
|
195
|
-
}
|
|
196
|
-
catch (err) { }
|
|
197
|
-
let user = Parse.User.current();
|
|
198
|
-
if (res || user?.id) {
|
|
199
|
-
this.loginSuccess.emit({ user: user, res: res });
|
|
200
|
-
console.log(res, user?.id, "close");
|
|
201
|
-
this.close();
|
|
202
|
-
this.loginInfo = {
|
|
203
|
-
mobile: "",
|
|
204
|
-
code: "",
|
|
205
|
-
};
|
|
206
|
-
this.localCodeNum = '';
|
|
207
|
-
this.toast({ color: "success", message: "登录成功" });
|
|
208
|
-
if (this.authServ.guardType == "modal") {
|
|
209
|
-
let queryParams = new URLSearchParams(location.search);
|
|
210
|
-
queryParams.set("t", String((new Date()).getTime()));
|
|
211
|
-
// 获取去除baseHref后的pathname
|
|
212
|
-
let pathNameWithoutBaseHref = "/" + (location.origin + location.pathname).replaceAll(document.baseURI, "");
|
|
213
|
-
let url = pathNameWithoutBaseHref + `?${queryParams.toString()}`;
|
|
214
|
-
console.log(url);
|
|
215
|
-
this.router.navigateByUrl(url);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
async toast(options) {
|
|
220
|
-
options.position = options?.position || "top";
|
|
221
|
-
options.duration = options?.duration || 1500;
|
|
222
|
-
options.color = options?.color || "primary";
|
|
223
|
-
let toast = await this.toastCtrl.create(options);
|
|
224
|
-
toast.present();
|
|
225
|
-
}
|
|
226
|
-
updateDrawCode() {
|
|
227
|
-
if (!this.authServ.enabledLocalCode)
|
|
228
|
-
return;
|
|
229
|
-
let canvas_width = 100;
|
|
230
|
-
let canvas_height = 44;
|
|
231
|
-
let canv = document.getElementById("canvas");
|
|
232
|
-
if (canv)
|
|
233
|
-
this.canvasDom.nativeElement.removeChild(canv);
|
|
234
|
-
this.canvasDom.nativeElement;
|
|
235
|
-
let canvas = document.createElement("canvas");
|
|
236
|
-
canvas.width = 100;
|
|
237
|
-
canvas.height = 44;
|
|
238
|
-
canvas.className = "canvas";
|
|
239
|
-
canvas.setAttribute("id", "canvas");
|
|
240
|
-
canvas.addEventListener("click", () => {
|
|
241
|
-
this.updateDrawCode();
|
|
242
|
-
});
|
|
243
|
-
let context = canvas.getContext("2d"); //获取到canvas画图的环境,演员表演的舞台
|
|
244
|
-
canvas.width = canvas_width;
|
|
245
|
-
canvas.height = canvas_height;
|
|
246
|
-
let sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
|
|
247
|
-
let aCode = sCode.split(",");
|
|
248
|
-
let aLength = aCode.length; //获取到数组的长度
|
|
249
|
-
for (let i = 0; i <= 3; i++) {
|
|
250
|
-
let j = Math.floor(Math.random() * aLength); //获取到随机的索引值
|
|
251
|
-
let deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度
|
|
252
|
-
let txt = aCode[j]; //得到随机的一个内容
|
|
253
|
-
this.drawCode[i] = txt;
|
|
254
|
-
let x = 10 + i * 20; //文字在canvas上的x坐标
|
|
255
|
-
let y = 20 + Math.random() * 8; //文字在canvas上的y坐标
|
|
256
|
-
context.font = "bold 23px 微软雅黑";
|
|
257
|
-
context.translate(x, y);
|
|
258
|
-
context.rotate(deg);
|
|
259
|
-
context.fillStyle = this.randomColor();
|
|
260
|
-
context.fillText(txt, 0, 0);
|
|
261
|
-
context.rotate(-deg);
|
|
262
|
-
context.translate(-x, -y);
|
|
263
|
-
}
|
|
264
|
-
for (let i = 0; i <= 5; i++) {
|
|
265
|
-
//验证码上显示线条
|
|
266
|
-
context.strokeStyle = this.randomColor();
|
|
267
|
-
context.beginPath();
|
|
268
|
-
context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
|
|
269
|
-
context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
|
|
270
|
-
context.stroke();
|
|
271
|
-
}
|
|
272
|
-
for (let i = 0; i <= 30; i++) {
|
|
273
|
-
//验证码上显示小点
|
|
274
|
-
context.strokeStyle = this.randomColor();
|
|
275
|
-
context.beginPath();
|
|
276
|
-
let x = Math.random() * canvas_width;
|
|
277
|
-
let y = Math.random() * canvas_height;
|
|
278
|
-
context.moveTo(x, y);
|
|
279
|
-
context.lineTo(x + 1, y + 1);
|
|
280
|
-
context.stroke();
|
|
281
|
-
}
|
|
282
|
-
this.canvasDom.nativeElement.appendChild(canvas);
|
|
283
|
-
}
|
|
284
|
-
/* 得到随机的颜色值 */
|
|
285
|
-
randomColor() {
|
|
286
|
-
let r = Math.floor(Math.random() * 256);
|
|
287
|
-
let g = Math.floor(Math.random() * 256);
|
|
288
|
-
let b = Math.floor(Math.random() * 256);
|
|
289
|
-
return "rgb(" + r + "," + g + "," + b + ")";
|
|
290
|
-
}
|
|
291
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalUserLoginComponent, deps: [{ token: i1.AuthService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.HttpClient }, { token: i4.ToastController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
292
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ModalUserLoginComponent, isStandalone: true, selector: "fm-modal-user-login", outputs: { loginSuccess: "loginSuccess" }, host: { listeners: { "document:keydown.escape": "handleEscapeKey($event)" } }, viewQueries: [{ propertyName: "canvasDom", first: true, predicate: ["canvasDom"], descendants: true }, { propertyName: "smsCodeInput", first: true, predicate: ["smsCodeInput"], descendants: true }], ngImport: i0, template: "<!--\u767B\u5F55\u5F39\u51FA\u6846\u8BBE\u7F6E-->\r\n<!--\u80CC\u666F\u7070\u8272\u8499\u7248-->\r\n<div\r\n class=\"popup\"\r\n [style.display]=\"authServ.isModalShow ? 'block' : 'none'\"\r\n (click)=\"close()\"\r\n>\r\n <div class=\"popup-content\" [class.fullscreen]=\"authServ.modalType=='fullscreen'\" [class.sheet]=\"authServ.modalType=='sheet'\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div class=\"popup-box\">\r\n <!--\u5F39\u6846\u5185\u8BBE\u7F6Eposition:absolute,\u89C4\u8303\u6392\u7248\uFF0C\u540E\u7EED\u53EA\u9700position:relative\u589E\u51CF\u5185\u5BB9-->\r\n <div class=\"popup-box-content\">\r\n <div class=\"logo-img-login\">\r\n <img\r\n [src]=\"authServ.logoUrl\"\r\n alt=\"fmode\"\r\n />\r\n </div>\r\n\r\n <!--\u5173\u95ED\u56FE\u6807\u6309\u94AE-->\r\n <div class=\"close-icon-box\">\r\n <div class=\"iconfont icon-shanchu2\" (click)=\"close()\"></div>\r\n </div>\r\n <!--\u6309\u94AE\u5207\u6362\u767B\u5F55\u65B9\u5F0F-->\r\n <div class=\"button-box\" *ngIf=\"authServ?.loginTypeCount>1\">\r\n <div class=\"button-group\">\r\n <button *ngIf=\"authServ?.loginOptions?.userpwd\"\r\n class=\"login-select-button\"\r\n [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\"\r\n (click)=\"setActiveButton('\u8D26\u53F7\u5BC6\u7801')\"\r\n >\r\n \u8D26\u53F7\u5BC6\u7801\r\n </button>\r\n <button *ngIf=\"authServ?.loginOptions?.mobilecode\"\r\n class=\"login-select-button\"\r\n [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\"\r\n (click)=\"setActiveButton('\u77ED\u4FE1\u9A8C\u8BC1')\"\r\n >\r\n \u77ED\u4FE1\u9A8C\u8BC1\r\n </button>\r\n <button *ngIf=\"authServ?.loginOptions?.wechat\"\r\n class=\"login-select-button\"\r\n [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\"\r\n (click)=\"setActiveButton('\u5FAE\u4FE1\u626B\u7801')\"\r\n >\r\n \u5FAE\u4FE1\u626B\u7801\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!--\u624B\u673A\u9A8C\u8BC1\u7801-->\r\n <form class=\"message-form\" [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\" *ngIf=\"authServ?.loginOptions?.mobilecode\">\r\n <div class=\"login-input-box\">\r\n <div class=\"popup-input-frontnumber\">+86</div>\r\n <input\r\n class=\"popup-input-itemone\"\r\n type=\"text\"\r\n required=\"required\"\r\n [(ngModel)]=\"loginInfo.mobile\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n maxlength=\"12\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\r\n />\r\n </div>\r\n <div *ngIf=\"authServ?.enabledLocalCode\"\r\n class=\"login-input-box local-code\" #canvasDom>\r\n <input\r\n class=\"popup-input-itemtwo\"\r\n type=\"text\"\r\n required=\"required\"\r\n [(ngModel)]=\"localCodeNum\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n maxlength=\"4\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u6821\u9A8C\u7801\"\r\n />\r\n <!-- <canvas\r\n #canvas\r\n width=\"100\"\r\n height=\"44\"\r\n (click)=\"updateDrawCode()\"\r\n class=\"canvas\"\r\n ></canvas> -->\r\n </div>\r\n <div class=\"login-input-box\">\r\n <input #smsCodeInput\r\n class=\"popup-input-itemtwo\"\r\n type=\"text\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u77ED\u4FE1\u9A8C\u8BC1\u7801\"\r\n [(ngModel)]=\"loginInfo.code\"\r\n (change)=\"smsAutoLogin()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n maxlength=\"6\"\r\n />\r\n <button\r\n class=\"checknumber-button\"\r\n type=\"submit\"\r\n [value]=\"buttonText\"\r\n [disabled]=\"isCountingdown\"\r\n (click)=\"startCountdown()\"\r\n [class.active]=\"isCountingdown\"\r\n >\r\n {{buttonText}}\r\n </button>\r\n </div>\r\n\r\n <!-- \u7528\u6237\u534F\u8BAE -->\r\n <div class=\"rule-box\">\r\n <span>\u672A\u6CE8\u518C\u7684\u624B\u673A\u53F7\uFF0C\u5C06\u81EA\u52A8\u521B\u5EFA\u5E10\u53F7\u5E76\u767B\u5F55\u3002</span>\r\n </div>\r\n\r\n <div class=\"login-submit-box\">\r\n <button class=\"login-submit-button\" type=\"submit\" (click)=\"login()\">\r\n \u767B\u5F55\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <!--\u8D26\u53F7\u5BC6\u7801\u767B\u5F55-->\r\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\" *ngIf=\"authServ?.loginOptions?.userpwd\">\r\n <div class=\"login-input-box\">\r\n <input\r\n maxlength=\"12\"\r\n [(ngModel)]=\"mobile\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"text\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"password\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"password\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\r\n />\r\n </div>\r\n\r\n <!-- \u8BB0\u4F4F\u5BC6\u7801 -->\r\n <div class=\"passwprd-box\">\r\n <div class=\"remember-password-box\">\r\n <input type=\"checkbox\" id=\"remember-password\" />\r\n \u8BB0\u4F4F\u5BC6\u7801\r\n </div>\r\n\r\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\r\n <div class=\"password-forget\" (click)=\"setActiveButton('\u6CE8\u518C\u5E10\u53F7')\">\r\n \u6CE8\u518C\u5E10\u53F7\r\n </div>\r\n </div>\r\n\r\n <!-- \u7528\u6237\u534F\u8BAE -->\r\n <div class=\"rule-box\">\r\n <span>\r\n <input type=\"checkbox\" [(ngModel)]=\"isUserRuleChecked\" [ngModelOptions]=\"{ standalone: true }\" style=\"margin-right:5px\"/>\r\n <span (click)=\"isUserRuleChecked=true\">\u540C\u610F</span></span>\r\n <span (click)=\"isUserRuleChecked=true\">\u300A\u7528\u6237\u534F\u8BAE\u53CA\u9690\u79C1\u6761\u6B3E\u300B</span>\r\n </div>\r\n\r\n\r\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\r\n <!-- <div class=\"password-forget\">\u5FD8\u8BB0\u5BC6\u7801?</div>\r\n </div> -->\r\n\r\n <div class=\"login-submit-box\">\r\n <button\r\n class=\"login-submit-button\"\r\n type=\"submit\"\r\n (click)=\"loginMobilePassword()\"\r\n >\r\n \u767B\u5F55\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <!-- \u5E10\u53F7\u5BC6\u7801\u6CE8\u518C -->\r\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u6CE8\u518C\u5E10\u53F7'\">\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"mobile\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"text\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"password\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"password\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"password2\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"password\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u518D\u6B21\u8F93\u5165\u5BC6\u7801\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-submit-box\">\r\n <button\r\n class=\"login-submit-button\"\r\n type=\"submit\"\r\n (click)=\"signMobilePassword()\"\r\n >\r\n \u6CE8\u518C\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <!--\u5FAE\u4FE1\u626B\u7801\u767B\u9646-->\r\n <form class=\"wechat-form\" [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\" *ngIf=\"authServ?.loginOptions?.wechat\">\r\n <div class=\"wechat-login-box\">\r\n <img\r\n class=\"login-erweima-img\"\r\n [src]=\"authServ.wechatUrl\"\r\n alt=\"\u5FAE\u4FE1\u626B\u7801\u767B\u9646\u4E8C\u7EF4\u7801\"\r\n />\r\n </div>\r\n <div class=\"wechat-explain\">\u4F7F\u7528\u5FAE\u4FE1\u626B\u4E00\u626B,\u626B\u7801\u767B\u5F55 \"\u98DE\u7801AI\"</div>\r\n </form>\r\n\r\n <!--\u8FD4\u56DE\u9996\u9875-->\r\n <div class=\"back-home-box\" *ngIf=\"authServ.showBackHome\">\r\n <button class=\"back-homepage-button\" (click)=\"goHome()\">\r\n \u8FD4\u56DE\u9996\u9875\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{--fmode-background-primary: #FFF;--login-color-primary: var(--fmode-color-primary,#0199f9);--login-bgcolor-primary: var(--fmode-login-bgcolor-primary,dodgerblue);--login-bgcolor-secondary: var(--fmode-login-bgcolor-secondary,#00dbde);--login-bgcolor-third: var(--fmode-login-bgcolor-third,#f902ff)}:host-context(body.dark) .popup{--login-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:1000}@media screen and (max-width: 800px){.popup-content.fullscreen .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content.fullscreen .popup-box .popup-box-content{padding-top:35%;border-radius:50px!important}.popup{background:#00000080}.popup-content.sheet{background:transparent!important}.popup-content.sheet .popup-box{position:fixed!important;left:0!important;top:calc(100vh - 480px);height:530px;width:100vw!important;border-radius:50px!important}.popup-content.sheet .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:var(--login-bgcolor-primary);overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;margin:auto;padding:10px 10%;border-radius:10px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s;padding:1rem 0}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--login-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-third),var(--login-bgcolor-third));transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-secondary),var(--login-bgcolor-secondary));transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--login-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--login-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .rule-box span,.popup-content .rule-box ion-checkbox{font-size:15px;color:var(--login-color-primary)}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;x:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--login-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
293
|
-
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalUserLoginComponent, decorators: [{
|
|
295
|
-
type: Component,
|
|
296
|
-
args: [{ standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule,
|
|
297
|
-
IonCheckbox
|
|
298
|
-
], selector: "fm-modal-user-login", template: "<!--\u767B\u5F55\u5F39\u51FA\u6846\u8BBE\u7F6E-->\r\n<!--\u80CC\u666F\u7070\u8272\u8499\u7248-->\r\n<div\r\n class=\"popup\"\r\n [style.display]=\"authServ.isModalShow ? 'block' : 'none'\"\r\n (click)=\"close()\"\r\n>\r\n <div class=\"popup-content\" [class.fullscreen]=\"authServ.modalType=='fullscreen'\" [class.sheet]=\"authServ.modalType=='sheet'\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div class=\"popup-box\">\r\n <!--\u5F39\u6846\u5185\u8BBE\u7F6Eposition:absolute,\u89C4\u8303\u6392\u7248\uFF0C\u540E\u7EED\u53EA\u9700position:relative\u589E\u51CF\u5185\u5BB9-->\r\n <div class=\"popup-box-content\">\r\n <div class=\"logo-img-login\">\r\n <img\r\n [src]=\"authServ.logoUrl\"\r\n alt=\"fmode\"\r\n />\r\n </div>\r\n\r\n <!--\u5173\u95ED\u56FE\u6807\u6309\u94AE-->\r\n <div class=\"close-icon-box\">\r\n <div class=\"iconfont icon-shanchu2\" (click)=\"close()\"></div>\r\n </div>\r\n <!--\u6309\u94AE\u5207\u6362\u767B\u5F55\u65B9\u5F0F-->\r\n <div class=\"button-box\" *ngIf=\"authServ?.loginTypeCount>1\">\r\n <div class=\"button-group\">\r\n <button *ngIf=\"authServ?.loginOptions?.userpwd\"\r\n class=\"login-select-button\"\r\n [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\"\r\n (click)=\"setActiveButton('\u8D26\u53F7\u5BC6\u7801')\"\r\n >\r\n \u8D26\u53F7\u5BC6\u7801\r\n </button>\r\n <button *ngIf=\"authServ?.loginOptions?.mobilecode\"\r\n class=\"login-select-button\"\r\n [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\"\r\n (click)=\"setActiveButton('\u77ED\u4FE1\u9A8C\u8BC1')\"\r\n >\r\n \u77ED\u4FE1\u9A8C\u8BC1\r\n </button>\r\n <button *ngIf=\"authServ?.loginOptions?.wechat\"\r\n class=\"login-select-button\"\r\n [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\"\r\n (click)=\"setActiveButton('\u5FAE\u4FE1\u626B\u7801')\"\r\n >\r\n \u5FAE\u4FE1\u626B\u7801\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!--\u624B\u673A\u9A8C\u8BC1\u7801-->\r\n <form class=\"message-form\" [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\" *ngIf=\"authServ?.loginOptions?.mobilecode\">\r\n <div class=\"login-input-box\">\r\n <div class=\"popup-input-frontnumber\">+86</div>\r\n <input\r\n class=\"popup-input-itemone\"\r\n type=\"text\"\r\n required=\"required\"\r\n [(ngModel)]=\"loginInfo.mobile\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n maxlength=\"12\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\r\n />\r\n </div>\r\n <div *ngIf=\"authServ?.enabledLocalCode\"\r\n class=\"login-input-box local-code\" #canvasDom>\r\n <input\r\n class=\"popup-input-itemtwo\"\r\n type=\"text\"\r\n required=\"required\"\r\n [(ngModel)]=\"localCodeNum\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n maxlength=\"4\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u6821\u9A8C\u7801\"\r\n />\r\n <!-- <canvas\r\n #canvas\r\n width=\"100\"\r\n height=\"44\"\r\n (click)=\"updateDrawCode()\"\r\n class=\"canvas\"\r\n ></canvas> -->\r\n </div>\r\n <div class=\"login-input-box\">\r\n <input #smsCodeInput\r\n class=\"popup-input-itemtwo\"\r\n type=\"text\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u77ED\u4FE1\u9A8C\u8BC1\u7801\"\r\n [(ngModel)]=\"loginInfo.code\"\r\n (change)=\"smsAutoLogin()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n maxlength=\"6\"\r\n />\r\n <button\r\n class=\"checknumber-button\"\r\n type=\"submit\"\r\n [value]=\"buttonText\"\r\n [disabled]=\"isCountingdown\"\r\n (click)=\"startCountdown()\"\r\n [class.active]=\"isCountingdown\"\r\n >\r\n {{buttonText}}\r\n </button>\r\n </div>\r\n\r\n <!-- \u7528\u6237\u534F\u8BAE -->\r\n <div class=\"rule-box\">\r\n <span>\u672A\u6CE8\u518C\u7684\u624B\u673A\u53F7\uFF0C\u5C06\u81EA\u52A8\u521B\u5EFA\u5E10\u53F7\u5E76\u767B\u5F55\u3002</span>\r\n </div>\r\n\r\n <div class=\"login-submit-box\">\r\n <button class=\"login-submit-button\" type=\"submit\" (click)=\"login()\">\r\n \u767B\u5F55\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <!--\u8D26\u53F7\u5BC6\u7801\u767B\u5F55-->\r\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\" *ngIf=\"authServ?.loginOptions?.userpwd\">\r\n <div class=\"login-input-box\">\r\n <input\r\n maxlength=\"12\"\r\n [(ngModel)]=\"mobile\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"text\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"password\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"password\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\r\n />\r\n </div>\r\n\r\n <!-- \u8BB0\u4F4F\u5BC6\u7801 -->\r\n <div class=\"passwprd-box\">\r\n <div class=\"remember-password-box\">\r\n <input type=\"checkbox\" id=\"remember-password\" />\r\n \u8BB0\u4F4F\u5BC6\u7801\r\n </div>\r\n\r\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\r\n <div class=\"password-forget\" (click)=\"setActiveButton('\u6CE8\u518C\u5E10\u53F7')\">\r\n \u6CE8\u518C\u5E10\u53F7\r\n </div>\r\n </div>\r\n\r\n <!-- \u7528\u6237\u534F\u8BAE -->\r\n <div class=\"rule-box\">\r\n <span>\r\n <input type=\"checkbox\" [(ngModel)]=\"isUserRuleChecked\" [ngModelOptions]=\"{ standalone: true }\" style=\"margin-right:5px\"/>\r\n <span (click)=\"isUserRuleChecked=true\">\u540C\u610F</span></span>\r\n <span (click)=\"isUserRuleChecked=true\">\u300A\u7528\u6237\u534F\u8BAE\u53CA\u9690\u79C1\u6761\u6B3E\u300B</span>\r\n </div>\r\n\r\n\r\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\r\n <!-- <div class=\"password-forget\">\u5FD8\u8BB0\u5BC6\u7801?</div>\r\n </div> -->\r\n\r\n <div class=\"login-submit-box\">\r\n <button\r\n class=\"login-submit-button\"\r\n type=\"submit\"\r\n (click)=\"loginMobilePassword()\"\r\n >\r\n \u767B\u5F55\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <!-- \u5E10\u53F7\u5BC6\u7801\u6CE8\u518C -->\r\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u6CE8\u518C\u5E10\u53F7'\">\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"mobile\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"text\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"password\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"password\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-input-box\">\r\n <input\r\n [(ngModel)]=\"password2\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"popup-input-itemnomal\"\r\n type=\"password\"\r\n required=\"required\"\r\n placeholder=\"\u8BF7\u518D\u6B21\u8F93\u5165\u5BC6\u7801\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-submit-box\">\r\n <button\r\n class=\"login-submit-button\"\r\n type=\"submit\"\r\n (click)=\"signMobilePassword()\"\r\n >\r\n \u6CE8\u518C\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <!--\u5FAE\u4FE1\u626B\u7801\u767B\u9646-->\r\n <form class=\"wechat-form\" [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\" *ngIf=\"authServ?.loginOptions?.wechat\">\r\n <div class=\"wechat-login-box\">\r\n <img\r\n class=\"login-erweima-img\"\r\n [src]=\"authServ.wechatUrl\"\r\n alt=\"\u5FAE\u4FE1\u626B\u7801\u767B\u9646\u4E8C\u7EF4\u7801\"\r\n />\r\n </div>\r\n <div class=\"wechat-explain\">\u4F7F\u7528\u5FAE\u4FE1\u626B\u4E00\u626B,\u626B\u7801\u767B\u5F55 \"\u98DE\u7801AI\"</div>\r\n </form>\r\n\r\n <!--\u8FD4\u56DE\u9996\u9875-->\r\n <div class=\"back-home-box\" *ngIf=\"authServ.showBackHome\">\r\n <button class=\"back-homepage-button\" (click)=\"goHome()\">\r\n \u8FD4\u56DE\u9996\u9875\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{--fmode-background-primary: #FFF;--login-color-primary: var(--fmode-color-primary,#0199f9);--login-bgcolor-primary: var(--fmode-login-bgcolor-primary,dodgerblue);--login-bgcolor-secondary: var(--fmode-login-bgcolor-secondary,#00dbde);--login-bgcolor-third: var(--fmode-login-bgcolor-third,#f902ff)}:host-context(body.dark) .popup{--login-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:1000}@media screen and (max-width: 800px){.popup-content.fullscreen .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content.fullscreen .popup-box .popup-box-content{padding-top:35%;border-radius:50px!important}.popup{background:#00000080}.popup-content.sheet{background:transparent!important}.popup-content.sheet .popup-box{position:fixed!important;left:0!important;top:calc(100vh - 480px);height:530px;width:100vw!important;border-radius:50px!important}.popup-content.sheet .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:var(--login-bgcolor-primary);overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;margin:auto;padding:10px 10%;border-radius:10px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s;padding:1rem 0}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--login-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-third),var(--login-bgcolor-third));transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-secondary),var(--login-bgcolor-secondary));transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--login-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--login-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .rule-box span,.popup-content .rule-box ion-checkbox{font-size:15px;color:var(--login-color-primary)}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;x:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--login-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n"] }]
|
|
299
|
-
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.HttpClient }, { type: i4.ToastController }], propDecorators: { canvasDom: [{
|
|
300
|
-
type: ViewChild,
|
|
301
|
-
args: ["canvasDom"]
|
|
302
|
-
}], smsCodeInput: [{
|
|
303
|
-
type: ViewChild,
|
|
304
|
-
args: ["smsCodeInput"]
|
|
305
|
-
}], loginSuccess: [{
|
|
306
|
-
type: Output
|
|
307
|
-
}], handleEscapeKey: [{
|
|
308
|
-
type: HostListener,
|
|
309
|
-
args: ["document:keydown.escape", ["$event"]]
|
|
310
|
-
}] } });
|
|
311
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdXNlci1sb2dpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3VzZXIvbW9kYWwtdXNlci1sb2dpbi9tb2RhbC11c2VyLWxvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdXNlci9tb2RhbC11c2VyLWxvZ2luL21vZGFsLXVzZXItbG9naW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUdaLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQVd6RSxNQUFNLE9BQU8sdUJBQXVCO0lBc0JsQyxZQUNTLFFBQXFCLEVBQ3BCLE1BQWMsRUFDZCxLQUFvQixFQUNwQixJQUFpQixFQUNqQixTQUF5QjtRQUoxQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQ3BCLFNBQUksR0FBSixJ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R0FBRyxHQUFHLENBQUM7SUFDOUMsQ0FBQzsrR0F6VFUsdUJBQXVCO21HQUF2Qix1QkFBdUIsZ1pDM0JwQywyaFVBd1BBLHVrU0RwT1csWUFBWSxrSUFBQyxXQUFXLHdsREFBQyxtQkFBbUI7OzRGQU8xQyx1QkFBdUI7a0JBVG5DLFNBQVM7aUNBQ0csSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFDLFdBQVcsRUFBQyxtQkFBbUI7d0JBQ3JELFdBQVc7cUJBQ1YsWUFDUyxxQkFBcUI7eUxBWVAsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQU1LLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFNZixZQUFZO3NCQUFyQixNQUFNO2dCQXVGUCxlQUFlO3NCQURkLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vbG9naW4vYXV0aC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IFBhcnNlIGZyb20gXCJwYXJzZVwiO1xyXG5pbXBvcnQgeyBJb25DaGVja2JveCwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICBpbXBvcnRzOltDb21tb25Nb2R1bGUsRm9ybXNNb2R1bGUsUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBJb25DaGVja2JveFxyXG4gIF0sXHJcbiAgc2VsZWN0b3I6IFwiZm0tbW9kYWwtdXNlci1sb2dpblwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vbW9kYWwtdXNlci1sb2dpbi5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9tb2RhbC11c2VyLWxvZ2luLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kYWxVc2VyTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIG1vYmlsZTogc3RyaW5nO1xyXG4gIHBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmQyOiBzdHJpbmc7XHJcbiAgLy8g55So5oi35Y2P6K6uXHJcbiAgaXNVc2VyUnVsZUNoZWNrZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qIOefreS/oemqjOivgeeggeeZu+W9leebuOWFs+WPguaVsCAqL1xyXG4gIC8vIEBWaWV3Q2hpbGQoXCJjYW52YXNcIikgY2FudmFzOiBFbGVtZW50UmVmOyAvL+acrOWcsOagoemqjOeggee7mOeUu1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNEb21cIikgY2FudmFzRG9tOiBFbGVtZW50UmVmOyAvL+acrOWcsOagoemqjOeggee7mOeUu1xyXG4gIGxvZ2luSW5mbzogYW55ID0ge1xyXG4gICAgbW9iaWxlOiBcIlwiLFxyXG4gICAgY29kZTogXCJcIixcclxuICB9O1xyXG5cclxuICBAVmlld0NoaWxkKFwic21zQ29kZUlucHV0XCIpIHNtc0NvZGVJbnB1dDpFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIC8vIGVuYWJsZWRMb2NhbENvZGU6Ym9vbGVhbiA9IGZhbHNlOyAvLyDlvIDlkK/pqozor4HnoIFcclxuICBsb2NhbENvZGVOdW06IHN0cmluZyA9ICcnOyAvL+i+k+WFpeagoemqjOeggVxyXG4gXHJcbiAgbXNnID0gdGhpcy5hdXRoU2Vydi5tZXNzYWdlXHJcblxyXG4gIEBPdXRwdXQoKSBsb2dpblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgYXV0aFNlcnY6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6QWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGh0dHAgOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB0b2FzdEN0cmw6VG9hc3RDb250cm9sbGVyXHJcbiAgKSB7XHJcbiAgICAvLyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJkYXJrXCIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy51cGRhdGVEcmF3Q29kZSgpXHJcbiAgICB0aGlzLnNldEFjdGl2ZUJ1dHRvbih0aGlzLmF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbilcclxuICB9XHJcbiAgLy8g5omL5py6K+WvhueggeazqOWGjFxyXG4gIHNpZ25Nb2JpbGVQYXNzd29yZCgpIHtcclxuICAgIGlmICghdGhpcy5tb2JpbGUgfHwgIXRoaXMucGFzc3dvcmQpIHtcclxuICAgICAgdGhpcy5tc2cuZXJyb3IoXCLor7fovpPlhaXlrozmlbTmiYvmnLrlj7flkozlr4bnoIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBhc3N3b3JkICE9IHRoaXMucGFzc3dvcmQyKSB7XHJcbiAgICAgIHRoaXMubXNnLmVycm9yKFwi5Lik5qyh6L6T5YWl5a+G56CB5LiN5ZCM77yM6K+35qOA5p+lXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRoU2VydlxyXG4gICAgICAuc2lnbk1vYmlsZVBhc3N3b3JkKHRoaXMubW9iaWxlLCB0aGlzLnBhc3N3b3JkKVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5pZCkge1xyXG4gICAgICAgICAgLy8g5rOo5YaM5oiQ5Yqf77yM6Ieq5Yqo55m75b2VXHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2LmxvZ2luTW9iaWxlUGFzc3dvcmQodGhpcy5tb2JpbGUsIHRoaXMucGFzc3dvcmQsIHRoaXMubXNnKVxyXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIOeZu+W9leaIkOWKn+aXtuWPkeWwhOS6i+S7tlxyXG4gICAgICAgICAgICAgIHRoaXMubG9naW5TdWNjZXNzLmVtaXQoeyB1c2VyOiBQYXJzZS5Vc2VyLmN1cnJlbnQoKSwgZGF0YTogZGF0YSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUJ1dHRvbihcIui0puWPt+WvhueggVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tc2cuZXJyb3IoXCLms6jlhozlpLHotKXvvIzor7fmm7TmjaLmiYvmnLrlj7fms6jlhoxcIik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvLyDmiYvmnLor5a+G56CB55m75b2VXHJcbiAgbG9naW5Nb2JpbGVQYXNzd29yZCgpIHtcclxuICAgIGlmICghdGhpcy5tb2JpbGUgfHwgIXRoaXMucGFzc3dvcmQpIHtcclxuICAgICAgdGhpcy5tc2cuZXJyb3IoXCLor7fovpPlhaXlrozmlbTmiYvmnLrlj7flkozlr4bnoIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYXV0aFNlcnYubG9naW5Nb2JpbGVQYXNzd29yZCh0aGlzLm1vYmlsZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5tc2cpXHJcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLnmbvlvZXmiJDlip9cIiwgZGF0YSk7XHJcbiAgICAgICAgLy8g55m75b2V5oiQ5Yqf5pe25Y+R5bCE5LqL5Lu2XHJcbiAgICAgICAgdGhpcy5sb2dpblN1Y2Nlc3MuZW1pdCh7IHVzZXI6IFBhcnNlLlVzZXIuY3VycmVudCgpLCBkYXRhOiBkYXRhIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgbGV0IGxvY2sgPSB0aGlzLmF1dGhTZXJ2LmlzR3VhcmRMb2NrKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2LmlzTW9kYWxTaG93ID0gbG9jaztcclxuICB9XHJcbiAgZ29Ib21lKCkge1xyXG4gICAgbGV0IHVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIGlmKHVybD8uaW5kZXhPZihcInl1YmFuXCIpKXtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9hcHAvaG9tZVwiKTtcclxuICAgIH1cclxuICAgIGlmICh1cmwuaW5kZXhPZihcImNoYXRcIikgPiAtMSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiL2NoYXQvaG9tZVwiKTtcclxuICAgICAgdGhpcy5hdXRoU2Vydi5pc01vZGFsU2hvdyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodXJsLmluZGV4T2YoXCJpbWFnaW5lXCIpID4gLTEpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9pbWFnaW5lL2hvbWVcIik7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnYuaXNNb2RhbFNob3cgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9cIik7XHJcbiAgICB0aGlzLmF1dGhTZXJ2LmlzTW9kYWxTaG93ID0gZmFsc2U7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIC8v5re75Yqg55uR5ZCsRXNj5oyJ6ZSu5YWz6Zet5by556qXXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmtleWRvd24uZXNjYXBlXCIsIFtcIiRldmVudFwiXSlcclxuICBoYW5kbGVFc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIC8vIHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiBcclxuICBzZXRBY3RpdmVCdXR0b24oYnV0dG9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9IGJ1dHRvbk5hbWU7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbik7XHJcbiAgICB0aGlzLnVwZGF0ZURyYXdDb2RlKCk7XHJcbiAgfVxyXG5cclxuICAvL+WPkemAgemqjOivgeeggeWAkuiuoeaXtlxyXG4gIGNvdW50ZG93biA9IDYwO1xyXG4gIGJ1dHRvblRleHQgPSBcIuiOt+WPlumqjOivgeeggVwiO1xyXG4gIC8v5re75Yqg5YCS6K6h5pe25byA5aeL5ZKM57uT5p2f55qE5Yik5patXHJcbiAgaXNDb3VudGluZ2Rvd24gPSBmYWxzZTtcclxuICBzbXNBdXRvTG9naW4oKXtcclxuICAgIGlmKHRoaXMubG9naW5JbmZvLmNvZGU/Lmxlbmd0aD09Nil7XHJcbiAgICAgIHRoaXMubG9naW4oKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyog6I635Y+W6aqM6K+B56CBICovXHJcbiAgc3RhcnRDb3VudGRvd24oKSB7XHJcbiAgICBsZXQgYSA9IC9eMVszNDU2Nzg5XVxcZHs5fSQvO1xyXG4gICAgaWYgKCFTdHJpbmcodGhpcy5sb2dpbkluZm8ubW9iaWxlKS5tYXRjaChhKSkge1xyXG4gICAgICB0aGlzLm1zZy5lcnJvcihcIuivt+Whq+WGmeato+ehruaJi+acuuWPt1wiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHN0ciA9IHRoaXMuZHJhd0NvZGUuam9pbignJyk7XHJcbiAgICBpZih0aGlzLmF1dGhTZXJ2LmVuYWJsZWRMb2NhbENvZGUpe1xyXG4gICAgICBpZiAodGhpcy5sb2NhbENvZGVOdW0udG9Mb3dlckNhc2UoKSAhPSBzdHIudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgIHRoaXMubXNnLmVycm9yKFwi5qCh6aqM56CB5LiN5q2j56GuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGhvc3QgPSAoUGFyc2UgYXMgYW55KS5zZXJ2ZXJVUkw/LnNwbGl0KFwicGFyc2VcIik/LlswXSB8fCBcImh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL1wiXHJcbiAgICBcclxuICAgIHRoaXMuaXNDb3VudGluZ2Rvd24gPSB0cnVlO1xyXG4gICAgdGhpcy5odHRwXHJcbiAgICAucG9zdChob3N0K1wiYXBpL2FwaWcvbWVzc2FnZVwiLCB7XHJcbiAgICAgIGNvbXBhbnk6IHRoaXMuYXV0aFNlcnYuY29tcGFueSxcclxuICAgICAgbW9iaWxlOiB0aGlzLmxvZ2luSW5mby5tb2JpbGUsXHJcbiAgICB9KVxyXG4gICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgdGhpcy5tc2cuc3VjY2Vzcygn5Y+R6YCB5oiQ5YqfJylcclxuICAgICAgdGhpcy50aW1lKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlRHJhd0NvZGUoKTtcclxuICAgICAgdGhpcy5mb2N1c1Ntc0NvZGVJbnB1dCgpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgZm9jdXNTbXNDb2RlSW5wdXQoKXtcclxuICAgIHRoaXMuc21zQ29kZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcbiAgLyog5YCS6K6h5pe2ICovXHJcbiAgdGltZSgpIHtcclxuICAgIHRoaXMuaXNDb3VudGluZ2Rvd24gPSB0cnVlO1xyXG4gICAgdGhpcy5idXR0b25UZXh0ID0gYCR7dGhpcy5jb3VudGRvd25956eSYDtcclxuICAgIGxldCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy5jb3VudGRvd24tLTtcclxuICAgICAgdGhpcy5idXR0b25UZXh0ID0gYCR7dGhpcy5jb3VudGRvd25956eSYDtcclxuICAgICAgaWYgKHRoaXMuY291bnRkb3duID09PSAwIHx8IHRoaXMuY291bnRkb3duIDwgMCkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IFwi6YeN5paw5Y+R6YCBXCI7XHJcbiAgICAgICAgdGhpcy5pc0NvdW50aW5nZG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY291bnRkb3duID0gMDtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICAvKiDpqozor4HnoIHnmbvlvZUgKi9cclxuICBhc3luYyBsb2dpbigpIHtcclxuICAgIGxldCBhID0gL14xWzM0NTY3ODldXFxkezl9JC87XHJcbiAgICBpZiAoIVN0cmluZyh0aGlzLmxvZ2luSW5mby5tb2JpbGUpLm1hdGNoKGEpKSB7XHJcbiAgICAgIHRoaXMubXNnLmVycm9yKFwi6K+35aGr5YaZ5q2j56Gu5omL5py65Y+3XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBsZXQgc3RyID0gdGhpcy5kcmF3Q29kZS5qb2luKCk7XHJcbiAgICAvLyBpZiAodGhpcy5sb2NhbENvZGVOdW0gIT0gc3RyKSB7XHJcbiAgICAvLyAgIHRoaXMubXNnLmVycm9yKFwi5qCh6aqM56CB5LiN5q2j56GuXCIpO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIXRoaXMubG9naW5JbmZvLmNvZGUpIHtcclxuICAgICAgdGhpcy5tc2cuZXJyb3IoXCLor7fovpPlhaXnn63kv6Hpqozor4HnoIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmxvZ2luSW5mby5jb2RlID0gdGhpcy5sb2dpbkluZm8uY29kZT8uc2xpY2UoMCw2KVxyXG4gICAgfVxyXG4gICAgbGV0IHJlc1xyXG4gICAgdHJ5e1xyXG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmF1dGhTZXJ2LmxvZ2luQ29kZShcclxuICAgICAgICB0aGlzLmxvZ2luSW5mby5tb2JpbGUsXHJcbiAgICAgICAgdGhpcy5sb2dpbkluZm8uY29kZSxcclxuICAgICAgICB0aGlzLm1zZ1xyXG4gICAgICApXHJcblxyXG4gICAgfWNhdGNoKGVycil7fVxyXG4gICAgXHJcbiAgICBcclxuICAgIGxldCB1c2VyID0gUGFyc2UuVXNlci5jdXJyZW50KCk7XHJcbiAgICBpZihyZXMgfHwgdXNlcj8uaWQpe1xyXG4gICAgICB0aGlzLmxvZ2luU3VjY2Vzcy5lbWl0KHsgdXNlcjogdXNlciwgcmVzOiByZXMgfSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcyx1c2VyPy5pZCxcImNsb3NlXCIpXHJcbiAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICB0aGlzLmxvZ2luSW5mbyA9IHtcclxuICAgICAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICAgICAgY29kZTogXCJcIixcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5sb2NhbENvZGVOdW0gPSAnJ1xyXG4gICAgICB0aGlzLnRvYXN0KHtjb2xvcjpcInN1Y2Nlc3NcIixtZXNzYWdlOlwi55m75b2V5oiQ5YqfXCJ9KTtcclxuICAgICAgaWYodGhpcy5hdXRoU2Vydi5ndWFyZFR5cGU9PVwibW9kYWxcIil7XHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0gIG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKVxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldChcInRcIixTdHJpbmcoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSkpO1xyXG5cclxuICAgICAgICAvLyDojrflj5bljrvpmaRiYXNlSHJlZuWQjueahHBhdGhuYW1lXHJcbiAgICAgICAgbGV0IHBhdGhOYW1lV2l0aG91dEJhc2VIcmVmID0gXCIvXCIrKGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lKS5yZXBsYWNlQWxsKGRvY3VtZW50LmJhc2VVUkksXCJcIilcclxuXHJcbiAgICAgICAgbGV0IHVybCA9IHBhdGhOYW1lV2l0aG91dEJhc2VIcmVmK2A/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWBcclxuICAgICAgICBjb25zb2xlLmxvZyh1cmwpXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGFzeW5jIHRvYXN0KG9wdGlvbnM6YW55KXtcclxuICAgIG9wdGlvbnMucG9zaXRpb24gPSBvcHRpb25zPy5wb3NpdGlvbiB8fCBcInRvcFwiXHJcbiAgICBvcHRpb25zLmR1cmF0aW9uID0gb3B0aW9ucz8uZHVyYXRpb24gfHwgMTUwMFxyXG4gICAgb3B0aW9ucy5jb2xvciA9IG9wdGlvbnM/LmNvbG9yIHx8IFwicHJpbWFyeVwiXHJcbiAgICBsZXQgdG9hc3QgPSBhd2FpdCB0aGlzLnRvYXN0Q3RybC5jcmVhdGUob3B0aW9ucylcclxuICAgIHRvYXN0LnByZXNlbnQoKVxyXG4gIH1cclxuXHJcbiAgZHJhd0NvZGU6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICB1cGRhdGVEcmF3Q29kZSgpIHtcclxuICAgIGlmKCF0aGlzLmF1dGhTZXJ2LmVuYWJsZWRMb2NhbENvZGUpIHJldHVybjtcclxuICAgIGxldCBjYW52YXNfd2lkdGggPSAxMDA7XHJcbiAgICBsZXQgY2FudmFzX2hlaWdodCA9IDQ0O1xyXG4gICAgbGV0IGNhbnYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNhbnZhc1wiKTtcclxuICAgIGlmIChjYW52KSB0aGlzLmNhbnZhc0RvbS5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKGNhbnYpO1xyXG4gICAgdGhpcy5jYW52YXNEb20ubmF0aXZlRWxlbWVudDtcclxuICAgIGxldCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG4gICAgY2FudmFzLndpZHRoID0gMTAwO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IDQ0O1xyXG4gICAgY2FudmFzLmNsYXNzTmFtZSA9IFwiY2FudmFzXCI7XHJcbiAgICBjYW52YXMuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJjYW52YXNcIik7XHJcbiAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVEcmF3Q29kZSgpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7IC8v6I635Y+W5YiwY2FudmFz55S75Zu+55qE546v5aKD77yM5ryU5ZGY6KGo5ryU55qE6Iie5Y+wXHJcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXNfd2lkdGg7XHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzX2hlaWdodDtcclxuICAgIGxldCBzQ29kZSA9XHJcbiAgICAgIFwiQSxCLEMsRSxGLEcsSCxKLEssTCxNLE4sUCxRLFIsUyxULFcsWCxZLFosMSwyLDMsNCw1LDYsNyw4LDksMCxxLHcsZSxyLHQseSx1LGksbyxwLGEscyxkLGYsZyxoLGosayxsLHoseCxjLHYsYixuLG1cIjtcclxuICAgIGxldCBhQ29kZSA9IHNDb2RlLnNwbGl0KFwiLFwiKTtcclxuICAgIGxldCBhTGVuZ3RoID0gYUNvZGUubGVuZ3RoOyAvL+iOt+WPluWIsOaVsOe7hOeahOmVv+W6plxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XHJcbiAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYUxlbmd0aCk7IC8v6I635Y+W5Yiw6ZqP5py655qE57Si5byV5YC8XHJcbiAgICAgIGxldCBkZWcgPSAoTWF0aC5yYW5kb20oKSAqIDMwICogTWF0aC5QSSkgLyAxODA7IC8v5Lqn55SfMH4zMOS5i+mXtOeahOmaj+acuuW8p+W6plxyXG4gICAgICBsZXQgdHh0ID0gYUNvZGVbal07IC8v5b6X5Yiw6ZqP5py655qE5LiA5Liq5YaF5a65XHJcbiAgICAgIHRoaXMuZHJhd0NvZGVbaV0gPSB0eHQ7XHJcbiAgICAgIGxldCB4ID0gMTAgKyBpICogMjA7IC8v5paH5a2X5ZyoY2FudmFz5LiK55qEeOWdkOagh1xyXG4gICAgICBsZXQgeSA9IDIwICsgTWF0aC5yYW5kb20oKSAqIDg7IC8v5paH5a2X5ZyoY2FudmFz5LiK55qEeeWdkOagh1xyXG4gICAgICBjb250ZXh0LmZvbnQgPSBcImJvbGQgMjNweCDlvq7ova/pm4Xpu5FcIjtcclxuXHJcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpO1xyXG4gICAgICBjb250ZXh0LnJvdGF0ZShkZWcpO1xyXG5cclxuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKCk7XHJcbiAgICAgIGNvbnRleHQuZmlsbFRleHQodHh0LCAwLCAwKTtcclxuXHJcbiAgICAgIGNvbnRleHQucm90YXRlKC1kZWcpO1xyXG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSgteCwgLXkpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gNTsgaSsrKSB7XHJcbiAgICAgIC8v6aqM6K+B56CB5LiK5pi+56S657q/5p2hXHJcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKCk7XHJcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XHJcbiAgICAgIGNvbnRleHQubW92ZVRvKFxyXG4gICAgICAgIE1hdGgucmFuZG9tKCkgKiBjYW52YXNfd2lkdGgsXHJcbiAgICAgICAgTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgY29udGV4dC5saW5lVG8oXHJcbiAgICAgICAgTWF0aC5yYW5kb20oKSAqIGNhbnZhc193aWR0aCxcclxuICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX2hlaWdodFxyXG4gICAgICApO1xyXG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzA7IGkrKykge1xyXG4gICAgICAvL+mqjOivgeeggeS4iuaYvuekuuWwj+eCuVxyXG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5yYW5kb21Db2xvcigpO1xyXG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgICBsZXQgeCA9IE1hdGgucmFuZG9tKCkgKiBjYW52YXNfd2lkdGg7XHJcbiAgICAgIGxldCB5ID0gTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHQ7XHJcbiAgICAgIGNvbnRleHQubW92ZVRvKHgsIHkpO1xyXG4gICAgICBjb250ZXh0LmxpbmVUbyh4ICsgMSwgeSArIDEpO1xyXG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYW52YXNEb20ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG4gIH1cclxuICAvKiDlvpfliLDpmo/mnLrnmoTpopzoibLlgLwgKi9cclxuICByYW5kb21Db2xvcigpIHtcclxuICAgIGxldCByID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU2KTtcclxuICAgIGxldCBnID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU2KTtcclxuICAgIGxldCBiID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU2KTtcclxuICAgIHJldHVybiBcInJnYihcIiArIHIgKyBcIixcIiArIGcgKyBcIixcIiArIGIgKyBcIilcIjtcclxuICB9XHJcbn1cclxuIiwiPCEtLeeZu+W9leW8ueWHuuahhuiuvue9ri0tPlxyXG48IS0t6IOM5pmv54Gw6Imy6JKZ54mILS0+XHJcbjxkaXZcclxuICBjbGFzcz1cInBvcHVwXCJcclxuICBbc3R5bGUuZGlzcGxheV09XCJhdXRoU2Vydi5pc01vZGFsU2hvdyA/ICdibG9jaycgOiAnbm9uZSdcIlxyXG4gIChjbGljayk9XCJjbG9zZSgpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCIgIFtjbGFzcy5mdWxsc2NyZWVuXT1cImF1dGhTZXJ2Lm1vZGFsVHlwZT09J2Z1bGxzY3JlZW4nXCIgW2NsYXNzLnNoZWV0XT1cImF1dGhTZXJ2Lm1vZGFsVHlwZT09J3NoZWV0J1wiXHJcbiAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ib3hcIj5cclxuICAgICAgPCEtLeW8ueahhuWGheiuvue9rnBvc2l0aW9uOmFic29sdXRlLOinhOiMg+aOkueJiO+8jOWQjue7reWPqumcgHBvc2l0aW9uOnJlbGF0aXZl5aKe5YeP5YaF5a65LS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ib3gtY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWltZy1sb2dpblwiPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgW3NyY109XCJhdXRoU2Vydi5sb2dvVXJsXCJcclxuICAgICAgICAgIGFsdD1cImZtb2RlXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS3lhbPpl63lm77moIfmjInpkq4tLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi1ib3hcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uZm9udCBpY29uLXNoYW5jaHUyXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0t5oyJ6ZKu5YiH5o2i55m75b2V5pa55byPLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpblR5cGVDb3VudD4xXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhdXRoU2Vydj8ubG9naW5PcHRpb25zPy51c2VycHdkXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImxvZ2luLXNlbGVjdC1idXR0b25cIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYXV0aFNlcnYuYWN0aXZlQnV0dG9uID09PSAn6LSm5Y+35a+G56CBJ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZUJ1dHRvbign6LSm5Y+35a+G56CBJylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg6LSm5Y+35a+G56CBXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYXV0aFNlcnY/LmxvZ2luT3B0aW9ucz8ubW9iaWxlY29kZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb2dpbi1zZWxlY3QtYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+efreS/oemqjOivgSdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVCdXR0b24oJ+efreS/oemqjOivgScpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOefreS/oemqjOivgVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpbk9wdGlvbnM/LndlY2hhdFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb2dpbi1zZWxlY3QtYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+W+ruS/oeaJq+eggSdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVCdXR0b24oJ+W+ruS/oeaJq+eggScpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOW+ruS/oeaJq+eggVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0t5omL5py66aqM6K+B56CBLS0+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJtZXNzYWdlLWZvcm1cIiBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+efreS/oemqjOivgSdcIiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpbk9wdGlvbnM/Lm1vYmlsZWNvZGVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWlucHV0LWZyb250bnVtYmVyXCI+Kzg2PC9kaXY+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicG9wdXAtaW5wdXQtaXRlbW9uZVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibG9naW5JbmZvLm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMlwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmiYvmnLrlj7dcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXV0aFNlcnY/LmVuYWJsZWRMb2NhbENvZGVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJsb2dpbi1pbnB1dC1ib3ggbG9jYWwtY29kZVwiICNjYW52YXNEb20+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicG9wdXAtaW5wdXQtaXRlbXR3b1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibG9jYWxDb2RlTnVtXCJcclxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5qCh6aqM56CBXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPCEtLSA8Y2FudmFzXHJcbiAgICAgICAgICAgICAgI2NhbnZhc1xyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwXCJcclxuICAgICAgICAgICAgICBoZWlnaHQ9XCI0NFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZURyYXdDb2RlKClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2FudmFzXCJcclxuICAgICAgICAgICAgPjwvY2FudmFzPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LWJveFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgI3Ntc0NvZGVJbnB1dFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicG9wdXAtaW5wdXQtaXRlbXR3b1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl55+t5L+h6aqM6K+B56CBXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvZ2luSW5mby5jb2RlXCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNtc0F1dG9Mb2dpbigpXCJcclxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgIG1heGxlbmd0aD1cIjZcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja251bWJlci1idXR0b25cIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJidXR0b25UZXh0XCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNDb3VudGluZ2Rvd25cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzdGFydENvdW50ZG93bigpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQ291bnRpbmdkb3duXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7YnV0dG9uVGV4dH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSDnlKjmiLfljY/orq4gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZS1ib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4+5pyq5rOo5YaM55qE5omL5py65Y+377yM5bCG6Ieq5Yqo5Yib5bu65biQ5Y+35bm255m75b2V44CCPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXN1Ym1pdC1ib3hcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImxvZ2luLXN1Ym1pdC1idXR0b25cIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImxvZ2luKClcIj5cclxuICAgICAgICAgICAgICDnmbvlvZVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgIDwhLS3otKblj7flr4bnoIHnmbvlvZUtLT5cclxuICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vYmlsZS1mb3JtXCIgW2NsYXNzLmFjdGl2ZV09XCJhdXRoU2Vydi5hY3RpdmVCdXR0b24gPT09ICfotKblj7flr4bnoIEnXCIgKm5nSWY9XCJhdXRoU2Vydj8ubG9naW5PcHRpb25zPy51c2VycHdkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4taW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEyXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInBvcHVwLWlucHV0LWl0ZW1ub21hbFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5omL5py65Y+3XCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInBvcHVwLWlucHV0LWl0ZW1ub21hbFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWvhueggVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIOiusOS9j+WvhueggSAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd3ByZC1ib3hcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWVtYmVyLXBhc3N3b3JkLWJveFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInJlbWVtYmVyLXBhc3N3b3JkXCIgLz5cclxuICAgICAgICAgICAgICDorrDkvY/lr4bnoIFcclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIOW/mOiusOWvhueggSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWZvcmdldFwiIChjbGljayk9XCJzZXRBY3RpdmVCdXR0b24oJ+azqOWGjOW4kOWPtycpXCI+XHJcbiAgICAgICAgICAgICAg5rOo5YaM5biQ5Y+3XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSDnlKjmiLfljY/orq4gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZS1ib3hcIj5cclxuICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXNVc2VyUnVsZUNoZWNrZWRcIiAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6NXB4XCIvPlxyXG4gICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJpc1VzZXJSdWxlQ2hlY2tlZD10cnVlXCI+5ZCM5oSPPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImlzVXNlclJ1bGVDaGVja2VkPXRydWVcIj7jgIrnlKjmiLfljY/orq7lj4rpmpDnp4HmnaHmrL7jgIs8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgPCEtLSDlv5jorrDlr4bnoIEgLS0+XHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1mb3JnZXRcIj7lv5jorrDlr4bnoIE/PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXN1Ym1pdC1ib3hcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibG9naW4tc3VibWl0LWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ2luTW9iaWxlUGFzc3dvcmQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDnmbvlvZVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgIDwhLS0g5biQ5Y+35a+G56CB5rOo5YaMIC0tPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwibW9iaWxlLWZvcm1cIiBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+azqOWGjOW4kOWPtydcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1ib3hcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2JpbGVcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwb3B1cC1pbnB1dC1pdGVtbm9tYWxcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeaJi+acuuWPt1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4taW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwb3B1cC1pbnB1dC1pdGVtbm9tYWxcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXlr4bnoIFcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LWJveFwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkMlwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInBvcHVwLWlucHV0LWl0ZW1ub21hbFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+WGjeasoei+k+WFpeWvhueggVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tc3VibWl0LWJveFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb2dpbi1zdWJtaXQtYnV0dG9uXCJcclxuICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2lnbk1vYmlsZVBhc3N3b3JkKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg5rOo5YaMXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8IS0t5b6u5L+h5omr56CB55m76ZmGLS0+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJ3ZWNoYXQtZm9ybVwiIFtjbGFzcy5hY3RpdmVdPVwiYXV0aFNlcnYuYWN0aXZlQnV0dG9uID09PSAn5b6u5L+h5omr56CBJ1wiICpuZ0lmPVwiYXV0aFNlcnY/LmxvZ2luT3B0aW9ucz8ud2VjaGF0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2VjaGF0LWxvZ2luLWJveFwiPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb2dpbi1lcndlaW1hLWltZ1wiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJhdXRoU2Vydi53ZWNoYXRVcmxcIlxyXG4gICAgICAgICAgICAgIGFsdD1cIuW+ruS/oeaJq+eggeeZu+mZhuS6jOe7tOeggVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWNoYXQtZXhwbGFpblwiPuS9v+eUqOW+ruS/oeaJq+S4gOaJqyzmiavnoIHnmbvlvZUgXCLpo57noIFBSVwiPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8IS0t6L+U5Zue6aaW6aG1LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJhY2staG9tZS1ib3hcIiAqbmdJZj1cImF1dGhTZXJ2LnNob3dCYWNrSG9tZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2staG9tZXBhZ2UtYnV0dG9uXCIgKGNsaWNrKT1cImdvSG9tZSgpXCI+XHJcbiAgICAgICAgICAgIOi/lOWbnummlumhtVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,EventEmitter,HostListener,Output,ViewChild,ElementRef}from"@angular/core";import{ActivatedRoute,Router}from"@angular/router";import{AuthService}from"../login/auth.service";import{HttpClient}from"@angular/common/http";import{CommonModule}from"@angular/common";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import{FmodeParse}from"@fmode/parse";import{IonCheckbox,ToastController}from"@ionic/angular/standalone";import*as i0 from"@angular/core";import*as i1 from"../login/auth.service";import*as i2 from"@angular/router";import*as i3 from"@angular/common/http";import*as i4 from"@ionic/angular/standalone";import*as i5 from"@angular/common";import*as i6 from"@angular/forms";const Parse=FmodeParse.with("nova");export class ModalUserLoginComponent{constructor(o,n,t,e,i){this.authServ=o,this.router=n,this.route=t,this.http=e,this.toastCtrl=i,this.isUserRuleChecked=!1,this.loginInfo={mobile:"",code:""},this.localCodeNum="",this.msg=this.authServ.message,this.loginSuccess=new EventEmitter,this.countdown=60,this.buttonText="获取验证码",this.isCountingdown=!1,this.drawCode=[]}ngOnInit(){this.close()}ngAfterViewInit(){this.setActiveButton(this.authServ.activeButton)}signMobilePassword(){this.mobile&&this.password?this.password==this.password2?this.authServ.signMobilePassword(this.mobile,this.password).then((o=>{o?.id&&this.authServ.loginMobilePassword(this.mobile,this.password,this.msg).then((o=>{this.loginSuccess.emit({user:Parse.User.current(),data:o}),this.setActiveButton("账号密码")}))})).catch((o=>{this.msg.error("注册失败,请更换手机号注册")})):this.msg.error("两次输入密码不同,请检查"):this.msg.error("请输入完整手机号和密码")}loginMobilePassword(){this.mobile&&this.password?this.authServ.loginMobilePassword(this.mobile,this.password,this.msg).then((o=>{console.log("登录成功",o),this.loginSuccess.emit({user:Parse.User.current(),data:o})})):this.msg.error("请输入完整手机号和密码")}close(){let o=this.authServ.isGuardLock(this.router.url);this.authServ.isModalShow=o}goHome(){let o=this.router.url;return o?.indexOf("yuban")&&this.router.navigateByUrl("/app/home"),o.indexOf("chat")>-1?(this.router.navigateByUrl("/chat/home"),void(this.authServ.isModalShow=!1)):o.indexOf("imagine")>-1?(this.router.navigateByUrl("/imagine/home"),void(this.authServ.isModalShow=!1)):(this.router.navigateByUrl("/"),void(this.authServ.isModalShow=!1))}handleEscapeKey(o){this.close()}setActiveButton(o){this.authServ.activeButton=o,console.log(this.authServ.activeButton),this.updateDrawCode()}smsAutoLogin(){6==this.loginInfo.code?.length&&this.login()}startCountdown(){if(!String(this.loginInfo.mobile).match(/^1[3456789]\d{9}$/))return void this.msg.error("请填写正确手机号");let o=this.drawCode.join("");if(this.authServ.enabledLocalCode&&this.localCodeNum.toLowerCase()!=o.toLowerCase())return void this.msg.error("校验码不正确");let n=Parse.serverURL?.split("parse")?.[0]||"https://server.fmode.cn/";this.isCountingdown=!0,this.http.post(n+"api/apig/message",{company:this.authServ.company,mobile:this.loginInfo.mobile}).subscribe((o=>{console.log(o),this.msg.success("发送成功"),this.time(),this.updateDrawCode(),this.focusSmsCodeInput()}))}focusSmsCodeInput(){this.smsCodeInput.nativeElement.focus()}time(){this.isCountingdown=!0,this.buttonText=`${this.countdown}秒`;let o=setInterval((()=>{this.countdown--,this.buttonText=`${this.countdown}秒`,(0===this.countdown||this.countdown<0)&&(clearInterval(o),this.buttonText="重新发送",this.isCountingdown=!1,this.countdown=0)}),1e3)}async login(){let o;if(!String(this.loginInfo.mobile).match(/^1[3456789]\d{9}$/))return void this.msg.error("请填写正确手机号");if(!this.loginInfo.code)return void this.msg.error("请输入短信验证码");this.loginInfo.code=this.loginInfo.code?.slice(0,6);try{o=await this.authServ.loginCode(this.loginInfo.mobile,this.loginInfo.code,this.msg)}catch(o){}let n=Parse.User.current();if((o||n?.id)&&(this.loginSuccess.emit({user:n,res:o}),console.log(o,n?.id,"close"),this.close(),this.loginInfo={mobile:"",code:""},this.localCodeNum="",this.toast({color:"success",message:"登录成功"}),"modal"==this.authServ.guardType)){let o=new URLSearchParams(location.search);o.set("t",String((new Date).getTime()));let n="/"+(location.origin+location.pathname).replaceAll(document.baseURI,"")+`?${o.toString()}`;console.log(n),this.router.navigateByUrl(n)}}async toast(o){o.position=o?.position||"top",o.duration=o?.duration||1500,o.color=o?.color||"primary",(await this.toastCtrl.create(o)).present()}updateDrawCode(){if(!this.authServ.enabledLocalCode)return;let o=100,n=document.getElementById("canvas");n&&this.canvasDom.nativeElement.removeChild(n),this.canvasDom.nativeElement;let t=document.createElement("canvas");t.width=100,t.height=44,t.className="canvas",t.setAttribute("id","canvas"),t.addEventListener("click",(()=>{this.updateDrawCode()}));let e=t.getContext("2d");t.width=o,t.height=44;let i="A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m".split(","),p=i.length;for(let o=0;o<=3;o++){let n=Math.floor(Math.random()*p),t=30*Math.random()*Math.PI/180,r=i[n];this.drawCode[o]=r;let a=10+20*o,s=20+8*Math.random();e.font="bold 23px 微软雅黑",e.translate(a,s),e.rotate(t),e.fillStyle=this.randomColor(),e.fillText(r,0,0),e.rotate(-t),e.translate(-a,-s)}for(let n=0;n<=5;n++)e.strokeStyle=this.randomColor(),e.beginPath(),e.moveTo(Math.random()*o,44*Math.random()),e.lineTo(Math.random()*o,44*Math.random()),e.stroke();for(let n=0;n<=30;n++){e.strokeStyle=this.randomColor(),e.beginPath();let n=Math.random()*o,t=44*Math.random();e.moveTo(n,t),e.lineTo(n+1,t+1),e.stroke()}this.canvasDom.nativeElement.appendChild(t)}randomColor(){return"rgb("+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+")"}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserLoginComponent,deps:[{token:i1.AuthService},{token:i2.Router},{token:i2.ActivatedRoute},{token:i3.HttpClient},{token:i4.ToastController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ModalUserLoginComponent,isStandalone:!0,selector:"fm-modal-user-login",outputs:{loginSuccess:"loginSuccess"},host:{listeners:{"document:keydown.escape":"handleEscapeKey($event)"}},viewQueries:[{propertyName:"canvasDom",first:!0,predicate:["canvasDom"],descendants:!0},{propertyName:"smsCodeInput",first:!0,predicate:["smsCodeInput"],descendants:!0}],ngImport:i0,template:'\x3c!--登录弹出框设置--\x3e\n\x3c!--背景灰色蒙版--\x3e\n<div\n class="popup"\n [style.display]="authServ.isModalShow ? \'block\' : \'none\'"\n (click)="close()"\n>\n <div class="popup-content" [class.fullscreen]="authServ.modalType==\'fullscreen\'" [class.sheet]="authServ.modalType==\'sheet\'"\n (click)="$event.stopPropagation()">\n <div class="popup-box">\n \x3c!--弹框内设置position:absolute,规范排版,后续只需position:relative增减内容--\x3e\n <div class="popup-box-content">\n <div class="logo-img-login">\n <img\n [src]="authServ.logoUrl"\n alt="fmode"\n />\n </div>\n\n \x3c!--关闭图标按钮--\x3e\n <div class="close-icon-box">\n <div class="iconfont icon-shanchu2" (click)="close()"></div>\n </div>\n \x3c!--按钮切换登录方式--\x3e\n <div class="button-box" *ngIf="authServ?.loginTypeCount>1">\n <div class="button-group">\n <button *ngIf="authServ?.loginOptions?.userpwd"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'账号密码\'"\n (click)="setActiveButton(\'账号密码\')"\n >\n 账号密码\n </button>\n <button *ngIf="authServ?.loginOptions?.mobilecode"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'短信验证\'"\n (click)="setActiveButton(\'短信验证\')"\n >\n 短信验证\n </button>\n <button *ngIf="authServ?.loginOptions?.wechat"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'微信扫码\'"\n (click)="setActiveButton(\'微信扫码\')"\n >\n 微信扫码\n </button>\n </div>\n </div>\n\n \x3c!--手机验证码--\x3e\n <form class="message-form" [class.active]="authServ.activeButton === \'短信验证\'" *ngIf="authServ?.loginOptions?.mobilecode">\n <div class="login-input-box">\n <div class="popup-input-frontnumber">+86</div>\n <input\n class="popup-input-itemone"\n type="text"\n required="required"\n [(ngModel)]="loginInfo.mobile"\n [ngModelOptions]="{ standalone: true }"\n maxlength="12"\n placeholder="请输入手机号"\n />\n </div>\n <div *ngIf="authServ?.enabledLocalCode"\n class="login-input-box local-code" #canvasDom>\n <input\n class="popup-input-itemtwo"\n type="text"\n required="required"\n [(ngModel)]="localCodeNum"\n [ngModelOptions]="{ standalone: true }"\n maxlength="4"\n placeholder="请输入校验码"\n />\n \x3c!-- <canvas\n #canvas\n width="100"\n height="44"\n (click)="updateDrawCode()"\n class="canvas"\n ></canvas> --\x3e\n </div>\n <div class="login-input-box">\n <input #smsCodeInput\n class="popup-input-itemtwo"\n type="text"\n required="required"\n placeholder="请输入短信验证码"\n [(ngModel)]="loginInfo.code"\n (change)="smsAutoLogin()"\n [ngModelOptions]="{ standalone: true }"\n maxlength="6"\n />\n <button\n class="checknumber-button"\n type="submit"\n [value]="buttonText"\n [disabled]="isCountingdown"\n (click)="startCountdown()"\n [class.active]="isCountingdown"\n >\n {{buttonText}}\n </button>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>未注册的手机号,将自动创建帐号并登录。</span>\n </div>\n\n <div class="login-submit-box">\n <button class="login-submit-button" type="submit" (click)="login()">\n 登录\n </button>\n </div>\n </form>\n\n \x3c!--账号密码登录--\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'账号密码\'" *ngIf="authServ?.loginOptions?.userpwd">\n <div class="login-input-box">\n <input\n maxlength="12"\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n \x3c!-- 记住密码 --\x3e\n <div class="passwprd-box">\n <div class="remember-password-box">\n <input type="checkbox" id="remember-password" />\n 记住密码\n </div>\n\n \x3c!-- 忘记密码 --\x3e\n <div class="password-forget" (click)="setActiveButton(\'注册帐号\')">\n 注册帐号\n </div>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>\n <input type="checkbox" [(ngModel)]="isUserRuleChecked" [ngModelOptions]="{ standalone: true }" style="margin-right:5px"/>\n <span (click)="isUserRuleChecked=true">同意</span></span>\n <span (click)="isUserRuleChecked=true">《用户协议及隐私条款》</span>\n </div>\n\n\n \x3c!-- 忘记密码 --\x3e\n \x3c!-- <div class="password-forget">忘记密码?</div>\n </div> --\x3e\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="loginMobilePassword()"\n >\n 登录\n </button>\n </div>\n </form>\n\n \x3c!-- 帐号密码注册 --\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'注册帐号\'">\n <div class="login-input-box">\n <input\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password2"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请再次输入密码"\n />\n </div>\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="signMobilePassword()"\n >\n 注册\n </button>\n </div>\n </form>\n\n \x3c!--微信扫码登陆--\x3e\n <form class="wechat-form" [class.active]="authServ.activeButton === \'微信扫码\'" *ngIf="authServ?.loginOptions?.wechat">\n <div class="wechat-login-box">\n <img\n class="login-erweima-img"\n [src]="authServ.wechatUrl"\n alt="微信扫码登陆二维码"\n />\n </div>\n <div class="wechat-explain">使用微信扫一扫,扫码登录 "飞码AI"</div>\n </form>\n\n \x3c!--返回首页--\x3e\n <div class="back-home-box" *ngIf="authServ.showBackHome">\n <button class="back-homepage-button" (click)="goHome()">\n 返回首页\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n',styles:['@charset "UTF-8";:host{--fmode-background-primary: #FFF;--login-color-primary: var(--fmode-color-primary,#0199f9);--login-bgcolor-primary: var(--fmode-login-bgcolor-primary,dodgerblue);--login-bgcolor-secondary: var(--fmode-login-bgcolor-secondary,#00dbde);--login-bgcolor-third: var(--fmode-login-bgcolor-third,#f902ff)}:host-context(body.dark) .popup{--login-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:1000}@media screen and (max-width: 800px){.popup-content.fullscreen .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content.fullscreen .popup-box .popup-box-content{padding-top:35%;border-radius:50px!important}.popup{background:#00000080}.popup-content.sheet{background:transparent!important}.popup-content.sheet .popup-box{position:fixed!important;left:0!important;top:calc(100vh - 480px);height:530px;width:100vw!important;border-radius:50px!important}.popup-content.sheet .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:var(--login-bgcolor-primary);overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;margin:auto;padding:10px 10%;border-radius:10px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s;padding:1rem 0}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--login-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-third),var(--login-bgcolor-third));transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-secondary),var(--login-bgcolor-secondary));transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--login-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--login-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .rule-box span,.popup-content .rule-box ion-checkbox{font-size:15px;color:var(--login-color-primary)}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;x:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--login-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n'],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i5.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i6.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i6.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i6.CheckboxControlValueAccessor,selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]"},{kind:"directive",type:i6.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i6.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i6.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:i6.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"directive",type:i6.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"directive",type:i6.NgForm,selector:"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]",inputs:["ngFormOptions"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"ngmodule",type:ReactiveFormsModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserLoginComponent,decorators:[{type:Component,args:[{standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonCheckbox],selector:"fm-modal-user-login",template:'\x3c!--登录弹出框设置--\x3e\n\x3c!--背景灰色蒙版--\x3e\n<div\n class="popup"\n [style.display]="authServ.isModalShow ? \'block\' : \'none\'"\n (click)="close()"\n>\n <div class="popup-content" [class.fullscreen]="authServ.modalType==\'fullscreen\'" [class.sheet]="authServ.modalType==\'sheet\'"\n (click)="$event.stopPropagation()">\n <div class="popup-box">\n \x3c!--弹框内设置position:absolute,规范排版,后续只需position:relative增减内容--\x3e\n <div class="popup-box-content">\n <div class="logo-img-login">\n <img\n [src]="authServ.logoUrl"\n alt="fmode"\n />\n </div>\n\n \x3c!--关闭图标按钮--\x3e\n <div class="close-icon-box">\n <div class="iconfont icon-shanchu2" (click)="close()"></div>\n </div>\n \x3c!--按钮切换登录方式--\x3e\n <div class="button-box" *ngIf="authServ?.loginTypeCount>1">\n <div class="button-group">\n <button *ngIf="authServ?.loginOptions?.userpwd"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'账号密码\'"\n (click)="setActiveButton(\'账号密码\')"\n >\n 账号密码\n </button>\n <button *ngIf="authServ?.loginOptions?.mobilecode"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'短信验证\'"\n (click)="setActiveButton(\'短信验证\')"\n >\n 短信验证\n </button>\n <button *ngIf="authServ?.loginOptions?.wechat"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'微信扫码\'"\n (click)="setActiveButton(\'微信扫码\')"\n >\n 微信扫码\n </button>\n </div>\n </div>\n\n \x3c!--手机验证码--\x3e\n <form class="message-form" [class.active]="authServ.activeButton === \'短信验证\'" *ngIf="authServ?.loginOptions?.mobilecode">\n <div class="login-input-box">\n <div class="popup-input-frontnumber">+86</div>\n <input\n class="popup-input-itemone"\n type="text"\n required="required"\n [(ngModel)]="loginInfo.mobile"\n [ngModelOptions]="{ standalone: true }"\n maxlength="12"\n placeholder="请输入手机号"\n />\n </div>\n <div *ngIf="authServ?.enabledLocalCode"\n class="login-input-box local-code" #canvasDom>\n <input\n class="popup-input-itemtwo"\n type="text"\n required="required"\n [(ngModel)]="localCodeNum"\n [ngModelOptions]="{ standalone: true }"\n maxlength="4"\n placeholder="请输入校验码"\n />\n \x3c!-- <canvas\n #canvas\n width="100"\n height="44"\n (click)="updateDrawCode()"\n class="canvas"\n ></canvas> --\x3e\n </div>\n <div class="login-input-box">\n <input #smsCodeInput\n class="popup-input-itemtwo"\n type="text"\n required="required"\n placeholder="请输入短信验证码"\n [(ngModel)]="loginInfo.code"\n (change)="smsAutoLogin()"\n [ngModelOptions]="{ standalone: true }"\n maxlength="6"\n />\n <button\n class="checknumber-button"\n type="submit"\n [value]="buttonText"\n [disabled]="isCountingdown"\n (click)="startCountdown()"\n [class.active]="isCountingdown"\n >\n {{buttonText}}\n </button>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>未注册的手机号,将自动创建帐号并登录。</span>\n </div>\n\n <div class="login-submit-box">\n <button class="login-submit-button" type="submit" (click)="login()">\n 登录\n </button>\n </div>\n </form>\n\n \x3c!--账号密码登录--\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'账号密码\'" *ngIf="authServ?.loginOptions?.userpwd">\n <div class="login-input-box">\n <input\n maxlength="12"\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n \x3c!-- 记住密码 --\x3e\n <div class="passwprd-box">\n <div class="remember-password-box">\n <input type="checkbox" id="remember-password" />\n 记住密码\n </div>\n\n \x3c!-- 忘记密码 --\x3e\n <div class="password-forget" (click)="setActiveButton(\'注册帐号\')">\n 注册帐号\n </div>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>\n <input type="checkbox" [(ngModel)]="isUserRuleChecked" [ngModelOptions]="{ standalone: true }" style="margin-right:5px"/>\n <span (click)="isUserRuleChecked=true">同意</span></span>\n <span (click)="isUserRuleChecked=true">《用户协议及隐私条款》</span>\n </div>\n\n\n \x3c!-- 忘记密码 --\x3e\n \x3c!-- <div class="password-forget">忘记密码?</div>\n </div> --\x3e\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="loginMobilePassword()"\n >\n 登录\n </button>\n </div>\n </form>\n\n \x3c!-- 帐号密码注册 --\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'注册帐号\'">\n <div class="login-input-box">\n <input\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password2"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请再次输入密码"\n />\n </div>\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="signMobilePassword()"\n >\n 注册\n </button>\n </div>\n </form>\n\n \x3c!--微信扫码登陆--\x3e\n <form class="wechat-form" [class.active]="authServ.activeButton === \'微信扫码\'" *ngIf="authServ?.loginOptions?.wechat">\n <div class="wechat-login-box">\n <img\n class="login-erweima-img"\n [src]="authServ.wechatUrl"\n alt="微信扫码登陆二维码"\n />\n </div>\n <div class="wechat-explain">使用微信扫一扫,扫码登录 "飞码AI"</div>\n </form>\n\n \x3c!--返回首页--\x3e\n <div class="back-home-box" *ngIf="authServ.showBackHome">\n <button class="back-homepage-button" (click)="goHome()">\n 返回首页\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n',styles:['@charset "UTF-8";:host{--fmode-background-primary: #FFF;--login-color-primary: var(--fmode-color-primary,#0199f9);--login-bgcolor-primary: var(--fmode-login-bgcolor-primary,dodgerblue);--login-bgcolor-secondary: var(--fmode-login-bgcolor-secondary,#00dbde);--login-bgcolor-third: var(--fmode-login-bgcolor-third,#f902ff)}:host-context(body.dark) .popup{--login-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:1000}@media screen and (max-width: 800px){.popup-content.fullscreen .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content.fullscreen .popup-box .popup-box-content{padding-top:35%;border-radius:50px!important}.popup{background:#00000080}.popup-content.sheet{background:transparent!important}.popup-content.sheet .popup-box{position:fixed!important;left:0!important;top:calc(100vh - 480px);height:530px;width:100vw!important;border-radius:50px!important}.popup-content.sheet .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:var(--login-bgcolor-primary);overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;margin:auto;padding:10px 10%;border-radius:10px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s;padding:1rem 0}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--login-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-third),var(--login-bgcolor-third));transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,var(--login-bgcolor-secondary),var(--login-bgcolor-secondary));transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--login-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--login-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .rule-box span,.popup-content .rule-box ion-checkbox{font-size:15px;color:var(--login-color-primary)}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--login-color-primary);transition:.3s ease all;cursor:pointer;x:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--login-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--login-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n']}]}],ctorParameters:()=>[{type:i1.AuthService},{type:i2.Router},{type:i2.ActivatedRoute},{type:i3.HttpClient},{type:i4.ToastController}],propDecorators:{canvasDom:[{type:ViewChild,args:["canvasDom"]}],smsCodeInput:[{type:ViewChild,args:["smsCodeInput"]}],loginSuccess:[{type:Output}],handleEscapeKey:[{type:HostListener,args:["document:keydown.escape",["$event"]]}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL21vZGFsLXVzZXItbG9naW4vbW9kYWwtdXNlci1sb2dpbi5jb21wb25lbnQubWpz`
|
|
10
|
+
|