fmode-ng 0.0.39 → 0.0.41

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.
Files changed (100) hide show
  1. package/esm2022/fmode-ng.mjs +5 -10
  2. package/esm2022/lib/aigc/agent/agent.prompt.mjs +122 -10
  3. package/esm2022/lib/aigc/agent/index.mjs +2 -10
  4. package/esm2022/lib/aigc/avatar/avatar.module.mjs +45 -10
  5. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +2 -10
  6. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +315 -10
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +3 -10
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +57 -10
  9. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +97 -10
  10. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +104 -10
  11. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +111 -10
  12. package/esm2022/lib/aigc/avatar/index.mjs +8 -10
  13. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +2 -10
  14. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +166 -8
  15. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +36 -10
  16. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +2 -10
  17. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +141 -8
  18. package/esm2022/lib/aigc/chat/chat-list/index.mjs +2 -10
  19. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +40 -10
  20. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +2 -10
  21. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +92 -10
  22. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +2 -10
  23. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +2 -10
  24. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +207 -8
  25. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +236 -10
  26. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +137 -10
  27. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +69 -10
  28. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +2 -10
  29. package/esm2022/lib/aigc/chat/index.mjs +8 -10
  30. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +82 -10
  31. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +269 -8
  32. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +51 -10
  33. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +24 -10
  34. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +94 -10
  35. package/esm2022/lib/aigc/index.mjs +13 -10
  36. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +21 -10
  37. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +736 -8
  38. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +181 -8
  39. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +7 -10
  40. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +194 -9
  41. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +27 -10
  42. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +27 -10
  43. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +68 -10
  44. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +229 -8
  45. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +2 -10
  46. package/esm2022/lib/aigc/voice/audio.player.mjs +52 -10
  47. package/esm2022/lib/aigc/voice/class-asr.mjs +79 -8
  48. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +501 -8
  49. package/esm2022/lib/aigc/voice/index.mjs +3 -10
  50. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +38 -10
  51. package/esm2022/lib/aigc/voice/lib/resample.mjs +34 -10
  52. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +233 -8
  53. package/esm2022/lib/aigc/voice/tts/index.mjs +2 -10
  54. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +190 -10
  55. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +33 -10
  56. package/esm2022/lib/map/index.mjs +4 -10
  57. package/esm2022/lib/map/map.module.mjs +61 -10
  58. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +110 -10
  59. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +98 -8
  60. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +100 -8
  61. package/esm2022/lib/nova-cloud/index.mjs +2 -10
  62. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +148 -10
  63. package/esm2022/lib/platform/cross.service.mjs +63 -10
  64. package/esm2022/lib/platform/index.mjs +2 -10
  65. package/esm2022/lib/social/index.mjs +2 -10
  66. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +236 -8
  67. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +59 -10
  68. package/esm2022/lib/storage/index.mjs +5 -10
  69. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +130 -8
  70. package/esm2022/lib/storage/service-upload/index.mjs +2 -10
  71. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +462 -8
  72. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +28 -10
  73. package/esm2022/lib/storage/storage.module.mjs +41 -10
  74. package/esm2022/lib/user/account/account.service.mjs +221 -10
  75. package/esm2022/lib/user/captcha/captcha.component.mjs +135 -10
  76. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +62 -10
  77. package/esm2022/lib/user/index.mjs +17 -10
  78. package/esm2022/lib/user/login/auth.guard.mjs +28 -10
  79. package/esm2022/lib/user/login/auth.service.mjs +373 -8
  80. package/esm2022/lib/user/login/login.component.mjs +913 -10
  81. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +273 -10
  82. package/esm2022/lib/user/profile/auth-profile.guard.mjs +27 -10
  83. package/esm2022/lib/user/profile/auth-profile.service.mjs +122 -10
  84. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +115 -10
  85. package/esm2022/lib/user/profile/profile.module.mjs +57 -10
  86. package/esm2022/lib/user/staff/index.mjs +4 -10
  87. package/esm2022/lib/user/staff/staff.guard.mjs +26 -10
  88. package/esm2022/lib/user/staff/staff.module.mjs +18 -10
  89. package/esm2022/lib/user/staff/staff.service.mjs +85 -10
  90. package/esm2022/lib/user/user-name.pipe.mjs +29 -10
  91. package/esm2022/lib/user/user.module.mjs +106 -10
  92. package/esm2022/lib/video/fm-video/fm-video.component.mjs +67 -10
  93. package/esm2022/lib/video/index.mjs +2 -10
  94. package/esm2022/public-api.mjs +13 -10
  95. package/fesm2022/fmode-ng.mjs +8895 -7
  96. package/fesm2022/fmode-ng.mjs.map +1 -1
  97. package/lib/user/login/auth.service.d.ts +18 -3
  98. package/lib/user/modal-user-login/modal-user-login.component.d.ts +4 -2
  99. package/package.json +1 -1
  100. package/LICENSE.md +0 -8
@@ -1,10 +1,41 @@
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/storage/storage.module.mjs
7
- */
8
- import{NgModule}from"@angular/core";import{CommonModule}from"@angular/common";import{HwobsManagerComponent}from"./comp-hwobs-manager/hwobs-manager.component";import{IonicModule}from"@ionic/angular";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import{NovaUploadService}from"./service-upload";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";export class FmodeStorgeModule{static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule})}static{this.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,imports:[CommonModule,i1.IonicModule,HwobsManagerComponent],exports:[HwobsManagerComponent]})}static{this.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,providers:[Diagnostic,NovaUploadService],imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,decorators:[{type:NgModule,args:[{declarations:[],imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent],exports:[HwobsManagerComponent],providers:[Diagnostic,NovaUploadService]}]}]});
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3N0b3JhZ2UubW9kdWxlLm1qcw==`
10
-
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { HwobsManagerComponent } from './comp-hwobs-manager/hwobs-manager.component';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
6
+ import { NovaUploadService } from './service-upload';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ionic/angular";
9
+ export class FmodeStorgeModule {
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, imports: [CommonModule, i1.IonicModule,
12
+ // 独立组件
13
+ HwobsManagerComponent], exports: [HwobsManagerComponent] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, providers: [
15
+ Diagnostic,
16
+ NovaUploadService
17
+ ], imports: [CommonModule,
18
+ IonicModule.forRoot({ mode: "ios" }),
19
+ // 独立组件
20
+ HwobsManagerComponent] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ declarations: [],
26
+ imports: [
27
+ CommonModule,
28
+ IonicModule.forRoot({ mode: "ios" }),
29
+ // 独立组件
30
+ HwobsManagerComponent,
31
+ ],
32
+ exports: [
33
+ HwobsManagerComponent
34
+ ],
35
+ providers: [
36
+ Diagnostic,
37
+ NovaUploadService
38
+ ]
39
+ }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3N0b3JhZ2Uvc3RvcmFnZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBbUJyRCxNQUFNLE9BQU8saUJBQWlCOytHQUFqQixpQkFBaUI7Z0hBQWpCLGlCQUFpQixZQWIxQixZQUFZO1lBRVosT0FBTztZQUNQLHFCQUFxQixhQUdyQixxQkFBcUI7Z0hBT1osaUJBQWlCLGFBTGxCO1lBQ1IsVUFBVTtZQUNWLGlCQUFpQjtTQUNsQixZQVhDLFlBQVk7WUFDWixXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxDQUFDO1lBQ2pDLE9BQU87WUFDUCxxQkFBcUI7OzRGQVVaLGlCQUFpQjtrQkFqQjdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsQ0FBQzt3QkFDakMsT0FBTzt3QkFDUCxxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBQzt3QkFDTixxQkFBcUI7cUJBQ3RCO29CQUNELFNBQVMsRUFBQzt3QkFDUixVQUFVO3dCQUNWLGlCQUFpQjtxQkFDbEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSHdvYnNNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wLWh3b2JzLW1hbmFnZXIvaHdvYnMtbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcbmltcG9ydCB7IE5vdmFVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlLXVwbG9hZCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbmljTW9kdWxlLmZvclJvb3Qoe21vZGU6XCJpb3NcIn0pLFxuICAgIC8vIOeLrOeri+e7hOS7tlxuICAgIEh3b2JzTWFuYWdlckNvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czpbXG4gICAgSHdvYnNNYW5hZ2VyQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczpbXG4gICAgRGlhZ25vc3RpYyxcbiAgICBOb3ZhVXBsb2FkU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZtb2RlU3RvcmdlTW9kdWxlIHsgfVxuIl19
@@ -1,10 +1,221 @@
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/account/account.service.mjs
7
- */
8
- import{Injectable}from"@angular/core";import{NovaCloudService}from"../../nova-cloud/nova-cloud.service";import Parse from"parse";import{AuthService}from"../login/auth.service";import{HttpClient}from"@angular/common/http";import*as i0 from"@angular/core";import*as i1 from"../../nova-cloud/nova-cloud.service";import*as i2 from"../login/auth.service";import*as i3 from"@angular/common/http";export class AccountService{constructor(e,t,o){this.ncloud=e,this.authServ=t,this.http=o,this.company="",this.billing={credit:{usedDetail:{}}},this.wxAppId="",this.wxpayEnabled=!1,this.appid="wxb4193c93ae9aa696",this.company=this.authServ.company||localStorage.getItem("company"),this.getBilling(),this.getProfile(),this.getUserOpenid()}async getProfile(){let e=Parse.User.current()?.id;if(!e)return;let t=new Parse.Query("Profile");t.equalTo("user",e),t.equalTo("company",this.company),t.notEqualTo("isDeleted",!0);let o=await t.first();o?.id&&(this.profile=o)}async getBilling(){let e;try{e=await this.ncloud.apig("aigc/account",null,"get")}catch(e){}return e?.credit&&(this.billing=e),e}async getUserOpenid(){let e=-1!=navigator.userAgent.toLowerCase().indexOf("micromessenger"),t=this.getQueryStringByName("code"),o=localStorage.getItem("openid");if(!o){if(!Parse.User.current())return;let i=Parse.User.current().get("wechat");o=i?.[this.appid]?.openid,e&&(t?await this.getwechat(t):this.authWechat())}}authWechat(e="/account/billing"){if(!localStorage.getItem("openid")){let t="https://ai.fmode.cn"+e;return t=encodeURIComponent(t),void(window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+this.appid+"&redirect_uri="+t+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect")}}getQueryStringByName(e){let t=location.search.match(new RegExp("[?&]"+e+"=([^&]+)","i"));return null==t||t.length<1?"":t[1]}async getwechat(e,t="/account/billing"){return new Promise((async(o,i)=>{this.http.post("https://server.fmode.cn/api/wechat/get_wx",{company:this.company,code:e}).subscribe((async e=>{if(console.log(e),e&&200==e.code&&e.data.openid){let t=e.data.openid;localStorage.setItem("openid",t),localStorage.removeItem("code");let i={};i[this.appid]={openid:t},Parse.User.current().set("wechat",i),await Parse.User.current().save(),o(!0)}}),(async e=>{console.log("Error updating items",e),this.authWechat(t),i(!1)}))}))}getWXSignPackageInWechat(){let e={company:this.company,href:encodeURIComponent(location.href.split("?")[0])};this.http.post("https://server.fmode.cn/api/wechat/getconfig",e).subscribe((e=>{const t=e.data;this.wxAppId=t.appid,this.wxpayEnabled=!0,wx.config({debug:!1,appId:t.appid,timestamp:t.timestamp,nonceStr:t.nonceStr,signature:t.signature,jsApiList:["chooseWXPay","onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","updateAppMessageShareData","updateTimelineShareData"]});let o="https://ai.fmode.cn";location.pathname;Parse.User.current()?.id;let i=this.shareInfo||{title:"飞码AI",desc:"解放创意引领未来|国际前沿的AIGC平台",link:o,type:"link",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png",success:function(){console.log("分享成功")},error:function(){console.log("分享失败")},cancel:function(){console.log("取消分享")}};wx.ready((()=>{wx.updateAppMessageShareData(i),wx.updateTimelineShareData(i)})),wx.error((()=>{}))}))}async saveAccountLog(e,t,o,i){return new Promise(((a,r)=>{this.http.post("https://test.fmode.cn/api/apig/saveAccountLog",{company:o,uid:Parse.User.current().id,orderid:t,info:e}).subscribe((e=>{console.log(e),a(!0)}),(e=>{console.warn(e),i&&i.error("请求超时,请稍后再试"),r()}))}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,deps:[{token:i1.NovaCloudService},{token:i2.AuthService},{token:i3.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.NovaCloudService},{type:i2.AuthService},{type:i3.HttpClient}]});
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2FjY291bnQvYWNjb3VudC5zZXJ2aWNlLm1qcw==`
10
-
1
+ import { Injectable } from "@angular/core";
2
+ import { NovaCloudService } from "../../nova-cloud/nova-cloud.service";
3
+ import Parse from "parse";
4
+ import { AuthService } from "../login/auth.service";
5
+ import { HttpClient } from "@angular/common/http";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../nova-cloud/nova-cloud.service";
8
+ import * as i2 from "../login/auth.service";
9
+ import * as i3 from "@angular/common/http";
10
+ export class AccountService {
11
+ constructor(ncloud, authServ, http) {
12
+ this.ncloud = ncloud;
13
+ this.authServ = authServ;
14
+ this.http = http;
15
+ this.company = "";
16
+ this.billing = {
17
+ credit: {
18
+ usedDetail: {},
19
+ },
20
+ };
21
+ this.wxAppId = "";
22
+ this.wxpayEnabled = false;
23
+ this.appid = localStorage.getItem("WECHAT_APP_ID") || "wxb4193c93ae9aa696";
24
+ this.company = this.authServ.company || localStorage.getItem("company");
25
+ this.getBilling();
26
+ this.getProfile();
27
+ this.getUserOpenid();
28
+ }
29
+ /* 获取认证信息 */
30
+ async getProfile() {
31
+ let uid = Parse.User.current()?.id;
32
+ if (!uid)
33
+ return;
34
+ let query = new Parse.Query("Profile");
35
+ query.equalTo("user", uid);
36
+ query.equalTo("company", this.company);
37
+ query.notEqualTo("isDeleted", true);
38
+ let profile = await query.first();
39
+ if (profile?.id) {
40
+ this.profile = profile;
41
+ }
42
+ }
43
+ async getBilling() {
44
+ let data;
45
+ // if(!Parse.User.current()?.getSessionToken())return // 用户登陆时才可查询账单
46
+ try {
47
+ data = await this.ncloud.apig("aigc/account", null, "get");
48
+ }
49
+ catch (err) { }
50
+ if (data?.credit) {
51
+ this.billing = data;
52
+ }
53
+ return data;
54
+ }
55
+ /* 如果是微信内置浏览器,获取登录code */
56
+ async getUserOpenid() {
57
+ let ua = navigator.userAgent.toLowerCase();
58
+ let isWeixin = ua.indexOf("micromessenger") != -1;
59
+ let code = this.getQueryStringByName("code");
60
+ let openid = localStorage.getItem("openid");
61
+ if (!openid) {
62
+ if (!Parse.User.current())
63
+ return;
64
+ let wechat = Parse.User.current().get("wechat");
65
+ openid = wechat?.[this.appid]?.openid;
66
+ if (isWeixin) {
67
+ if (!code) {
68
+ this.authWechat();
69
+ }
70
+ else {
71
+ await this.getwechat(code);
72
+ }
73
+ }
74
+ }
75
+ }
76
+ authWechat(url = "/account/billing") {
77
+ if (!localStorage.getItem("openid")) {
78
+ // let REDIRECT_URI = "https://ai.fmode.cn" + url;
79
+ let REDIRECT_URI = window.location.href;
80
+ REDIRECT_URI = encodeURIComponent(REDIRECT_URI);
81
+ // console.log(REDIRECT_URI);
82
+ // console.log(
83
+ // "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
84
+ // this.appid +
85
+ // "&redirect_uri=" +
86
+ // REDIRECT_URI +
87
+ // "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
88
+ // );
89
+ window.location.href =
90
+ "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
91
+ this.appid +
92
+ "&redirect_uri=" +
93
+ REDIRECT_URI +
94
+ "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
95
+ return;
96
+ }
97
+ }
98
+ //根据QueryString参数名称获取值
99
+ getQueryStringByName(name) {
100
+ let result = location.search.match(new RegExp("[?&]" + name + "=([^&]+)", "i"));
101
+ if (result == null || result.length < 1) {
102
+ return "";
103
+ }
104
+ return result[1];
105
+ }
106
+ async getwechat(code, url = "/account/billing") {
107
+ return new Promise(async (resolve, reject) => {
108
+ this.http
109
+ .post(`https://server.fmode.cn/api/wechat/get_wx`, {
110
+ company: this.company,
111
+ code: code,
112
+ })
113
+ .subscribe(async (res) => {
114
+ console.log(res);
115
+ if (res && res.code == 200 && res.data.openid) {
116
+ let openid = res.data.openid;
117
+ // localStorage.setItem('authData', JSON.stringify(res.data))
118
+ localStorage.setItem("openid", openid);
119
+ localStorage.removeItem("code");
120
+ let wxopts = {};
121
+ wxopts[this.appid] = {
122
+ "openid": openid,
123
+ },
124
+ Parse.User.current().set("wechat", wxopts);
125
+ await Parse.User.current().save();
126
+ resolve(true);
127
+ }
128
+ }, async (err) => {
129
+ console.log("Error updating items", err);
130
+ this.authWechat(url);
131
+ reject(false);
132
+ });
133
+ });
134
+ }
135
+ /* 获取微信签名 */
136
+ getWXSignPackageInWechat() {
137
+ let params = {
138
+ company: this.company,
139
+ href: encodeURIComponent(location.href.split("?")[0]),
140
+ };
141
+ this.http
142
+ .post(`https://server.fmode.cn/api/wechat/getconfig`, params)
143
+ .subscribe((response) => {
144
+ // 返回的签名信息
145
+ let res = response;
146
+ const signPackage = res.data;
147
+ this.wxAppId = signPackage.appid;
148
+ this.wxpayEnabled = true;
149
+ wx.config({
150
+ debug: false, // 开启调试模式
151
+ appId: signPackage.appid, // 必填,公众号的唯一标识
152
+ timestamp: signPackage.timestamp, // 必填,生成签名的时间戳
153
+ nonceStr: signPackage.nonceStr, // 必填,生成签名的随机串
154
+ signature: signPackage.signature, // 必填,签名,见附录1
155
+ jsApiList: [
156
+ "chooseWXPay", // JSAPI微信支付
157
+ 'onMenuShareTimeline', //分享到微信朋友圈
158
+ 'onMenuShareAppMessage', //分享给微信朋友
159
+ 'onMenuShareQQ', //分享到QQ
160
+ 'onMenuShareQZone', //分享到QQ空间
161
+ 'updateAppMessageShareData', //分享到微信及QQ(新接口)
162
+ 'updateTimelineShareData' //分享到朋友圈”及“分享到QQ空间(新接口
163
+ ], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
164
+ });
165
+ let url = 'https://ai.fmode.cn';
166
+ let pathname = location.pathname;
167
+ url + pathname + '?invite=' + Parse.User.current()?.id;
168
+ let shareInfo = this.shareInfo || {
169
+ title: '飞码AI', // 分享标题
170
+ desc: '解放创意引领未来|国际前沿的AIGC平台', // 分享描述
171
+ link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
172
+ type: 'link', //分享类型,music、video或link,不填默认为link
173
+ imgUrl: 'https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png', // 分享图标
174
+ success: function () {
175
+ // 设置成功
176
+ console.log('分享成功');
177
+ },
178
+ error: function () {
179
+ console.log('分享失败');
180
+ },
181
+ cancel: function () {
182
+ console.log('取消分享');
183
+ }
184
+ };
185
+ wx.ready(() => {
186
+ wx.updateAppMessageShareData(shareInfo); //分享到微信好友或者qq好友
187
+ wx.updateTimelineShareData(shareInfo); //分享到朋友圈或者qq空间
188
+ });
189
+ wx.error(() => { });
190
+ });
191
+ }
192
+ async saveAccountLog(info, orderid, company, message) {
193
+ let url = "https://test.fmode.cn/api/apig/saveAccountLog";
194
+ return new Promise((res, rej) => {
195
+ this.http
196
+ .post(url, {
197
+ company: company,
198
+ uid: Parse.User.current().id,
199
+ orderid: orderid,
200
+ info: info,
201
+ })
202
+ .subscribe((data) => {
203
+ console.log(data);
204
+ res(true);
205
+ }, (err) => {
206
+ console.warn(err);
207
+ message && message.error("请求超时,请稍后再试");
208
+ rej();
209
+ });
210
+ });
211
+ }
212
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, deps: [{ token: i1.NovaCloudService }, { token: i2.AuthService }, { token: i3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
213
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, providedIn: "root" }); }
214
+ }
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, decorators: [{
216
+ type: Injectable,
217
+ args: [{
218
+ providedIn: "root",
219
+ }]
220
+ }], ctorParameters: () => [{ type: i1.NovaCloudService }, { type: i2.AuthService }, { type: i3.HttpClient }] });
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi91c2VyL2FjY291bnQvYWNjb3VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBTWxELE1BQU0sT0FBTyxjQUFjO0lBWXpCLFlBQ1UsTUFBd0IsRUFDeEIsUUFBcUIsRUFDckIsSUFBZ0I7UUFGaEIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBZDFCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFRO1lBQ2IsTUFBTSxFQUFFO2dCQUNOLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRixDQUFDO1FBRUYsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLFVBQUssR0FBVSxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1FBTzNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsWUFBWTtJQUNaLEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksSUFBUyxDQUFDO1FBQ2Qsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQztZQUNILElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQSxDQUFDO1FBQ2hCLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLGFBQWE7UUFDakIsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUFFLE9BQU07WUFDaEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7WUFDdEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQWMsa0JBQWtCO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDcEMsa0RBQWtEO1lBQ2xELElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3hDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRCw2QkFBNkI7WUFDN0IsZUFBZTtZQUNmLG1FQUFtRTtZQUNuRSxtQkFBbUI7WUFDbkIseUJBQXlCO1lBQ3pCLHFCQUFxQjtZQUNyQiwwRUFBMEU7WUFDMUUsS0FBSztZQUNMLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDbEIsNERBQTREO29CQUM1RCxJQUFJLENBQUMsS0FBSztvQkFDVixnQkFBZ0I7b0JBQ2hCLFlBQVk7b0JBQ1osdUVBQXVFLENBQUM7WUFDMUUsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBQ0Qsc0JBQXNCO0lBQ3RCLG9CQUFvQixDQUFDLElBQVk7UUFDL0IsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2hDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUM1QyxDQUFDO1FBQ0YsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUFTLENBQ2IsSUFBWSxFQUNaLE1BQWMsa0JBQWtCO1FBRWhDLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsSUFBSTtpQkFDTixJQUFJLENBQUMsMkNBQTJDLEVBQUU7Z0JBQ2pELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDO2lCQUNELFNBQVMsQ0FDUixLQUFLLEVBQUUsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzlDLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUM3Qiw2REFBNkQ7b0JBQzdELFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNoQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUE7b0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRzt3QkFDbkIsUUFBUSxFQUFFLE1BQU07cUJBQ2pCO3dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDLEVBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQ0YsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFlBQVk7SUFDWix3QkFBd0I7UUFDdEIsSUFBSSxNQUFNLEdBQUc7WUFDWCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RELENBQUM7UUFDRixJQUFJLENBQUMsSUFBSTthQUNOLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxNQUFNLENBQUM7YUFDNUQsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdEIsVUFBVTtZQUNWLElBQUksR0FBRyxHQUFRLFFBQVEsQ0FBQztZQUN4QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUV6QixFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUNSLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUztnQkFDdkIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsY0FBYztnQkFDeEMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsY0FBYztnQkFDaEQsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsY0FBYztnQkFDOUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsYUFBYTtnQkFDL0MsU0FBUyxFQUFFO29CQUNULGFBQWEsRUFBRSxZQUFZO29CQUMzQixxQkFBcUIsRUFBRSxVQUFVO29CQUNqQyx1QkFBdUIsRUFBRSxTQUFTO29CQUNsQyxlQUFlLEVBQUUsT0FBTztvQkFDeEIsa0JBQWtCLEVBQUUsU0FBUztvQkFDN0IsMkJBQTJCLEVBQUUsZUFBZTtvQkFDNUMseUJBQXlCLENBQUMsc0JBQXNCO2lCQUNqRCxFQUFFLDhCQUE4QjthQUNsQyxDQUFDLENBQUM7WUFFSCxJQUFJLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQTtZQUMvQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFBO1lBQ2hDLEdBQUcsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFBO1lBQ3RELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUk7Z0JBQ2hDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTztnQkFDdEIsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE9BQU87Z0JBQ3JDLElBQUksRUFBRSxHQUFHLEVBQUUscUNBQXFDO2dCQUNoRCxJQUFJLEVBQUUsTUFBTSxFQUFFLGlDQUFpQztnQkFDL0MsTUFBTSxFQUFFLHFFQUFxRSxFQUFFLE9BQU87Z0JBQ3RGLE9BQU8sRUFBRTtvQkFDUCxPQUFPO29CQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7YUFDRixDQUFDO1lBRUYsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osRUFBRSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZTtnQkFDeEQsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYztZQUN2RCxDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZLEVBQUUsT0FBYyxFQUFFLE9BQWMsRUFBRSxPQUFXO1FBQzVFLElBQUksR0FBRyxHQUFHLCtDQUErQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUk7aUJBQ1IsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVCxPQUFPLEVBQUUsT0FBTztnQkFDaEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtnQkFDNUIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztpQkFDRCxTQUFTLENBQ1IsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDWixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixHQUFHLENBQUUsSUFBSSxDQUFDLENBQUE7WUFDWixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdkMsR0FBRyxFQUFFLENBQUE7WUFDUCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzsrR0F4TlUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5vdmFDbG91ZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vbm92YS1jbG91ZC9ub3ZhLWNsb3VkLnNlcnZpY2VcIjtcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSBcIi4uL2xvZ2luL2F1dGguc2VydmljZVwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuZGVjbGFyZSB2YXIgd3g6IGFueTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2Uge1xuICBjb21wYW55OiBzdHJpbmcgPSBcIlwiO1xuICBiaWxsaW5nOiBhbnkgPSB7XG4gICAgY3JlZGl0OiB7XG4gICAgICB1c2VkRGV0YWlsOiB7fSxcbiAgICB9LFxuICB9O1xuICBwcm9maWxlOiBQYXJzZS5PYmplY3Q7XG4gIHd4QXBwSWQgPSBcIlwiO1xuICB3eHBheUVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXBwaWQ6c3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJXRUNIQVRfQVBQX0lEXCIpIHx8IFwid3hiNDE5M2M5M2FlOWFhNjk2XCI7XG4gIHNoYXJlSW5mbzphbnlcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuY2xvdWQ6IE5vdmFDbG91ZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydjogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHRoaXMuY29tcGFueSA9IHRoaXMuYXV0aFNlcnYuY29tcGFueSB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImNvbXBhbnlcIik7XG4gICAgdGhpcy5nZXRCaWxsaW5nKCk7XG4gICAgdGhpcy5nZXRQcm9maWxlKCk7XG4gICAgdGhpcy5nZXRVc2VyT3BlbmlkKCk7XG4gIH1cbiAgLyog6I635Y+W6K6k6K+B5L+h5oGvICovXG4gIGFzeW5jIGdldFByb2ZpbGUoKSB7XG4gICAgbGV0IHVpZCA9IFBhcnNlLlVzZXIuY3VycmVudCgpPy5pZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuO1xuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIlByb2ZpbGVcIik7XG4gICAgcXVlcnkuZXF1YWxUbyhcInVzZXJcIiwgdWlkKTtcbiAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLCB0aGlzLmNvbXBhbnkpO1xuICAgIHF1ZXJ5Lm5vdEVxdWFsVG8oXCJpc0RlbGV0ZWRcIiwgdHJ1ZSk7XG4gICAgbGV0IHByb2ZpbGUgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xuICAgIGlmIChwcm9maWxlPy5pZCkge1xuICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZ2V0QmlsbGluZygpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGlmKCFQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uZ2V0U2Vzc2lvblRva2VuKCkpcmV0dXJuIC8vIOeUqOaIt+eZu+mZhuaXtuaJjeWPr+afpeivoui0puWNlVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5uY2xvdWQuYXBpZyhcImFpZ2MvYWNjb3VudFwiLCBudWxsLCBcImdldFwiKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgaWYgKGRhdGE/LmNyZWRpdCkge1xuICAgICAgdGhpcy5iaWxsaW5nID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLyog5aaC5p6c5piv5b6u5L+h5YaF572u5rWP6KeI5Zmo77yM6I635Y+W55m75b2VY29kZSAqL1xuICBhc3luYyBnZXRVc2VyT3BlbmlkKCkge1xuICAgIGxldCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaXNXZWl4aW4gPSB1YS5pbmRleE9mKFwibWljcm9tZXNzZW5nZXJcIikgIT0gLTE7XG4gICAgbGV0IGNvZGUgPSB0aGlzLmdldFF1ZXJ5U3RyaW5nQnlOYW1lKFwiY29kZVwiKTtcbiAgICBsZXQgb3BlbmlkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJvcGVuaWRcIik7XG4gICAgaWYgKCFvcGVuaWQpIHtcbiAgICAgIGlmKCFQYXJzZS5Vc2VyLmN1cnJlbnQoKSkgcmV0dXJuXG4gICAgICBsZXQgd2VjaGF0ID0gUGFyc2UuVXNlci5jdXJyZW50KCkuZ2V0KFwid2VjaGF0XCIpO1xuICAgICAgb3BlbmlkID0gd2VjaGF0Py5bdGhpcy5hcHBpZF0/Lm9wZW5pZDtcbiAgICAgIGlmIChpc1dlaXhpbikge1xuICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICB0aGlzLmF1dGhXZWNoYXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldHdlY2hhdChjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBhdXRoV2VjaGF0KHVybDogc3RyaW5nID0gXCIvYWNjb3VudC9iaWxsaW5nXCIpIHtcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKFwib3BlbmlkXCIpKSB7XG4gICAgICAvLyBsZXQgUkVESVJFQ1RfVVJJID0gXCJodHRwczovL2FpLmZtb2RlLmNuXCIgKyB1cmw7XG4gICAgICBsZXQgUkVESVJFQ1RfVVJJID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBSRURJUkVDVF9VUkkgPSBlbmNvZGVVUklDb21wb25lbnQoUkVESVJFQ1RfVVJJKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFJFRElSRUNUX1VSSSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgIC8vICAgXCJodHRwczovL29wZW4ud2VpeGluLnFxLmNvbS9jb25uZWN0L29hdXRoMi9hdXRob3JpemU/YXBwaWQ9XCIgK1xuICAgICAgLy8gICAgIHRoaXMuYXBwaWQgK1xuICAgICAgLy8gICAgIFwiJnJlZGlyZWN0X3VyaT1cIiArXG4gICAgICAvLyAgICAgUkVESVJFQ1RfVVJJICtcbiAgICAgIC8vICAgICBcIiZyZXNwb25zZV90eXBlPWNvZGUmc2NvcGU9c25zYXBpX2Jhc2Umc3RhdGU9U1RBVEUjd2VjaGF0X3JlZGlyZWN0XCJcbiAgICAgIC8vICk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9XG4gICAgICAgIFwiaHR0cHM6Ly9vcGVuLndlaXhpbi5xcS5jb20vY29ubmVjdC9vYXV0aDIvYXV0aG9yaXplP2FwcGlkPVwiICtcbiAgICAgICAgdGhpcy5hcHBpZCArXG4gICAgICAgIFwiJnJlZGlyZWN0X3VyaT1cIiArXG4gICAgICAgIFJFRElSRUNUX1VSSSArXG4gICAgICAgIFwiJnJlc3BvbnNlX3R5cGU9Y29kZSZzY29wZT1zbnNhcGlfdXNlcmluZm8mc3RhdGU9U1RBVEUjd2VjaGF0X3JlZGlyZWN0XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIC8v5qC55o2uUXVlcnlTdHJpbmflj4LmlbDlkI3np7Dojrflj5blgLxcbiAgZ2V0UXVlcnlTdHJpbmdCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3VsdCA9IGxvY2F0aW9uLnNlYXJjaC5tYXRjaChcbiAgICAgIG5ldyBSZWdFeHAoXCJbPyZdXCIgKyBuYW1lICsgXCI9KFteJl0rKVwiLCBcImlcIilcbiAgICApO1xuICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRbMV07XG4gIH1cbiAgYXN5bmMgZ2V0d2VjaGF0KFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyA9IFwiL2FjY291bnQvYmlsbGluZ1wiXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYGh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL2FwaS93ZWNoYXQvZ2V0X3d4YCwge1xuICAgICAgICAgIGNvbXBhbnk6IHRoaXMuY29tcGFueSxcbiAgICAgICAgICBjb2RlOiBjb2RlLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhLm9wZW5pZCkge1xuICAgICAgICAgICAgICBsZXQgb3BlbmlkID0gcmVzLmRhdGEub3BlbmlkO1xuICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aERhdGEnLCBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkpXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwib3BlbmlkXCIsIG9wZW5pZCk7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiY29kZVwiKTtcbiAgICAgICAgICAgICAgbGV0IHd4b3B0cyA9IHt9XG4gICAgICAgICAgICAgIHd4b3B0c1t0aGlzLmFwcGlkXSA9IHtcbiAgICAgICAgICAgICAgICBcIm9wZW5pZFwiOiBvcGVuaWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFBhcnNlLlVzZXIuY3VycmVudCgpLnNldChcIndlY2hhdFwiLCB3eG9wdHMpO1xuICAgICAgICAgICAgICBhd2FpdCBQYXJzZS5Vc2VyLmN1cnJlbnQoKS5zYXZlKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIHVwZGF0aW5nIGl0ZW1zXCIsIGVycik7XG4gICAgICAgICAgICB0aGlzLmF1dGhXZWNoYXQodXJsKTtcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qIOiOt+WPluW+ruS/oeetvuWQjSAqL1xuICBnZXRXWFNpZ25QYWNrYWdlSW5XZWNoYXQoKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgIGNvbXBhbnk6IHRoaXMuY29tcGFueSxcbiAgICAgIGhyZWY6IGVuY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXSksXG4gICAgfTtcbiAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGBodHRwczovL3NlcnZlci5mbW9kZS5jbi9hcGkvd2VjaGF0L2dldGNvbmZpZ2AsIHBhcmFtcylcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIOi/lOWbnueahOetvuWQjeS/oeaBr1xuICAgICAgICBsZXQgcmVzOiBhbnkgPSByZXNwb25zZTtcbiAgICAgICAgY29uc3Qgc2lnblBhY2thZ2UgPSByZXMuZGF0YTtcbiAgICAgICAgdGhpcy53eEFwcElkID0gc2lnblBhY2thZ2UuYXBwaWQ7XG4gICAgICAgIHRoaXMud3hwYXlFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICB3eC5jb25maWcoe1xuICAgICAgICAgIGRlYnVnOiBmYWxzZSwgLy8g5byA5ZCv6LCD6K+V5qih5byPXG4gICAgICAgICAgYXBwSWQ6IHNpZ25QYWNrYWdlLmFwcGlkLCAvLyDlv4XloavvvIzlhazkvJflj7fnmoTllK/kuIDmoIfor4ZcbiAgICAgICAgICB0aW1lc3RhbXA6IHNpZ25QYWNrYWdlLnRpbWVzdGFtcCwgLy8g5b+F5aGr77yM55Sf5oiQ562+5ZCN55qE5pe26Ze05oizXG4gICAgICAgICAgbm9uY2VTdHI6IHNpZ25QYWNrYWdlLm5vbmNlU3RyLCAvLyDlv4XloavvvIznlJ/miJDnrb7lkI3nmoTpmo/mnLrkuLJcbiAgICAgICAgICBzaWduYXR1cmU6IHNpZ25QYWNrYWdlLnNpZ25hdHVyZSwgLy8g5b+F5aGr77yM562+5ZCN77yM6KeB6ZmE5b2VMVxuICAgICAgICAgIGpzQXBpTGlzdDogW1xuICAgICAgICAgICAgXCJjaG9vc2VXWFBheVwiLCAvLyBKU0FQSeW+ruS/oeaUr+S7mFxuICAgICAgICAgICAgJ29uTWVudVNoYXJlVGltZWxpbmUnLCAvL+WIhuS6q+WIsOW+ruS/oeaci+WPi+WciFxuICAgICAgICAgICAgJ29uTWVudVNoYXJlQXBwTWVzc2FnZScsIC8v5YiG5Lqr57uZ5b6u5L+h5pyL5Y+LXG4gICAgICAgICAgICAnb25NZW51U2hhcmVRUScsIC8v5YiG5Lqr5YiwUVFcbiAgICAgICAgICAgICdvbk1lbnVTaGFyZVFab25lJywgLy/liIbkuqvliLBRUeepuumXtFxuICAgICAgICAgICAgJ3VwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGEnLCAvL+WIhuS6q+WIsOW+ruS/oeWPilFR77yI5paw5o6l5Y+j77yJXG4gICAgICAgICAgICAndXBkYXRlVGltZWxpbmVTaGFyZURhdGEnIC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI4oCd5Y+K4oCc5YiG5Lqr5YiwUVHnqbrpl7TvvIjmlrDmjqXlj6NcbiAgICAgICAgICBdLCAvLyDlv4XloavvvIzpnIDopoHkvb/nlKjnmoRKU+aOpeWPo+WIl+ihqO+8jOaJgOaciUpT5o6l5Y+j5YiX6KGo6KeB6ZmE5b2VMlxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGxldCB1cmwgPSAnaHR0cHM6Ly9haS5mbW9kZS5jbidcbiAgICAgICAgbGV0IHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWVcbiAgICAgICAgdXJsICsgcGF0aG5hbWUgKyAnP2ludml0ZT0nICsgUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkXG4gICAgICAgIGxldCBzaGFyZUluZm8gPSB0aGlzLnNoYXJlSW5mbyB8fCB7XG4gICAgICAgICAgdGl0bGU6ICfpo57noIFBSScsIC8vIOWIhuS6q+agh+mimFxuICAgICAgICAgIGRlc2M6ICfop6PmlL7liJvmhI/lvJXpoobmnKrmnaV85Zu96ZmF5YmN5rK/55qEQUlHQ+W5s+WPsCcsIC8vIOWIhuS6q+aPj+i/sFxuICAgICAgICAgIGxpbms6IHVybCwgLy8g5YiG5Lqr6ZO+5o6l77yM6K+l6ZO+5o6l5Z+f5ZCN5oiW6Lev5b6E5b+F6aG75LiO5b2T5YmN6aG16Z2i5a+55bqU55qE5YWs5LyX5Y+3SlPlronlhajln5/lkI3kuIDoh7RcbiAgICAgICAgICB0eXBlOiAnbGluaycsIC8v5YiG5Lqr57G75Z6LLG11c2lj44CBdmlkZW/miJZsaW5r77yM5LiN5aGr6buY6K6k5Li6bGlua1xuICAgICAgICAgIGltZ1VybDogJ2h0dHBzOi8vZmlsZS1jbG91ZC5mbW9kZS5jbi9FNEtwR3ZURXRvLzIwMjMwODIyLzNta2Y0MTAzMzYyMzI3NS5wbmcnLCAvLyDliIbkuqvlm77moIdcbiAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIOiuvue9ruaIkOWKn1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIhuS6q+aIkOWKnycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIhuS6q+Wksei0pScpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCflj5bmtojliIbkuqsnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgd3gucmVhZHkoKCkgPT4ge1xuICAgICAgICAgIHd4LnVwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGEoc2hhcmVJbmZvKTsgLy/liIbkuqvliLDlvq7kv6Hlpb3lj4vmiJbogIVxceWlveWPi1xuICAgICAgICAgIHd4LnVwZGF0ZVRpbWVsaW5lU2hhcmVEYXRhKHNoYXJlSW5mbyk7IC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI5oiW6ICFcXHnqbrpl7RcbiAgICAgICAgfSk7XG4gICAgICAgIHd4LmVycm9yKCgpID0+IHt9KTtcbiAgICAgIH0pO1xuICB9XG4gIFxuICBhc3luYyBzYXZlQWNjb3VudExvZyhpbmZvOiBvYmplY3QsIG9yZGVyaWQ6c3RyaW5nLCBjb21wYW55OnN0cmluZywgbWVzc2FnZTphbnkpIHtcbiAgICBsZXQgdXJsID0gXCJodHRwczovL3Rlc3QuZm1vZGUuY24vYXBpL2FwaWcvc2F2ZUFjY291bnRMb2dcIjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcyxyZWopPT57XG4gICAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwge1xuICAgICAgICBjb21wYW55OiBjb21wYW55LFxuICAgICAgICB1aWQ6IFBhcnNlLlVzZXIuY3VycmVudCgpLmlkLFxuICAgICAgICBvcmRlcmlkOiBvcmRlcmlkLFxuICAgICAgICBpbmZvOiBpbmZvLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICByZXMgKHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICBtZXNzYWdlICYmIG1lc3NhZ2UuZXJyb3IoXCLor7fmsYLotoXml7bvvIzor7fnqI3lkI7lho3or5VcIik7XG4gICAgICAgICAgcmVqKClcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KVxuICAgIFxuICB9XG59XG4iXX0=
@@ -1,10 +1,135 @@
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/captcha/captcha.component.mjs
7
- */
8
- import{Component,Input,Output,EventEmitter,ViewChild,ElementRef}from"@angular/core";import{CommonModule}from"@angular/common";import{FormsModule}from"@angular/forms";import*as i0 from"@angular/core";import*as i1 from"@angular/common";import*as i2 from"@angular/forms";export class CaptchaComponent{constructor(){this.type="input",this.canvas_id="canvasCode",this.drawCode=[],this.vCode="",this.changeVal=new EventEmitter,this.onEnter=new EventEmitter,this.code=""}ngOnInit(){}ngAfterViewInit(){this.updateDrawCode()}updateDrawCode(){let e=100,t=document.getElementById(this.canvas_id);t&&this.canvasDom.nativeElement.removeChild(t);let n=document.getElementById(this.canvas_id+"_a");n&&this.canvasDom.nativeElement.removeChild(n),this.canvasDom.nativeElement;let o=document.createElement("canvas");o.className="canvas",o.setAttribute("id",this.canvas_id),o.addEventListener("click",(()=>{this.updateDrawCode()}));let a=o.getContext("2d");o.width=e,o.height=38;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(","),d=i.length;for(let e=0;e<=3;e++){let t=Math.floor(Math.random()*d),n=30*Math.random()*Math.PI/180,o=i[t];this.drawCode[e]=o;let r=10+20*e,s=20+8*Math.random();a.font="bold 23px 微软雅黑",a.translate(r,s),a.rotate(n),a.fillStyle=this.randomColor(),a.fillText(o,0,0),a.rotate(-n),a.translate(-r,-s)}for(let t=0;t<=5;t++)a.strokeStyle=this.randomColor(),a.beginPath(),a.moveTo(Math.random()*e,38*Math.random()),a.lineTo(Math.random()*e,38*Math.random()),a.stroke();for(let t=0;t<=30;t++){a.strokeStyle=this.randomColor(),a.beginPath();let t=Math.random()*e,n=38*Math.random();a.moveTo(t,n),a.lineTo(t+1,n+1),a.stroke()}this.code=this.drawCode.join(""),this.changeVal.emit({code:this.code,vCode:this.vCode}),this.canvasDom.nativeElement.appendChild(o);let r=document.createElement("a");r.setAttribute("id",this.canvas_id+"_a"),r.innerText="看不清,换一张",r.addEventListener("click",(()=>{this.updateDrawCode()})),this.canvasDom.nativeElement.appendChild(r)}randomColor(){return"rgb("+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+")"}enter(e){13==e.keyCode&&(this.changeVal.emit({code:this.code,vCode:this.vCode}),this.onEnter.emit())}onChange(){this.changeVal.emit({code:this.code,vCode:this.vCode})}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CaptchaComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CaptchaComponent,isStandalone:!0,selector:"fm-captcha",inputs:{type:"type",canvas_id:"canvas_id",drawCode:"drawCode",vCode:"vCode"},outputs:{changeVal:"changeVal",onEnter:"onEnter"},viewQueries:[{propertyName:"canvasDom",first:!0,predicate:["canvasDom"],descendants:!0}],ngImport:i0,template:'<ng-container *ngIf="type == \'input\'; else elseTemplate">\n <div class="captcha">\n <input\n nz-input\n class="code-input"\n type="text"\n [(ngModel)]="vCode"\n maxlength="4"\n placeholder="验证码"\n [nzStatus]="vCode.length == 4 ? \'\' : \'error\'"\n (keydown)="enter($event)"\n (change)="onChange()"\n />\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class="captcha">\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-template>\n',styles:[".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i1.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i2.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:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CaptchaComponent,decorators:[{type:Component,args:[{imports:[CommonModule,FormsModule],standalone:!0,selector:"fm-captcha",template:'<ng-container *ngIf="type == \'input\'; else elseTemplate">\n <div class="captcha">\n <input\n nz-input\n class="code-input"\n type="text"\n [(ngModel)]="vCode"\n maxlength="4"\n placeholder="验证码"\n [nzStatus]="vCode.length == 4 ? \'\' : \'error\'"\n (keydown)="enter($event)"\n (change)="onChange()"\n />\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class="captcha">\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-template>\n',styles:[".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"]}]}],ctorParameters:()=>[],propDecorators:{canvasDom:[{type:ViewChild,args:["canvasDom"]}],type:[{type:Input}],canvas_id:[{type:Input}],drawCode:[{type:Input}],vCode:[{type:Input}],changeVal:[{type:Output}],onEnter:[{type:Output}]}});
9
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2NhcHRjaGEvY2FwdGNoYS5jb21wb25lbnQubWpz`
10
-
1
+ import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { FormsModule } from "@angular/forms";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class CaptchaComponent {
8
+ constructor() {
9
+ this.type = 'input'; //default & input 默认input方式
10
+ this.canvas_id = 'canvasCode'; //元素id
11
+ this.drawCode = []; //验证码数组
12
+ this.vCode = ''; //用户输入code
13
+ this.changeVal = new EventEmitter(); //改变时触发
14
+ this.onEnter = new EventEmitter(); //enter按下触发
15
+ this.code = '';
16
+ }
17
+ ngOnInit() { }
18
+ ngAfterViewInit() {
19
+ //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
20
+ //Add 'implements AfterViewInit' to the class.
21
+ this.updateDrawCode();
22
+ }
23
+ updateDrawCode() {
24
+ let canvas_width = 100;
25
+ let canvas_height = 38;
26
+ let canv = document.getElementById(this.canvas_id);
27
+ canv && this.canvasDom.nativeElement.removeChild(canv);
28
+ let _a = document.getElementById(this.canvas_id + '_a');
29
+ _a && this.canvasDom.nativeElement.removeChild(_a);
30
+ this.canvasDom.nativeElement;
31
+ let canvas = document.createElement("canvas");
32
+ canvas.className = "canvas";
33
+ canvas.setAttribute("id", this.canvas_id);
34
+ canvas.addEventListener("click", () => {
35
+ this.updateDrawCode();
36
+ });
37
+ let context = canvas.getContext("2d"); //获取到canvas画图的环境,演员表演的舞台
38
+ canvas.width = canvas_width;
39
+ canvas.height = canvas_height;
40
+ 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";
41
+ let aCode = sCode.split(",");
42
+ let aLength = aCode.length; //获取到数组的长度
43
+ for (let i = 0; i <= 3; i++) {
44
+ let j = Math.floor(Math.random() * aLength); //获取到随机的索引值
45
+ let deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度
46
+ let txt = aCode[j]; //得到随机的一个内容
47
+ this.drawCode[i] = txt;
48
+ let x = 10 + i * 20; //文字在canvas上的x坐标
49
+ let y = 20 + Math.random() * 8; //文字在canvas上的y坐标
50
+ context.font = "bold 23px 微软雅黑";
51
+ context.translate(x, y);
52
+ context.rotate(deg);
53
+ context.fillStyle = this.randomColor();
54
+ context.fillText(txt, 0, 0);
55
+ context.rotate(-deg);
56
+ context.translate(-x, -y);
57
+ }
58
+ for (let i = 0; i <= 5; i++) {
59
+ //验证码上显示线条
60
+ context.strokeStyle = this.randomColor();
61
+ context.beginPath();
62
+ context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
63
+ context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
64
+ context.stroke();
65
+ }
66
+ for (let i = 0; i <= 30; i++) {
67
+ //验证码上显示小点
68
+ context.strokeStyle = this.randomColor();
69
+ context.beginPath();
70
+ let x = Math.random() * canvas_width;
71
+ let y = Math.random() * canvas_height;
72
+ context.moveTo(x, y);
73
+ context.lineTo(x + 1, y + 1);
74
+ context.stroke();
75
+ }
76
+ this.code = this.drawCode.join("");
77
+ this.changeVal.emit({
78
+ code: this.code,
79
+ vCode: this.vCode
80
+ });
81
+ this.canvasDom.nativeElement.appendChild(canvas);
82
+ let a = document.createElement("a");
83
+ a.setAttribute("id", this.canvas_id + '_a');
84
+ a.innerText = "看不清,换一张";
85
+ a.addEventListener("click", () => {
86
+ this.updateDrawCode();
87
+ });
88
+ this.canvasDom.nativeElement.appendChild(a);
89
+ }
90
+ /* 得到随机的颜色值 */
91
+ randomColor() {
92
+ let r = Math.floor(Math.random() * 256);
93
+ let g = Math.floor(Math.random() * 256);
94
+ let b = Math.floor(Math.random() * 256);
95
+ return "rgb(" + r + "," + g + "," + b + ")";
96
+ }
97
+ //按下确认键触发
98
+ enter(e) {
99
+ if (e.keyCode == 13) {
100
+ this.changeVal.emit({
101
+ code: this.code,
102
+ vCode: this.vCode
103
+ });
104
+ this.onEnter.emit();
105
+ }
106
+ }
107
+ onChange() {
108
+ this.changeVal.emit({
109
+ code: this.code,
110
+ vCode: this.vCode
111
+ });
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CaptchaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CaptchaComponent, isStandalone: true, selector: "fm-captcha", inputs: { type: "type", canvas_id: "canvas_id", drawCode: "drawCode", vCode: "vCode" }, outputs: { changeVal: "changeVal", onEnter: "onEnter" }, viewQueries: [{ propertyName: "canvasDom", first: true, predicate: ["canvasDom"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"type == 'input'; else elseTemplate\">\n <div class=\"captcha\">\n <input\n nz-input\n class=\"code-input\"\n type=\"text\"\n [(ngModel)]=\"vCode\"\n maxlength=\"4\"\n placeholder=\"\u9A8C\u8BC1\u7801\"\n [nzStatus]=\"vCode.length == 4 ? '' : 'error'\"\n (keydown)=\"enter($event)\"\n (change)=\"onChange()\"\n />\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class=\"captcha\">\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-template>\n", styles: [".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CaptchaComponent, decorators: [{
117
+ type: Component,
118
+ args: [{ imports: [CommonModule, FormsModule], standalone: true, selector: 'fm-captcha', template: "<ng-container *ngIf=\"type == 'input'; else elseTemplate\">\n <div class=\"captcha\">\n <input\n nz-input\n class=\"code-input\"\n type=\"text\"\n [(ngModel)]=\"vCode\"\n maxlength=\"4\"\n placeholder=\"\u9A8C\u8BC1\u7801\"\n [nzStatus]=\"vCode.length == 4 ? '' : 'error'\"\n (keydown)=\"enter($event)\"\n (change)=\"onChange()\"\n />\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class=\"captcha\">\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-template>\n", styles: [".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"] }]
119
+ }], ctorParameters: () => [], propDecorators: { canvasDom: [{
120
+ type: ViewChild,
121
+ args: ["canvasDom"]
122
+ }], type: [{
123
+ type: Input
124
+ }], canvas_id: [{
125
+ type: Input
126
+ }], drawCode: [{
127
+ type: Input
128
+ }], vCode: [{
129
+ type: Input
130
+ }], changeVal: [{
131
+ type: Output
132
+ }], onEnter: [{
133
+ type: Output
134
+ }] } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3VzZXIvY2FwdGNoYS9jYXB0Y2hhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdXNlci9jYXB0Y2hhL2NhcHRjaGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRN0MsTUFBTSxPQUFPLGdCQUFnQjtJQVV6QjtRQVBTLFNBQUksR0FBVyxPQUFPLENBQUMsQ0FBRSwyQkFBMkI7UUFDcEQsY0FBUyxHQUFXLFlBQVksQ0FBQyxDQUFDLE1BQU07UUFDeEMsYUFBUSxHQUFrQixFQUFFLENBQUMsQ0FBQyxPQUFPO1FBQ3JDLFVBQUssR0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQzdCLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU87UUFDMUQsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsV0FBVztRQUN0RSxTQUFJLEdBQVUsRUFBRSxDQUFBO0lBQ0QsQ0FBQztJQUVoQixRQUFRLEtBQUksQ0FBQztJQUNiLGVBQWU7UUFDYiw2R0FBNkc7UUFDN0csOENBQThDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLGFBQWEsR0FBRyxF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QUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNsQixJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ2QsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLO2FBQ2pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDckIsQ0FBQztJQUNILENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJO1lBQ2QsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBckhRLGdCQUFnQjttR0FBaEIsZ0JBQWdCLCtUQ2xCN0IsbWxCQXFCQSx5VkRUVyxZQUFZLGtJQUFDLFdBQVc7OzRGQU10QixnQkFBZ0I7a0JBUDVCLFNBQVM7OEJBQ0EsQ0FBQyxZQUFZLEVBQUMsV0FBVyxDQUFDLGNBQ3ZCLElBQUksWUFDTCxZQUFZO3dEQUtJLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6W0NvbW1vbk1vZHVsZSxGb3Jtc01vZHVsZV0sXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcbiAgc2VsZWN0b3I6ICdmbS1jYXB0Y2hhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcHRjaGEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXB0Y2hhLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZChcImNhbnZhc0RvbVwiKSBjYW52YXNEb206IEVsZW1lbnRSZWY7IC8v5pys5Zyw5qCh6aqM56CB57uY55S7XG5cbiAgICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSAnaW5wdXQnOyAgLy9kZWZhdWx0ICYgaW5wdXQg6buY6K6kaW5wdXTmlrnlvI9cbiAgICBASW5wdXQoKSBjYW52YXNfaWQ6IHN0cmluZyA9ICdjYW52YXNDb2RlJzsgLy/lhYPntKBpZFxuICAgIEBJbnB1dCgpIGRyYXdDb2RlOiBBcnJheTxzdHJpbmc+ID0gW107IC8v6aqM6K+B56CB5pWw57uEXG4gICAgQElucHV0KCkgdkNvZGU6IHN0cmluZyA9ICcnOyAvL+eUqOaIt+i+k+WFpWNvZGVcbiAgICBAT3V0cHV0KCkgY2hhbmdlVmFsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy/mlLnlj5jml7bop6blj5FcbiAgICBAT3V0cHV0KCkgb25FbnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vZW50ZXLmjInkuIvop6blj5FcbiAgICBjb2RlOnN0cmluZyA9ICcnXG4gICAgY29uc3RydWN0b3IoKSB7fVxuICBcbiAgICBuZ09uSW5pdCgpIHt9XG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgLy9DYWxsZWQgYWZ0ZXIgbmdBZnRlckNvbnRlbnRJbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIEFwcGxpZXMgdG8gY29tcG9uZW50cyBvbmx5LlxuICAgICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgICAgdGhpcy51cGRhdGVEcmF3Q29kZSgpO1xuICAgIH1cbiAgICB1cGRhdGVEcmF3Q29kZSgpIHtcbiAgICAgIGxldCBjYW52YXNfd2lkdGggPSAxMDA7XG4gICAgICBsZXQgY2FudmFzX2hlaWdodCA9IDM4O1xuICAgICAgbGV0IGNhbnYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNhbnZhc19pZCk7XG4gICAgICBjYW52ICYmIHRoaXMuY2FudmFzRG9tLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2Fudik7XG4gICAgICBsZXQgX2EgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNhbnZhc19pZCArICdfYScpO1xuICAgICAgX2EgJiYgdGhpcy5jYW52YXNEb20ubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZChfYSk7XG4gICAgICB0aGlzLmNhbnZhc0RvbS5uYXRpdmVFbGVtZW50O1xuICAgICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICBjYW52YXMuY2xhc3NOYW1lID0gXCJjYW52YXNcIjtcbiAgICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aGlzLmNhbnZhc19pZCk7XG4gICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVEcmF3Q29kZSgpO1xuICAgICAgfSk7XG4gICAgICBsZXQgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7IC8v6I635Y+W5YiwY2FudmFz55S75Zu+55qE546v5aKD77yM5ryU5ZGY6KGo5ryU55qE6Iie5Y+wXG4gICAgICBjYW52YXMud2lkdGggPSBjYW52YXNfd2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzX2hlaWdodDtcbiAgICAgIGxldCBzQ29kZSA9XG4gICAgICAgIFwiQSxCLEMsRSxGLEcsSCxKLEssTCxNLE4sUCxRLFIsUyxULFcsWCxZLFosMSwyLDMsNCw1LDYsNyw4LDksMCxxLHcsZSxyLHQseSx1LGksbyxwLGEscyxkLGYsZyxoLGosayxsLHoseCxjLHYsYixuLG1cIjtcbiAgICAgIGxldCBhQ29kZSA9IHNDb2RlLnNwbGl0KFwiLFwiKTtcbiAgICAgIGxldCBhTGVuZ3RoID0gYUNvZGUubGVuZ3RoOyAvL+iOt+WPluWIsOaVsOe7hOeahOmVv+W6plxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYUxlbmd0aCk7IC8v6I635Y+W5Yiw6ZqP5py655qE57Si5byV5YC8XG4gICAgICAgIGxldCBkZWcgPSAoTWF0aC5yYW5kb20oKSAqIDMwICogTWF0aC5QSSkgLyAxODA7IC8v5Lqn55SfMH4zMOS5i+mXtOeahOmaj+acuuW8p+W6plxuICAgICAgICBsZXQgdHh0ID0gYUNvZGVbal07IC8v5b6X5Yiw6ZqP5py655qE5LiA5Liq5YaF5a65XG4gICAgICAgIHRoaXMuZHJhd0NvZGVbaV0gPSB0eHQ7XG4gICAgICAgIGxldCB4ID0gMTAgKyBpICogMjA7IC8v5paH5a2X5ZyoY2FudmFz5LiK55qEeOWdkOagh1xuICAgICAgICBsZXQgeSA9IDIwICsgTWF0aC5yYW5kb20oKSAqIDg7IC8v5paH5a2X5ZyoY2FudmFz5LiK55qEeeWdkOagh1xuICAgICAgICBjb250ZXh0LmZvbnQgPSBcImJvbGQgMjNweCDlvq7ova/pm4Xpu5FcIjtcbiAgXG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICBjb250ZXh0LnJvdGF0ZShkZWcpO1xuICBcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKCk7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQodHh0LCAwLCAwKTtcbiAgXG4gICAgICAgIGNvbnRleHQucm90YXRlKC1kZWcpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgteCwgLXkpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gNTsgaSsrKSB7XG4gICAgICAgIC8v6aqM6K+B56CB5LiK5pi+56S657q/5p2hXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKCk7XG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKFxuICAgICAgICAgIE1hdGgucmFuZG9tKCkgKiBjYW52YXNfd2lkdGgsXG4gICAgICAgICAgTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oXG4gICAgICAgICAgTWF0aC5yYW5kb20oKSAqIGNhbnZhc193aWR0aCxcbiAgICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX2hlaWdodFxuICAgICAgICApO1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzA7IGkrKykge1xuICAgICAgICAvL+mqjOivgeeggeS4iuaYvuekuuWwj+eCuVxuICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5yYW5kb21Db2xvcigpO1xuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICBsZXQgeCA9IE1hdGgucmFuZG9tKCkgKiBjYW52YXNfd2lkdGg7XG4gICAgICAgIGxldCB5ID0gTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgMSwgeSArIDEpO1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb2RlID0gdGhpcy5kcmF3Q29kZS5qb2luKFwiXCIpXG4gICAgICB0aGlzLmNoYW5nZVZhbC5lbWl0KHtcbiAgICAgICBjb2RlOnRoaXMuY29kZSxcbiAgICAgICB2Q29kZTp0aGlzLnZDb2RlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FudmFzRG9tLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgICBhLnNldEF0dHJpYnV0ZShcImlkXCIsIHRoaXMuY2FudmFzX2lkICsgJ19hJyk7XG4gICAgICBhLmlubmVyVGV4dCA9IFwi55yL5LiN5riF77yM5o2i5LiA5bygXCI7XG4gICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRHJhd0NvZGUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYW52YXNEb20ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChhKTtcbiAgICB9XG4gICAgLyog5b6X5Yiw6ZqP5py655qE6aKc6Imy5YC8ICovXG4gICAgcmFuZG9tQ29sb3IoKSB7XG4gICAgICBsZXQgciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgICBsZXQgZyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgICBsZXQgYiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgICByZXR1cm4gXCJyZ2IoXCIgKyByICsgXCIsXCIgKyBnICsgXCIsXCIgKyBiICsgXCIpXCI7XG4gICAgfVxuICAgIC8v5oyJ5LiL56Gu6K6k6ZSu6Kem5Y+RXG4gICAgZW50ZXIoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykge1xuICAgICAgICB0aGlzLmNoYW5nZVZhbC5lbWl0KHtcbiAgICAgICAgICBjb2RlOnRoaXMuY29kZSxcbiAgICAgICAgICB2Q29kZTp0aGlzLnZDb2RlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uRW50ZXIuZW1pdCgpXG4gICAgICB9XG4gICAgfVxuICAgIG9uQ2hhbmdlKCl7XG4gICAgICB0aGlzLmNoYW5nZVZhbC5lbWl0KHtcbiAgICAgICAgY29kZTp0aGlzLmNvZGUsXG4gICAgICAgIHZDb2RlOnRoaXMudkNvZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAiLCI8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAnaW5wdXQnOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2FwdGNoYVwiPlxuICAgIDxpbnB1dFxuICAgICAgbnotaW5wdXRcbiAgICAgIGNsYXNzPVwiY29kZS1pbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbKG5nTW9kZWwpXT1cInZDb2RlXCJcbiAgICAgIG1heGxlbmd0aD1cIjRcIlxuICAgICAgcGxhY2Vob2xkZXI9XCLpqozor4HnoIFcIlxuICAgICAgW256U3RhdHVzXT1cInZDb2RlLmxlbmd0aCA9PSA0ID8gJycgOiAnZXJyb3InXCJcbiAgICAgIChrZXlkb3duKT1cImVudGVyKCRldmVudClcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgpXCJcbiAgICAvPlxuICAgIDxkaXYgY2xhc3M9XCJjb2RlLWNhcmRcIiAjY2FudmFzRG9tPjwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJjYXB0Y2hhXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvZGUtY2FyZFwiICNjYW52YXNEb20+PC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==