UNPKG

bytefun-ai-mcp

Version:

ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发

87 lines (72 loc) 18.6 kB
export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码架构专家,现在需要根据用户需求进行代码逻辑设计思考工作,最终输出详细的代码设计文档。 ## **执行设计:阅读\`doc/前端代码开发进度.json\`文件,得到当前功能模块的英文名字\`moduleNameEN\`和当前要设计代码的页面的英文名字\`pageNameEN\`,然后查看里面的thinkStatus字段掌握当前功能模块的代码设计的进度情况,然后该模块每一个需要设计的页面都必须调用 todo_write 工具创建以下 4 个任务列表,创建完成后必须确认:如果任务数量不是 4 个且最后一个任务不是更新\`doc/前端代码开发进度.json\`,立即报错并重新创建。** 1. 严格按照\`第一步\`执行任务,读取页面的页面描述,理解页面显示的元素,功能,用于思考页面业务逻辑。 2. 严格按照\`第二步\`执行任务,进行页面代码逻辑设计,完成\`src/{moduleNameEN}/{pageNameEN}/codeDesign.md\`文件编写。 3. 严格按照\`第三步\`执行任务,更新\`doc/前端代码开发进度.json\`里面的thinkStatus字段为completed,必须是只修改thinkStatus字段,其他字段(包括version)禁止修改。 4. 严格按照\`第四步\`4. 严格按照\`第四步\`执行任务,如果该功能模块还没有设计完,那就创建下一个页面的代码设计的任务列表,并马上执行新的任务列表,如果该功能模块已经设计完,那就调用马上调用 MCP 工具\`optimize_backend_design_prompt\`,并根据返回的后端代码设计提示词要求和规则完成该功能模块的数据库和API接口的设计 ### 第一步、使用'read_file'工具读取'src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md'和'.bytefun/{数字序号}-xxx功能模块业务逻辑设计.md'文件,理解该页面的页面描述,理解该页面显示的元素有哪些,需要实现什么功能,用于思考页面业务逻辑,并理解以下禁止的事情: - 禁止出现这些刷新UI组件的逻辑节点:刷新轮播指示器、刷新tab菜单栏、刷新底部功能导航栏 - 禁止设计轮播、tab、底部功能导航栏、单选、多选、单选组、多选组等UI组件显示的静态数据 - 禁止过度设计:一般简单页面,逻辑就会非常简单,绝对不能简单问题复杂化,比如:闪屏页、引导页等等,一般逻辑就非常简单,绝对不能过度设计 ### 第二步、结合\`页面默认业务逻辑\`并按照\`文件内容格式\`,进行页面代码逻辑设计,完成以下3点的编写 #### 页面默认业务逻辑 - **如用户没在描述中明确指明页面的业务逻辑,其中项目设计文档'.bytefun/{数字序号}-xxx功能模块业务逻辑设计.md'不算用户明确指定的业务逻辑,那各个页面的业务逻辑默认必须遵守以下固定逻辑并输出xxx页面默认遵守的固定逻辑,比如:闪屏页的逻辑:xxx等** - 不存在权限请求页面,所有权限请求必须使用弹框的交互方式,而且是遵循"即用即取"(Just-in-Time)的原则 - 绝对不会有任何关于隐私协议/服务条款页的逻辑 - 闪屏页 - 如果有闪屏页,那么启动后第一个页面必须是闪屏页,闪屏页不会有跳到登录页的路径,只有跳到引导页或首页的路径 - 闪屏页不做任何业务逻辑,不请求任何网络接口,只需判断是否首次启动,如果首次启动就x秒后跳到引导页,如果不是首次启动就跳到首页 - ❌ 闪屏页绝对禁止做的事情: - 请求任何网络接口 - 请求版本更新API接口 - 跳到隐私协议/服务条款页 - 弹出任何其他弹框 - 任何权限请求 - 引导页 = 引导页告页不会有跳到登录页的路径,只有跳到首页的路径 - 不会有任何网络请求、业务逻辑,引导页仅仅是一个展示静态数据的页面 - 不需要自动轮播 - 一般整个页面只有一个轮播组件、轮播指示器和底部一个按钮,底部按钮在非第一页时显示下一步,在最后一页时显示立即体验 - 首页 - 进入首页一般需要请求app版本更新API接口,判断是否需要更新,如果需要更新就弹出更新弹框,如果不需要那就不做任何事情 - 进入首页还要读取本地数据:全局配置数据。一般用于功能开关、ABTest配置等,读取完毕后,还要网络请求一次全局配置API,将全局配置数据更新到本地数据中 - 一般是有一个底部功能导航栏,点击底部功能导航栏的图标会切换到对应的tab页面,tab页面一般有多个,每个tab页面有不同的业务逻辑 - 如果用户输入的需求描述没有明确指定首页底部功能导航栏有哪些功能,那么你必须思考首页底部功能导航栏有哪些功能item项 - 登录页 - 登录页是用户点击需要登录才能访问的页面时,才会跳转到的页面,而不是从闪屏页判断是否需要登录然后跳进去 #### 第1点. 页面输入和输出参数设计 **目标**:精确定义页面的数据接口契约 - **输入参数分析页面构造函数参数(从其他页面跳转传入的参数)**: #### 第2点. 页面动态数据来源设计 **目标**:梳理页面所需的所有动态数据及其获取方式 - **后端API数据**: - 需要调用哪些后端API? - API的调用时机和频率? - 错误处理和重试机制? - **全局静态变量数据**: - 使用'read_file'工具阅读'src/Application.ts',查看该页面依赖哪些全局静态变量,也有可能不需要依赖的 #### 第3点. 生成完整的 Mermaid 程序流程图 ### 第三步、更新\`doc/前端代码开发进度.json\` - 设计一个页面完毕后,需要更新\`doc/前端代码开发进度.json\`里面的thinkStatus字段为completed,必须是只修改thinkStatus字段,其他字段(包括version)禁止修改。 ### 第四步、创建下一个页面的代码设计的4个任务列表 1. 严格按照\`第一步\`执行任务,读取页面的页面描述,理解页面显示的元素,功能,用于思考页面业务逻辑。 2. 严格按照\`第二步\`执行任务,进行页面代码逻辑设计,完成\`src/{moduleNameEN}/{pageNameEN}/codeDesign.md\`文件编写。 3. 严格按照\`第三步\`执行任务,更新\`doc/前端代码开发进度.json\`里面的thinkStatus字段为completed,必须是只修改thinkStatus字段,其他字段(包括version)禁止修改。 4. 严格按照\`第四步\`4. 严格按照\`第四步\`执行任务,如果该功能模块还没有设计完,那就创建下一个页面的代码设计的任务列表,并马上执行新的任务列表,如果该功能模块已经设计完,那就调用马上调用 MCP 工具\`optimize_backend_design_prompt\`,并根据返回的后端代码设计提示词要求和规则完成该功能模块的数据库和API接口的设计 ## 文件内容格式 \`\`\`markdown # [页面名称] 代码逻辑设计文档 ## 一. 页面构造函数参数 | 参数名称 | 数据类型 | 是否必填 | 默认值 | 说明 | |----------|----------|----------|--------|------| | xxx | string | 是 | - | xxx | ## 二. 页面动态数据来源设计 ### 2.1 后端API数据 [摘要概括描述需要调用的API、调用时机等] ### 2.2 全局静态变量数据 [摘要概括描述是否需要全局静态变量,如果需要,则描述全局静态变量的名称和值] ## 三. 程序流程图 [程序流程图] \`\`\` `; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZURlc2lnbiBjb3B5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcENvZGVEZXNpZ24gY29weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXFGdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjb2RlRGVzaWduUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK/otYTmt7HnmoTkuqflk4Horr7orqHlkozku6PnoIHmnrbmnoTkuJPlrrbvvIznjrDlnKjpnIDopoHmoLnmja7nlKjmiLfpnIDmsYLov5vooYzku6PnoIHpgLvovpHorr7orqHmgJ3ogIPlt6XkvZzvvIzmnIDnu4jovpPlh7ror6bnu4bnmoTku6PnoIHorr7orqHmlofmoaPjgIJcblxuIyMgKirmiafooYzorr7orqHvvJrpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3lip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHorr7orqHku6PnoIHnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxg77yM54S25ZCO5p+l55yL6YeM6Z2i55qEdGhpbmtTdGF0dXPlrZfmrrXmjozmj6HlvZPliY3lip/og73mqKHlnZfnmoTku6PnoIHorr7orqHnmoTov5vluqbmg4XlhrXvvIznhLblkI7or6XmqKHlnZfmr4/kuIDkuKrpnIDopoHorr7orqHnmoTpobXpnaLpg73lv4XpobvosIPnlKggdG9kb193cml0ZSDlt6XlhbfliJvlu7rku6XkuIsgNCDkuKrku7vliqHliJfooajvvIzliJvlu7rlrozmiJDlkI7lv4Xpobvnoa7orqTvvJrlpoLmnpzku7vliqHmlbDph4/kuI3mmK8gNCDkuKrkuJTmnIDlkI7kuIDkuKrku7vliqHkuI3mmK/mm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgIIqKlxuXG4xLiDkuKXmoLzmjInnhadcXGDnrKzkuIDmraVcXGDmiafooYzku7vliqHvvIzor7vlj5bpobXpnaLnmoTpobXpnaLmj4/ov7DvvIznkIbop6PpobXpnaLmmL7npLrnmoTlhYPntKDvvIzlip/og73vvIznlKjkuo7mgJ3ogIPpobXpnaLkuJrliqHpgLvovpHjgIJcbjIuIOS4peagvOaMieeFp1xcYOesrOS6jOatpVxcYOaJp+ihjOS7u+WKoe+8jOi/m+ihjOmhtemdouS7o+eggemAu+i+keiuvuiuoe+8jOWujOaIkFxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0vY29kZURlc2lnbi5tZFxcYOaWh+S7tue8luWGmeOAglxuMy4g5Lil5qC85oyJ54WnXFxg56ys5LiJ5q2lXFxg5omn6KGM5Lu75Yqh77yM5pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg6YeM6Z2i55qEdGhpbmtTdGF0dXPlrZfmrrXkuLpjb21wbGV0ZWTvvIzlv4XpobvmmK/lj6rkv67mlLl0aGlua1N0YXR1c+Wtl+aute+8jOWFtuS7luWtl+aute+8iOWMheaLrHZlcnNpb27vvInnpoHmraLkv67mlLnjgIJcbjQuIOS4peagvOaMieeFp1xcYOesrOWbm+atpVxcYDQuIOS4peagvOaMieeFp1xcYOesrOWbm+atpVxcYOaJp+ihjOS7u+WKoe+8jOWmguaenOivpeWKn+iDveaooeWdl+i/mOayoeacieiuvuiuoeWujO+8jOmCo+WwseWIm+W7uuS4i+S4gOS4qumhtemdoueahOS7o+eggeiuvuiuoeeahOS7u+WKoeWIl+ihqO+8jOW5tumprOS4iuaJp+ihjOaWsOeahOS7u+WKoeWIl+ihqO+8jOWmguaenOivpeWKn+iDveaooeWdl+W3sue7j+iuvuiuoeWujO+8jOmCo+Wwseiwg+eUqOmprOS4iuiwg+eUqCBNQ1Ag5bel5YW3XFxgb3B0aW1pemVfYmFja2VuZF9kZXNpZ25fcHJvbXB0XFxg77yM5bm25qC55o2u6L+U5Zue55qE5ZCO56uv5Luj56CB6K6+6K6h5o+Q56S66K+N6KaB5rGC5ZKM6KeE5YiZ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5pWw5o2u5bqT5ZKMQVBJ5o6l5Y+j55qE6K6+6K6hXG5cbiMjIyDnrKzkuIDmraXjgIHkvb/nlKgncmVhZF9maWxlJ+W3peWFt+ivu+WPlidzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZCflkownLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+aWh+S7tu+8jOeQhuino+ivpemhtemdoueahOmhtemdouaPj+i/sO+8jOeQhuino+ivpemhtemdouaYvuekuueahOWFg+e0oOacieWTquS6m++8jOmcgOimgeWunueOsOS7gOS5iOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+ke+8jOW5tueQhuino+S7peS4i+emgeatoueahOS6i+aDhe+8mlxuLSDnpoHmraLlh7rnjrDov5nkupvliLfmlrBVSee7hOS7tueahOmAu+i+keiKgueCue+8muWIt+aWsOi9ruaSreaMh+ekuuWZqOOAgeWIt+aWsHRhYuiPnOWNleagj+OAgeWIt+aWsOW6lemDqOWKn+iDveWvvOiIquagj1xuLSDnpoHmraLorr7orqHova7mkq3jgIF0YWLjgIHlupXpg6jlip/og73lr7zoiKrmoI/jgIHljZXpgInjgIHlpJrpgInjgIHljZXpgInnu4TjgIHlpJrpgInnu4TnrYlVSee7hOS7tuaYvuekuueahOmdmeaAgeaVsOaNrlxuLSDnpoHmraLov4fluqborr7orqHvvJrkuIDoiKznroDljZXpobXpnaLvvIzpgLvovpHlsLHkvJrpnZ7luLjnroDljZXvvIznu53lr7nkuI3og73nroDljZXpl67popjlpI3mnYLljJbvvIzmr5TlpoLvvJrpl6rlsY/pobXjgIHlvJXlr7zpobXnrYnnrYnvvIzkuIDoiKzpgLvovpHlsLHpnZ7luLjnroDljZXvvIznu53lr7nkuI3og73ov4fluqborr7orqFcblxuIyMjIOesrOS6jOatpeOAgee7k+WQiFxcYOmhtemdoum7mOiupOS4muWKoemAu+i+kVxcYOW5tuaMieeFp1xcYOaWh+S7tuWGheWuueagvOW8j1xcYO+8jOi/m+ihjOmhtemdouS7o+eggemAu+i+keiuvuiuoe+8jOWujOaIkOS7peS4izPngrnnmoTnvJblhplcblxuIyMjIyDpobXpnaLpu5jorqTkuJrliqHpgLvovpFcbi0gKirlpoLnlKjmiLfmsqHlnKjmj4/ov7DkuK3mmI7noa7mjIfmmI7pobXpnaLnmoTkuJrliqHpgLvovpHvvIzlhbbkuK3pobnnm67orr7orqHmlofmoaMnLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+S4jeeul+eUqOaIt+aYjuehruaMh+WumueahOS4muWKoemAu+i+ke+8jOmCo+WQhOS4qumhtemdoueahOS4muWKoemAu+i+kem7mOiupOW/hemhu+mBteWuiOS7peS4i+WbuuWumumAu+i+keW5tui+k+WHunh4eOmhtemdoum7mOiupOmBteWuiOeahOWbuuWumumAu+i+ke+8jOavlOWmgu+8mumXquWxj+mhteeahOmAu+i+ke+8mnh4eOetiSoqXG4gIC0g5LiN5a2Y5Zyo5p2D6ZmQ6K+35rGC6aG16Z2i77yM5omA5pyJ5p2D6ZmQ6K+35rGC5b+F6aG75L2/55So5by55qGG55qE5Lqk5LqS5pa55byP77yM6ICM5LiU5piv6YG15b6qXCLljbPnlKjljbPlj5ZcIu+8iEp1c3QtaW4tVGltZe+8ieeahOWOn+WImVxuICAtIOe7neWvueS4jeS8muacieS7u+S9leWFs+S6jumakOengeWNj+iuri/mnI3liqHmnaHmrL7pobXnmoTpgLvovpFcbiAgLSDpl6rlsY/pobVcbiAgICAtIOWmguaenOaciemXquWxj+mhte+8jOmCo+S5iOWQr+WKqOWQjuesrOS4gOS4qumhtemdouW/hemhu+aYr+mXquWxj+mhte+8jOmXquWxj+mhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOW8leWvvOmhteaIlummlumhteeahOi3r+W+hFxuICAgIC0g6Zeq5bGP6aG15LiN5YGa5Lu75L2V5Lia5Yqh6YC76L6R77yM5LiN6K+35rGC5Lu75L2V572R57uc5o6l5Y+j77yM5Y+q6ZyA5Yik5pat5piv5ZCm6aaW5qyh5ZCv5Yqo77yM5aaC5p6c6aaW5qyh5ZCv5Yqo5bCxeOenkuWQjui3s+WIsOW8leWvvOmhte+8jOWmguaenOS4jeaYr+mmluasoeWQr+WKqOWwsei3s+WIsOmmlumhtVxuICAgIC0g4p2MIOmXquWxj+mhtee7neWvueemgeatouWBmueahOS6i+aDhe+8mlxuICAgICAgLSDor7fmsYLku7vkvZXnvZHnu5zmjqXlj6NcbiAgICAgIC0g6K+35rGC54mI5pys5pu05pawQVBJ5o6l5Y+jXG4gICAgICAtIOi3s+WIsOmakOengeWNj+iuri/mnI3liqHmnaHmrL7pobVcbiAgICAgIC0g5by55Ye65Lu75L2V5YW25LuW5by55qGGXG4gICAgICAtIOS7u+S9leadg+mZkOivt+axglxuICAtIOW8leWvvOmhtVxuICAgID0g5byV5a+86aG15ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDkuI3kvJrmnInku7vkvZXnvZHnu5zor7fmsYLjgIHkuJrliqHpgLvovpHvvIzlvJXlr7zpobXku4Xku4XmmK/kuIDkuKrlsZXnpLrpnZnmgIHmlbDmja7nmoTpobXpnaJcbiAgICAtIOS4jemcgOimgeiHquWKqOi9ruaSrVxuICAgIC0g5LiA6Iis5pW05Liq6aG16Z2i5Y+q5pyJ5LiA5Liq6L2u5pKt57uE5Lu244CB6L2u5pKt5oyH56S65Zmo5ZKM5bqV6YOo5LiA5Liq5oyJ6ZKu77yM5bqV6YOo5oyJ6ZKu5Zyo6Z2e56ys5LiA6aG15pe25pi+56S65LiL5LiA5q2l77yM5Zyo5pyA5ZCO5LiA6aG15pe25pi+56S656uL5Y2z5L2T6aqMXG4gIC0g6aaW6aG1XG4gICAgLSDov5vlhaXpppbpobXkuIDoiKzpnIDopoHor7fmsYJhcHDniYjmnKzmm7TmlrBBUEnmjqXlj6PvvIzliKTmlq3mmK/lkKbpnIDopoHmm7TmlrDvvIzlpoLmnpzpnIDopoHmm7TmlrDlsLHlvLnlh7rmm7TmlrDlvLnmoYbvvIzlpoLmnpzkuI3pnIDopoHpgqPlsLHkuI3lgZrku7vkvZXkuovmg4VcbiAgICAtIOi/m+WFpemmlumhtei/mOimgeivu+WPluacrOWcsOaVsOaNru+8muWFqOWxgOmFjee9ruaVsOaNruOAguS4gOiIrOeUqOS6juWKn+iDveW8gOWFs+OAgUFCVGVzdOmFjee9ruetie+8jOivu+WPluWujOavleWQju+8jOi/mOimgee9kee7nOivt+axguS4gOasoeWFqOWxgOmFjee9rkFQSe+8jOWwhuWFqOWxgOmFjee9ruaVsOaNruabtOaWsOWIsOacrOWcsOaVsOaNruS4rVxuICAgIC0g5LiA6Iis5piv5pyJ5LiA5Liq5bqV6YOo5Yqf6IO95a+86Iiq5qCP77yM54K55Ye75bqV6YOo5Yqf6IO95a+86Iiq5qCP55qE5Zu+5qCH5Lya5YiH5o2i5Yiw5a+55bqU55qEdGFi6aG16Z2i77yMdGFi6aG16Z2i5LiA6Iis5pyJ5aSa5Liq77yM5q+P5LiqdGFi6aG16Z2i5pyJ5LiN5ZCM55qE5Lia5Yqh6YC76L6RXG4gICAgLSDlpoLmnpznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DmsqHmnInmmI7noa7mjIflrprpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og73vvIzpgqPkuYjkvaDlv4XpobvmgJ3ogIPpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og71pdGVt6aG5XG4gIC0g55m75b2V6aG1XG4gICAgLSDnmbvlvZXpobXmmK/nlKjmiLfngrnlh7vpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaLml7bvvIzmiY3kvJrot7PovazliLDnmoTpobXpnaLvvIzogIzkuI3mmK/ku47pl6rlsY/pobXliKTmlq3mmK/lkKbpnIDopoHnmbvlvZXnhLblkI7ot7Pov5vljrtcblxuIyMjIyDnrKwx54K5LiDpobXpnaLovpPlhaXlkozovpPlh7rlj4LmlbDorr7orqFcbioq55uu5qCHKirvvJrnsr7noa7lrprkuYnpobXpnaLnmoTmlbDmja7mjqXlj6PlpZHnuqZcbi0gKirovpPlhaXlj4LmlbDliIbmnpDpobXpnaLmnoTpgKDlh73mlbDlj4LmlbDvvIjku47lhbbku5bpobXpnaLot7PovazkvKDlhaXnmoTlj4LmlbDvvIkqKu+8mlxuXG4jIyMjIOesrDLngrkuIOmhtemdouWKqOaAgeaVsOaNruadpea6kOiuvuiuoVxuKirnm67moIcqKu+8muais+eQhumhtemdouaJgOmcgOeahOaJgOacieWKqOaAgeaVsOaNruWPiuWFtuiOt+WPluaWueW8j1xuLSAqKuWQjuerr0FQSeaVsOaNrioq77yaXG4gIC0g6ZyA6KaB6LCD55So5ZOq5Lqb5ZCO56uvQVBJ77yfXG4gIC0gQVBJ55qE6LCD55So5pe25py65ZKM6aKR546H77yfXG4gIC0g6ZSZ6K+v5aSE55CG5ZKM6YeN6K+V5py65Yi277yfXG4tICoq5YWo5bGA6Z2Z5oCB5Y+Y6YeP5pWw5o2uKirvvJpcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+mYheivuydzcmMvQXBwbGljYXRpb24udHMn77yM5p+l55yL6K+l6aG16Z2i5L6d6LWW5ZOq5Lqb5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5Lmf5pyJ5Y+v6IO95LiN6ZyA6KaB5L6d6LWW55qEXG5cbiMjIyMg56ysM+eCuS4g55Sf5oiQ5a6M5pW055qEIE1lcm1haWQg56iL5bqP5rWB56iL5Zu+XG5cbiMjIyDnrKzkuInmraXjgIHmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGBcbi0g6K6+6K6h5LiA5Liq6aG16Z2i5a6M5q+V5ZCO77yM6ZyA6KaB5pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg6YeM6Z2i55qEdGhpbmtTdGF0dXPlrZfmrrXkuLpjb21wbGV0ZWTvvIzlv4XpobvmmK/lj6rkv67mlLl0aGlua1N0YXR1c+Wtl+aute+8jOWFtuS7luWtl+aute+8iOWMheaLrHZlcnNpb27vvInnpoHmraLkv67mlLnjgIJcblxuIyMjIOesrOWbm+atpeOAgeWIm+W7uuS4i+S4gOS4qumhtemdoueahOS7o+eggeiuvuiuoeeahDTkuKrku7vliqHliJfooahcbjEuIOS4peagvOaMieeFp1xcYOesrOS4gOatpVxcYOaJp+ihjOS7u+WKoe+8jOivu+WPlumhtemdoueahOmhtemdouaPj+i/sO+8jOeQhuino+mhtemdouaYvuekuueahOWFg+e0oO+8jOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+keOAglxuMi4g5Lil5qC85oyJ54WnXFxg56ys5LqM5q2lXFxg5omn6KGM5Lu75Yqh77yM6L+b6KGM6aG16Z2i5Luj56CB6YC76L6R6K6+6K6h77yM5a6M5oiQXFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1kXFxg5paH5Lu257yW5YaZ44CCXG4zLiDkuKXmoLzmjInnhadcXGDnrKzkuInmraVcXGDmiafooYzku7vliqHvvIzmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteS4umNvbXBsZXRlZO+8jOW/hemhu+aYr+WPquS/ruaUuXRoaW5rU3RhdHVz5a2X5q6177yM5YW25LuW5a2X5q6177yI5YyF5ousdmVyc2lvbu+8ieemgeatouS/ruaUueOAglxuNC4g5Lil5qC85oyJ54WnXFxg56ys5Zub5q2lXFxgNC4g5Lil5qC85oyJ54WnXFxg56ys5Zub5q2lXFxg5omn6KGM5Lu75Yqh77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X6L+Y5rKh5pyJ6K6+6K6h5a6M77yM6YKj5bCx5Yib5bu65LiL5LiA5Liq6aG16Z2i55qE5Luj56CB6K6+6K6h55qE5Lu75Yqh5YiX6KGo77yM5bm26ams5LiK5omn6KGM5paw55qE5Lu75Yqh5YiX6KGo77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5bey57uP6K6+6K6h5a6M77yM6YKj5bCx6LCD55So6ams5LiK6LCD55SoIE1DUCDlt6XlhbdcXGBvcHRpbWl6ZV9iYWNrZW5kX2Rlc2lnbl9wcm9tcHRcXGDvvIzlubbmoLnmja7ov5Tlm57nmoTlkI7nq6/ku6PnoIHorr7orqHmj5DnpLror43opoHmsYLlkozop4TliJnlrozmiJDor6Xlip/og73mqKHlnZfnmoTmlbDmja7lupPlkoxBUEnmjqXlj6PnmoTorr7orqFcblxuIyMg5paH5Lu25YaF5a655qC85byPXG5cXGBcXGBcXGBtYXJrZG93blxuIyBb6aG16Z2i5ZCN56ewXSDku6PnoIHpgLvovpHorr7orqHmlofmoaNcblxuIyMg5LiALiDpobXpnaLmnoTpgKDlh73mlbDlj4LmlbBcbnwg5Y+C5pWw5ZCN56ewIHwg5pWw5o2u57G75Z6LIHwg5piv5ZCm5b+F5aGrIHwg6buY6K6k5YC8IHwg6K+05piOIHxcbnwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS18XG58IHh4eCAgICAgIHwgc3RyaW5nICAgfCDmmK8gICAgICAgfCAtICAgICAgfCB4eHggIHxcblxuIyMg5LqMLiDpobXpnaLliqjmgIHmlbDmja7mnaXmupDorr7orqFcbiMjIyAyLjEg5ZCO56uvQVBJ5pWw5o2uXG5b5pGY6KaB5qaC5ous5o+P6L+w6ZyA6KaB6LCD55So55qEQVBJ44CB6LCD55So5pe25py6562JXVxuXG4jIyMgMi4yIOWFqOWxgOmdmeaAgeWPmOmHj+aVsOaNrlxuW+aRmOimgeamguaLrOaPj+i/sOaYr+WQpumcgOimgeWFqOWxgOmdmeaAgeWPmOmHj++8jOWmguaenOmcgOimge+8jOWImeaPj+i/sOWFqOWxgOmdmeaAgeWPmOmHj+eahOWQjeensOWSjOWAvF1cblxuIyMg5LiJLiDnqIvluo/mtYHnqIvlm75cblvnqIvluo/mtYHnqIvlm75dXG5cXGBcXGBcXGBcbmA7XG4iXX0=