miniprogram-ci 2.0.11 → 2.1.1

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 (92) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +4 -0
  3. package/dist/@types/ci/build-apk.d.ts +54 -0
  4. package/dist/@types/ci/build-ipa.d.ts +46 -0
  5. package/dist/@types/ci/getcompiler.d.ts +3 -0
  6. package/dist/@types/ci/index.d.ts +4 -0
  7. package/dist/@types/ci/miniapp/androidCloudBuild.d.ts +36 -0
  8. package/dist/@types/ci/miniapp/archive.d.ts +27 -0
  9. package/dist/@types/ci/miniapp/checkBuildArgument.d.ts +21 -0
  10. package/dist/@types/ci/miniapp/iosCloudBuild.d.ts +36 -0
  11. package/dist/@types/ci/miniapp/iosLocalBuild.d.ts +13 -0
  12. package/dist/@types/ci/miniapp/iosTheme.d.ts +4 -0
  13. package/dist/@types/ci/miniapp/miniappPlugin.d.ts +33 -0
  14. package/dist/@types/ci/miniapp/sdkManager.d.ts +5 -0
  15. package/dist/@types/ci/miniapp/upload.d.ts +25 -0
  16. package/dist/@types/ci/miniappattr.d.ts +1 -0
  17. package/dist/@types/ci/upload.d.ts +1 -1
  18. package/dist/@types/ci/utils/ciRequest.d.ts +7 -0
  19. package/dist/@types/ci/utils/tools.d.ts +4 -0
  20. package/dist/@types/ci/utils/unpack.d.ts +3 -0
  21. package/dist/@types/ci/utils/wxvpkg/unpack/config.d.ts +40 -0
  22. package/dist/@types/ci/utils/wxvpkg/unpack/version0.d.ts +15 -0
  23. package/dist/@types/ci/utils/wxvpkg/unpack/version10.d.ts +18 -0
  24. package/dist/@types/ci/utils/wxvpkg/utils.d.ts +3 -0
  25. package/dist/@types/config/config.d.ts +1 -1
  26. package/dist/@types/config/url.config.d.ts +8 -0
  27. package/dist/@types/index.d.ts +3 -0
  28. package/dist/@types/modules/fullcompiler/app/app.d.ts +82 -0
  29. package/dist/@types/modules/fullcompiler/app/contactandlaunch/originalcontactbase64.d.ts +2 -0
  30. package/dist/@types/modules/fullcompiler/app/contactandlaunch/originallaunchbase64.d.ts +2 -0
  31. package/dist/@types/modules/fullcompiler/app/contactandlaunch/updateContactForSubpkg.d.ts +2 -0
  32. package/dist/@types/modules/fullcompiler/app/contactandlaunch/updatecontactandlaunch.d.ts +3 -0
  33. package/dist/@types/modules/index.d.ts +1 -2
  34. package/dist/@types/project/ciProject.d.ts +3 -0
  35. package/dist/@types/types/ci.d.ts +5 -0
  36. package/dist/@types/types/miniapp/index.d.ts +88 -0
  37. package/dist/@types/utils/locales/locales.d.ts +1 -0
  38. package/dist/@types/utils/locales/zh.d.ts +1 -0
  39. package/dist/@types/utils/miniAppI18N.d.ts +15 -0
  40. package/dist/@types/utils/miniappJson.d.ts +2 -0
  41. package/dist/@types/utils/report.d.ts +3 -1
  42. package/dist/@types/utils/request.d.ts +2 -0
  43. package/dist/@types/utils/tools.d.ts +1 -0
  44. package/dist/ci/android-miniapp-toolkit/dist/index.js +1 -0
  45. package/dist/ci/android-miniapp-toolkit/lib/apkcert.jar +0 -0
  46. package/dist/ci/android-miniapp-toolkit/lib/apksigner.jar +0 -0
  47. package/dist/ci/android-miniapp-toolkit/lib/libwinpthread-1.dll +0 -0
  48. package/dist/ci/android-miniapp-toolkit/lib/zipalign +0 -0
  49. package/dist/ci/android-miniapp-toolkit/lib/zipalign.exe +0 -0
  50. package/dist/ci/build-apk.js +1 -0
  51. package/dist/ci/build-ipa.js +1 -0
  52. package/dist/ci/getcompiler.js +1 -1
  53. package/dist/ci/index.js +1 -1
  54. package/dist/ci/miniapp/androidCloudBuild.js +1 -0
  55. package/dist/ci/miniapp/archive.js +1 -0
  56. package/dist/ci/miniapp/checkBuildArgument.js +1 -0
  57. package/dist/ci/miniapp/iosCloudBuild.js +1 -0
  58. package/dist/ci/miniapp/iosLocalBuild.js +1 -0
  59. package/dist/ci/miniapp/iosTheme.js +1 -0
  60. package/dist/ci/miniapp/miniappPlugin.js +1 -0
  61. package/dist/ci/miniapp/sdkManager.js +1 -0
  62. package/dist/ci/miniapp/upload.js +1 -0
  63. package/dist/ci/miniappattr.js +1 -0
  64. package/dist/ci/utils/ciRequest.js +1 -0
  65. package/dist/ci/utils/tools.js +1 -1
  66. package/dist/ci/utils/unpack.js +1 -0
  67. package/dist/ci/utils/wxvpkg/unpack/config.js +1 -0
  68. package/dist/ci/utils/wxvpkg/unpack/version0.js +1 -0
  69. package/dist/ci/utils/wxvpkg/unpack/version10.js +1 -0
  70. package/dist/ci/utils/wxvpkg/utils.js +1 -0
  71. package/dist/config/config.js +1 -1
  72. package/dist/config/url.config.js +1 -1
  73. package/dist/index.js +1 -1
  74. package/dist/modules/corecompiler/summer/graph/basegraph.js +1 -1
  75. package/dist/modules/corecompiler/summerCompiler.js +1 -1
  76. package/dist/modules/fullcompiler/app/app.js +1 -0
  77. package/dist/modules/fullcompiler/app/contactandlaunch/originalcontactbase64.js +1 -0
  78. package/dist/modules/fullcompiler/app/contactandlaunch/originallaunchbase64.js +1 -0
  79. package/dist/modules/fullcompiler/app/contactandlaunch/updateContactForSubpkg.js +1 -0
  80. package/dist/modules/fullcompiler/app/contactandlaunch/updatecontactandlaunch.js +1 -0
  81. package/dist/modules/nativecompiler/ios/buildCloud.js +1 -1
  82. package/dist/modules/nativecompiler/ios/index.js +1 -1
  83. package/dist/project/ciProject.js +1 -1
  84. package/dist/utils/locales/en.js +1 -1
  85. package/dist/utils/locales/zh.js +1 -1
  86. package/dist/utils/miniAppI18N.js +1 -0
  87. package/dist/utils/miniappJson.js +1 -1
  88. package/dist/utils/report.js +1 -1
  89. package/dist/utils/request.js +1 -1
  90. package/dist/utils/tools.js +1 -1
  91. package/dist/utils/zip.js +1 -1
  92. package/package.json +7 -5
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ #### 2.1.1
2
+ - `fix` 修复 依赖声明
3
+ #### 2.1.0
4
+ - `new` 优化 内部架构
1
5
  #### 2.0.11
2
6
  - `fix` 修复 压缩wxml出现的问题
3
7
  - `fix` 修复 独立分包entry文件被过滤的问题
package/README.md CHANGED
@@ -8,6 +8,10 @@ miniprogram-ci 从 1.0.28 开始支持第三方平台开发的上传和预览,
8
8
 
9
9
  ## 最近变更
10
10
 
11
+ #### 2.1.1
12
+ - `fix` 修复 依赖声明
13
+ #### 2.1.0
14
+ - `new` 优化 内部架构
11
15
  #### 2.0.11
12
16
  - `fix` 修复 压缩wxml出现的问题
13
17
  - `fix` 修复 独立分包entry文件被过滤的问题
@@ -0,0 +1,54 @@
1
+ import { MiniProgramCI } from '../types';
2
+ import type { CIProject } from '../project/ciProject';
3
+ import { IUploadOptions } from './upload';
4
+ export interface IBuildApkOptions extends IUploadOptions {
5
+ project: CIProject;
6
+ keyStore: string;
7
+ keyPass: string;
8
+ storePass: string;
9
+ keyAlias: string;
10
+ output: string;
11
+ resourceDir?: string;
12
+ useAab?: boolean;
13
+ desc?: string;
14
+ isUploadResourceBundle?: boolean;
15
+ resourceBundleVersion?: string;
16
+ resourceBundleDesc?: string;
17
+ disableCache?: boolean;
18
+ }
19
+ interface IBuildApkResult {
20
+ errmsg: string;
21
+ success: boolean;
22
+ }
23
+ export interface IBuildArchiveOpts {
24
+ version: string;
25
+ desc: string;
26
+ miniappPkgType: MiniProgramCI.IMiniappPkgType;
27
+ useCloudSync: boolean;
28
+ remoteDebugEnable: boolean;
29
+ }
30
+ export interface IAndroidCloudBuildInfo {
31
+ certificateInfo: {
32
+ androidCertificate: {
33
+ keyStore: string;
34
+ keyPass: string;
35
+ storePass: string;
36
+ keyAlias: string;
37
+ };
38
+ };
39
+ miniappPkgType: MiniProgramCI.IMiniappPkgType;
40
+ remoteDebugEnable: boolean;
41
+ useCloudUpload: boolean;
42
+ useAab: boolean;
43
+ packageVersion: string;
44
+ packageDesc: string;
45
+ recordInfo: string;
46
+ uploadAppInfo: {
47
+ uploadBetaVersion: boolean;
48
+ userVersion: string;
49
+ userDesc: string;
50
+ };
51
+ }
52
+ export declare function buildApk(options: IBuildApkOptions): Promise<IBuildApkResult>;
53
+ export declare function generateCloudAndroidApk(ciOpts: IBuildApkOptions, buildArchiveOpts: IBuildArchiveOpts, cloudBuildInfo: IAndroidCloudBuildInfo): Promise<IBuildApkResult>;
54
+ export {};
@@ -0,0 +1,46 @@
1
+ import { IMiniApp } from '~/types';
2
+ import type { CIProject } from '../project/ciProject';
3
+ import { MiniProgramCI } from '../types';
4
+ import { IUploadOptions } from './upload';
5
+ export interface IBuildIpaOptions extends IUploadOptions {
6
+ project: CIProject;
7
+ output: string;
8
+ isDistribute?: boolean;
9
+ isRemoteBuild?: boolean;
10
+ profilePath: string;
11
+ certificateName: string;
12
+ p12Path: string;
13
+ p12Password: string;
14
+ tpnsProfilePath?: string;
15
+ desc?: string;
16
+ isUploadBeta?: boolean;
17
+ isUploadResourceBundle?: boolean;
18
+ resourceBundleVersion?: string;
19
+ resourceBundleDesc?: string;
20
+ resourceDir?: string;
21
+ disableCache?: boolean;
22
+ }
23
+ interface IBuildIpaResult {
24
+ errmsg: string;
25
+ success: boolean;
26
+ }
27
+ export interface IIOSCloudBuildInfo {
28
+ certificateInfo: {
29
+ signType: IMiniApp.ISignType;
30
+ selfCertificate: IMiniApp.ISelfCertificate;
31
+ };
32
+ miniappPkgType: MiniProgramCI.IMiniappPkgType;
33
+ remoteDebugEnable: boolean;
34
+ useCloudUpload: boolean;
35
+ packageVersion: string;
36
+ packageDesc: string;
37
+ recordInfo: string;
38
+ uploadAppInfo: {
39
+ uploadBetaVersion: boolean;
40
+ userVersion: string;
41
+ userDesc: string;
42
+ };
43
+ useRemoteCloudBuild: boolean;
44
+ }
45
+ export declare function buildIpa(options: IBuildIpaOptions): Promise<IBuildIpaResult>;
46
+ export {};
@@ -1,5 +1,8 @@
1
1
  import { BaseCoreCompiler } from '../modules/corecompiler/baseCompiler';
2
2
  import { MiniProgramCI } from '../types/ci';
3
3
  import { OriginalCompiler } from '../modules/corecompiler/originalCompiler';
4
+ import { Builder } from '../modules/index';
5
+ import { IBuilderOptions } from '../modules';
4
6
  export declare const getOriginalCompiler: (project: MiniProgramCI.IProject) => Promise<OriginalCompiler>;
7
+ export declare function getBuilder(proxyProject: MiniProgramCI.IProject, opts?: IBuilderOptions): Promise<Builder>;
5
8
  export declare const getCompiler: (project: MiniProgramCI.IProject, setting: MiniProgramCI.ICompileSettings) => Promise<BaseCoreCompiler>;
@@ -14,6 +14,8 @@ import { getCompiledResult } from './getCompiledResult';
14
14
  import { getLatestVersion } from './getLatestVersion';
15
15
  import { getWhiteExtList } from '../utils/white_ext_list';
16
16
  import { checkCodeQuality } from './checkCodeQuality';
17
+ import { buildApk } from './build-apk';
18
+ import { buildIpa } from './build-ipa';
17
19
  export { Project };
18
20
  export type { IUploadOptions };
19
21
  export declare const upload: typeof _upload;
@@ -35,5 +37,7 @@ export { getLatestVersion };
35
37
  export { analyseCode };
36
38
  export { checkCodeQuality };
37
39
  export { getWhiteExtList };
40
+ export { buildApk };
41
+ export { buildIpa };
38
42
  export declare const workletVersion: any;
39
43
  export declare function cleanCache(): void;
@@ -0,0 +1,36 @@
1
+ import { IBuildArchiveOpts, IAndroidCloudBuildInfo, IBuildApkOptions } from '../build-apk';
2
+ declare class AndroidCloudBuild {
3
+ private baseDir;
4
+ private aab;
5
+ private infoPath;
6
+ private androidDir;
7
+ private res;
8
+ private md5;
9
+ private output;
10
+ private skipCheckRemote;
11
+ private packageName;
12
+ private project;
13
+ private ciOpts;
14
+ constructor(aab: boolean, ciOpts: IBuildApkOptions);
15
+ build(options: IBuildArchiveOpts, output: string, certificate: IAndroidCloudBuildInfo['certificateInfo']['androidCertificate']): Promise<string>;
16
+ private init;
17
+ private buildCode;
18
+ private checkBase;
19
+ private checkLocal;
20
+ private checkRemote;
21
+ private buildBase;
22
+ private buildResult;
23
+ private genZip;
24
+ private createTask;
25
+ private waitForRemoteReady;
26
+ private getTask;
27
+ private getTaskList;
28
+ private downloadBase;
29
+ private downloadRes;
30
+ private downloadPkg;
31
+ private getTaskResultUrl;
32
+ private getPackageName;
33
+ }
34
+ export declare const getAndroidApkBuild: (ciOpts: IBuildApkOptions) => AndroidCloudBuild;
35
+ export declare const getAndroidAabBuild: (ciOpts: IBuildApkOptions) => AndroidCloudBuild;
36
+ export {};
@@ -0,0 +1,27 @@
1
+ import { IBuildApkOptions } from '../build-apk';
2
+ import { MiniProgramCI } from '../../types';
3
+ import { IBuildIpaOptions } from '../build-ipa';
4
+ interface IMiniappOptions {
5
+ miniappPkgType: MiniProgramCI.IMiniappPkgType;
6
+ lanIpPort?: string;
7
+ useCloudSync?: boolean;
8
+ remoteDebugEnable: boolean;
9
+ archVersion?: 0 | 1;
10
+ needClientJsExtInfo?: 0 | 1;
11
+ }
12
+ interface IUploadArchiveInfo {
13
+ useSubPkg: boolean;
14
+ devtoolsUrl?: string;
15
+ remoteDebugConfig?: any;
16
+ body?: any;
17
+ }
18
+ export interface IBuildArchiveOptions {
19
+ version: string;
20
+ desc: string;
21
+ targetPlatform: 'mini-android' | 'mini-ios';
22
+ outputDir: string;
23
+ miniappOptions: IMiniappOptions;
24
+ uploadArchiveInfo?: IUploadArchiveInfo;
25
+ }
26
+ export declare function buildProjectArchive(ciOpts: IBuildApkOptions | IBuildIpaOptions, opts: IBuildArchiveOptions): Promise<void>;
27
+ export {};
@@ -0,0 +1,21 @@
1
+ import type { IBuildApkOptions, IAndroidCloudBuildInfo, IBuildArchiveOpts } from '../build-apk';
2
+ import type { IIOSCloudBuildInfo, IBuildIpaOptions } from '../build-ipa';
3
+ export declare const defaulPasswordPlaceHolderForCache = "*******";
4
+ export declare const publicKeyForP12password = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRsmgcQqaCjlFVITfAzIWsjpxj\nynoXetXQhmIspi86V6rtq2BENl9HrrX18XsQ8Qn6jsNJ6mtvSUUflvpLnEQMM1M7\nwagNazL0A2KFw97Br9sE+CVJdctC/dmportNjrbekNYHacT1bL+GDpatAaD4Pnwy\nx3yJsmqx3tJun1G++wIDAQAB\n-----END PUBLIC KEY-----\n";
5
+ export interface IIOSRemoteCloudBuildInfo {
6
+ useRemote?: boolean;
7
+ p12?: string;
8
+ p12password?: string;
9
+ p12passwordEncrypted?: string;
10
+ certificate?: string;
11
+ profile?: string;
12
+ tpnsProfile?: string;
13
+ }
14
+ export declare const transformAndroidBuildArgument: (opts: IBuildApkOptions) => {
15
+ buildArchiveOpts: IBuildArchiveOpts;
16
+ cloudBuildInfo: IAndroidCloudBuildInfo;
17
+ };
18
+ export declare const transformIOSBuildArgument: (opts: IBuildIpaOptions) => {
19
+ buildArchiveOpts: IBuildArchiveOpts;
20
+ cloudBuildInfo: IIOSCloudBuildInfo;
21
+ };
@@ -0,0 +1,36 @@
1
+ import { IMiniApp } from '~/types';
2
+ import { IBuildIpaOptions } from '../build-ipa';
3
+ import { IBuildArchiveOpts } from '../build-apk';
4
+ declare class IOSCloudBuild {
5
+ private baseDir;
6
+ private materialDir;
7
+ private iOSDir;
8
+ private iPADir;
9
+ private res;
10
+ private md5;
11
+ private output;
12
+ private cloudBuildOptions?;
13
+ private buildSuccess;
14
+ private logAbPath;
15
+ private project;
16
+ private ciOpts;
17
+ constructor(ciOpts: IBuildIpaOptions);
18
+ build(options: IBuildArchiveOpts, cloudBuildOptions: IMiniApp.IIOSBuildCloudArgs, output?: string): Promise<string>;
19
+ private init;
20
+ private packAllFilesInDir;
21
+ private buildMaterial;
22
+ private buildCode;
23
+ private buildBase;
24
+ private buildResult;
25
+ private createTask;
26
+ private waitForRemoteReady;
27
+ private getTask;
28
+ private getTaskList;
29
+ private downloadBase;
30
+ private downloadIPA;
31
+ private getTaskResultUrl;
32
+ private getBundleId;
33
+ private getFinalIpaName;
34
+ }
35
+ export declare const getIOSCloudBuild: (ciOpts: IBuildIpaOptions) => IOSCloudBuild;
36
+ export {};
@@ -0,0 +1,13 @@
1
+ import { IMiniApp } from '~/types';
2
+ import { IBuildIpaOptions } from '../build-ipa';
3
+ import { IBuildArchiveOpts } from '../build-apk';
4
+ declare class IOSLocalBuild {
5
+ private iosDir;
6
+ private project;
7
+ private ciOpts;
8
+ constructor(ciOpts: IBuildIpaOptions);
9
+ buildArchive(demoIpaPath: string, opts: IBuildArchiveOpts): Promise<void>;
10
+ build(archiveOpts: IBuildArchiveOpts, buildArgs: IMiniApp.IIOSBuildCloudArgs, demoIpaPath: string): Promise<void>;
11
+ }
12
+ export declare const getIOSLocalBuild: (ciOpts: IBuildIpaOptions) => IOSLocalBuild;
13
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { CIProject } from '../../project/ciProject';
2
+ type ITheme = 'Light' | 'LightSpecial' | 'Dark' | 'DarkSpecial' | 'Default';
3
+ export declare const getIOSTheme: (project: CIProject, customImgPath: string | undefined) => Promise<ITheme>;
4
+ export {};
@@ -0,0 +1,33 @@
1
+ import { IBuildIpaOptions } from '../build-ipa';
2
+ export declare enum OS_TYPE_ENUM {
3
+ IOS = "1",
4
+ ANDROID = "2"
5
+ }
6
+ declare class MiniappPluginManager {
7
+ private WeappMiniApp;
8
+ private project;
9
+ private ciOpts;
10
+ constructor(ciOpts: IBuildIpaOptions);
11
+ getUsedPluginVersionInfo(data: {
12
+ osType: OS_TYPE_ENUM;
13
+ pluginList: Array<{
14
+ plugin_id: string;
15
+ version: string;
16
+ }>;
17
+ }): Promise<any>;
18
+ downloadMiniAppPlugin(data: {
19
+ osType: OS_TYPE_ENUM;
20
+ pluginList: Array<{
21
+ plugin_id: string;
22
+ version: string;
23
+ }>;
24
+ }): Promise<unknown>;
25
+ removePluginDir(type: OS_TYPE_ENUM, pluginId: string): Promise<void>;
26
+ downloadPlugin(type: OS_TYPE_ENUM): Promise<void>;
27
+ getPluginDirList(type: OS_TYPE_ENUM): Promise<{
28
+ dir: string;
29
+ pluginId: any;
30
+ }[]>;
31
+ }
32
+ export declare const getMiniappPluginManager: (ciOpts: IBuildIpaOptions) => MiniappPluginManager;
33
+ export {};
@@ -0,0 +1,5 @@
1
+ import { CIProject } from '../../project/ciProject';
2
+ export declare function generateMiniappIOSResources(project: CIProject, sdkVersion: string, arch: 'arm64' | 'x86', isIPad?: boolean): Promise<{
3
+ demoIpaPath: string;
4
+ sdkPath: string;
5
+ }>;
@@ -0,0 +1,25 @@
1
+ import { IBuildArchiveOptions } from './archive';
2
+ import { IBuildApkOptions } from '../build-apk';
3
+ import { IBuildIpaOptions } from '../build-ipa';
4
+ export declare const SIGNATURE_FILE_NAME = "ci.signature";
5
+ type IMiniAppUploadArchiveOptions = (IBuildApkOptions | IBuildIpaOptions) & IBuildArchiveOptions;
6
+ type TSubPackageInfo = Array<{
7
+ name: string;
8
+ size: number;
9
+ }>;
10
+ type TPluginInfo = Array<{
11
+ pluginProviderAppid: string;
12
+ version: string;
13
+ size: number;
14
+ }>;
15
+ interface IUploadResult {
16
+ subPackageInfo?: TSubPackageInfo;
17
+ pluginInfo?: TPluginInfo;
18
+ devPluginId?: string;
19
+ useSubPkg?: boolean;
20
+ }
21
+ interface IInnerUploadResult extends IUploadResult {
22
+ respBody?: any;
23
+ }
24
+ export declare function upload(options: IMiniAppUploadArchiveOptions): Promise<IInnerUploadResult>;
25
+ export {};
@@ -0,0 +1 @@
1
+ export declare function getMiniappAttr(privateKey: string, appid: string): Promise<any>;
@@ -1,6 +1,6 @@
1
1
  import { IProject, MiniProgramCI } from '../types';
2
2
  export declare const SIGNATURE_FILE_NAME = "ci.signature";
3
- interface IUploadOptions {
3
+ export interface IUploadOptions {
4
4
  project: IProject;
5
5
  version: string;
6
6
  setting?: MiniProgramCI.ICompileSettings;
@@ -0,0 +1,7 @@
1
+ export declare function ciSimpleRequest({ privateKey, appid, cgi, robot }: {
2
+ privateKey: string;
3
+ appid: string;
4
+ cgi: string;
5
+ robot: number;
6
+ }, data?: any): Promise<any>;
7
+ export declare function ciCustomRequest(url: string, body: any, headers?: any): Promise<any>;
@@ -4,3 +4,7 @@ export declare function isGameApp(project: MiniProgramCI.IProject): boolean;
4
4
  export declare const checkIsUseCompilerPlugins: (project: MiniProgramCI.IProject) => boolean | undefined;
5
5
  export declare function isUndefined(value: any): boolean;
6
6
  export declare function formatCISetting(project: MiniProgramCI.IProject, setting: MiniProgramCI.ICompileSettings): MiniProgramDevtools.IProjectSetting;
7
+ export declare function getMiniappCacheDir(): string;
8
+ export declare function getMiniappIOSCacheDir(): string;
9
+ export declare function clearIOSCacheDir(): void;
10
+ export declare function clearAndroidCacheDir(): void;
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ declare const unpack: (buffer: Buffer, dist?: string) => any;
3
+ export = unpack;
@@ -0,0 +1,40 @@
1
+ export declare const ConfigCommon: {
2
+ SPECIAL_START_BEGIN: number;
3
+ SPECIAL_START_END: number;
4
+ VERSION_BEGIN: number;
5
+ VERSION_END: number;
6
+ INFO_LENGTH_BEGIN: number;
7
+ INFO_LENGTH_END: number;
8
+ };
9
+ export declare const ConfigV0: {
10
+ FILE_LENGTH_BEGIN: number;
11
+ FILE_LENGTH_END: number;
12
+ SPECIAL_END_BEGIN: number;
13
+ SPECIAL_END_END: number;
14
+ FILE_COUNT_BEGIN: number;
15
+ FILE_COUNT_END: number;
16
+ FILF_INFO_BEGIN: number;
17
+ SPECIAL_START_BEGIN: number;
18
+ SPECIAL_START_END: number;
19
+ VERSION_BEGIN: number;
20
+ VERSION_END: number;
21
+ INFO_LENGTH_BEGIN: number;
22
+ INFO_LENGTH_END: number;
23
+ };
24
+ export declare const ConfigV10: {
25
+ INDEX_LENGTH_BEGIN: number;
26
+ INDEX_LENGTH_END: number;
27
+ FILE_LENGTH_BEGIN: number;
28
+ FILE_LENGTH_END: number;
29
+ SPECIAL_END_BEGIN: number;
30
+ SPECIAL_END_END: number;
31
+ FILE_COUNT_BEGIN: number;
32
+ FILE_COUNT_END: number;
33
+ FILF_INFO_BEGIN: number;
34
+ SPECIAL_START_BEGIN: number;
35
+ SPECIAL_START_END: number;
36
+ VERSION_BEGIN: number;
37
+ VERSION_END: number;
38
+ INFO_LENGTH_BEGIN: number;
39
+ INFO_LENGTH_END: number;
40
+ };
@@ -0,0 +1,15 @@
1
+ /// <reference types="node" />
2
+ interface IFileInfo {
3
+ name: string;
4
+ offset: number;
5
+ length: number;
6
+ }
7
+ interface IFileCache {
8
+ [path: string]: Buffer;
9
+ }
10
+ export declare function getFileInfoLength(buffer: Buffer): number;
11
+ export declare function getFileContentLength(buffer: Buffer): number;
12
+ export declare function getFileCount(buffer: Buffer): number;
13
+ export declare function getFileInfo(buffer: Buffer): IFileInfo[];
14
+ export default function unpack(buffer: Buffer, dist?: string): IFileCache;
15
+ export {};
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ interface IFileInfo {
3
+ name: string;
4
+ encType: number;
5
+ mode: number;
6
+ offset: number;
7
+ length: number;
8
+ }
9
+ interface IFileCache {
10
+ [path: string]: Buffer;
11
+ }
12
+ export declare function getFileInfoLength(buffer: Buffer): number;
13
+ export declare function getFileIndexLength(buffer: Buffer): number;
14
+ export declare function getFileContentLength(buffer: Buffer): number;
15
+ export declare function getFileCount(buffer: Buffer): number;
16
+ export declare function getFileInfo(buffer: Buffer): IFileInfo[];
17
+ export default function unpack(buffer: Buffer, dist?: string): IFileCache;
18
+ export {};
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ export declare const getVersion: (buffer: Buffer) => number;
3
+ export declare const getVersionByFD: (fd: number) => number;
@@ -1,5 +1,5 @@
1
1
  import { IProject } from '../types';
2
- export declare const CI_VERSION = "2.0.11";
2
+ export declare const CI_VERSION = "2.1.1";
3
3
  export declare const PARAM_ERROR = 10000;
4
4
  export declare const WXML_NOT_FOUND = 10007;
5
5
  export declare const JS_NOT_FOUND = 10008;
@@ -23,3 +23,11 @@ export declare const getUploadToken: string;
23
23
  export declare const testSourceURL: string;
24
24
  export declare const testSourceNewFeatureURL: string;
25
25
  export declare const getAsyncResult: string;
26
+ export declare const getSdkIntInfo: string;
27
+ export declare const uploadCloudBuildResourcePack: string;
28
+ export declare const getCloudBuildTaskList: string;
29
+ export declare const getCloudBuildPkgUrl: string;
30
+ export declare const miniappUpload: string;
31
+ export declare const getPkgWxapkg: string;
32
+ export declare const downloadMiniAppPlugin: string;
33
+ export declare const getUsedPluginVersionInfo: string;
@@ -19,6 +19,8 @@ import * as adroidDeviceUtils from './modules/nativecompiler/android/device';
19
19
  import * as iosDeviceUtils from './modules/nativecompiler/ios/device';
20
20
  import * as miniappBuilder from './utils/miniapp-builder';
21
21
  import packOptionsHelper from './utils/packOptionsHelper';
22
+ import MiniAppI18N from './utils/miniAppI18N';
23
+ import * as MiniAppJson from './utils/miniappJson';
22
24
  export { BaseProject, CIProject as Project, CIProject, DevtoolsProject, WebProject, PreCompileProject, };
23
25
  export { BaseCoreCompiler, OriginalCompiler, SummerCompiler, ICompilerStatus, ICompileOptions, Builder, };
24
26
  export * from './modules/corecompiler/original';
@@ -26,3 +28,4 @@ export declare const workletVersion: any;
26
28
  export { getWhiteExtList, proxy, locales, isHexColor, DefaultProjectAttr, JSON_CONTENT_ERR, compileTypeConfig, generateMD5, mkdirSync, normalizePath, checkIsInSubPackage, getHelperOutputPath, isValidHelperFunc, getHelperName, getHelperContent, getHelperDeps, getBabelHelperVersion, getBabelHelperDepMap, escapeQuot, escapeScript, getSummerPluginConfig, packOptionsHelper, };
27
29
  export { adroidDeviceUtils, iosDeviceUtils, miniappBuilder, };
28
30
  export * from './ci/index';
31
+ export { MiniAppI18N, MiniAppJson, };
@@ -0,0 +1,82 @@
1
+ import { AppJSON, BaseInfo } from '../../../types';
2
+ interface IStandaloneAppJson {
3
+ miniModuleId: string;
4
+ nickname: string;
5
+ device_orientation: string;
6
+ appVersion: string | number;
7
+ pkgInfos: Array<{
8
+ miniModuleId: string;
9
+ pkgType: number;
10
+ appVersion: number;
11
+ versionType: number;
12
+ moduleName?: string;
13
+ pkgMd5: string;
14
+ assetPath: string;
15
+ signVersion: number;
16
+ signFilePath: string;
17
+ }>;
18
+ contactBase64: string;
19
+ launchBase64: string;
20
+ cpfWxaAttrSyncResponse: string;
21
+ version: number;
22
+ devtoolsLocalServerUrl?: string;
23
+ remoteDebugWsEndpoint?: string;
24
+ miniappPkgType: IMiniappPkgType;
25
+ devtoolsPlatform: 'Windows' | 'Mac';
26
+ appClientPortForRemoteDebugServer?: string;
27
+ appClientPortForotReloadServer?: string;
28
+ }
29
+ export interface IPkgModule {
30
+ name: string;
31
+ filePath: string;
32
+ pkgType: number;
33
+ md5: string;
34
+ size: number;
35
+ independent: boolean;
36
+ page_count: number;
37
+ alias: string[];
38
+ wxacode_lib_info_list: string[];
39
+ without_lib_md5: string;
40
+ separated_plugin_list: string[];
41
+ md5_list: string[];
42
+ widget_list: [];
43
+ buildVersion?: number;
44
+ signVersion?: number;
45
+ signFilePath?: string;
46
+ }
47
+ export declare enum IMiniappPkgType {
48
+ 'Release' = "Release",
49
+ 'Debug' = "Debug",
50
+ 'HotReload' = "HotReload"
51
+ }
52
+ export declare enum IMiniappConnectType {
53
+ 'USB' = "USB",
54
+ 'LAN' = "LAN"
55
+ }
56
+ export interface ISubPkg {
57
+ file: string;
58
+ type: number;
59
+ name: string;
60
+ signVersion: number;
61
+ signFile: string;
62
+ md5: string;
63
+ versionType?: IMiniappPkgType;
64
+ }
65
+ export declare function packAllPackagesToWxapkg(distPath: string, appJson: AppJSON.IAppJSON, appid: string): Promise<{
66
+ wholePkgMd5: string;
67
+ moduleListConfig: IPkgModule[];
68
+ }>;
69
+ interface ISubPackageAppInfo {
70
+ miniModuleId: string;
71
+ nickName: string;
72
+ brandIconURL: string;
73
+ pageOrientation: BaseInfo.PageOrientation;
74
+ buildVersion: number;
75
+ subpkgs: ISubPkg[];
76
+ contact: string;
77
+ cpfWxaAttrSyncResponse: string;
78
+ miniappPkgType: IMiniappPkgType;
79
+ miniappConnectType?: IMiniappConnectType;
80
+ }
81
+ export declare function generateSubPkgAppInfoJson(data: ISubPackageAppInfo): Promise<IStandaloneAppJson>;
82
+ export {};
@@ -0,0 +1,2 @@
1
+ declare const originalContactBase64 = "CgYIABICCgASFwiEAhCFroDAARjX44GVBiDX44GVBihXGmIKCVNpZ25hdHVyZRJV5bCP56iL5bqP5a6Y5pa556S65L6LRGVtb++8jOWwseW9k+WJjeW3suaUr+aMgeeahOaOpeWPo+iDveWKm+WPiue7hOS7tui/m+ihjOWxleekuuOAghoQCgpWZXJpZnlGbGFnEgIyNBpjCgpWZXJpZnlJbmZvElXlsI/nqIvluo/lrpjmlrnnpLrkvotEZW1v77yM5bCx5b2T5YmN5bey5pSv5oyB55qE5o6l5Y+j6IO95Yqb5Y+K57uE5Lu26L+b6KGM5bGV56S644CCGhsKCE5pY2tOYW1lEg/lsI/nqIvluo/npLrkvosaHwoIVXNlck5hbWUSE2doX2Q0M2Y2OTNjYTMxZkBhcHAaCQoFQWxpYXMSABqlAQoMQnJhbmRJY29uVVJMEpQBaHR0cDovL21tYml6LnFwaWMuY24vbW1iaXpfcG5nL0NyNVZ4WmZZZ0FLTW9UZUVwdVhpYUs3QXNUMVJXQjBpYTBhbjlXRDhQVE9GcVdYM2ljSzU2bU5rM3hNVExpY0llV3dqY05Qa0U1MU1IS0ZzaWFUdjBwSXNyY1EvNjQwP3d4X2ZtdD1wbmcmd3hmcm9tPTIwMBoOCglCaW5kS0ZVaW4SATAaEgoJUFlJbml0aWFsEgVYQ1hTTBobCgdRdWFuUGluEhB4aWFvY2hlbmd4dXNoaWxpGmUKDUJpZ0hlYWRJbWdVcmwSVGh0dHA6Ly93eC5xbG9nby5jbi9tbWhlYWQvUTNhdUhnend6TTdGbGwzRjcxYk9XdVV2SkNaV28xeWlhMmd0WG1pYURNY0FDMGhJc0FnSjJVbFEvMBppCg9TbWFsbEhlYWRJbWdVcmwSVmh0dHA6Ly93eC5xbG9nby5jbi9tbWhlYWQvUTNhdUhnend6TTdGbGwzRjcxYk9XdVV2SkNaV28xeWlhMmd0WG1pYURNY0FDMGhJc0FnSjJVbFEvMTMyGg0KCFd4QXBwT3B0EgEwGq4BCgxWZXJpZnlTb3VyY2USnQF7IkRlc2NyaXB0aW9uIjoiIiwiSW50cm9VcmwiOiIiLCJOYW1lIjoiIiwiVHlwZSI6MCwiVmVyaWZ5Qml6VHlwZSI6MCwiSXNTaG93VmVyaWZ5Qml6VHlwZSI6MCwiSXNTaG93VmVyaWZ5SWNvbiI6MCwiVmVyaWZ5U3ViVGl0bGUiOiIiLCJWZXJpZnlDdXN0b21lclR5cGUiOjF9GnoKDlJlZ2lzdGVyU291cmNlEmh7IlJlZ2lzdGVyQm9keSI6Iua3seWcs+W4guiFvuiur+iuoeeul+acuuezu+e7n+aciemZkOWFrOWPuCIsIkludHJvVXJsIjoiIiwiSXNDbG9zZSI6MCwiQWJvdXRCaXpVcmwiOiIifRrCHQoKV3hhQXBwSW5mbxKzHXsiQXBwaWQiOiJ3eGU1ZjUyOTAyY2Y0ZGU4OTYiLCJBcHBTdGF0ZSI6MCwiRXh0ZXJuSW5mbyI6IiIsIk5ldHdvcmsiOnsiUmVxdWVzdERvbWFpbiI6WyJodHRwczpcL1wvc3RyZWFtLndlaXhpbi5xcS5jb20iLCJodHRwczpcL1wvNTQzMzA2NzkucWNsb3VkLmxhIiwiaHR0cHM6XC9cLzE0NTkyNjE5LnFjbG91ZC5sYSIsImh0dHBzOlwvXC9vcGVuLndlaXhpbi5xcS5jb20iLCJodHRwczpcL1wvd2VhcHAubGlua3FqLmNvbSIsImh0dHBzOlwvXC9tcC53ZWl4aW4ucXEuY29tIiwiaHR0cHM6XC9cL3d4YXJkbS53ZWl4aW4ucXEuY29tIiwiaHR0cHM6XC9cLzE0NTkyNjE5LnFjbG91ZC5sYSIsImh0dHBzOlwvXC9zZXJ2aWNld2VjaGF0LmNvbSIsImh0dHA6XC9cLzEwOS4yNDQuMTQ1LjE5OSIsImh0dHA6XC9cLzE3NS4yNC4yMTguMTYyIiwiaHR0cHM6XC9cL2Nsb3VkYmFzZS5zZXJ2aWNld2VjaGF0LmNvbSJdLCJXc1JlcXVlc3REb21haW4iOlsid3NzOlwvXC9zdHJlYW0ud2VpeGluLnFxLmNvbSIsIndzczpcL1wvd3MucWNsb3VkLmNvbSIsIndzczpcL1wvMTQ1OTI2MTkucWNsb3VkLmxhIiwid3NzOlwvXC8xNDU5MjYxOS53cy5xY2xvdWQubGEiLCJ3c3M6XC9cL2VjaG8ud2Vic29ja2V0Lm9yZyIsIndzczpcL1wvdGNiLXdzLnRlbmNlbnRjbG91ZGFwaS5jb20iLCJ3c3M6XC9cL2FwLXNoYW5naGFpLnRjYi13cy50ZW5jZW50Y2xvdWRhcGkuY29tIiwid3NzOlwvXC9ncmF5LmFwLXNoYW5naGFpLnRjYi13cy50ZW5jZW50Y2xvdWRhcGkuY29tIiwid3NzOlwvXC92aXAuYXAtc2hhbmdoYWkudGNiLXdzLnRlbmNlbnRjbG91ZGFwaS5jb20iXSwiVXBsb2FkRG9tYWluIjpbImh0dHBzOlwvXC9zdHJlYW0ud2VpeGluLnFxLmNvbSIsImh0dHBzOlwvXC81NDMzMDY3OS5xY2xvdWQubGEiLCJodHRwczpcL1wvMTQ1OTI2MTkucWNsb3VkLmxhIiwiaHR0cHM6XC9cL3RjYi1hcGkudGVuY2VudGNsb3VkYXBpLmNvbSJdLCJEb3dubG9hZERvbWFpbiI6WyJodHRwczpcL1wvc3RyZWFtLndlaXhpbi5xcS5jb20iLCJodHRwczpcL1wvNTQzMzA2NzkucWNsb3VkLmxhIiwiaHR0cHM6XC9cLzE0NTkyNjE5LnFjbG91ZC5sYSIsImh0dHBzOlwvXC9zZXJ2aWNld2VjaGF0LmNvbSIsImh0dHBzOlwvXC83NDY1LXRlc3QtZjBiMTAyLTEyNTgyMTE4MTgudGNiLnFjbG91ZC5sYSIsImh0dHBzOlwvXC83MjY1LXJlbGVhc2UtYjg2MDk2LTEyNTgyMTE4MTgudGNiLnFjbG91ZC5sYSIsImh0dHBzOlwvXC83MDZmLXBvc3RwYXktMmc1aG0yb3hiYmI3MjFhNC0xMjU4MjExODE4LnRjYi5xY2xvdWQubGEiLCJodHRwczpcL1wvNjM2Zi1jb250YWluZXJ0ZXN0LTBnbXczdWxuZDhkOWJjN2ItMTI1ODIxMTgxOC50Y2IucWNsb3VkLmxhIiwiaHR0cHM6XC9cLzc0NjUtdGVzdC1wYXktOGdlNDZ1eXRhODZhZjc0OC0xMjU4MjExODE4LnRjYi5xY2xvdWQubGEiXSwiQml6RG9tYWluIjpbImh0dHBzOlwvXC9kZXZlbG9wZXJzLndlaXhpbi5xcS5jb20iXSwiVURQRG9tYWluIjpbInVkcDpcL1wvcXEuY29tIl0sIlRDUERvbWFpbiI6W10sIlByZWZldGNoRE5TRG9tYWluIjpbXSwiTmV3UmVxdWVzdERvbWFpbiI6W10sIk5ld1dzUmVxdWVzdERvbWFpbiI6W10sIk5ld1VwbG9hZERvbWFpbiI6W10sIk5ld0Rvd25sb2FkRG9tYWluIjpbXSwiTmV3Qml6RG9tYWluIjpbXSwiTmV3VURQRG9tYWluIjpbXSwiTmV3VENQRG9tYWluIjpbXSwiTmV3UHJlZmV0Y2hETlNEb21haW4iOltdfSwiUnVubmluZ0ZsYWdJbmZvIjp7IlJ1bm5pbmdGbGFnIjowLCJTdG9wU2VydmljZVRpbWUiOjE0NzIwNDE3NjksIkFwcEZvcmJpZGRlblJlYXNvbiI6MCwiU2Vzc2lvbk9wZW5Gb3JiaWRkZW5SZWFzb24iOjAsIlRpbWVsaW5lT3BlbkZvcmJpZGRlblJlYXNvbiI6MCwiQmVlblByb21wdFRpbWVzIjowLCJRcmNvZGVPcGVuRm9yYmlkZGVuUmVhc29uIjowLCJBcHBPcGVuRm9yYmlkZGVuVXJsIjoiIiwiQ2FuTm90U3Rhcld4YUJlZm9yZVRpbWUiOjB9LCJBcHBDb25maWciOnsiVmVyc2lvbkxpc3QiOlt7InR5cGUiOjEsInZlcnNpb24iOjYyfV19LCJPcmlnaW5JY29uSW1hZ2VVcmwiOiIiLCJSb3VuZGVkU3F1YXJlSWNvblVybCI6Imh0dHA6XC9cL21tYml6LnFwaWMuY25cL21tYml6X3BuZ1wvQ3I1VnhaZllnQUtNb1RlRXB1WGlhSzdBc1QxUldCMGlhMHFSdWlhaHBvUXhBYlNuaWJ5QjkzcjNYZzBIMm01UEdQUU5MRzl2N2E3RlpaSG91b25RRjNGd1pRXC8wP3d4X2ZtdD1wbmciLCJBcHBSb2xlIjowLCJBcHBTZXJ2aWNlVHlwZSI6MCwiVGVtcGxhdGUiOlt7ImJ1c2luZXNzX2lkIjoxLCJrZXkiOiJ0ZXN0a2V5MDAxIiwidmFsdWUiOiJDdXJyZW50VGltZSB7e3RpbWV9fSJ9XSwiUHJvZmlsZUNvbW1lbnRGb3JiaWQiOjAsIldlY2hhdFBsdWdpbkFwcCI6MCwiaW50cm9kdWN0aW9uIjoiIiwiZnJvbUJ1c2luZXNzVXNlcm5hbWUiOiIiLCJHYW1lQXBwIjowLCJNaW5QdWJWZXJzaW9uIjowLCJNaW5QdWJTdHJpbmdWZXJzaW9uIjoiMi40LjAiLCJPcGVuU2VhcmNoV2lkZ2V0IjowLCJQbHVnaW5JbmZvIjp7InBsdWdpbl9saXN0IjpbeyJpZCI6MzI0NDUwNzE1OCwibmlja25hbWUiOiLmtYvor5XmoLfkvosiLCJoZWFkaW1ndXJsIjoiaHR0cDpcL1wvd3gucWxvZ28uY25cL21taGVhZFwvUTNhdUhnend6TTdGbGwzRjcxYk9XdVV2SkNaV28xeWlhNWpybGVBV1Fic3I0R05nVUVkamJzdyIsImJyYW5kaWNvbnVybCI6Imh0dHA6XC9cL21tYml6LnFwaWMuY25cL21tYml6X3BuZ1wvQ3I1VnhaZllnQUlpY3hIeVBRMjA0dTdrVGFERFZTaWNpYXJEa2liSEdpYm8zbWxCTTJrZlN1RlNMMlhFaGlhNTE3VEY5T0luQXFER1JsTEUyaWNPRHBGRmtyTEF3XC8wP3d4X2ZtdD1wbmciLCJQbHVnaW5OZXRXb3JrIjp7IlJlcXVlc3REb21haW4iOlsiaHR0cHM6XC9cLzE0NTkyNjE5LnFjbG91ZC5sYSJdLCJXc1JlcXVlc3REb21haW4iOltdLCJVcGxvYWREb21haW4iOltdLCJEb3dubG9hZERvbWFpbiI6W10sIkJpekRvbWFpbiI6W10sIlVEUERvbWFpbiI6W10sIlRDUERvbWFpbiI6W10sIlByZWZldGNoRE5TRG9tYWluIjpbXSwiTmV3UmVxdWVzdERvbWFpbiI6W10sIk5ld1dzUmVxdWVzdERvbWFpbiI6W10sIk5ld1VwbG9hZERvbWFpbiI6W10sIk5ld0Rvd25sb2FkRG9tYWluIjpbXSwiTmV3Qml6RG9tYWluIjpbXSwiTmV3VURQRG9tYWluIjpbXSwiTmV3VENQRG9tYWluIjpbXSwiTmV3UHJlZmV0Y2hETlNEb21haW4iOltdfSwic2lnbmF0dXJlIjoiIiwicGx1Z2luX3R5cGUiOiJrUGx1Z2luVHlwZU5vcm1hbCJ9XX0sIlNob3J0Tmlja05hbWUiOiIiLCJUY2JDZG5Eb21haW4iOlsiaHR0cHM6XC9cLzc0NjUtdGVzdC1mMGIxMDItMTI1ODIxMTgxOC50Y2IucWNsb3VkLmxhIiwiaHR0cHM6XC9cLzcyNjUtcmVsZWFzZS1iODYwOTYtMTI1ODIxMTgxOC50Y2IucWNsb3VkLmxhIiwiaHR0cHM6XC9cLzcwNmYtcG9zdHBheS0yZzVobTJveGJiYjcyMWE0LTEyNTgyMTE4MTgudGNiLnFjbG91ZC5sYSIsImh0dHBzOlwvXC82MzZmLWNvbnRhaW5lcnRlc3QtMGdtdzN1bG5kOGQ5YmM3Yi0xMjU4MjExODE4LnRjYi5xY2xvdWQubGEiLCJodHRwczpcL1wvNzQ2NS10ZXN0LXBheS04Z2U0NnV5dGE4NmFmNzQ4LTEyNTgyMTE4MTgudGNiLnFjbG91ZC5sYSJdLCJPcmlnaW5hbEZsYWciOjAsIk9yaWdpbmFsUmVkaXJlY3RVcmwiOiIiLCJQY09wZW5BcHBGbGFnIjowLCJTZW5zaXRpdmVUYWdzIjpbXSwic2Vuc2l0aXZlX2NvbnRlbnRfc3RhdHVzIjowLCJTaG93UmVsaWV2ZWRCdXlGbGFnIjo1MzgsIlN5c3RlbUF1dGhCaXpTY2VuZSI6MH0auiwKEVd4YUFwcFZlcnNpb25JbmZvEqQseyJBcHBWZXJzaW9uIjo4NywiVmVyc2lvblN0YXRlIjowLCJWZXJzaW9uTUQ1IjoiZTJkZTg4YzRhZDBiOWUzMTVhZTJiNDRiOTA3ZTQ3MDQiLCJBcHBDRE5Eb3dubG9hZFVybCI6IiIsIkNETlVybExpZmVzcGFuIjowLCJDYXRlZ29yaWVzIjpbXSwiVGFncyI6W10sIm1vZHVsZV9saXN0IjpbeyJuYW1lIjoiXC9wYWNrYWdlQ29tcG9uZW50XC8iLCJtZDUiOiJlZjI2MGZmMzg5N2M4NTdhNTYyMjJlMTU5Mzk1ZDlhYSIsInNpemUiOjEyNjAyMzUsImluZGVwZW5kZW50IjpmYWxzZSwicGFnZV9jb3VudCI6MzcsImFsaWFzIjpbXSwid3hhY29kZV9saWJfaW5mb19saXN0IjpbXSwid2l0aG91dF9saWJfbWQ1IjoiIiwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwibWQ1X2xpc3QiOltdLCJ3aWRnZXRfbGlzdCI6W3sicGFja2FnZV90eXBlIjo0LCJ3eGFwa2dfbWQ1IjoiZWYyNjBmZjM4OTdjODU3YTU2MjIyZTE1OTM5NWQ5YWEiLCJ3eGFwa2dfc2l6ZSI6MTI2MDIzNSwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9LHsicGFja2FnZV90eXBlIjoxNywid3hhcGtnX21kNSI6ImVkYzZiZWY5NTMyNzM0ZDNlZjc3NmQ4NTU1Y2Q5ZjdjIiwid3hhcGtnX3NpemUiOjE0MDU2MzMsInNlcGFyYXRlZF9wbHVnaW5fbGlzdCI6W10sInd4YXBrZ19zaGEyNTYiOiIifV19LHsibmFtZSI6IlwvcGFja2FnZUV4dGVuZFwvIiwibWQ1IjoiZTM4MmQ3NDBhZmY1NDFjOTVhODFiOGE2YjVhYjE0MDMiLCJzaXplIjo5MDYwMjksImluZGVwZW5kZW50IjpmYWxzZSwicGFnZV9jb3VudCI6NDQsImFsaWFzIjpbXSwid3hhY29kZV9saWJfaW5mb19saXN0IjpbXSwid2l0aG91dF9saWJfbWQ1IjoiIiwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwibWQ1X2xpc3QiOltdLCJ3aWRnZXRfbGlzdCI6W3sicGFja2FnZV90eXBlIjo0LCJ3eGFwa2dfbWQ1IjoiZTM4MmQ3NDBhZmY1NDFjOTVhODFiOGE2YjVhYjE0MDMiLCJ3eGFwa2dfc2l6ZSI6OTA2MDI5LCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn0seyJwYWNrYWdlX3R5cGUiOjE3LCJ3eGFwa2dfbWQ1IjoiZWNhMGQ3ZjU1NWQ5M2U3Yzc2NTk0NDFlNWM3ZDVjOWMiLCJ3eGFwa2dfc2l6ZSI6MTEyNDA4OSwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9XX0seyJuYW1lIjoiXC9wYWNrYWdlQ2xvdWRcLyIsIm1kNSI6IjJiNzNkYjZjZmM0MGY2ODNhMmI4ZTJmNmM4OTgzYzQ2Iiwic2l6ZSI6MjI1NDQzLCJpbmRlcGVuZGVudCI6ZmFsc2UsInBhZ2VfY291bnQiOjEzLCJhbGlhcyI6W10sInd4YWNvZGVfbGliX2luZm9fbGlzdCI6W10sIndpdGhvdXRfbGliX21kNSI6IiIsInNlcGFyYXRlZF9wbHVnaW5fbGlzdCI6W10sIm1kNV9saXN0IjpbXSwid2lkZ2V0X2xpc3QiOlt7InBhY2thZ2VfdHlwZSI6NCwid3hhcGtnX21kNSI6IjJiNzNkYjZjZmM0MGY2ODNhMmI4ZTJmNmM4OTgzYzQ2Iiwid3hhcGtnX3NpemUiOjIyNTQ0Mywic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9LHsicGFja2FnZV90eXBlIjoxNywid3hhcGtnX21kNSI6ImIxNzM1ODcyYWQ0ZjFkZDU1MzM0N2NkZjg3MjUxMzdiIiwid3hhcGtnX3NpemUiOjI3NDA2NCwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9XX0seyJuYW1lIjoiXC9wYWNrYWdlQVBJXC8iLCJtZDUiOiI3NjMyY2MwNGZkODkyMjI0NjI5NWU3ZmUzNDBjZjFhNSIsInNpemUiOjEzODY4NzIsImluZGVwZW5kZW50IjpmYWxzZSwicGFnZV9jb3VudCI6NzAsImFsaWFzIjpbXSwid3hhY29kZV9saWJfaW5mb19saXN0IjpbXSwid2l0aG91dF9saWJfbWQ1IjoiIiwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwibWQ1X2xpc3QiOltdLCJ3aWRnZXRfbGlzdCI6W3sicGFja2FnZV90eXBlIjo0LCJ3eGFwa2dfbWQ1IjoiNzYzMmNjMDRmZDg5MjIyNDYyOTVlN2ZlMzQwY2YxYTUiLCJ3eGFwa2dfc2l6ZSI6MTM4Njg3Miwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9LHsicGFja2FnZV90eXBlIjoxNywid3hhcGtnX21kNSI6IjM3MDExYzM0NTA4YjZmODg5NjZlYmVmNTJiYjM2MjBiIiwid3hhcGtnX3NpemUiOjE2NjQ0OTEsInNlcGFyYXRlZF9wbHVnaW5fbGlzdCI6W10sInd4YXBrZ19zaGEyNTYiOiIifV19LHsibmFtZSI6Il9fQVBQX18iLCJtZDUiOiI3MTZjZmMxMDcyMTEyNmU4OTQ3NTNjZDk3NWY5OTIwZCIsInNpemUiOjM1MTM0NDAsImluZGVwZW5kZW50IjpmYWxzZSwicGFnZV9jb3VudCI6NCwiYWxpYXMiOlsicGx1Z2luOlwvXC93ZXVpIiwicGx1Z2luLXByaXZhdGU6XC9cL3d4ZmE0M2E0YTcwNDFhODRkZSJdLCJ3eGFjb2RlX2xpYl9pbmZvX2xpc3QiOltdLCJ3aXRob3V0X2xpYl9tZDUiOiIiLCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJtZDVfbGlzdCI6W10sIndpZGdldF9saXN0IjpbeyJwYWNrYWdlX3R5cGUiOjQsInd4YXBrZ19tZDUiOiI3MTZjZmMxMDcyMTEyNmU4OTQ3NTNjZDk3NWY5OTIwZCIsInd4YXBrZ19zaXplIjozNTEzNDQwLCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn0seyJwYWNrYWdlX3R5cGUiOjE3LCJ3eGFwa2dfbWQ1IjoiYzE5NGViOWQ2NTM4OTJiMmNmZjQxZmYyOTZiOTNhYTUiLCJ3eGFwa2dfc2l6ZSI6MzY0MzQyNCwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9LHsicGFja2FnZV90eXBlIjoyMywid3hhcGtnX21kNSI6IjllOTFkMGJmODFlNDBmZjRjYjM1YmViN2MyOTMzNzU2Iiwid3hhcGtnX3NpemUiOjE0MjU2MDUsInNlcGFyYXRlZF9wbHVnaW5fbGlzdCI6W3sicGx1Z2luX2lkIjoid3hmYTQzYTRhNzA0MWE4NGRlIiwiaW5uZXJfdmVyc2lvbiI6MTYsIm1kNSI6ImZmMWMzZTQ4ZmE3Njc4NmRkM2UwNTdkMjA3ZTE2NzliIiwiY29udGV4dHMiOlswXSwicHJlZml4X3BhdGgiOiIiLCJtZDVfbGlzdCI6W10sImF1dG9fdXBkYXRlIjoxfV0sInd4YXBrZ19zaGEyNTYiOiIifSx7InBhY2thZ2VfdHlwZSI6MjUsInd4YXBrZ19tZDUiOiJlZjE3MDhmOGE1YmU2ZDBmM2I0MjE4NGRlZTBhY2ViMiIsInd4YXBrZ19zaXplIjoxNDY5MzIwLCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn1dfV0sIlVzZU1vZHVsZSI6dHJ1ZSwiTGFzdF9WZXJzaW9uX0NhdGVnb3JpZXMiOlt7ImZpcnN0Ijoi55S15ZWG5bmz5Y+wIiwic2Vjb25kIjoi55S15ZWG5bmz5Y+wIiwiZmlyc3RfaWQiOjc4MCwic2Vjb25kX2lkIjo3ODIsInRoaXJkIjoiIiwidGhpcmRfaWQiOjB9XSwiRW50cmFuY2VNb2R1bGUiOiJfX0FQUF9fIiwiY29kZV9zaXplIjo3MjQzODI4LCJjbGllbnRfanNfZXh0X2luZm8iOnsiY2FsbF9wbHVnaW5faW5mbyI6W3sicGx1Z2luX2lkIjoid3hmYTQzYTRhNzA0MWE4NGRlIiwicGx1Z2luX3ZlcnNpb24iOjEwMDAwMTUsImlubmVyX3ZlcnNpb24iOjE2LCJwbHVnaW5fdXNlcl9uYW1lIjoid2V1aeaJqeWxleW6kyIsImFsaWFzIjoid2V1aSIsImNvbnRleHRzIjpbXSwibWQ1X2xpc3QiOltdfV0sInVzZXJfdmVyc2lvbiI6IjEuNi40MiJ9LCJ2ZXJzaW9uX2luZm8iOnsib2ZmaWNpYWxfdmVyc2lvbiI6NjQsIm1pbl9zdG9yZV9hcHBfdmVyc2lvbiI6ODF9LCJVc2VQcmVsb2FkUnVsZSI6dHJ1ZSwibG9hZGluZ19pbWFnZV91cmwiOiIiLCJsb2FkaW5nX2ltYWdlX2luZm8iOnsidXJsIjoiIn0sImRhdGFfdHlwZV9kZWNsYXJhdGlvbnMiOltdLCJ3eGFjb2RlX2xpYl9pbmZvX2xpc3QiOltdLCJ3aXRob3V0X2xpYl9tZDUiOiIiLCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJmb3JjZV9zeW5jX3VwZGF0ZV93aGVuX2xhdW5jaF9sYXN0X2ludGVydmFsIjo2MDQ4MDAsImlzX2VuY3J5cHRlZCI6ZmFsc2UsImVuY3J5cHRlZF92ZXJzaW9uX21kNSI6IiIsImVuY3J5cHRlZF9jb2RlX3NpemUiOjAsImVuY3J5cHRlZF93aXRob3V0X2xpYl9tZDUiOiIiLCJtZDVfbGlzdCI6W10sIndpZGdldF9saXN0IjpbeyJwYWNrYWdlX3R5cGUiOjAsInd4YXBrZ19tZDUiOiJlMmRlODhjNGFkMGI5ZTMxNWFlMmI0NGI5MDdlNDcwNCIsInd4YXBrZ19zaXplIjo3MjQzODI4LCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn0seyJwYWNrYWdlX3R5cGUiOjgsInd4YXBrZ19tZDUiOiJiNGY1MzljZTdhZjUxNTNhNDhiMDcxOTNkNWVkMTYwZSIsInd4YXBrZ19zaXplIjozNTY1NDc2LCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn0seyJwYWNrYWdlX3R5cGUiOjE1LCJ3eGFwa2dfbWQ1IjoiNGJjMzAwN2FkYjQ1ZTRjMzY1YjcxNmNkZWRlYTZmMjUiLCJ3eGFwa2dfc2l6ZSI6MTcxLCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn0seyJwYWNrYWdlX3R5cGUiOjE2LCJ3eGFwa2dfbWQ1IjoiNTc2ZTZlMTBjYjA1OTcwNGVmNjA2ODVlY2QxZTA3NGQiLCJ3eGFwa2dfc2l6ZSI6ODA3NDA1MCwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9LHsicGFja2FnZV90eXBlIjoyMiwid3hhcGtnX21kNSI6IjE0OTViZDI4MGY1OWFkNjk4MmZiYzkyMDVlZjMwZTU2Iiwid3hhcGtnX3NpemUiOjUxNTYxMDEsInNlcGFyYXRlZF9wbHVnaW5fbGlzdCI6W3sicGx1Z2luX2lkIjoid3hmYTQzYTRhNzA0MWE4NGRlIiwiaW5uZXJfdmVyc2lvbiI6MTYsIm1kNSI6ImZmMWMzZTQ4ZmE3Njc4NmRkM2UwNTdkMjA3ZTE2NzliIiwiY29udGV4dHMiOlswXSwicHJlZml4X3BhdGgiOiIiLCJtZDVfbGlzdCI6W10sImF1dG9fdXBkYXRlIjoxfV0sInd4YXBrZ19zaGEyNTYiOiIifSx7InBhY2thZ2VfdHlwZSI6MjQsInd4YXBrZ19tZDUiOiJhMjNiNTJjMmI4ZmI3ZjhjYTQxM2YxNTJlNmEwOTVmOCIsInd4YXBrZ19zaXplIjo1OTAwNzU4LCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn0seyJwYWNrYWdlX3R5cGUiOjI4LCJ3eGFwa2dfbWQ1IjoiMTQ4YWRjNDhmZWUxNzA4ZjFjOGFlMDY1Y2VlMjdhZTEiLCJ3eGFwa2dfc2l6ZSI6ODc1NSwic2VwYXJhdGVkX3BsdWdpbl9saXN0IjpbXSwid3hhcGtnX3NoYTI1NiI6IiJ9LHsicGFja2FnZV90eXBlIjo5OTksInd4YXBrZ19tZDUiOiI2YmE2ZTY4NjEwODQ0NGU0YWQ5YjFmNWUyNTIwNmJjMyIsInd4YXBrZ19zaXplIjo0Mzk1NDMyLCJzZXBhcmF0ZWRfcGx1Z2luX2xpc3QiOltdLCJ3eGFwa2dfc2hhMjU2IjoiIn1dLCJyZXNpemFibGUiOnRydWUsIm9ubHlfcnVuX3d4d29yayI6ZmFsc2UsIm1hdGVyaWFsX2NvbmYiOnsic3VwcG9ydF9tYXRlcmlhbF9saXN0IjpbXSwicHJldmlld19tYXRlcmlhbF9saXN0IjpbXX0sImN1c3RvbV9kYXRhX2NvbmYiOnsic3ViX2Rlc2MiOiIiLCJwcmV2aWV3X3N1Yl9kZXNjIjoiIn0sInRlbXBsYXRlX2lkIjowLCJoYWxmUGFnZSI6eyJmaXJzdFBhZ2VOYXZpZ2F0aW9uU3R5bGUiOiIifSwid2V3b3JrX2N1c3RvbWVyX3NlcnZpY2VfaW5mbyI6eyJlbnRlcnByaXNlX2lkX2xpc3QiOltdLCJjb3JwaWRfaXRlbV9saXN0IjpbeyJjb3JwaWQiOiJ3d2VlODk2ODRhZmVlNGExYjEiLCJiaW5kX3RpbWUiOiIxNjI0NTE2NTc0In1dfSwicmVuZGVyZXJzIjpbXSwiY3VzdG9tX3ZlcnNpb24iOiIxLjYuNDIifRpZCgtCaW5kV3hhSW5mbxJKeyJ3eGFFbnRyeUluZm8iOltdLCJiaXpFbnRyeUluZm8iOltdLCJ1c2VybmFtZSI6IiIsIm9wZW5XeGFCeUJpelFSQ29kZSI6MH0avwsKDVd4YUFwcER5bmFtaWMSrQt7Ik5ld1NldHRpbmciOnsiTWF4TG9jYWxzdG9yYWdlU2l6ZSI6MTAsIk1heENvZGVTaXplIjoyLCJNYXhXZWJ2aWV3RGVwdGgiOjUsIk1heEJhY2tncm91bmRMaWZlc3BhbiI6MzAwLCJNYXhSZXF1ZXN0Q29uY3VycmVudCI6MTAsIk1heFVwbG9hZENvbmN1cnJlbnQiOjEwLCJNYXhEb3dubG9hZENvbmN1cnJlbnQiOjEwLCJNYXhGaWxlU3RvcmFnZVNpemUiOjIwMCwiRXhwaXJlc0F0TGlzdCI6NDMyMDAwLCJCYWNrZ3JvdW5kTmV0d29ya0ludGVycnVwdGVkVGltZW91dCI6MzAwLCJDYW5LZWVwQWxpdmVCeUF1ZGlvUGxheSI6MSwiTGlmZVNwYW5CZWZvcmVTdXNwZW5kIjo1LCJMaWZlU3BhbkFmdGVyU3VzcGVuZCI6MTgwMCwiTWF4V2Vic29ja2V0Q29ubmVjdCI6NSwiRXhwZW5kZWRNYXhXZWJ2aWV3RGVwdGgiOjEwLCJBY3R1YWxXZWJ2aWV3RGVwdGgiOjUsIldlYnNvY2tldFNraXBQb3J0Q2hlY2siOjEsIk1heFN1YnBhY2thZ2VTdWJDb2RlU2l6ZSI6MiwiTWF4U3VicGFja2FnZUZ1bGxDb2RlU2l6ZSI6MjAsIk1heFdvcmtlckNvbmN1cnJlbnQiOjEsIlNjYW5Db2RlRW5hYmxlWlpNIjowLCJNYXhQbHVnaW5TZGtSZWFkbWVTaXplIjoyLCJDYW5QcmVGZXRjaERhdGEiOjEsIkNhblBlcmlvZEZldGNoRGF0YSI6MSwiUGVyaW9kRmV0Y2hEYXRhIjoxMiwiVExTU2tpcEhvc3RuYW1lQ2hlY2siOjAsIk5hdmlnYXRlTWluaXByb2dyYW1MaW1pdCI6OTk5OTk5LCJPcGVuZGF0YU1heExvY2Fsc3RvcmFnZVNpemUiOjEwLCJPcGVuZGF0YU1heEZpbGVTdG9yYWdlU2l6ZSI6MTAsIk1heFRlbXBGaWxlU3RvcmFnZVNpemUiOjIwNDgsIk9wZW5XeGFJYXAiOjEsIkd1YXJhbnRlZUZsYWciOjEsIkNhblNob3dMb2FkaW5nQWR2ZXJ0IjowLCJNYXhTdWJQYWNrYWdlTGltaXQiOjEwMCwiUGVyaW9kRmV0Y2hEYXRhRGF5Ijo3LCJPcGVuV3hhV2FpdFVwZGF0ZU1heE1pY1NlYyI6MTMwMDAsIk9wZW5XeGFXYWl0VXBkYXRlTWF4TWljU2VjRm9yV2Vha05ldCI6MTMwMDAsIk1pblRlbXBGaWxlU3RvcmFnZVNpemUiOjIwNDgsIlVpbnQzMk1heExvY2Fsc3RvcmFnZVNpemVJbk1CIjoxMCwiVWludDMyT3BlbmRhdGFNYXhMb2NhbHN0b3JhZ2VTaXplSW5NQiI6MTAsIlVpbnQzMk1heEZpbGVTdG9yYWdlU2l6ZUluTUIiOjIwMCwiVWludDMyT3BlbmRhdGFNYXhGaWxlU3RvcmFnZVNpemVJbk1CIjoxMCwiVWludDMyTWF4VGVtcEZpbGVTdG9yYWdlU2l6ZUluTUIiOjQwOTYsIlVpbnQzMk1pblRlbXBGaWxlU3RvcmFnZVNpemVJbk1CIjoyMDQ4LCJPcGVuUHJvZHVjdEZsYWciOjAsIlVzZVBhY2thZ2VDb25maXJtU3ViRGVzY1Njb3BlTGlzdCI6W10sIlByZUNnaUNhbGxCeXRlQmVmb3JlTGF1bmNoIjoiXHUwMDAxIiwiQ2FuU2hvd0dhbWVMb2FkaW5nQWR2ZXJ0IjowfSwiTmV3Q2F0ZWdvcmllcyI6W3siZmlyc3QiOiLnlLXllYblubPlj7AiLCJzZWNvbmQiOiLnlLXllYblubPlj7AifV19GrkECg9QYXNzVGhyb3VnaEluZm8SpQR7ImZvcmNlVXBkYXRlIjp0cnVlLCJleHB0X2luZm8iOnsiZXhwdF9wYXJhbV9saXN0IjpbeyJwYXJhbV9uYW1lIjoiZXhwdF8xNjQ4NzE2MjU5IiwicGFyYW1fdmFsdWUiOiIwIiwiZXhwdF9pZCI6MCwiZXhwdF9ncm91cF9pZCI6MH0seyJwYXJhbV9uYW1lIjoiZXhwdF8xNjQ4MTkzMzgxIiwicGFyYW1fdmFsdWUiOiIwIiwiZXhwdF9pZCI6MCwiZXhwdF9ncm91cF9pZCI6MH0seyJwYXJhbV9uYW1lIjoiZXhwdF8xNjI4MDgzOTI1NTQ5IiwicGFyYW1fdmFsdWUiOiIwIiwiZXhwdF9pZCI6MCwiZXhwdF9ncm91cF9pZCI6MH0seyJwYXJhbV9uYW1lIjoiZXhwdF9hcmdzXzIiLCJwYXJhbV92YWx1ZSI6IjEiLCJleHB0X2lkIjo0ODMsImV4cHRfZ3JvdXBfaWQiOjQ4NX0seyJwYXJhbV9uYW1lIjoiZXhwdF9hcmdzXzMiLCJwYXJhbV92YWx1ZSI6IjIiLCJleHB0X2lkIjoxNTksImV4cHRfZ3JvdXBfaWQiOjE2Mn1dfSwib3BlblByb2R1Y3RGbGFnIjowLCJ3eGFfbWdyIjp7Im1ncl9saXN0IjpbeyJpZCI6ODMzLCJ2YWx1ZSI6MX0seyJpZCI6ODM0LCJ2YWx1ZSI6MH1dfX0a2gQKFVN0YWJsZVBhc3NUaHJvdWdoSW5mbxLABHsid3hhX3ByaXZhY3lfbGlzdCI6W3sic2NvcGUiOiJqc2FwaV9jYW1lcmEiLCJzdWJfZGVzYyI6Iua8lOekumxpdmUtcHVzaGVy57uE5Lu255u45YWz6IO95YqbIn0seyJzY29wZSI6ImpzYXBpX2xvY2F0aW9uIiwic3ViX2Rlc2MiOiLmvJTnpLp3eC5nZXRMb2NhdGlvbuiOt+WPlueUqOaIt+WumuS9jeeahOiDveWKmyJ9LHsic2NvcGUiOiJqc2FwaV9sb2NhdGlvbl9iYWNrZ3JvdW5kIiwic3ViX2Rlc2MiOiLmvJTnpLp3eC5nZXRMb2NhdGlvbuiOt+WPlueUqOaIt+WumuS9jeeahOiDveWKmyJ9LHsic2NvcGUiOiJqc2FwaV9waG90b3NfYWxidW0iLCJzdWJfZGVzYyI6Iua8lOekund4LnNhdmVJbWFnZVRvUGhvdG9zQWxidW3kv53lrZjlm77niYfliLDns7vnu5/nm7jlhoznmoTog73lipsifSx7InNjb3BlIjoianNhcGlfcmVjb3JkIiwic3ViX2Rlc2MiOiLmvJTnpLpsaXZlLXB1c2hlcue7hOS7tuebuOWFs+iDveWKmyJ9LHsic2NvcGUiOiJ3ZWJhcGlfYmx1ZXRvb3RoIiwic3ViX2Rlc2MiOiLmvJTnpLrok53niZnjgIFpQmVhY29u55u45YWz6IO95YqbIn1dLCJ3eGFfb3Blbl91cmxfZG9tYWluX2xpc3QiOltdfSITZ2hfZDQzZjY5M2NhMzFmQGFwcA==";
2
+ export default originalContactBase64;