liyubing

Merge remote-tracking branch 'origin/main'

Showing 61 changed files with 1042 additions and 42 deletions
@@ -23,6 +23,10 @@ @@ -23,6 +23,10 @@
23 { 23 {
24 "name": "load_net_data_none", 24 "name": "load_net_data_none",
25 "value": "no data" 25 "value": "no data"
  26 + },
  27 + {
  28 + "name": "location_reason",
  29 + "value": " "
26 } 30 }
27 ] 31 ]
28 } 32 }
  1 +{
  2 + "appKey": "662f39fecac2a664de284236",
  3 + "channel": "rmrb_china_0000"
  4 +}
@@ -268,6 +268,18 @@ @@ -268,6 +268,18 @@
268 ] 268 ]
269 } 269 }
270 ] 270 ]
  271 + },
  272 + {
  273 + "name": "wdTracking",
  274 + "srcPath": "./features/wdTracking",
  275 + "targets": [
  276 + {
  277 + "name": "default",
  278 + "applyToProducts": [
  279 + "default"
  280 + ]
  281 + }
  282 + ]
271 } 283 }
272 ] 284 ]
273 } 285 }
@@ -49,3 +49,5 @@ export { NetworkUtil } from './src/main/ets/utils/NetworkUtil' @@ -49,3 +49,5 @@ export { NetworkUtil } from './src/main/ets/utils/NetworkUtil'
49 export { NetworkManager } from './src/main/ets/network/NetworkManager' 49 export { NetworkManager } from './src/main/ets/network/NetworkManager'
50 50
51 export { NetworkType } from './src/main/ets/network/NetworkType' 51 export { NetworkType } from './src/main/ets/network/NetworkType'
  52 +
  53 +export { UmengStats } from "./src/main/ets/umeng/UmengStats"
@@ -6,5 +6,8 @@ @@ -6,5 +6,8 @@
6 "description": "Please describe the basic information.", 6 "description": "Please describe the basic information.",
7 "main": "Index.ets", 7 "main": "Index.ets",
8 "version": "1.0.0", 8 "version": "1.0.0",
9 - "dependencies": {} 9 + "dependencies": {
  10 + "@umeng/common": "^1.0.21",
  11 + "@umeng/analytics": "^1.0.19"
  12 + }
10 } 13 }
  1 +import { preInit, InternalPlugin, setLogEnabled, init, onEventObject, onProfileSignOff,
  2 + onProfileSignIn } from '@umeng/analytics';
  3 +import { common } from '@kit.AbilityKit';
  4 +import { AccountManagerUtils } from '../utils/AccountManagerUtils';
  5 +import { UserDataLocal } from '../utils/UserDataLocal';
  6 +import { EmitterUtils } from '../utils/EmitterUtils';
  7 +
  8 +export class UmengStats {
  9 +
  10 + private static _inited = false
  11 +
  12 + // 启动时调用
  13 + static preInit(context: common.UIAbilityContext) {
  14 +
  15 + // 需在 AppScope/resources/rawfile/umconfig.json 配置key和channel
  16 + preInit({
  17 + context: context.getApplicationContext(),
  18 + plugins: [new InternalPlugin()],
  19 + enableLog: true
  20 +
  21 + });
  22 + }
  23 +
  24 + // 在用户同意隐私政策后再调用此方法
  25 + static initAfterAgreeProtocol() {
  26 + init();
  27 + UmengStats._inited = true
  28 +
  29 + UmengStats.onLogin()
  30 + UmengStats.event("testHarmony", {"key1": "value1"})
  31 + }
  32 +
  33 + // TODO: 登录成功调用
  34 + static onLogin() {
  35 + AccountManagerUtils.isLogin().then((login) => {
  36 + if (!login) { return }
  37 +
  38 + let userId = UserDataLocal.getUserId()
  39 + if (userId.length > 0) {
  40 + onProfileSignIn("USER", userId)
  41 + }
  42 + })
  43 + }
  44 + // TODO: 退出登录调用
  45 + static onLogout() {
  46 + onProfileSignOff()
  47 + }
  48 +
  49 + // 属性key,128位以内的非空字符串,value为256位以内的数值或字符串
  50 + static event(eventId: string, param?: Record<string, string | number>) {
  51 + if (!UmengStats._inited) {
  52 + return
  53 + }
  54 + onEventObject(eventId, param);
  55 + }
  56 +}
@@ -73,7 +73,6 @@ export class DeviceUtil { @@ -73,7 +73,6 @@ export class DeviceUtil {
73 * 客户端日志链路追踪traceid生成:在每个请求头加上参数Key:EagleEye-TraceID ,value为32位生成随机值 73 * 客户端日志链路追踪traceid生成:在每个请求头加上参数Key:EagleEye-TraceID ,value为32位生成随机值
74 */ 74 */
75 static getRandomUUIDForTraceID(): string { 75 static getRandomUUIDForTraceID(): string {
76 - deviceInfo.productModel  
77 - return util.generateRandomUUID().toUpperCase().replace('-', '') 76 + return util.generateRandomUUID().toUpperCase().replace(/-/g, '')
78 } 77 }
79 } 78 }
1 import { SpConstants } from 'wdConstant'; 1 import { SpConstants } from 'wdConstant';
2 -import { DateTimeUtils, DeviceUtil, SPHelper, StringUtils } from 'wdKit'; 2 +import { AppUtils, DateTimeUtils, DeviceUtil, SPHelper, StringUtils } from 'wdKit';
3 import { HttpUtils } from '../utils/HttpUtils'; 3 import { HttpUtils } from '../utils/HttpUtils';
4 import { HostEnum, HostManager } from './HttpHostManager'; 4 import { HostEnum, HostManager } from './HttpHostManager';
5 5
@@ -19,8 +19,8 @@ export class HttpParams { @@ -19,8 +19,8 @@ export class HttpParams {
19 headers['adcode'] = HttpUtils.getProvinceCode() 19 headers['adcode'] = HttpUtils.getProvinceCode()
20 headers['os_version'] = DeviceUtil.getOsVersion() 20 headers['os_version'] = DeviceUtil.getOsVersion()
21 headers['system'] = 'Android' // TODO 后续是否新增鸿蒙标识 21 headers['system'] = 'Android' // TODO 后续是否新增鸿蒙标识
22 - headers['versionCode'] = HttpParams.getVersionCode()  
23 - headers['version_name'] = HttpParams.getVersionName() 22 + headers['versionCode'] = AppUtils.getAppVersionCode()
  23 + headers['version_name'] = AppUtils.getAppVersionName()
24 headers['EagleEye-TraceID'] = DeviceUtil.getRandomUUIDForTraceID() 24 headers['EagleEye-TraceID'] = DeviceUtil.getRandomUUIDForTraceID()
25 headers['imei'] = DeviceUtil.clientId() 25 headers['imei'] = DeviceUtil.clientId()
26 headers['Accept-Language'] = 'zh' 26 headers['Accept-Language'] = 'zh'
@@ -4,6 +4,7 @@ import { Logger } from 'wdKit/Index'; @@ -4,6 +4,7 @@ import { Logger } from 'wdKit/Index';
4 import { performJSCallNative } from './JsBridgeBiz'; 4 import { performJSCallNative } from './JsBridgeBiz';
5 import { H5CallNativeType } from './H5CallNativeType'; 5 import { H5CallNativeType } from './H5CallNativeType';
6 import { Message } from 'wdJsBridge/src/main/ets/bean/Message'; 6 import { Message } from 'wdJsBridge/src/main/ets/bean/Message';
  7 +import { DateTimeUtils } from 'wdKit'
7 8
8 const TAG = 'WdWebLocalComponent'; 9 const TAG = 'WdWebLocalComponent';
9 10
@@ -22,6 +23,13 @@ export struct WdWebLocalComponent { @@ -22,6 +23,13 @@ export struct WdWebLocalComponent {
22 @State positionLeft: number = 0 23 @State positionLeft: number = 0
23 @State positionTop: number = 0 24 @State positionTop: number = 0
24 @State videoLandscape: string = '1' 25 @State videoLandscape: string = '1'
  26 + @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  27 + @State sliderStartTime: string = '';
  28 + @State currentTime: number = 0;
  29 + @State durationTime: number = 0;
  30 + @State durationStringTime: string = '';
  31 + @State isPause: boolean = true;
  32 + controller: VideoController = new VideoController()
25 33
26 build() { 34 build() {
27 Column() { 35 Column() {
@@ -77,12 +85,78 @@ export struct WdWebLocalComponent { @@ -77,12 +85,78 @@ export struct WdWebLocalComponent {
77 }) 85 })
78 86
79 if (this.videoUrl) { 87 if (this.videoUrl) {
80 - Video({ src: this.videoUrl }) 88 + Stack({ alignContent: Alignment.Bottom }) {
  89 + Video({
  90 + src: this.videoUrl,
  91 + currentProgressRate: this.curRate,
  92 + controller: this.controller
  93 + })
  94 + .borderRadius(5)
  95 + .controls(false)
81 .autoPlay(true) 96 .autoPlay(true)
82 .objectFit(ImageFit.Contain) 97 .objectFit(ImageFit.Contain)
  98 + .onStart(() => {
  99 + this.isPause = false
  100 + })
  101 + .onPause(() => {
  102 + this.isPause = true
  103 + })
  104 + .onPrepared((event) => {
  105 + if (event) {
  106 + this.durationTime = event.duration
  107 + }
  108 + })
  109 + .onUpdate((event) => {
  110 + if (event) {
  111 + this.currentTime = event.time
  112 + }
  113 + })
  114 + Row() {
  115 + Image($r(this.isPause ? 'app.media.icon_play' : 'app.media.icon_pause'))
  116 + .width(24)
  117 + .height(24)
  118 + .onClick(()=>{
  119 + if(this.isPause){
  120 + this.controller.start()
  121 + }else{
  122 + this.controller.pause()
  123 + }
  124 + })
  125 + Row() {
  126 + Text(DateTimeUtils.getFormattedDuration(this.currentTime * 1000)).fontSize(12).fontColor(Color.White).fontWeight(600)
  127 + Slider({
  128 + value: this.currentTime,
  129 + min: 0,
  130 + max: this.durationTime
  131 + })
  132 + .width("50%")
  133 + .selectedColor('#ED2800')
  134 + .margin({ left: 4, right: 4 })
  135 + // .blockStyle({
  136 + // type: SliderBlockType.IMAGE,
  137 + // image: $r('app.media.slider_block')
  138 + // })
  139 + // .blockSize({ width: 18, height: 12 })
  140 + .onChange((value: number, mode: SliderChangeMode) => {
  141 + this.controller.setCurrentTime(value);
  142 + })
  143 + Text(DateTimeUtils.getFormattedDuration(this.durationTime * 1000)).fontSize(12).fontColor(Color.White).fontWeight(600)
  144 + }
  145 + .justifyContent(FlexAlign.Center)
  146 +
  147 + Image($r('app.media.icon_full_screen'))
  148 + .width(24)
  149 + .height(24)
  150 + .onClick(()=>{
  151 + this.controller.requestFullscreen(true)
  152 + })
  153 + }
  154 + .opacity(0.8)
  155 + .width("100%")
  156 + .justifyContent(FlexAlign.SpaceAround)
  157 + }
83 .width(this.positionWidth) 158 .width(this.positionWidth)
84 .height(this.positionHeight) 159 .height(this.positionHeight)
85 - .borderRadius(5)  
86 .alignRules({ 160 .alignRules({
87 top: { anchor: "__container__", align: VerticalAlign.Top }, 161 top: { anchor: "__container__", align: VerticalAlign.Top },
88 }) 162 })
@@ -92,7 +166,6 @@ export struct WdWebLocalComponent { @@ -92,7 +166,6 @@ export struct WdWebLocalComponent {
92 }) 166 })
93 .id("video") 167 .id("video")
94 } 168 }
95 -  
96 } 169 }
97 }.width('100%') 170 }.width('100%')
98 .height(this.webHeight) 171 .height(this.webHeight)
1 -import { Logger, NumberFormatterUtils, DateTimeUtils, EmitterUtils, EmitterEventId, NetworkUtil } from 'wdKit'; 1 +import {
  2 + Logger,
  3 + NumberFormatterUtils,
  4 + DateTimeUtils,
  5 + EmitterUtils,
  6 + EmitterEventId,
  7 + NetworkUtil,
  8 + DisplayUtils
  9 +} from 'wdKit';
2 import { 10 import {
3 Action, 11 Action,
4 ContentDetailDTO, 12 ContentDetailDTO,
@@ -41,6 +49,7 @@ export struct ImageAndTextPageComponent { @@ -41,6 +49,7 @@ export struct ImageAndTextPageComponent {
41 @State publishCommentModel: publishCommentModel = new publishCommentModel() 49 @State publishCommentModel: publishCommentModel = new publishCommentModel()
42 @State operationButtonList: string[] = ['comment', 'collect', 'share'] 50 @State operationButtonList: string[] = ['comment', 'collect', 'share']
43 @State isNetConnected: boolean = true 51 @State isNetConnected: boolean = true
  52 + @State info: Area | null = null
44 53
45 build() { 54 build() {
46 Column() { 55 Column() {
@@ -131,8 +140,11 @@ export struct ImageAndTextPageComponent { @@ -131,8 +140,11 @@ export struct ImageAndTextPageComponent {
131 Divider().strokeWidth(6).color('#f5f5f5') 140 Divider().strokeWidth(6).color('#f5f5f5')
132 CommentComponent({ 141 CommentComponent({
133 publishCommentModel: this.publishCommentModel 142 publishCommentModel: this.publishCommentModel
  143 + }).onAreaChange((oldValue: Area, newValue: Area) => {
  144 + this.info = newValue
134 }) 145 })
135 // .onMeasureSize() 146 // .onMeasureSize()
  147 +
136 } 148 }
137 } 149 }
138 } 150 }
@@ -144,29 +156,26 @@ export struct ImageAndTextPageComponent { @@ -144,29 +156,26 @@ export struct ImageAndTextPageComponent {
144 .scrollBar(BarState.Off) 156 .scrollBar(BarState.Off)
145 .align(Alignment.Top) 157 .align(Alignment.Top)
146 158
147 - if(!this.isNetConnected) { 159 + if (!this.isNetConnected) {
148 EmptyComponent({ 160 EmptyComponent({
149 emptyType: 1, 161 emptyType: 1,
150 emptyButton: true, 162 emptyButton: true,
151 retry: () => { 163 retry: () => {
152 this.getDetail() 164 this.getDetail()
153 } 165 }
154 - })  
155 - }else{ 166 + }).padding({ bottom: 200 })
  167 + } else {
156 if (!this.isPageEnd) { 168 if (!this.isPageEnd) {
157 detailedSkeleton() 169 detailedSkeleton()
158 } 170 }
159 } 171 }
160 -  
161 //底部交互区 172 //底部交互区
162 - if (this.contentDetailData?.length) {  
163 OperRowListView({ 173 OperRowListView({
164 contentDetailData: this.contentDetailData[0], 174 contentDetailData: this.contentDetailData[0],
165 publishCommentModel: this.publishCommentModel, 175 publishCommentModel: this.publishCommentModel,
166 operationButtonList: this.operationButtonList, 176 operationButtonList: this.operationButtonList,
167 }) 177 })
168 } 178 }
169 - }  
170 179
171 } 180 }
172 .width(CommonConstants.FULL_WIDTH) 181 .width(CommonConstants.FULL_WIDTH)
@@ -308,7 +317,16 @@ export struct ImageAndTextPageComponent { @@ -308,7 +317,16 @@ export struct ImageAndTextPageComponent {
308 if (targetId) { 317 if (targetId) {
309 if (targetId == this.publishCommentModel.targetId) { 318 if (targetId == this.publishCommentModel.targetId) {
310 // 滚动到评论列表 319 // 滚动到评论列表
311 - 320 + if (this.info) {
  321 + // let height = DisplayUtils.getDeviceHeight() / 2
  322 + let offSetY = this.info?.globalPosition.y as number
  323 + //头部距离48
  324 + this.scroller.scrollTo({
  325 + yOffset: offSetY - 100,
  326 + xOffset: 0,
  327 + animation: { duration: 1000, curve: Curve.Ease }
  328 + })
  329 + }
312 } 330 }
313 } 331 }
314 }) 332 })
@@ -182,9 +182,6 @@ export struct CommentComponent { @@ -182,9 +182,6 @@ export struct CommentComponent {
182 if (this.hasMore === false) NoMoreLayout() 182 if (this.hasMore === false) NoMoreLayout()
183 } 183 }
184 } 184 }
185 -// .onScrollFrameBegin((offset: number, state: ScrollState)=>{  
186 -//  
187 -// })  
188 .onReachEnd(()=>{ 185 .onReachEnd(()=>{
189 if (this.hasMore) { 186 if (this.hasMore) {
190 this.getData() 187 this.getData()
@@ -319,7 +319,7 @@ struct ChannelDialog { @@ -319,7 +319,7 @@ struct ChannelDialog {
319 } 319 }
320 } 320 }
321 }), 321 }),
322 - PanGesture({ fingers: 1, direction: null, distance: 0 }) 322 + PanGesture({ fingers: 1, direction: this.isEditIng ? PanDirection.All:PanDirection.None, distance: 0 })
323 .onActionStart((event: GestureEvent) => { 323 .onActionStart((event: GestureEvent) => {
324 this.dragItem = item.num 324 this.dragItem = item.num
325 this.dragRefOffsetX = 0 325 this.dragRefOffsetX = 0
@@ -3,6 +3,7 @@ import { RefreshLayoutBean } from './RefreshLayoutBean'; @@ -3,6 +3,7 @@ import { RefreshLayoutBean } from './RefreshLayoutBean';
3 3
4 /** 4 /**
5 * Custom layout to show refresh or load. 5 * Custom layout to show refresh or load.
  6 + * @deprecated
6 */ 7 */
7 @Component 8 @Component
8 export default struct CustomLayout { 9 export default struct CustomLayout {
@@ -3,8 +3,6 @@ import { Logger } from 'wdKit'; @@ -3,8 +3,6 @@ import { Logger } from 'wdKit';
3 import { EmptyComponent } from '../view/EmptyComponent'; 3 import { EmptyComponent } from '../view/EmptyComponent';
4 import PageModel from '../../viewmodel/PageModel'; 4 import PageModel from '../../viewmodel/PageModel';
5 import { autoRefresh, listTouchEvent } from '../../utils/PullDownRefresh'; 5 import { autoRefresh, listTouchEvent } from '../../utils/PullDownRefresh';
6 -import RefreshLayout from './RefreshLayout';  
7 -import { RefreshLayoutBean } from './RefreshLayoutBean';  
8 import LoadMoreLayout from './LoadMoreLayout'; 6 import LoadMoreLayout from './LoadMoreLayout';
9 import { CompParser } from '../CompParser'; 7 import { CompParser } from '../CompParser';
10 import { CompDTO } from 'wdBean'; 8 import { CompDTO } from 'wdBean';
@@ -14,6 +12,8 @@ import { ProcessUtils } from 'wdRouter/Index'; @@ -14,6 +12,8 @@ import { ProcessUtils } from 'wdRouter/Index';
14 import PageAdModel from '../../viewmodel/PageAdvModel'; 12 import PageAdModel from '../../viewmodel/PageAdvModel';
15 import PageNoMoreLayout from './PageNoMoreLayout'; 13 import PageNoMoreLayout from './PageNoMoreLayout';
16 import { NoMoreBean } from './NoMoreBean'; 14 import { NoMoreBean } from './NoMoreBean';
  15 +import { RefreshLayoutBean } from '../refresh/RefreshLayoutBean';
  16 +import RefreshLayout from '../refresh/RefreshLayout';
17 17
18 const TAG = 'PageComponent'; 18 const TAG = 'PageComponent';
19 19
@@ -66,8 +66,8 @@ export struct PageComponent { @@ -66,8 +66,8 @@ export struct PageComponent {
66 // 下拉刷新 66 // 下拉刷新
67 ListItem() { 67 ListItem() {
68 RefreshLayout({ 68 RefreshLayout({
69 - refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.pullDownRefreshImage,  
70 - this.pageModel.pullDownRefreshText, this.pageModel.pullDownRefreshHeight) 69 + refreshBean: new RefreshLayoutBean(this.pageModel.isVisiblePullDown, this.pageModel.load,
  70 + this.pageModel.offsetY)
71 }) 71 })
72 } 72 }
73 73
@@ -3,6 +3,7 @@ import { RefreshLayoutBean } from './RefreshLayoutBean'; @@ -3,6 +3,7 @@ import { RefreshLayoutBean } from './RefreshLayoutBean';
3 3
4 /** 4 /**
5 * The refresh layout component. 5 * The refresh layout component.
  6 + * @deprecated
6 */ 7 */
7 @Component 8 @Component
8 export default struct RefreshLayout { 9 export default struct RefreshLayout {
1 /** 1 /**
2 * Custom refresh load layout data. 2 * Custom refresh load layout data.
  3 + * @deprecated
3 */ 4 */
4 @Observed 5 @Observed
5 export class RefreshLayoutBean { 6 export class RefreshLayoutBean {
  1 +import { RefreshLayoutBean } from '../refresh/RefreshLayoutBean';
  2 +import RefreshLoadLayout from '../refresh/RefreshLoadLayout';
  3 +
  4 +/**
  5 + * The refresh layout component.
  6 + */
  7 +@Component
  8 +export default struct RefreshLayout {
  9 + @ObjectLink refreshBean: RefreshLayoutBean;
  10 +
  11 + build() {
  12 + Column() {
  13 + if (this.refreshBean.isVisible) {
  14 + RefreshLoadLayout({
  15 + refreshBean: new RefreshLayoutBean(this.refreshBean.isVisible, this.refreshBean.loadStatus, this.refreshBean.offset)
  16 + })
  17 + }
  18 + }
  19 + }
  20 +}
  1 +/**
  2 + * 下拉刷新数据bean.
  3 + */
  4 +@Observed
  5 +export class RefreshLayoutBean {
  6 + /**
  7 + * Custom refresh load layout isVisible.
  8 + */
  9 + isVisible: boolean;
  10 + loadStatus: number; // 1-下拉刷新 2-松开刷新 3-刷新完成
  11 +
  12 + offset: number;
  13 +
  14 + constructor(isVisible: boolean, loadStatus: LoadStatus, offset: number) {
  15 + this.isVisible = isVisible;
  16 + this.loadStatus = loadStatus;
  17 + this.offset = offset;
  18 + }
  19 +}
  20 +
  21 +export const enum LoadStatus {
  22 + /**
  23 + * 触发刷新前,有下拉动作了
  24 + */
  25 + IDLE,
  26 + /**
  27 + * 触发刷新前,有下拉动作了
  28 + */
  29 + PRELOAD,
  30 + /**
  31 + * 刷新中
  32 + */
  33 + LOADING,
  34 + /**
  35 + * 触发刷新结束,展示‘已更新最新’
  36 + */
  37 + LOADED,
  38 +}
  1 +import lottie, { AnimationItem } from '@ohos/lottie';
  2 +import { LoadStatus, RefreshLayoutBean } from './RefreshLayoutBean';
  3 +
  4 +/**
  5 + * Custom layout to show refresh or load.
  6 + * TODO 待优化
  7 + */
  8 +@Component
  9 +export default struct CustomLayout {
  10 + // 设置刷新view高度
  11 + static readonly REFRESH_HEIGHT: number = 90;
  12 + @ObjectLink @Watch('onOffsetChange') refreshBean: RefreshLayoutBean;
  13 + private mainRenderingSettings: RenderingContextSettings = new RenderingContextSettings(true)
  14 + private mainCanvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.mainRenderingSettings)
  15 + private mainRenderingSettings2: RenderingContextSettings = new RenderingContextSettings(true)
  16 + private mainCanvasRenderingContext2: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.mainRenderingSettings2)
  17 + private animateItem: AnimationItem | null = null;
  18 + private animateItem2: AnimationItem | null = null;
  19 + private animateName: string = "refresh";
  20 + private animateName2: string = "refreshing";
  21 + @State private layoutHeight: number = 0;
  22 +
  23 + build() {
  24 + Stack({ alignContent: Alignment.Center }) {
  25 + Canvas(this.mainCanvasRenderingContext)
  26 + .width(60)
  27 + .height(60)
  28 + .backgroundColor(Color.Transparent)
  29 + .onReady(() => {
  30 + // 可在此生命回调周期中加载动画,可以保证动画尺寸正确
  31 + //抗锯齿的设置
  32 + this.mainCanvasRenderingContext.imageSmoothingEnabled = true;
  33 + this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium'
  34 + })
  35 + .onDisAppear(() => {
  36 + lottie.destroy(this.animateName);
  37 + })
  38 + .visibility(this.refreshBean.loadStatus === LoadStatus.PRELOAD ? Visibility.Visible : Visibility.Hidden)
  39 +
  40 + Canvas(this.mainCanvasRenderingContext2)
  41 + .width(60)
  42 + .height(60)
  43 + .backgroundColor(Color.Transparent)
  44 + .onReady(() => {
  45 + // 可在此生命回调周期中加载动画,可以保证动画尺寸正确
  46 + //抗锯齿的设置
  47 + this.mainCanvasRenderingContext2.imageSmoothingEnabled = true;
  48 + this.mainCanvasRenderingContext2.imageSmoothingQuality = 'medium'
  49 + })
  50 + .onDisAppear(() => {
  51 + lottie.destroy(this.animateName2);
  52 + })
  53 + .visibility(this.refreshBean.loadStatus === LoadStatus.LOADING ? Visibility.Visible : Visibility.Hidden)
  54 +
  55 + Text('已更新至最新')
  56 + .fontSize(17)
  57 + .textAlign(TextAlign.Center)
  58 + .fontColor('#bbbbbb')
  59 + .visibility(this.refreshBean.loadStatus != LoadStatus.LOADED ? Visibility.Hidden : Visibility.Visible)
  60 +
  61 + }
  62 + .clip(true)
  63 + .width('100%')
  64 + .height(this.layoutHeight)
  65 + }
  66 +
  67 + animate1(offset: number) {
  68 + if (this.animateItem == null) {
  69 + this.animateItem = lottie.loadAnimation({
  70 + container: this.mainCanvasRenderingContext,
  71 + renderer: 'canvas', // canvas 渲染模式
  72 + loop: 1,
  73 + autoplay: true,
  74 + name: this.animateName,
  75 + path: "lottie/refresh_step1.json", // 路径加载动画只支持entry/src/main/ets 文件夹下的相对路径
  76 + })
  77 + }
  78 + this.animateItem.goToAndStop(1)
  79 + let total = CustomLayout.REFRESH_HEIGHT
  80 + let progress = offset * 100 / total
  81 + this.animateItem?.goToAndStop(this.getFramesByProgress(progress), true);
  82 + }
  83 +
  84 + animate2() {
  85 + if (this.animateItem2 == null) {
  86 + this.animateItem2 = lottie.loadAnimation({
  87 + container: this.mainCanvasRenderingContext2,
  88 + renderer: 'canvas', // canvas 渲染模式
  89 + loop: 10,
  90 + autoplay: true,
  91 + name: this.animateName2,
  92 + path: "lottie/refresh_step2.json", // 路径加载动画只支持entry/src/main/ets 文件夹下的相对路径
  93 + })
  94 + }
  95 + // this.animateItem2.isLoaded
  96 + // TODO 是否拦截重复触发
  97 + this.animateItem2.goToAndPlay(1)
  98 + }
  99 +
  100 + getFramesByProgress(progress: number): number {
  101 + if (this.animateItem == null) {
  102 + return 1;
  103 + }
  104 + let progressTmp = progress
  105 + let total = this.animateItem.totalFrames;
  106 + let frame = Math.floor(total * progressTmp / 100);
  107 + if (frame >= total - 1) {
  108 + frame = total - 1
  109 + }
  110 + return frame;
  111 + }
  112 +
  113 + onOffsetChange() {
  114 + if (!this.refreshBean.isVisible) {
  115 + return
  116 + }
  117 + if (this.refreshBean.loadStatus === LoadStatus.PRELOAD) {
  118 + // 下拉刷新
  119 + this.animate1(this.refreshBean.offset)
  120 + } else if (this.refreshBean.loadStatus == LoadStatus.LOADING) {
  121 + // 正在刷新
  122 + this.animate2()
  123 + } else {
  124 + // 刷新完成
  125 + lottie.destroy()
  126 + }
  127 + let maxH = CustomLayout.REFRESH_HEIGHT
  128 + let tmpHeight = this.refreshBean.offset > maxH ? maxH : this.refreshBean.offset
  129 + if (this.refreshBean.loadStatus === LoadStatus.LOADED) {
  130 + if (tmpHeight <= 0) {
  131 + setTimeout(() => {
  132 + // 延时设置0,让“已更新到最新”展示
  133 + this.layoutHeight = 0
  134 + }, 1500)
  135 + }
  136 + } else {
  137 + // 直接设置高度
  138 + this.layoutHeight = tmpHeight
  139 + }
  140 + }
  141 +}
@@ -231,7 +231,7 @@ export struct EmptyComponent { @@ -231,7 +231,7 @@ export struct EmptyComponent {
231 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoSearchResult) { 231 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoSearchResult) {
232 imageString = $r('app.media.icon_no_result') 232 imageString = $r('app.media.icon_no_result')
233 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoNetwork) { 233 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoNetwork) {
234 - imageString = $r('app.media.icon_no_net') 234 + imageString = $r('app.media.icon_no_net1')
235 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_ContentFailed) { 235 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_ContentFailed) {
236 imageString = $r('app.media.icon_no_content') 236 imageString = $r('app.media.icon_no_content')
237 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoCreation) { 237 } else if (this.emptyType === WDViewDefaultType.WDViewDefaultType_NoCreation) {
@@ -3,6 +3,7 @@ import { touchMoveLoadMore, touchUpLoadMore } from './PullUpLoadMore'; @@ -3,6 +3,7 @@ import { touchMoveLoadMore, touchUpLoadMore } from './PullUpLoadMore';
3 import PageModel from '../viewmodel/PageModel'; 3 import PageModel from '../viewmodel/PageModel';
4 import PageHelper from '../viewmodel/PageHelper'; 4 import PageHelper from '../viewmodel/PageHelper';
5 import PageAdModel from '../viewmodel/PageAdvModel'; 5 import PageAdModel from '../viewmodel/PageAdvModel';
  6 +import { LoadStatus } from '../components/refresh/RefreshLayoutBean';
6 7
7 export function listTouchEvent(pageModel: PageModel, pageAdvModel: PageAdModel, event: TouchEvent) { 8 export function listTouchEvent(pageModel: PageModel, pageAdvModel: PageAdModel, event: TouchEvent) {
8 switch (event.type) { 9 switch (event.type) {
@@ -46,7 +47,7 @@ export function listTouchEvent(pageModel: PageModel, pageAdvModel: PageAdModel, @@ -46,7 +47,7 @@ export function listTouchEvent(pageModel: PageModel, pageAdvModel: PageAdModel,
46 export function touchMovePullRefresh(pageModel: PageModel, event: TouchEvent) { 47 export function touchMovePullRefresh(pageModel: PageModel, event: TouchEvent) {
47 if (pageModel.startIndex === 0) { 48 if (pageModel.startIndex === 0) {
48 pageModel.isPullRefreshOperation = true; 49 pageModel.isPullRefreshOperation = true;
49 - let height = vp2px(pageModel.pullDownRefreshHeight); 50 + let height = vp2px(Const.CUSTOM_REFRESH_DECIDE_HEIGHT);
50 pageModel.offsetY = event.touches[0].y - pageModel.downY; 51 pageModel.offsetY = event.touches[0].y - pageModel.downY;
51 // The sliding offset is greater than the pull-down refresh layout height, and the refresh condition is met. 52 // The sliding offset is greater than the pull-down refresh layout height, and the refresh condition is met.
52 if (pageModel.offsetY >= height) { 53 if (pageModel.offsetY >= height) {
@@ -98,12 +99,14 @@ export function pullRefreshState(pageModel: PageModel, state: number) { @@ -98,12 +99,14 @@ export function pullRefreshState(pageModel: PageModel, state: number) {
98 pageModel.isCanRefresh = false; 99 pageModel.isCanRefresh = false;
99 pageModel.isRefreshing = false; 100 pageModel.isRefreshing = false;
100 pageModel.isVisiblePullDown = true; 101 pageModel.isVisiblePullDown = true;
  102 + pageModel.load = LoadStatus.PRELOAD
101 break; 103 break;
102 case RefreshState.Release: 104 case RefreshState.Release:
103 pageModel.pullDownRefreshText = $r('app.string.release_refresh_text'); 105 pageModel.pullDownRefreshText = $r('app.string.release_refresh_text');
104 pageModel.pullDownRefreshImage = $r('app.media.ic_pull_up_refresh'); 106 pageModel.pullDownRefreshImage = $r('app.media.ic_pull_up_refresh');
105 pageModel.isCanRefresh = true; 107 pageModel.isCanRefresh = true;
106 pageModel.isRefreshing = false; 108 pageModel.isRefreshing = false;
  109 + pageModel.load = LoadStatus.PRELOAD
107 break; 110 break;
108 case RefreshState.Refreshing: 111 case RefreshState.Refreshing:
109 pageModel.offsetY = vp2px(pageModel.pullDownRefreshHeight); 112 pageModel.offsetY = vp2px(pageModel.pullDownRefreshHeight);
@@ -111,18 +114,21 @@ export function pullRefreshState(pageModel: PageModel, state: number) { @@ -111,18 +114,21 @@ export function pullRefreshState(pageModel: PageModel, state: number) {
111 pageModel.pullDownRefreshImage = $r('app.media.ic_pull_up_load'); 114 pageModel.pullDownRefreshImage = $r('app.media.ic_pull_up_load');
112 pageModel.isCanRefresh = true; 115 pageModel.isCanRefresh = true;
113 pageModel.isRefreshing = true; 116 pageModel.isRefreshing = true;
  117 + pageModel.load = LoadStatus.LOADING
114 break; 118 break;
115 case RefreshState.Success: 119 case RefreshState.Success:
116 pageModel.pullDownRefreshText = $r('app.string.refresh_success_text'); 120 pageModel.pullDownRefreshText = $r('app.string.refresh_success_text');
117 pageModel.pullDownRefreshImage = $r('app.media.ic_succeed_refresh'); 121 pageModel.pullDownRefreshImage = $r('app.media.ic_succeed_refresh');
118 pageModel.isCanRefresh = true; 122 pageModel.isCanRefresh = true;
119 pageModel.isRefreshing = true; 123 pageModel.isRefreshing = true;
  124 + pageModel.load = LoadStatus.LOADED
120 break; 125 break;
121 case RefreshState.Fail: 126 case RefreshState.Fail:
122 pageModel.pullDownRefreshText = $r('app.string.refresh_fail_text'); 127 pageModel.pullDownRefreshText = $r('app.string.refresh_fail_text');
123 pageModel.pullDownRefreshImage = $r('app.media.ic_fail_refresh'); 128 pageModel.pullDownRefreshImage = $r('app.media.ic_fail_refresh');
124 pageModel.isCanRefresh = true; 129 pageModel.isCanRefresh = true;
125 pageModel.isRefreshing = true; 130 pageModel.isRefreshing = true;
  131 + pageModel.load = LoadStatus.LOADED
126 break; 132 break;
127 default: 133 default:
128 break; 134 break;
@@ -36,6 +36,10 @@ export class RefreshConstants { @@ -36,6 +36,10 @@ export class RefreshConstants {
36 */ 36 */
37 static readonly CUSTOM_LAYOUT_HEIGHT: number = 80; 37 static readonly CUSTOM_LAYOUT_HEIGHT: number = 80;
38 /** 38 /**
  39 + * 下拉刷新,判定距离
  40 + */
  41 + static readonly CUSTOM_REFRESH_DECIDE_HEIGHT: number = 20;
  42 + /**
39 * Full the width. 43 * Full the width.
40 */ 44 */
41 static readonly FULL_WIDTH: string = '100%'; 45 static readonly FULL_WIDTH: string = '100%';
@@ -6,6 +6,7 @@ import { PageUIReqBean } from '../components/page/bean/PageUIReqBean'; @@ -6,6 +6,7 @@ import { PageUIReqBean } from '../components/page/bean/PageUIReqBean';
6 import { GroupInfoDTO, PageInfoDTO } from 'wdBean/src/main/ets/bean/navigation/PageInfoDTO'; 6 import { GroupInfoDTO, PageInfoDTO } from 'wdBean/src/main/ets/bean/navigation/PageInfoDTO';
7 import { AdvRuleBean, CompAdvBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean'; 7 import { AdvRuleBean, CompAdvBean } from 'wdBean/src/main/ets/bean/adv/AdvsRuleBean';
8 import { WDViewDefaultType } from '../components/view/EmptyComponent'; 8 import { WDViewDefaultType } from '../components/view/EmptyComponent';
  9 +import { LoadStatus } from '../components/refresh/RefreshLayoutBean';
9 10
10 /** 11 /**
11 * 页面下拉刷新、上拉加载数据bean。 12 * 页面下拉刷新、上拉加载数据bean。
@@ -33,6 +34,7 @@ export default class PageModel { @@ -33,6 +34,7 @@ export default class PageModel {
33 pullDownRefreshImage: Resource = $r('app.media.ic_pull_down_refresh'); 34 pullDownRefreshImage: Resource = $r('app.media.ic_pull_down_refresh');
34 pullDownRefreshHeight: number = Const.CUSTOM_LAYOUT_HEIGHT; 35 pullDownRefreshHeight: number = Const.CUSTOM_LAYOUT_HEIGHT;
35 isVisiblePullDown: boolean = false; 36 isVisiblePullDown: boolean = false;
  37 + load: LoadStatus = LoadStatus.IDLE;
36 pullUpLoadText: Resource = $r('app.string.pull_up_load_text'); 38 pullUpLoadText: Resource = $r('app.string.pull_up_load_text');
37 pullUpLoadImage: Resource = $r('app.media.ic_pull_up_load'); 39 pullUpLoadImage: Resource = $r('app.media.ic_pull_up_load');
38 pullUpLoadHeight: number = Const.CUSTOM_LAYOUT_HEIGHT; 40 pullUpLoadHeight: number = Const.CUSTOM_LAYOUT_HEIGHT;
1 export { add } from "./src/main/ets/utils/Calc" 1 export { add } from "./src/main/ets/utils/Calc"
2 2
3 export { HWLocationUtils } from './src/main/ets/location/HWLocationUtils' 3 export { HWLocationUtils } from './src/main/ets/location/HWLocationUtils'
  4 +
  5 +export { WDPushNotificationManager } from "./src/main/ets/notification/WDPushNotificationManager"
  1 +
  2 +import { pushCommon, pushService } from '@kit.PushKit';
  3 +import { AAID } from '@kit.PushKit';
  4 +import { AccountManagerUtils, Logger, SPHelper, UserDataLocal } from 'wdKit/Index';
  5 +import { BusinessError } from '@kit.BasicServicesKit';
  6 +import notificationManager from '@ohos.notificationManager';
  7 +import { common, Want } from '@kit.AbilityKit';
  8 +
  9 +const TAG = "NotificationManager"
  10 +
  11 +/*
  12 + * 远程推送通知管理类
  13 + * Push Kit: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/push-introduction-0000001726287974
  14 + * Notification Kit: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/notification-overview-0000001822162741
  15 + * */
  16 +export class WDPushNotificationManager {
  17 +
  18 + private static instance: WDPushNotificationManager
  19 + static getInstance() : WDPushNotificationManager {
  20 + if (!WDPushNotificationManager.instance) {
  21 + WDPushNotificationManager.instance = new WDPushNotificationManager()
  22 + }
  23 + return WDPushNotificationManager.instance
  24 + }
  25 +
  26 + async requestEnableNotifications(context: common.UIAbilityContext) : Promise<boolean> {
  27 + let enabled = await notificationManager.isNotificationEnabled()
  28 + if (!enabled) {
  29 + try {
  30 + await notificationManager.requestEnableNotification(context)
  31 + enabled = true
  32 + } catch (err) {
  33 + Logger.error(TAG, "请求通知权限报错: " + JSON.stringify(err))
  34 + let error = err as BusinessError
  35 + if (error.code == 1600004) {
  36 + Logger.error(TAG, "请求通知权限 - 用户已拒绝")
  37 + }
  38 + }
  39 + }
  40 + Logger.info(TAG, "推送 enabled " + enabled)
  41 + return enabled
  42 + }
  43 +
  44 + async fetchTokenAndBindProfileId() {
  45 + try {
  46 + const pushToken: string = await pushService.getToken();
  47 + Logger.info(TAG, "获取推送token: " + pushToken)
  48 +
  49 + //TODO: pushToken 上传至服务器
  50 + SPHelper.default.save("devicePushToken", pushToken)
  51 +
  52 + if (AccountManagerUtils.isLoginSync()) {
  53 + this.bindUserProfileId(UserDataLocal.getUserId())
  54 + }
  55 +
  56 + } catch (err) {
  57 + Logger.error(TAG, "获取推送token失败: " + JSON.stringify(err))
  58 + }
  59 + }
  60 +
  61 + // 禁止推送
  62 + stopPush() {
  63 + pushService.deleteToken()
  64 + }
  65 +
  66 + /// 应用匿名标识符
  67 + async getAAID() {
  68 + let aaid: string = ""
  69 + try {
  70 + aaid = await AAID.getAAID();
  71 + Logger.info(TAG, "获取应用匿名标识符AAID: " + aaid)
  72 + } catch (err) {
  73 + Logger.error(TAG, "获取应用匿名标识符AAID失败: " + JSON.stringify(err))
  74 + }
  75 + return aaid
  76 + }
  77 +
  78 + // TODO: 登录时调用
  79 + bindUserProfileId(profileId: string) {
  80 + pushService.bindAppProfileId(pushCommon.AppProfileType.PROFILE_TYPE_APPLICATION_ACCOUNT, profileId).then(() => {
  81 + Logger.info(TAG, "推送绑定profileId 成功: " + profileId)
  82 + }).catch((err: BusinessError) => {
  83 + Logger.error(TAG, "推送绑定profileId失败: " + profileId + " " + JSON.stringify(err))
  84 + });
  85 + }
  86 + unbindUserProfileId(profileId: string) {
  87 + pushService.unbindAppProfileId(profileId).then(() => {
  88 + Logger.info(TAG, "推送解绑profileId 成功: " + profileId)
  89 + }).catch((err: BusinessError) => {
  90 + Logger.error(TAG, "推送解绑profileId失败: " + profileId + " " + JSON.stringify(err))
  91 + });
  92 + }
  93 +
  94 + sendLocalNotification() {
  95 + let notificationRequest: notificationManager.NotificationRequest = {
  96 + id: 1,
  97 + content: {
  98 + notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
  99 + normal: {
  100 + title: "test_title",
  101 + text: "test_text",
  102 + additionalText: "test_additionalText"
  103 + }
  104 + }
  105 + };
  106 + notificationManager.publish(notificationRequest).then(() => {
  107 + console.info("publish success");
  108 + }).catch((err: BusinessError) => {
  109 + console.error(`publish fail: ${JSON.stringify(err)}`);
  110 + });
  111 + }
  112 +
  113 + setBadgeNumber(number: number) : Promise<void> {
  114 + return notificationManager.setBadgeNumber(number)
  115 + }
  116 +
  117 + // 接收推送数据,包括启动和二次点击拉起
  118 + // 参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/push-dev-0000001727885258
  119 + onWant(want: Want) {
  120 + Logger.info(TAG, "接收到推送?: " + JSON.stringify(want.parameters))
  121 + }
  122 +
  123 +}
@@ -3,10 +3,6 @@ @@ -3,10 +3,6 @@
3 { 3 {
4 "name": "shared_desc", 4 "name": "shared_desc",
5 "value": "description" 5 "value": "description"
6 - },  
7 - {  
8 - "name": "location_reason",  
9 - "value": " "  
10 } 6 }
11 ] 7 ]
12 } 8 }
1 -import { Logger, EmitterEventId, EmitterUtils } from 'wdKit' 1 +import { Logger, EmitterEventId, EmitterUtils, DateTimeUtils } from 'wdKit'
2 import { CustomProtocolDialog } from './CustomProtocolDialog' 2 import { CustomProtocolDialog } from './CustomProtocolDialog'
3 import router from '@ohos.router' 3 import router from '@ohos.router'
4 import { LoginViewModel } from './LoginViewModel' 4 import { LoginViewModel } from './LoginViewModel'
@@ -45,6 +45,7 @@ struct LoginPage { @@ -45,6 +45,7 @@ struct LoginPage {
45 @State checkCodePage: boolean = true //判断是否是验证码页面 默认验证码登录 45 @State checkCodePage: boolean = true //判断是否是验证码页面 默认验证码登录
46 @State passwordSwitch: boolean = true //密码显示 46 @State passwordSwitch: boolean = true //密码显示
47 // @State isPasswordSubmit: boolean = false //账户密码状态 是否出发登录 47 // @State isPasswordSubmit: boolean = false //账户密码状态 是否出发登录
  48 + lastTime: number = 0
48 49
49 dialogController: CustomDialogController = new CustomDialogController({ 50 dialogController: CustomDialogController = new CustomDialogController({
50 builder: CustomProtocolDialog({ 51 builder: CustomProtocolDialog({
@@ -136,7 +137,12 @@ struct LoginPage { @@ -136,7 +137,12 @@ struct LoginPage {
136 if (!this.isSubmit) { 137 if (!this.isSubmit) {
137 return 138 return
138 } 139 }
  140 + let currentTime = DateTimeUtils.getTimeStamp()
  141 + if (currentTime - this.lastTime > 500) {
  142 + this.lastTime = currentTime
139 this.loginSubmit() 143 this.loginSubmit()
  144 + }
  145 +
140 146
141 }) 147 })
142 }.padding({ left: 25, right: 25 }).width('100%') 148 }.padding({ left: 25, right: 25 }).width('100%')
@@ -3,6 +3,7 @@ import { Params } from 'wdBean/Index' @@ -3,6 +3,7 @@ import { Params } from 'wdBean/Index'
3 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index' 3 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'
4 import HuaweiAuth from '../../utils/HuaweiAuth' 4 import HuaweiAuth from '../../utils/HuaweiAuth'
5 import { BusinessError } from '@kit.BasicServicesKit' 5 import { BusinessError } from '@kit.BasicServicesKit'
  6 +import { ToastUtils } from 'wdKit/Index'
6 7
7 @Entry 8 @Entry
8 @Component 9 @Component
@@ -44,8 +45,13 @@ struct OneKeyLoginPage { @@ -44,8 +45,13 @@ struct OneKeyLoginPage {
44 return 45 return
45 } 46 }
46 HuaweiAuth.sharedInstance().oneKeyLogin().then((authorizeCode) => { 47 HuaweiAuth.sharedInstance().oneKeyLogin().then((authorizeCode) => {
47 -  
48 //TODO: 调用服务端接口登录 48 //TODO: 调用服务端接口登录
  49 +
  50 + ToastUtils.shortToast("获取到授权code: " + authorizeCode + ",由于需要后台接口支持,暂时先跳转其他登录方式")
  51 + setTimeout(() => {
  52 + router.replaceUrl({url: WDRouterPage.loginPage.url()})
  53 + }, 3000)
  54 +
49 }).catch((error: BusinessError) => { 55 }).catch((error: BusinessError) => {
50 56
51 }) 57 })
@@ -9,7 +9,7 @@ const TAG = "HuaweiOneKeyAuth" @@ -9,7 +9,7 @@ const TAG = "HuaweiOneKeyAuth"
9 export default class HuaweiAuth { 9 export default class HuaweiAuth {
10 10
11 // 是否开启 11 // 是否开启
12 - static enable = false 12 + static enable = true
13 // 匿名手机号 13 // 匿名手机号
14 private _anonymousPhone?: string 14 private _anonymousPhone?: string
15 get anonymousPhone() { 15 get anonymousPhone() {
@@ -15,12 +15,12 @@ enum LogLevel { @@ -15,12 +15,12 @@ enum LogLevel {
15 15
16 /** 16 /**
17 * Common log for all features. 17 * Common log for all features.
18 - * 18 + * @deprecated 弃用
19 * @param {string} prefix Identifies the log tag. 19 * @param {string} prefix Identifies the log tag.
20 */ 20 */
21 export class Logger { 21 export class Logger {
22 private static domain: number = 0xFF00; 22 private static domain: number = 0xFF00;
23 - private static prefix: string = 'MiguVideoApp'; 23 + private static prefix: string = 'SightApp';
24 private static format: string = `%{public}s, %{public}s`; 24 private static format: string = `%{public}s, %{public}s`;
25 25
26 /** 26 /**
@@ -29,7 +29,7 @@ export class Logger { @@ -29,7 +29,7 @@ export class Logger {
29 * @param Prefix Identifies the log tag. 29 * @param Prefix Identifies the log tag.
30 * @param domain Domain Indicates the service domain, which is a hexadecimal integer ranging from 0x0 to 0xFFFFF. 30 * @param domain Domain Indicates the service domain, which is a hexadecimal integer ranging from 0x0 to 0xFFFFF.
31 */ 31 */
32 - constructor(prefix: string = 'MiguVideoApp', domain: number = 0xFF00) { 32 + constructor(prefix: string = 'SightApp', domain: number = 0xFF00) {
33 Logger.prefix = prefix; 33 Logger.prefix = prefix;
34 Logger.domain = domain; 34 Logger.domain = domain;
35 } 35 }
@@ -59,4 +59,4 @@ export class Logger { @@ -59,4 +59,4 @@ export class Logger {
59 } 59 }
60 } 60 }
61 61
62 -export default new Logger('MiguVideoApp', 0xFF00)  
  62 +export default new Logger('SightApp', 0xFF00)
  1 +/node_modules
  2 +/oh_modules
  3 +/.preview
  4 +/build
  5 +/.cxx
  6 +/.test
  1 +export { TrackingModule } from "./src/main/ets/TrackingModule"
  1 +{
  2 + "apiType": "stageMode",
  3 + "buildOption": {
  4 + },
  5 + "buildOptionSet": [
  6 + {
  7 + "name": "release",
  8 + "arkOptions": {
  9 + "obfuscation": {
  10 + "ruleOptions": {
  11 + "enable": true,
  12 + "files": [
  13 + "./obfuscation-rules.txt"
  14 + ]
  15 + }
  16 + }
  17 + },
  18 + },
  19 + ],
  20 + "targets": [
  21 + {
  22 + "name": "default"
  23 + }
  24 + ]
  25 +}
  1 +import { hspTasks } from '@ohos/hvigor-ohos-plugin';
  2 +
  3 +export default {
  4 + system: hspTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
  5 + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
  6 +}
  1 +# Define project specific obfuscation rules here.
  2 +# You can include the obfuscation configuration files in the current module's build-profile.json5.
  3 +#
  4 +# For more details, see
  5 +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md
  6 +
  7 +# Obfuscation options:
  8 +# -disable-obfuscation: disable all obfuscations
  9 +# -enable-property-obfuscation: obfuscate the property names
  10 +# -enable-toplevel-obfuscation: obfuscate the names in the global scope
  11 +# -compact: remove unnecessary blank spaces and all line feeds
  12 +# -remove-log: remove all console.* statements
  13 +# -print-namecache: print the name cache that contains the mapping from the old names to new names
  14 +# -apply-namecache: reuse the given cache file
  15 +
  16 +# Keep options:
  17 +# -keep-property-name: specifies property names that you want to keep
  18 +# -keep-global-name: specifies names that you want to keep in the global scope
  1 +{
  2 + "meta": {
  3 + "stableOrder": true
  4 + },
  5 + "lockfileVersion": 3,
  6 + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
  7 + "specifiers": {
  8 + "@ohos/axios@^2.1.1": "@ohos/axios@2.2.0",
  9 + "@sensorsdata/analytics@^0.0.2": "@sensorsdata/analytics@0.0.2",
  10 + "@umeng/analytics@^1.0.19": "@umeng/analytics@1.0.19",
  11 + "@umeng/common@^1.0.21": "@umeng/common@1.0.21",
  12 + "libcommon.so@../../oh_modules/.ohpm/@umeng+common@1.0.21/oh_modules/@umeng/common/src/main/cpp/types/libcommon": "libcommon.so@../../oh_modules/.ohpm/@umeng+common@1.0.21/oh_modules/@umeng/common/src/main/cpp/types/libcommon",
  13 + "wdBean@../wdBean": "wdBean@../wdBean",
  14 + "wdConstant@../../commons/wdConstant": "wdConstant@../../commons/wdConstant",
  15 + "wdHwAbility@../wdHwAbility": "wdHwAbility@../wdHwAbility",
  16 + "wdJsBridge@../../commons/wdJsBridge": "wdJsBridge@../../commons/wdJsBridge",
  17 + "wdKit@../../commons/wdKit": "wdKit@../../commons/wdKit",
  18 + "wdLogin@../wdLogin": "wdLogin@../wdLogin",
  19 + "wdNetwork@../../commons/wdNetwork": "wdNetwork@../../commons/wdNetwork",
  20 + "wdRouter@../../commons/wdRouter": "wdRouter@../../commons/wdRouter",
  21 + "wdWebComponent@../../commons/wdWebComponent": "wdWebComponent@../../commons/wdWebComponent"
  22 + },
  23 + "packages": {
  24 + "@ohos/axios@2.2.0": {
  25 + "name": "@ohos/axios",
  26 + "integrity": "sha512-v1QBWk6DfcN8wUW3D0ieFbHTR1taSI5cOgxp5l6B5cegXuNYhSc8ggKlAIXe6h/14LsfM+NW0ZGfSXcNEIM5yA==",
  27 + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/axios/-/axios-2.2.0.har",
  28 + "registryType": "ohpm"
  29 + },
  30 + "@sensorsdata/analytics@0.0.2": {
  31 + "name": "@sensorsdata/analytics",
  32 + "integrity": "sha512-SQCEmOw8ftGJmKtPl/1qUczZqu/yoQ4F2QHpK2Mayk+XctvNDSHn4QWengHj/pg36AopvuVfa0i6KR9c4KiIuQ==",
  33 + "resolved": "https://ohpm.openharmony.cn/ohpm/@sensorsdata/analytics/-/analytics-0.0.2.har",
  34 + "registryType": "ohpm"
  35 + },
  36 + "@umeng/analytics@1.0.19": {
  37 + "name": "@umeng/analytics",
  38 + "integrity": "sha512-0m9z5l8to+POjDl9UkCQC8s4P+e2E1OILwUglC7ME4QwqfH44e59GLJtQdwF0h6kwpsy3YBft4SoWK8MYbuP7g==",
  39 + "resolved": "https://ohpm.openharmony.cn/ohpm/@umeng/analytics/-/analytics-1.0.19.har",
  40 + "registryType": "ohpm"
  41 + },
  42 + "@umeng/common@1.0.21": {
  43 + "name": "@umeng/common",
  44 + "integrity": "sha512-EbXsd4OoRisTQf5egNY/+z1D2bvrYw9VwC2xu3EJA9TiDPSbnaJZ5+yltA/Se6yZ4oCcFvq6e5/AAfPuumunbw==",
  45 + "resolved": "https://ohpm.openharmony.cn/ohpm/@umeng/common/-/common-1.0.21.har",
  46 + "registryType": "ohpm",
  47 + "dependencies": {
  48 + "libcommon.so": "./src/main/cpp/types/libcommon"
  49 + }
  50 + },
  51 + "libcommon.so@../../oh_modules/.ohpm/@umeng+common@1.0.21/oh_modules/@umeng/common/src/main/cpp/types/libcommon": {
  52 + "name": "libcommon.so",
  53 + "resolved": "../../oh_modules/.ohpm/@umeng+common@1.0.21/oh_modules/@umeng/common/src/main/cpp/types/libcommon",
  54 + "registryType": "local"
  55 + },
  56 + "wdBean@../wdBean": {
  57 + "name": "wdbean",
  58 + "resolved": "../wdBean",
  59 + "registryType": "local"
  60 + },
  61 + "wdConstant@../../commons/wdConstant": {
  62 + "name": "wdconstant",
  63 + "resolved": "../../commons/wdConstant",
  64 + "registryType": "local"
  65 + },
  66 + "wdHwAbility@../wdHwAbility": {
  67 + "name": "wdhwability",
  68 + "resolved": "../wdHwAbility",
  69 + "registryType": "local",
  70 + "dependencies": {
  71 + "wdConstant": "file:../../commons/wdConstant",
  72 + "wdLogin": "file:../../features/wdLogin",
  73 + "wdKit": "file:../../commons/wdKit",
  74 + "wdBean": "file:../../features/wdBean",
  75 + "wdNetwork": "file:../../commons/wdNetwork"
  76 + },
  77 + "packageType": "InterfaceHar"
  78 + },
  79 + "wdJsBridge@../../commons/wdJsBridge": {
  80 + "name": "wdjsbridge",
  81 + "resolved": "../../commons/wdJsBridge",
  82 + "registryType": "local"
  83 + },
  84 + "wdKit@../../commons/wdKit": {
  85 + "name": "wdkit",
  86 + "resolved": "../../commons/wdKit",
  87 + "registryType": "local",
  88 + "dependencies": {
  89 + "@umeng/common": "^1.0.21",
  90 + "@umeng/analytics": "^1.0.19"
  91 + }
  92 + },
  93 + "wdLogin@../wdLogin": {
  94 + "name": "wdlogin",
  95 + "resolved": "../wdLogin",
  96 + "registryType": "local",
  97 + "dependencies": {
  98 + "wdConstant": "file:../../commons/wdConstant",
  99 + "wdKit": "file:../../commons/wdKit",
  100 + "wdWebComponent": "file:../../commons/wdWebComponent",
  101 + "wdBean": "file:../../features/wdBean",
  102 + "wdRouter": "file:../../commons/wdRouter",
  103 + "wdNetwork": "file:../../commons/wdNetwork"
  104 + }
  105 + },
  106 + "wdNetwork@../../commons/wdNetwork": {
  107 + "name": "wdnetwork",
  108 + "resolved": "../../commons/wdNetwork",
  109 + "registryType": "local",
  110 + "dependencies": {
  111 + "wdConstant": "file:../wdConstant",
  112 + "wdKit": "file:../wdKit",
  113 + "@ohos/axios": "^2.1.1"
  114 + }
  115 + },
  116 + "wdRouter@../../commons/wdRouter": {
  117 + "name": "wdrouter",
  118 + "resolved": "../../commons/wdRouter",
  119 + "registryType": "local",
  120 + "dependencies": {
  121 + "wdKit": "file:../wdKit",
  122 + "wdBean": "file:../../features/wdBean",
  123 + "wdNetwork": "file:../../commons/wdNetwork",
  124 + "wdConstant": "file:../../commons/wdConstant"
  125 + }
  126 + },
  127 + "wdWebComponent@../../commons/wdWebComponent": {
  128 + "name": "wdwebcomponent",
  129 + "resolved": "../../commons/wdWebComponent",
  130 + "registryType": "local",
  131 + "dependencies": {
  132 + "wdConstant": "file:../wdConstant",
  133 + "wdKit": "file:../wdKit",
  134 + "wdJsBridge": "file:../wdJsBridge",
  135 + "wdBean": "file:../../features/wdBean",
  136 + "wdRouter": "file:../wdRouter",
  137 + "wdNetwork": "file:../wdNetwork"
  138 + }
  139 + }
  140 + }
  141 +}
  1 +{
  2 + "name": "wdtracking",
  3 + "version": "1.0.0",
  4 + "description": "Please describe the basic information.",
  5 + "main": "Index.ets",
  6 + "author": "",
  7 + "license": "Apache-2.0",
  8 + "packageType": "InterfaceHar",
  9 + "dependencies": {
  10 + "@sensorsdata/analytics": "^0.0.2",
  11 + "wdKit": "file:../../commons/wdKit",
  12 + "wdBean": "file:../../features/wdBean",
  13 + "wdNetwork": "file:../../commons/wdNetwork",
  14 +// "wdHwAbility": "file:../../features/wdHwAbility",
  15 + "wdConstant": "file:../../commons/wdConstant"
  16 + }
  17 +}
  1 +import sensors from '@sensorsdata/analytics';
  2 +import { common } from '@kit.AbilityKit';
  3 +import { HostEnum, HostManager } from 'wdNetwork/Index';
  4 +
  5 +/// 统计埋点模块
  6 +export class TrackingModule {
  7 +
  8 + private static _init = false
  9 + static getHasInit() {
  10 + return TrackingModule._init;
  11 + }
  12 +
  13 + /// 初始化
  14 + static startup(context: common.UIAbilityContext) {
  15 +
  16 + // const isOnlineEnv = HostManager.getHost() === HostEnum.HOST_PRODUCT
  17 + //
  18 + // sensors.init({
  19 + // // 服务器接收地址
  20 + // server_url: isOnlineEnv ? '正式地址' : "测试地址",
  21 + // // Ability 上下文
  22 + // context: context,
  23 + // // 是否显示日志
  24 + // show_log: true,
  25 + // // 是否开启采集位置信息,需要 app 授权,默认 false
  26 + // enable_track_location: true,
  27 + // // 是否开启批量发送,默认 false
  28 + // batch_send: true,
  29 + // // 数据发送超时时间
  30 + // datasend_timeout: 10000,
  31 + // // 开启 App 打通 H5
  32 + // app_js_bridge: false
  33 + // });
  34 + // TrackingModule._init = true
  35 + }
  36 +
  37 +
  38 +}
  1 +@Entry
  2 +@Component
  3 +struct Index {
  4 + @State message: string = 'Hello World';
  5 +
  6 + build() {
  7 + Row() {
  8 + Column() {
  9 + Text(this.message)
  10 + .fontSize(50)
  11 + .fontWeight(FontWeight.Bold)
  12 + }
  13 + .width('100%')
  14 + }
  15 + .height('100%')
  16 + }
  17 +}
  1 +import { SpConstants } from 'wdConstant/Index';
  2 +import { DeviceUtil, SPHelper, StringUtils } from 'wdKit/Index';
  3 +import { HostEnum, HostManager } from 'wdNetwork/Index';
  4 +
  5 +export type ParamType = Record<string, string | number | boolean | Array<string>>
  6 +
  7 +export class PublicParams {
  8 +
  9 + getPublicParams() : Promise<ParamType> {
  10 + return new Promise((resolve) => {
  11 +
  12 + let pub: ParamType = {
  13 + "userName":"",
  14 + "pdUseId":"",
  15 + "creatorId":"",
  16 + "pdCnsBirthday":"",
  17 + "city": PublicParams.getLocationCity(),
  18 + "sex":"",
  19 + "isSign":"0",
  20 + "environment": PublicParams.getEnv(),
  21 + "os": "harmonyos",
  22 + "actionTime": new Date().getTime() * 0.001,
  23 + "channel": "rmrb_china_0000",
  24 + "version": PublicParams.getVersionName(),
  25 + "deviceId": DeviceUtil.clientId(),
  26 + "model":"",
  27 + "mpaasId": PublicParams.getMpaasId(),
  28 + }
  29 + resolve(pub)
  30 + })
  31 + }
  32 +
  33 + private static getEnv() {
  34 + switch (HostManager.getHost()) {
  35 + case HostEnum.HOST_UAT:
  36 + return "uat"
  37 + case HostEnum.HOST_SIT:
  38 + return "sit"
  39 + case HostEnum.HOST_PRODUCT:
  40 + return "prod"
  41 + case HostEnum.HOST_DEV:
  42 + return "dev"
  43 + default:
  44 + return "prod"
  45 + }
  46 + }
  47 +
  48 + private static getLocationCity() {
  49 + let cityName = SPHelper.default.getSync(SpConstants.LOCATION_CITY_NAME, '') as string
  50 + if (StringUtils.isNotEmpty(cityName)) {
  51 + return encodeURI(cityName)
  52 + }
  53 + return ""
  54 + }
  55 +
  56 + private static getBuildVersion() {
  57 + // TODO
  58 + return '202401242103';
  59 + }
  60 +
  61 + private static getVersionCode() {
  62 + // TODO
  63 + return '10000';
  64 + }
  65 +
  66 + private static getVersionName() {
  67 + // TODO 读取配置
  68 + return '1.0.0';
  69 + }
  70 +
  71 + private static getMpaasId() {
  72 + // TODO
  73 + return 'alsjdflajxaljdlfjaldjfa';
  74 + }
  75 +}
  1 +import { Logger } from 'wdKit/Index';
  2 +import { TrackingModule } from '../TrackingModule';
  3 +import sensors from '@sensorsdata/analytics';
  4 +import { ParamType, PublicParams } from './PublicParams';
  5 +import { HashMap } from '@kit.ArkTS';
  6 +
  7 +const TAG = "WDTracking"
  8 +
  9 +export class Tracking {
  10 +
  11 + static event(eventId: string, params?: ParamType) {
  12 +
  13 + if (!TrackingModule.getHasInit()) {
  14 + Logger.warn(TAG, "还没有初始化 " + eventId + " " + JSON.stringify(params))
  15 + return
  16 + }
  17 +
  18 + //TODO: 添加运行单独线程?
  19 +
  20 + let publicParams = new PublicParams()
  21 + publicParams.getPublicParams().then((pubParams) => {
  22 +
  23 + if (params) {
  24 + for (const obj of Object.entries(params)) {
  25 + Logger.info(TAG, ` ${obj[0]} => ` + `${obj[1]}`);
  26 + pubParams[obj[0]] = obj[1]
  27 + }
  28 + }
  29 +
  30 + sensors.track(eventId, pubParams)
  31 + })
  32 + }
  33 +}
  1 +{
  2 + "module": {
  3 + "name": "wdTracking",
  4 + "type": "shared",
  5 + "description": "$string:shared_desc",
  6 + "deviceTypes": [
  7 + "phone",
  8 + "tablet",
  9 + "2in1"
  10 + ],
  11 + "deliveryWithInstall": true,
  12 + "pages": "$profile:main_pages"
  13 + }
  14 +}
  1 +{
  2 + "color": [
  3 + {
  4 + "name": "white",
  5 + "value": "#FFFFFF"
  6 + }
  7 + ]
  8 +}
  1 +{
  2 + "string": [
  3 + {
  4 + "name": "shared_desc",
  5 + "value": "埋点封装库"
  6 + }
  7 + ]
  8 +}
  1 +import localUnitTest from './LocalUnit.test';
  2 +
  3 +export default function testsuite() {
  4 + localUnitTest();
  5 +}
  1 +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
  2 +
  3 +export default function localUnitTest() {
  4 + describe('localUnitTest',() => {
  5 + // Defines a test suite. Two parameters are supported: test suite name and test suite function.
  6 + beforeAll(() => {
  7 + // Presets an action, which is performed only once before all test cases of the test suite start.
  8 + // This API supports only one parameter: preset action function.
  9 + });
  10 + beforeEach(() => {
  11 + // Presets an action, which is performed before each unit test case starts.
  12 + // The number of execution times is the same as the number of test cases defined by **it**.
  13 + // This API supports only one parameter: preset action function.
  14 + });
  15 + afterEach(() => {
  16 + // Presets a clear action, which is performed after each unit test case ends.
  17 + // The number of execution times is the same as the number of test cases defined by **it**.
  18 + // This API supports only one parameter: clear action function.
  19 + });
  20 + afterAll(() => {
  21 + // Presets a clear action, which is performed after all test cases of the test suite end.
  22 + // This API supports only one parameter: clear action function.
  23 + });
  24 + it('assertContain', 0, () => {
  25 + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function.
  26 + let a = 'abc';
  27 + let b = 'b';
  28 + // Defines a variety of assertion methods, which are used to declare expected boolean conditions.
  29 + expect(a).assertContain(b);
  30 + expect(a).assertEqual(a);
  31 + });
  32 + });
  33 +}
@@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
17 "wdNetwork": "file:../../commons/wdNetwork", 17 "wdNetwork": "file:../../commons/wdNetwork",
18 "wdHwAbility": "file:../../features/wdHwAbility", 18 "wdHwAbility": "file:../../features/wdHwAbility",
19 "wdJsBridge": "file:../../commons/wdJsBridge", 19 "wdJsBridge": "file:../../commons/wdJsBridge",
20 - "wdLogin": "file:../../features/wdLogin" 20 + "wdLogin": "file:../../features/wdLogin",
  21 + "wdTracking": "file:../../features/wdTracking"
21 } 22 }
22 } 23 }
@@ -12,14 +12,17 @@ import { @@ -12,14 +12,17 @@ import {
12 NetworkType, 12 NetworkType,
13 SPHelper, 13 SPHelper,
14 StringUtils, 14 StringUtils,
  15 + UmengStats,
15 WindowModel 16 WindowModel
16 } from 'wdKit'; 17 } from 'wdKit';
17 import { HostEnum, HostManager, WDHttp } from 'wdNetwork'; 18 import { HostEnum, HostManager, WDHttp } from 'wdNetwork';
18 import { LoginModule } from 'wdLogin/src/main/ets/LoginModule'; 19 import { LoginModule } from 'wdLogin/src/main/ets/LoginModule';
19 import { ConfigurationConstant } from '@kit.AbilityKit'; 20 import { ConfigurationConstant } from '@kit.AbilityKit';
  21 +import { WDPushNotificationManager } from 'wdHwAbility/Index';
20 22
21 export default class EntryAbility extends UIAbility { 23 export default class EntryAbility extends UIAbility {
22 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 24 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  25 + UmengStats.preInit(this.context)
23 SPHelper.init(this.context); 26 SPHelper.init(this.context);
24 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 27 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
25 registerRouter(); 28 registerRouter();
@@ -44,6 +47,13 @@ export default class EntryAbility extends UIAbility { @@ -44,6 +47,13 @@ export default class EntryAbility extends UIAbility {
44 EmitterUtils.receiveEvent(EmitterEventId.NETWORK_DISCONNECTED, (() => { 47 EmitterUtils.receiveEvent(EmitterEventId.NETWORK_DISCONNECTED, (() => {
45 Logger.info('network disconnected') 48 Logger.info('network disconnected')
46 })) 49 }))
  50 +
  51 + WDPushNotificationManager.getInstance().onWant(want)
  52 + }
  53 +
  54 + // App活着情况下,点击推送通知进入
  55 + onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  56 + WDPushNotificationManager.getInstance().onWant(want)
47 } 57 }
48 58
49 onDestroy(): void { 59 onDestroy(): void {
  1 +lottie三方库,路径加载动画只支持entry/src/main/ets 文件夹下的相对路径
  2 +故,json动画文件统一放在这里。
  1 +{"v":"5.6.10","fr":60,"ip":0,"op":61,"w":216,"h":216,"nm":"阶段1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"形状图层 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":30,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[108,105.128,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":26,"s":[2,2]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[32,32]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[32,32]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":60,"s":[72,72]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":70,"s":[80,80]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":80,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":90,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":170,"s":[0,0]},{"t":180,"s":[80,80]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[0,0],"to":[0,0],"ti":[0,0]},{"t":180,"s":[0,0]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":170,"s":[40]},{"t":180,"s":[12]}],"ix":4},"nm":"矩形路径 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"形状图层 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":30,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[108,105.128,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":60,"s":[32,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":65,"s":[32,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":70,"s":[32,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":80,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":85,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":160,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":170,"s":[8,8]},{"t":180,"s":[32,8]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[0,0],"to":[-0.675,0],"ti":[1.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[0,0],"to":[-1.625,0],"ti":[0.74,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[-8,0],"to":[-0.47,0],"ti":[0.293,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[-8,0],"to":[-0.643,0],"ti":[-0.916,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[-9,0],"to":[1.333,0],"ti":[-1.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":160,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":170,"s":[0,0],"to":[-1.333,0],"ti":[1.333,0]},{"t":180,"s":[-8,0]}],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"矩形路径 4","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[0,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":60,"s":[50,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":65,"s":[16,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":70,"s":[50,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":80,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":90,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":100,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":110,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":115,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":135,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":140,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":150,"s":[16,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":160,"s":[16,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":170,"s":[24,8]},{"t":180,"s":[50,8]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[0,0],"to":[13.333,0],"ti":[0,3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[80,0],"to":[0,-3],"ti":[13.333,3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[0,-18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[-16,-18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[0,-18],"to":[-13.333,3],"ti":[-13.333,-3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[-80,0],"to":[6.982,1.571],"ti":[-36.763,0.427]},{"t":90,"s":[-4.023,11],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[-0.023,11],"to":[33.441,-0.389],"ti":[-12.702,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[80,0],"to":[26.667,0],"ti":[-36.763,0.427]},{"t":120,"s":[-5,1],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":130,"s":[-0.023,1],"to":[33.441,-0.389],"ti":[-12.702,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":140,"s":[80,0],"to":[26.667,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[-4,-20],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":160,"s":[-4,-20],"to":[0,0],"ti":[-12.702,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":170,"s":[80,0],"to":[26.667,0],"ti":[13.333,3]},{"t":180,"s":[0,-18]}],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"矩形路径 3","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":60,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":65,"s":[50,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":70,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":80,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":90,"s":[0,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":100,"s":[0,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":110,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":115,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":135,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":140,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":150,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":160,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":170,"s":[24,8]},{"t":180,"s":[24,8]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[0,0],"to":[-13.333,0],"ti":[2,-3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[-80,0],"to":[-2,3],"ti":[-11.333,-3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[-12,18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[0,18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[-12,18],"to":[15.333,-3],"ti":[11.333,3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[80,0],"to":[-5.54,-1.466],"ti":[34.366,0.891]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[-9,-10.939],"to":[-2.687,-0.07],"ti":[2.705,-0.032]},{"t":90,"s":[0,-11],"h":1},{"i":{"x":0.833,"y":0.813},"o":{"x":0.167,"y":0.167},"t":100,"s":[-0.023,-11],"to":[-33.471,0.39],"ti":[12.613,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.151},"t":110,"s":[-80,0],"to":[-26.667,0],"ti":[37.293,-0.434]},{"t":120,"s":[-1,-18],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":130,"s":[-1,-18],"to":[-33.471,0.39],"ti":[12.613,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":140,"s":[-80,0],"to":[-26.667,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":150,"s":[12,-20],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":160,"s":[12,-20],"to":[0,0],"ti":[12.613,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":170,"s":[-80,0],"to":[-26.667,0],"ti":[-11.333,-3]},{"t":180,"s":[-12,18]}],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"矩形路径 5","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"rc","d":1,"s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12,"ix":4},"nm":"矩形路径 6","mn":"ADBE Vector Shape - Rect","hd":false}],"ip":0,"op":61,"st":0,"bm":0}],"markers":[]}
  1 +{"v":"5.6.10","fr":30,"ip":0,"op":61,"w":216,"h":216,"nm":"循环","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"空 17","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[108,108,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"ip":0,"op":61,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"形状图层 9","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 10","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"形状图层 8","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"形状图层 4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[-128.719,-846.25,0],"ix":1},"s":{"a":0,"k":[75,75,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-116.052,-812.547]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-156.667,-856.417],[-157,-887.5],[-72.188,-887.5],[-72.25,-805],[-157,-805],[-157,-857.25],[-185.062,-876.875],[-185.25,-808.375],[-158,-828.688]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"rd","nm":"圆角 1","r":{"a":0,"k":6,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[0]},{"t":55,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":5,"nm":"修剪路径 2","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":40,"op":62,"st":-30,"bm":0},{"ddd":0,"ind":7,"ty":3,"nm":"空 10","parent":1,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,8,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"形状图层 6","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":62,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"形状图层 3","parent":7,"sr":0.55,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[-29.233,-8.102,0],"to":[5.206,0,0],"ti":[-5.206,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.5,"s":[2,-8.102,0],"to":[0,0,0],"ti":[0,0,0]},{"t":30.000244140625,"s":[2,-8.102,0]}],"ix":2},"a":{"a":0,"k":[-161.25,-836.25,0],"ix":1},"s":{"a":0,"k":[75,75,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.05,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-122.168,-825.454],[-122.187,-825.562],[-121.982,-825.563],[-122.169,-825.459],[-122.458,-825.25],[-122.125,-825.833],[-122.302,-825.428],[-122.263,-825.404],[-122.177,-825.24],[-122.129,-825.547],[-122.557,-825.307],[-122.006,-825.241],[-122.323,-825.531],[-122.287,-825.286],[-122.111,-825.556],[-122.067,-825.434],[-122.399,-825.651],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.325,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-122.168,-825.454],[-122.187,-825.562],[-121.982,-825.563],[-122.169,-825.459],[-122.458,-825.25],[-122.125,-825.833],[-122.302,-825.428],[-122.263,-825.404],[-122.177,-825.24],[-122.129,-825.547],[-122.557,-825.307],[-122.006,-825.241],[-122.323,-825.531],[-122.287,-825.286],[-122.111,-825.556],[-122.067,-825.434],[-122.399,-825.651],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.002,-0.002],[0.004,-0.004],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.008,0.008],[-0.012,0.012],[0,0]],"v":[[-104.503,-842.815],[-104.523,-842.923],[-104.317,-842.923],[-104.504,-842.819],[-104.794,-842.61],[-104.46,-843.194],[-104.637,-842.788],[-104.598,-842.765],[-104.512,-842.6],[-104.464,-842.908],[-104.892,-842.667],[-104.341,-842.602],[-104.658,-842.892],[-104.622,-842.647],[-104.446,-842.917],[-104.403,-842.794],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.788,-0.816],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.118,4.266],[-5.943,5.974],[0,0]],"v":[[-105.501,-856.621],[-105.521,-856.729],[-105.315,-856.73],[-105.502,-856.625],[-105.792,-856.417],[-105.458,-857],[-105.635,-856.594],[-105.596,-856.571],[-105.51,-856.406],[-105.462,-856.714],[-105.89,-856.473],[-105.339,-856.408],[-105.656,-856.698],[-105.621,-856.453],[-105.444,-856.723],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.15,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-128.668,-879.788],[-128.687,-879.896],[-128.482,-879.896],[-128.669,-879.792],[-128.958,-879.583],[-128.625,-880.167],[-128.802,-879.761],[-128.763,-879.738],[-128.677,-879.573],[-128.629,-879.881],[-129.057,-879.64],[-128.506,-879.574],[-128.823,-879.865],[-128.787,-879.62],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.425,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.899,0.868],[-3.133,-3.104],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.047,-2.941],[6.288,6.23],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-141.642,-879.455],[-141.662,-879.563],[-141.456,-879.564],[-141.643,-879.459],[-141.933,-879.251],[-141.6,-879.834],[-141.776,-879.428],[-141.738,-879.405],[-141.652,-879.24],[-141.603,-879.548],[-142.032,-879.307],[-141.481,-879.242],[-141.797,-879.532],[-141.762,-879.287],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.7,"s":[{"i":[[0,0],[-0.032,0.018],[-0.012,-0.068],[0.06,-0.039],[-0.014,0.118],[-0.148,0.168],[0.045,-0.14],[-0.008,-0.013],[-0.042,0.045],[0.102,0.018],[-0.118,0.114],[0,0],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,-0.036],[0.059,-0.035],[0.013,0.07],[-0.099,0.065],[0.026,-0.222],[0.097,-0.111],[-0.005,0.014],[0.034,0.052],[0.071,-0.076],[-0.161,-0.028],[2.702,-2.61],[0,0],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-161.668,-860.288],[-161.687,-860.396],[-161.482,-860.396],[-161.669,-860.292],[-161.958,-860.083],[-161.625,-860.667],[-161.802,-860.261],[-161.763,-860.238],[-161.677,-860.073],[-161.629,-860.381],[-162.057,-860.14],[-161.506,-860.074],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.975,"s":[{"i":[[0,0],[-0.032,0.018],[-0.012,-0.067],[0.06,-0.039],[-0.014,0.118],[-0.148,0.168],[0.045,-0.14],[-0.008,-0.013],[-0.042,0.045],[0.102,0.018],[-0.131,-0.098],[-0.007,-0.007],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,-0.036],[0.059,-0.035],[0.013,0.07],[-0.099,0.065],[0.026,-0.222],[0.097,-0.11],[-0.005,0.014],[0.034,0.052],[0.071,-0.076],[-0.161,-0.028],[2.205,1.713],[0.015,0.015],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-182.524,-880.121],[-182.544,-880.229],[-182.338,-880.23],[-182.525,-880.125],[-182.815,-879.917],[-182.481,-880.5],[-182.658,-880.094],[-182.62,-880.071],[-182.533,-879.906],[-182.485,-880.214],[-182.913,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.131,1.223],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-194.334,-880.121],[-194.354,-880.229],[-194.148,-880.23],[-194.335,-880.125],[-194.625,-879.917],[-194.292,-880.5],[-194.468,-880.094],[-194.43,-880.071],[-194.344,-879.906],[-194.296,-880.214],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.525,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-217.668,-856.788],[-217.687,-856.896],[-217.482,-856.896],[-217.669,-856.792],[-217.958,-856.583],[-217.625,-857.167],[-217.802,-856.761],[-217.763,-856.738],[-217.677,-856.573],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.319,1.32],[-4.389,4.46],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.515,-2.517],[6.73,-6.839],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-217.501,-841.983],[-217.521,-842.091],[-217.315,-842.092],[-217.502,-841.988],[-217.792,-841.779],[-217.459,-842.362],[-217.635,-841.957],[-217.597,-841.933],[-217.511,-841.769],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.075,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-169.334,-794.121],[-169.354,-794.229],[-169.148,-794.23],[-169.335,-794.125],[-169.625,-793.917],[-169.292,-794.5],[-169.468,-794.094],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.35,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[2.003,-2.004],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.875,4.877],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-153.487,-794.01],[-153.507,-794.118],[-153.301,-794.119],[-153.488,-794.015],[-153.778,-793.806],[-153.444,-794.389],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.625,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-125.043,-822.621],[-125.062,-822.729],[-124.857,-822.73],[-125.044,-822.625],[-125.333,-822.417],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.9,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-148.209,-846.954],[-148.229,-847.062],[-148.023,-847.063],[-148.21,-846.959],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.175,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-159.022,-836.308],[-159.041,-836.417],[-158.835,-836.417],[-159.023,-836.313],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.45,"s":[{"i":[[0,0],[0,0],[-2.624,-2.5],[-1.61,1.597],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[1.772,1.688],[3.515,-3.486],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-169.043,-836.788],[-169.062,-836.396],[-169.19,-836.563],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.725,"s":[{"i":[[0,0],[0,0],[-2.624,-2.5],[-1.61,1.597],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[1.772,1.688],[3.515,-3.486],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-177.018,-844.48],[-177.062,-844.062],[-169.19,-836.563],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0],[-2.624,-2.5],[-1.61,1.597],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[1.772,1.688],[3.515,-3.486],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-164.376,-857.788],[-177.062,-844.062],[-169.19,-836.563],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34.825,"s":[{"i":[[0,0],[0,0],[-2.624,-2.5],[-1.61,1.597],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[1.772,1.688],[3.515,-3.486],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-164.376,-857.788],[-177.062,-844.062],[-169.19,-836.563],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.325,"s":[{"i":[[0,0],[0,0],[-2.624,-2.5],[-1.61,1.597],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[1.772,1.688],[3.515,-3.486],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-164.376,-857.788],[-177.062,-844.062],[-169.19,-836.563],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.6,"s":[{"i":[[0,0],[0,0],[-2.619,-2.495],[-1.607,1.594],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[1.768,1.684],[3.508,-3.479],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-169.023,-836.787],[-169.043,-836.396],[-169.17,-836.563],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.875,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-159.043,-836.288],[-159.062,-836.396],[-158.857,-836.396],[-159.044,-836.292],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36.15,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-148.209,-846.954],[-148.229,-847.062],[-148.023,-847.063],[-148.21,-846.959],[-148.5,-846.75],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36.425,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[9.521,-9.728],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.823,4.928],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-125.088,-822.669],[-125.108,-822.777],[-124.902,-822.777],[-125.089,-822.673],[-125.379,-822.464],[-125,-823],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36.7,"s":[{"i":[[0,0],[0.072,-0.109],[0,0],[0,0],[0,0],[0,0],[1.988,-1.989],[4.844,4.778],[13.374,13.191],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,0.131],[-0.038,0.059],[0,0],[0,0],[0,0],[0,0],[-4.875,4.877],[-12.044,-11.879],[-2.538,-2.503],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-153.543,-793.954],[-153.562,-794.062],[-153.357,-794.063],[-153.544,-793.959],[-153.833,-793.75],[-153.5,-794.333],[-153.677,-793.928],[-169.43,-794.071],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36.975,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[13.351,13.168],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.538,-2.504],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-169.429,-794.215],[-169.448,-794.323],[-169.242,-794.323],[-169.429,-794.219],[-169.719,-794.01],[-169.386,-794.593],[-169.562,-794.188],[-169.524,-794.165],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.322,1.323],[-4.398,4.469],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.52,-2.522],[6.743,-6.853],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-217.501,-841.954],[-217.521,-842.062],[-217.315,-842.063],[-217.502,-841.959],[-217.792,-841.75],[-217.458,-842.333],[-217.635,-841.928],[-217.596,-841.904],[-217.51,-841.74],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.525,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-6.365,6.314],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-217.668,-856.788],[-217.687,-856.896],[-217.482,-856.896],[-217.669,-856.792],[-217.958,-856.583],[-217.625,-857.167],[-217.802,-856.761],[-217.763,-856.738],[-217.677,-856.573],[-217.629,-856.881],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.142,1.233],[-3.502,-3.39],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.78,-3.749],[7.835,7.585],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-194.38,-880.076],[-194.4,-880.184],[-194.194,-880.184],[-194.381,-880.08],[-194.671,-879.871],[-194.337,-880.454],[-194.514,-880.049],[-194.475,-880.026],[-194.389,-879.861],[-194.341,-880.169],[-194.724,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38.075,"s":[{"i":[[0,0],[-0.032,0.018],[-0.012,-0.068],[0.06,-0.039],[-0.014,0.118],[-0.148,0.168],[0.045,-0.14],[-0.008,-0.013],[-0.042,0.045],[0.102,0.018],[-0.129,-0.101],[0,0],[0,0],[-6.474,6.677],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,-0.036],[0.059,-0.035],[0.013,0.07],[-0.099,0.065],[0.026,-0.222],[0.097,-0.111],[-0.005,0.014],[0.034,0.052],[0.071,-0.076],[-0.161,-0.028],[2.202,1.723],[0,0],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-182.501,-880.121],[-182.521,-880.229],[-182.315,-880.23],[-182.502,-880.125],[-182.792,-879.917],[-182.458,-880.5],[-182.635,-880.094],[-182.596,-880.071],[-182.51,-879.906],[-182.462,-880.214],[-182.89,-879.973],[-182.339,-879.908],[-161.823,-860.365],[-141.954,-879.953],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38.35,"s":[{"i":[[0,0],[-0.032,0.018],[-0.012,-0.067],[0.06,-0.039],[-0.014,0.118],[-0.148,0.168],[0.045,-0.14],[-0.008,-0.013],[-0.042,0.045],[0.102,0.018],[-0.117,0.113],[0,0],[0,0],[-6.463,6.666],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[-0.007,-0.036],[0.059,-0.035],[0.013,0.07],[-0.099,0.065],[0.026,-0.222],[0.097,-0.11],[-0.005,0.014],[0.034,0.052],[0.071,-0.076],[-0.161,-0.028],[2.697,-2.605],[0,0],[0,0],[2.954,-3.047],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-161.629,-860.325],[-161.648,-860.433],[-161.443,-860.434],[-161.63,-860.329],[-161.919,-860.121],[-161.586,-860.704],[-161.763,-860.299],[-161.724,-860.275],[-161.638,-860.11],[-161.59,-860.418],[-162.018,-860.177],[-161.467,-860.112],[-161.784,-860.402],[-141.954,-879.952],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38.625,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.901,0.87],[-3.139,-3.11],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.053,-2.947],[6.3,6.242],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-141.668,-879.454],[-141.687,-879.563],[-141.482,-879.563],[-141.669,-879.459],[-141.958,-879.25],[-141.625,-879.833],[-141.802,-879.428],[-141.763,-879.404],[-141.677,-879.24],[-141.629,-879.548],[-142.057,-879.307],[-141.506,-879.241],[-141.823,-879.532],[-141.787,-879.287],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38.9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-6.79,-6.854],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.173,4.212],[-5.943,5.974],[0,0]],"v":[[-128.668,-879.788],[-128.687,-879.896],[-128.482,-879.896],[-128.669,-879.792],[-128.958,-879.583],[-128.625,-880.167],[-128.802,-879.761],[-128.763,-879.738],[-128.677,-879.573],[-128.629,-879.881],[-129.057,-879.64],[-128.506,-879.574],[-128.823,-879.865],[-128.787,-879.62],[-128.611,-879.89],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.175,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.799,-0.828],[2.14,-2.151],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.118,4.266],[-5.943,5.974],[0,0]],"v":[[-105.546,-856.666],[-105.566,-856.774],[-105.36,-856.775],[-105.547,-856.671],[-105.837,-856.462],[-105.504,-857.045],[-105.68,-856.64],[-105.642,-856.616],[-105.556,-856.451],[-105.507,-856.759],[-105.935,-856.519],[-105.385,-856.453],[-105.701,-856.743],[-105.666,-856.498],[-105.489,-856.768],[-105.401,-856.601],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.45,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-104.501,-842.788],[-104.521,-842.896],[-104.315,-842.896],[-104.502,-842.792],[-104.792,-842.583],[-104.458,-843.167],[-104.635,-842.761],[-104.596,-842.738],[-104.51,-842.573],[-104.462,-842.881],[-104.89,-842.64],[-104.339,-842.574],[-104.656,-842.865],[-104.621,-842.62],[-104.444,-842.89],[-104.401,-842.767],[-104.733,-842.984],[-122.562,-825.062]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.725,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-122.168,-825.454],[-122.187,-825.562],[-121.982,-825.563],[-122.169,-825.459],[-122.458,-825.25],[-122.125,-825.833],[-122.302,-825.428],[-122.263,-825.404],[-122.177,-825.24],[-122.129,-825.547],[-122.557,-825.307],[-122.006,-825.241],[-122.323,-825.531],[-122.287,-825.286],[-122.111,-825.556],[-122.067,-825.434],[-122.399,-825.651],[-122.562,-825.062]],"c":false}]},{"t":40.000146484375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-122.168,-825.454],[-122.187,-825.562],[-121.982,-825.563],[-122.169,-825.459],[-122.458,-825.25],[-122.125,-825.833],[-122.302,-825.428],[-122.263,-825.404],[-122.177,-825.24],[-122.129,-825.547],[-122.557,-825.307],[-122.006,-825.241],[-122.323,-825.531],[-122.287,-825.286],[-122.111,-825.556],[-122.067,-825.434],[-122.399,-825.651],[-122.562,-825.062]],"c":false}]}],"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"rd","nm":"圆角 1","r":{"a":0,"k":0,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":25,"op":40,"st":-5.5,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"形状图层 2","parent":1,"sr":0.5,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-4,1,0],"ix":2},"a":{"a":0,"k":[-100,-843.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-92.444,-835.25],[-92.525,-835.206],[-92.45,-835.2],[-92.35,-835.3],[-92.4,-835.25],[-92.36,-835.214],[-92.339,-835.211],[-92.389,-835.226]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-120.364,-835.25],[-120.38,-835.233],[-120.305,-835.227],[-120.205,-835.326],[-120.255,-835.277],[-120.215,-835.24],[-120.194,-835.238],[-120.244,-835.253]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.25,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-130.55,-836.9],[-130.45,-837],[-130.5,-836.95],[-130.46,-836.914],[-130.439,-836.911],[-130.489,-836.927]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.5,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-129.15,-840.1],[-129.2,-840.05],[-129.16,-840.014],[-129.139,-840.011],[-129.189,-840.027]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11.25,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-70.5,-877.25],[-70.06,-877.614],[-69.939,-877.611],[-69.889,-877.726]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11.5,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.048,-1.1],[0.15,0.2],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.015,0.338],[-0.223,-0.297],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-67.008,-872.753],[-66.525,-872.625],[-66.75,-872.013]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11.75,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-66.983,-873.003],[-67,-873],[-67.083,-872.938]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12.75,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.386,-8.798],[0,0],[0.139,0.19]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.119,2.705],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-69.183,-825.003],[-69.45,-818.25],[-69.267,-818.188]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.483,-10.997],[0,0],[0.173,0.238]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.148,3.381],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-69.733,-813.003],[-74.75,-811.75],[-74.5,-811.688]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.483,-10.997],[1.5,2],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.148,3.381],[-2.23,-2.973],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-69.733,-813.003],[-74.75,-811.75],[-106.25,-853.688]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.483,-10.997],[1.5,2],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.148,3.381],[-2.23,-2.973],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-69.733,-813.003],[-74.75,-811.75],[-106.25,-853.688]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.483,-10.997],[0,0],[0.173,0.238]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.148,3.381],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-69.733,-813.003],[-74.75,-811.75],[-74.5,-811.688]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.25,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.386,-8.798],[0,0],[0.139,0.19]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.119,2.705],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-69.183,-825.003],[-69.45,-818.25],[-69.267,-818.188]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.25,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-66.983,-873.003],[-67,-873],[-67.083,-872.938]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.5,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0.257,-4.242],[0.048,-1.1],[0.15,0.2],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[-0.25,4.125],[-0.015,0.338],[-0.223,-0.297],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-67,-873.5],[-67.008,-872.753],[-66.525,-872.625],[-66.75,-872.013]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.75,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-70.75,-877],[-70.5,-877.25],[-70.06,-877.614],[-69.939,-877.611],[-69.889,-877.726]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.5,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-129.25,-840],[-129.15,-840.1],[-129.2,-840.05],[-129.16,-840.014],[-129.139,-840.011],[-129.189,-840.027]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.75,"s":[{"i":[[0,0],[0,0],[0.75,1.906],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.782,-1.988],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-127.344,-835.25],[-130.625,-836.906],[-130.55,-836.9],[-130.45,-837],[-130.5,-836.95],[-130.46,-836.914],[-130.439,-836.911],[-130.489,-836.927]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-120.364,-835.25],[-120.38,-835.233],[-120.305,-835.227],[-120.205,-835.326],[-120.255,-835.277],[-120.215,-835.24],[-120.194,-835.238],[-120.244,-835.253]],"c":false}]},{"t":24,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-92.5,-835.156],[-92.444,-835.25],[-92.525,-835.206],[-92.45,-835.2],[-92.35,-835.3],[-92.4,-835.25],[-92.36,-835.214],[-92.339,-835.211],[-92.389,-835.226]],"c":false}]}],"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.5,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[8]},{"t":9.5,"s":[8]}],"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4,"op":24.5,"st":-7.5,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"外框","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-19.5,"s":[0]},{"t":-15.5,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":-10.5,"s":[32,32]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":-5.5,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":-0.5,"s":[72,72]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":4.5,"s":[72,72]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9.5,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":14.5,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":54.5,"s":[0,0]},{"t":59.5,"s":[72,72]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-0.5,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.5,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.5,"s":[0,0],"to":[0,0],"ti":[0,0]},{"t":59.5,"s":[0,0]}],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-10.5,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-5.5,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-0.5,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.5,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9.5,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54.5,"s":[40]},{"t":59.5,"s":[12]}],"ix":4},"nm":"矩形路径 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":-0.5,"op":62,"st":-30.5,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"形状图层 5","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-19,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14.5,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[0]},{"t":17.5,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":-5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[32,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":2.5,"s":[32,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[32,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9.5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":12.5,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[0,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[8,8]},{"t":60,"s":[32,8]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[0,0],"to":[-1.333,0],"ti":[1.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-8,0],"to":[-0.47,0],"ti":[0.293,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2.5,"s":[-8,0],"to":[-0.643,0],"ti":[-0.916,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[-9,0],"to":[1.333,0],"ti":[-1.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.5,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[0,0],"to":[-1.333,0],"ti":[1.333,0]},{"t":60,"s":[-8,0]}],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"矩形路径 4","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":-5,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[50,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":2.5,"s":[16,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[50,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":14.5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":17.5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":27.5,"s":[6,6]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[6,6]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[6,6]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[16,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[16,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[24,8]},{"t":60,"s":[50,8]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[80,0],"to":[-13.333,-3],"ti":[13.333,3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[0,-18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2.5,"s":[-16,-18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[0,-18],"to":[-13.333,3],"ti":[-13.333,-3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-80,0],"to":[2.36,0.531],"ti":[-8.775,0.054]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.5,"s":[-25.6,0.037],"to":[1.115,-0.007],"ti":[-1.57,0.018]},{"t":17.5,"s":[28,0],"h":1},{"t":19,"s":[33,0],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[38,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[80,0],"to":[21.757,-0.253],"ti":[31.158,-0.084]},{"t":27.5,"s":[40,0],"h":1},{"t":30,"s":[39,0],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[39,0],"to":[-9.983,0.027],"ti":[-5.123,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[80,0],"to":[26.667,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[-4,-16],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[-4,-16],"to":[0,0],"ti":[-12.702,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[80,0],"to":[26.667,0],"ti":[13.333,3]},{"t":60,"s":[0,-18]}],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"矩形路径 3","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":2.5,"s":[50,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":5,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":10,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":14.5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":17.5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":20,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":25,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":27.5,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[6,6]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[6,6]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":40,"s":[24,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":45,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":50,"s":[8,8]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":55,"s":[24,8]},{"t":60,"s":[24,8]}],"ix":2},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[-80,0],"to":[11.333,3],"ti":[-11.333,-3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-12,18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2.5,"s":[0,18],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[-12,18],"to":[15.333,-3],"ti":[11.333,3]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[80,0],"to":[-5.54,-1.466],"ti":[34.366,0.891]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.5,"s":[28,0],"to":[-2.687,-0.07],"ti":[37.293,-0.434]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17.5,"s":[-25,0],"to":[-21.127,0.246],"ti":[-5.31,0.1]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[-31,-0.091],"to":[3.103,-0.058],"ti":[13.753,-0.16]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-38,0],"to":[-33.471,0.39],"ti":[12.613,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[-80,0],"to":[-8.727,0],"ti":[-18.481,-0.021]},{"t":27.5,"s":[-40,0],"h":1},{"t":30,"s":[-36,0],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[-36,0],"to":[5.828,-0.956],"ti":[-3.003,1.787]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[-80,0],"to":[9.053,-5.387],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[12,-16],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[12,-16],"to":[0,0],"ti":[12.613,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[-80,0],"to":[-26.667,0],"ti":[-11.333,-3]},{"t":60,"s":[-12,18]}],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"矩形路径 5","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901960784,0.854901960784,0.854901960784,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"rc","d":1,"s":{"a":0,"k":[80,80],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12,"ix":4},"nm":"矩形路径 6","mn":"ADBE Vector Shape - Rect","hd":false}],"ip":0,"op":62,"st":-30,"bm":0}],"markers":[]}
@@ -4,7 +4,8 @@ import { BreakpointConstants } from 'wdConstant'; @@ -4,7 +4,8 @@ import { BreakpointConstants } from 'wdConstant';
4 import { BreakpointSystem, EmitterEventId, EmitterUtils, Logger } from 'wdKit'; 4 import { BreakpointSystem, EmitterEventId, EmitterUtils, Logger } from 'wdKit';
5 import router from '@ohos.router'; 5 import router from '@ohos.router';
6 import { promptAction } from '@kit.ArkUI'; 6 import { promptAction } from '@kit.ArkUI';
7 -import { HWLocationUtils } from 'wdHwAbility/Index'; 7 +import { HWLocationUtils, WDPushNotificationManager } from 'wdHwAbility/Index';
  8 +import { common } from '@kit.AbilityKit';
8 9
9 10
10 const TAG = 'MainPage'; 11 const TAG = 'MainPage';
@@ -24,6 +25,16 @@ struct MainPage { @@ -24,6 +25,16 @@ struct MainPage {
24 aboutToAppear() { 25 aboutToAppear() {
25 HWLocationUtils.startLocationService() 26 HWLocationUtils.startLocationService()
26 this.breakpointSystem.register() 27 this.breakpointSystem.register()
  28 +
  29 + let context = getContext(this) as common.UIAbilityContext
  30 + WDPushNotificationManager.getInstance().requestEnableNotifications(context).then((enabled) => {
  31 + if (enabled) {
  32 + WDPushNotificationManager.getInstance().fetchTokenAndBindProfileId()
  33 +
  34 + // WDPushNotificationManager.getInstance().sendLocalNotification()
  35 + }
  36 + })
  37 +
27 Logger.info(TAG, `aboutToAppear `); 38 Logger.info(TAG, `aboutToAppear `);
28 EmitterUtils.receiveEvent(EmitterEventId.FORCE_USER_LOGIN_OUT, () => { 39 EmitterUtils.receiveEvent(EmitterEventId.FORCE_USER_LOGIN_OUT, () => {
29 LogoutViewModel.clearLoginInfo() 40 LogoutViewModel.clearLoginInfo()
@@ -39,11 +39,13 @@ struct SpacialTopicPage { @@ -39,11 +39,13 @@ struct SpacialTopicPage {
39 } 39 }
40 40
41 onPageShow() { 41 onPageShow() {
  42 + WindowModel.shared.setWindowLayoutFullScreen(true)
42 Logger.info(TAG, 'onPageShow'); 43 Logger.info(TAG, 'onPageShow');
43 } 44 }
44 45
45 onPageHide() { 46 onPageHide() {
46 Logger.info(TAG, 'onPageHide'); 47 Logger.info(TAG, 'onPageHide');
  48 + WindowModel.shared.setWindowLayoutFullScreen(false)
47 } 49 }
48 50
49 onBackPress() { 51 onBackPress() {
@@ -11,8 +11,9 @@ import { WDRouterPage } from 'wdRouter'; @@ -11,8 +11,9 @@ import { WDRouterPage } from 'wdRouter';
11 import { LaunchModel } from '../viewModel/LaunchModel' 11 import { LaunchModel } from '../viewModel/LaunchModel'
12 import { LaunchPageModel } from '../viewModel/LaunchPageModel' 12 import { LaunchPageModel } from '../viewModel/LaunchPageModel'
13 import LaunchDataModel from '../viewModel/LaunchDataModel' 13 import LaunchDataModel from '../viewModel/LaunchDataModel'
14 -import { Logger, SPHelper } from 'wdKit/Index'; 14 +import { Logger, SPHelper, UmengStats } from 'wdKit/Index';
15 import { SpConstants } from 'wdConstant/Index'; 15 import { SpConstants } from 'wdConstant/Index';
  16 +import { TrackingModule } from 'wdTracking/Index'
16 17
17 @Entry 18 @Entry
18 @Component 19 @Component
@@ -44,6 +45,8 @@ struct LaunchPage { @@ -44,6 +45,8 @@ struct LaunchPage {
44 } 45 }
45 46
46 onConfirm() { 47 onConfirm() {
  48 + UmengStats.initAfterAgreeProtocol()
  49 + TrackingModule.startup(getContext(this) as common.UIAbilityContext)
47 // Save privacy agreement status. 50 // Save privacy agreement status.
48 this.saveIsPrivacy(); 51 this.saveIsPrivacy();
49 //跳转引导页 52 //跳转引导页
@@ -94,6 +97,10 @@ struct LaunchPage { @@ -94,6 +97,10 @@ struct LaunchPage {
94 this.dialogController.open(); 97 this.dialogController.open();
95 // } 98 // }
96 } else { 99 } else {
  100 +
  101 + UmengStats.initAfterAgreeProtocol()
  102 + TrackingModule.startup(getContext(this) as common.UIAbilityContext)
  103 +
97 //需要根据请求数据判断是否需要进入广告页,广告数据为nil则直接跳转到首页 104 //需要根据请求数据判断是否需要进入广告页,广告数据为nil则直接跳转到首页
98 //获取本地存储的启动页数据 105 //获取本地存储的启动页数据
99 106
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 ], 36 ],
37 "metadata": [{ 37 "metadata": [{
38 "name": "client_id", 38 "name": "client_id",
39 - "value": "220837707901830144" 39 + "value": "110737325"
40 }], 40 }],
41 "requestPermissions": [ 41 "requestPermissions": [
42 { 42 {