bytefun-ai-mcp 1.13.97 → 1.13.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u4E25\u683C\u9075\u5B88`\u4EE3\u7801\u89C4\u8303`\uFF0C\u53C2\u8003`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u4E25\u683C\u6309\u7167`\u7F16\u5199\u4EE3\u7801\u76849 \u4E2A\u6B65\u9AA4`\u5B8C\u6210\u4EE3\u7801\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u4EE3\u7801\u6CE8\u91CA\u4F7F\u7528\u4E2D\u6587**\uFF1A\u4EE3\u7801\u7684\u6CE8\u91CA\u6587\u5B57\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n- \u5982\u679C\u662F\u79FB\u52A8\u7AEF\u5F00\u53D1\u5F0F\u4E0D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\u7684\uFF0C\u7535\u8111\u7AEF\u624D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\n- \u5B57\u7B26\u4E32\u8981\u4EE5\u5355\u5F15\u53F7\u6765\u5199\uFF0C\u5982\uFF1A'\u6211\u7684'\u3002\n\n## \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n## \u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u7F16\u5199\u4EE3\u7801\u7684 9 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u5FC5\u987B\u6309\u7167\u4EE5\u4E0B 9 \u4E2A\u4EFB\u52A1\u521B\u5EFA\u4EFB\u52A1\u5217\u8868\uFF0C\u7981\u6B62\u8DF3\u8FC7\u4EFB\u4F55\u4EFB\u52A1\n\n### **\u7B2C1\u4E2A\u4EFB\u52A1\uFF1A\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n\n### **\u7B2C2\u4E2A\u4EFB\u52A1\uFF1A\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D12**\n\n### **\u7B2C3\u4E2A\u4EFB\u52A1\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528**\n\n### **\u7B2C4\u4E2A\u4EFB\u52A1\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEFAPI\u63A5\u53E3\u548CAPI\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E**\n\n### **\u7B2C5\u4E2A\u4EFB\u52A1\uFF1A\u7ED3\u5408`\u4EE3\u7801\u4F8B\u5B50`\u5206\u6790\uFF0C\u4EE5\u53CA\u5206\u6790`src/lib`\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u5B8C\u5168\u638C\u63E1\u597D\u8BE5ts\u4EE3\u7801\u6846\u67B6\u8BBE\u8BA1\n- \u4ED4\u7EC6\u9605\u8BFB`src/lib/AllFunction.ts`\u6587\u4EF6\u4EE3\u7801\uFF0C\u6240\u6709\u51FD\u6570\u8C03\u7528\u5FC5\u987B\u4F18\u5148\u4F7F\u7528`AllFunction.ts`\u6587\u4EF6\u4E2D\u7684\u51FD\u6570\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u5176\u4ED6\u6587\u4EF6\u6216\u8005\u7CFB\u7EDF\u4E2D\u7684\u51FD\u6570\n- \u4ED4\u7EC6\u9605\u8BFB`src/lib/uilib`\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\uFF0C\u6240\u6709UI\u7EC4\u4EF6\u7C7B\u578B\u58F0\u660E\u5FC5\u987B\u4F7F\u7528`uilib`\u6587\u4EF6\u5939\u4E2D\u7684\u7EC4\u4EF6\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u5176\u4ED6\u6587\u4EF6\u6216\u8005\u7CFB\u7EDF\u4E2D\u7684\u7EC4\u4EF6\n- \u4ED4\u7EC6\u9605\u8BFB`src/lib/uilib/Ref.ts`\u6587\u4EF6\u4EE3\u7801\uFF0C\u7ED3\u5408`\u4EE3\u7801\u4F8B\u5B50`\u7684\u5199\u6CD5\uFF0C\u7406\u89E3\u91CC\u9762\u7684watch\u3001ref\u51FD\u6570\u7684\u4F7F\u7528\n- `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n- \u9875\u9762\u8DF3\u8F6C\u5B9E\u73B0\uFF1A\u5FC5\u987B\u4F7F\u7528`AllFunction.startPage(page: Page)`\u51FD\u6570\uFF0C\u5199\u6CD5\uFF1A`AllFunction.startPage(new xxxPage())`\n- \u6240\u6709\u7EC4\u4EF6\u7684\u9009\u4E2D\u72B6\u6001\u3001\u805A\u7126\u72B6\u6001\u3001\u7981\u7528\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u901A\u8FC7`setStation(station: ViewStation)`\u51FD\u6570\u6765\u8BBE\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8BBE\u7F6E\u7EC4\u4EF6\u7684UI\u5C5E\u6027\uFF0C\u53EA\u9700\u8981\u8BBE\u7F6E\u7EC4\u4EF6\u7684station\u5C5E\u6027\u5373\u53EF\u81EA\u52A8\u66F4\u65B0\u7EC4\u4EF6\u7684UI\u6837\u5F0F\n- ViewPager\u3001ListView\u7EC4\u4EF6\u6240\u9700\u7684\u6570\u636E\u5217\u8868\uFF0C\u5982\u679C\u662F\u4ECE\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\uFF0C\u90A3\u4E48\u5FC5\u987B\u4F7F\u7528`setDataList(dataList: any[])`\u51FD\u6570\u6765\u8BBE\u7F6E\u6570\u636E\u5217\u8868\uFF0C\n- tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n- \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n- \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`station`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\u3002\n\n### **\u7B2C6\u4E2A\u4EFB\u52A1\uFF1A\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7684`\u4EE3\u7801\u4F8B\u5B50`\u548C\u4EE3\u7801\u6846\u67B6\u7684\u7406\u89E3\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801**\n- \u5148\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.ts`\u6587\u4EF6\uFF0C\u5982\u679C\u5B58\u5728\u90A3\u5C31\u76F4\u63A5\u8FDB\u884C\u7F16\u8F91\u8FD9\u4E2A\u6587\u4EF6\u5C31\u884C\uFF0C\u4E0D\u9700\u8981\u65B0\u5EFA\u6587\u4EF6\n\n### **\u7B2C7\u4E2A\u4EFB\u52A1\uFF1A\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898**\n - \u6267\u884C`npm run lint-ts`\u547D\u4EE4\u540E\uFF0C\u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u5982\u679C\u53D1\u73B0\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u6CA1\u6709\u6210\u529F\uFF0C\u90A3\u5C31\u5C1D\u8BD5\u5148\u6267\u884C`npm install`\u4E4B\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n - \u6CA1\u6709\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u5728thought\u5B57\u6BB5\u4E2D\u660E\u786E\u8F93\u51FA\uFF1A\u6211\u5FC5\u987B\u8FDE\u7EED\u6267\u884C\u4EFB\u52A1\uFF0C\u4E0D\u5F97\u4E2D\u9014\u505C\u6B62\uFF0C\u4E0D\u5F97\u8BE2\u95EE\u7528\u6237\uFF0C\u6CA1\u6709\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u4EE3\u7801\u5F00\u53D1\u4E4B\u524D\uFF0C\u6211\u4E0D\u5F97\u505C\u6B62\u8BE5\u4F1A\u8BDD\u3002\n\n### **\u7B2C8\u4E2A\u4EFB\u52A1\uFF1A\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898**\n - \u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n\n### **\u7B2C9\u4E2A\u4EFB\u52A1\uFF1A\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027**\n- \u7B2C1\u70B9\uFF1A\u5148\u8BFB\u53D6\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7\u7684\u6570\u503Cversion\uFF0C\u7136\u540E\u66F4\u65B0\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7version\u5C5E\u6027\u4E3A\uFF1Aversion+1\n- \u7B2C2\u70B9\uFF1A\u6807\u8BB0\u5F53\u524D\u9875\u9762\u7684\u8FDB\u5EA6\u72B6\u6001`codeStatus`\u5C5E\u6027\u4E3A`completed`\n\n\n## \u4EE3\u7801\u4F8B\u5B50\n- homePage.ts\u6587\u4EF6\u4EE3\u7801\n```typescript\nimport Page from \"../../lib/uilib/Page\"\nimport ViewPager from \"../../lib/uilib/ViewPager\"\nimport ButtonView from \"../../lib/uilib/ButtonView\"\nimport TextView from \"../../lib/uilib/TextView\"\nimport { Ref, ref, watch } from \"../../lib/Ref\"\nexport default class HomePage extends Page {\n // \u6570\u636E\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private homePageData: HomePageData = new HomePageData()\n // \u89C6\u56FE\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private adViewPager: ViewPager = this.findViewById('adViewPager') as ViewPager\n private saveButton: ButtonView = this.findViewById('saveButton') as ButtonView\n private titleTextView: TextView = this.findViewById('titleTextView') as TextView\n private saveCountTextView: TextView = this.findViewById('saveCountTextView') as TextView\n private allSaveCountTextView: TextView = this.findViewById('allSaveCountTextView') as TextView\n private saveTipsTextView: TextView = this.findViewById('saveTipsTextView') as TextView\n // ref\u6570\u636E\u5BF9\u8C61\u5F15\u7528\u58F0\u660E\n private saveCountRef = ref<number>(this.homePageData.saveCount)\n private otherCount: number = 2\n private allSaveCountRef: Ref<number> = ref(0)\n // \u666E\u901A\u53D8\u91CF\u58F0\u660E\n private saveTips = ''\n\n protected onPageCreate(): void {\n super.onPageCreate()\n this.initData()\n this.initView()\n }\n\n private initData(): void {\n watch([this.saveCountRef, this.allSaveCountRef], () => {\n let otherCount = 2\n if (otherCount > 5) {\n this.allSaveCountRef.value = this.homePageData.saveCount + 5\n } else {\n this.allSaveCountRef.value = this.homePageData.saveCount + 10\n }\n this.saveTipsTextView.text = this.saveCountRef.value > 5 ? '\u4FDD\u5B58\u6210\u529F' : '\u4FDD\u5B58\u5931\u8D25'\n this.allSaveCountTextView.text = this.allSaveCountRef.value + '\u4E2A'\n })\n }\n\n private initView(): void {\n this.saveButton.setOnClickListener(() => {\n this.saveCountRef.value++\n this.homePageData.title = 'Home Page'\n this.saveTipsTextView.text = this.saveTips\n AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)\n AllFunction.startPage(new BookInfoPage())\n })\n }\n\n}\n```\n\n- homePageData.ts\u6587\u4EF6\u4EE3\u7801\n``` typescript\nexport default class HomePageData {\n public title: string = ''\n public saveCount: number = 0\n public userInfo: BookInfo = new BookInfo()\n}\n```\n";
1
+ export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u4E25\u683C\u9075\u5B88`\u4EE3\u7801\u89C4\u8303`\uFF0C\u53C2\u8003`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u4E25\u683C\u6309\u7167`\u7F16\u5199\u4EE3\u7801\u768410 \u4E2A\u6B65\u9AA4`\u5B8C\u6210\u4EE3\u7801\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u4EE3\u7801\u6CE8\u91CA\u4F7F\u7528\u4E2D\u6587**\uFF1A\u4EE3\u7801\u7684\u6CE8\u91CA\u6587\u5B57\uFF0C\u5FC5\u987B\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u4E0D\u80FD\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n- \u5982\u679C\u662F\u79FB\u52A8\u7AEF\u5F00\u53D1\u5F0F\u4E0D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\u7684\uFF0C\u7535\u8111\u7AEF\u624D\u9700\u8981\u8003\u8651\u9F20\u6807\u76F8\u5173\u4E8B\u60C5\n- \u5B57\u7B26\u4E32\u8981\u4EE5\u5355\u5F15\u53F7\u6765\u5199\uFF0C\u5982\uFF1A'\u6211\u7684'\u3002\n\n## \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n## **\u6267\u884C\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5B9E\u73B0\uFF1A\u6BCF\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\u5B9E\u73B0\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 10 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 10 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEFAPI\u63A5\u53E3\u548CAPI\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768411\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\u3002\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 10 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 10 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\n\n### **\u6B65\u9AA4\u89C4\u52191\uFF1A\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n\n### **\u6B65\u9AA4\u89C4\u52192\uFF1A\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1**\n\n### **\u6B65\u9AA4\u89C4\u52193\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528**\n\n### **\u6B65\u9AA4\u89C4\u52194\uFF1A\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEFAPI\u63A5\u53E3\u548CAPI\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E**\n\n### **\u6B65\u9AA4\u89C4\u52195\uFF1A\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n\n### **\u6B65\u9AA4\u89C4\u52196\uFF1A\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768411\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801**\n- \u5148\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B58\u5728`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.ts`\u6587\u4EF6\uFF0C\u5982\u679C\u5B58\u5728\u90A3\u5C31\u76F4\u63A5\u8FDB\u884C\u7F16\u8F91\u8FD9\u4E2A\u6587\u4EF6\u5C31\u884C\uFF0C\u4E0D\u9700\u8981\u65B0\u5EFA\u6587\u4EF6\n\n### **\u6B65\u9AA4\u89C4\u52197\uFF1A\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898**\n - \u6267\u884C`npm run lint-ts`\u547D\u4EE4\u540E\uFF0C\u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u5982\u679C\u53D1\u73B0\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u6CA1\u6709\u6210\u529F\uFF0C\u90A3\u5C31\u5C1D\u8BD5\u5148\u6267\u884C`npm install`\u4E4B\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n - \u6CA1\u6709\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u5728thought\u5B57\u6BB5\u4E2D\u660E\u786E\u8F93\u51FA\uFF1A\u6211\u5FC5\u987B\u8FDE\u7EED\u6267\u884C\u4EFB\u52A1\uFF0C\u4E0D\u5F97\u4E2D\u9014\u505C\u6B62\uFF0C\u4E0D\u5F97\u8BE2\u95EE\u7528\u6237\uFF0C\u6CA1\u6709\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u4EE3\u7801\u5F00\u53D1\u4E4B\u524D\uFF0C\u6211\u4E0D\u5F97\u505C\u6B62\u8BE5\u4F1A\u8BDD\u3002\n\n### **\u6B65\u9AA4\u89C4\u52198\uFF1A\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898**\n - \u53D1\u73B0\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u5FC5\u987B\u6309\u7167\u9519\u8BEF\u63D0\u793A\u8FDB\u884C\u4FEE\u590D\u4EE3\u7801\n - \u4FEE\u590D\u7F16\u8BD1\u95EE\u9898\u540E\uFF0C\u518D\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\n - \u5FC5\u987B\u89E3\u51B3\u6240\u6709\u7F16\u8BD1\u95EE\u9898\uFF0C\u8BE5\u9875\u9762\u7684\u4EE3\u7801\u624D\u7B97\u7F16\u5199\u5B8C\u6BD5\n\n### **\u6B65\u9AA4\u89C4\u52199\uFF1A\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027**\n- \u7B2C1\u70B9\uFF1A\u5148\u8BFB\u53D6\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7\u7684\u6570\u503Cversion\uFF0C\u7136\u540E\u66F4\u65B0\u5F53\u524D\u9875\u9762\u7684\u7248\u672C\u53F7version\u5C5E\u6027\u4E3A\uFF1Aversion+1\n- \u7B2C2\u70B9\uFF1A\u6807\u8BB0\u5F53\u524D\u9875\u9762\u7684\u8FDB\u5EA6\u72B6\u6001`codeStatus`\u5C5E\u6027\u4E3A`completed`\n\n### **\u6B65\u9AA4\u89C4\u5219 10\uFF1A\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 10 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 10 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52191`\u6267\u884C\u4EFB\u52A1\uFF0C\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u9875\u9762\u6240\u5C5E\u7684\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u5F00\u53D1\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\n2. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52192`\u6267\u884C\u4EFB\u52A1\uFF0C\u5728\u7F16\u5199\u4EE3\u7801\u4E4B\u524D\uFF0C\u5FC5\u987B\u4F7F\u7528read_file\u5DE5\u5177\u68C0\u67E5\u5F53\u524D\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u662F\u5426\u5B58\u5728codeDesign.md\u8BBE\u8BA1\u6587\u6863\uFF1Asrc/{moduleNameEN}/{pageNameEN}/codeDesign.md\uFF0C\u5FC5\u987B\u5B8C\u6574\u9605\u8BFB\u8BE5\u8BBE\u8BA1\u6587\u6863\uFF0C\u4E25\u683C\u6309\u7167\u8BBE\u8BA1\u6587\u6863\u8BF4\u660E\u8FDB\u884C\u4EE3\u7801\u5F00\u53D1\n3. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52193`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u5B8C\u6574\u9605\u8BFB\u5F53\u524D\u9875\u9762\u5BF9\u5E94\u7684src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md\u6587\u4EF6\uFF0C\u7406\u89E3\u6574\u4E2A\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u51ED\u60F3\u8C61\u6216\u5047\u8BBE\u6DFB\u52A0\u4E0D\u5B58\u5728\u7684\u5143\u7D20\u5F15\u7528\n4. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52194`\u6267\u884C\u4EFB\u52A1\uFF0C\u4F7F\u7528read_file\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u6587\u4EF6\uFF0C\u8BB0\u4F4F\u73B0\u6709\u7684\u540E\u7AEFAPI\u63A5\u53E3\u548CAPI\u63A5\u53E3\u6587\u4EF6\u8DEF\u5F84\uFF0C\u7F16\u5199\u4EE3\u7801\u65F6\u7EDD\u5BF9\u4E0D\u5F97\u4F7F\u7528\u6A21\u62DF\u6570\u636E/\u4E34\u65F6\u6570\u636E/\u5047\u6570\u636E\uFF0C\u800C\u662F\u5148\u627E\u5230\u5BF9\u5E94API\u7684API\u63A5\u53E3\u6587\u4EF6\uFF0C\u7136\u540E\u4F7F\u7528\u8BE5API\u63A5\u53E3\u6587\u4EF6\u4E2D\u7684API\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n5. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52195`\u6267\u884C\u4EFB\u52A1\uFF0C\u4E3A\u5237\u65B0\u8BB0\u5FC6\u7F13\u5B58\uFF0C\u4F60\u5FC5\u987B\u91CD\u65B0\u8C03\u7528MCP\u5DE5\u5177`understanding_code_framework_prompt`\uFF0C\u7136\u540E\u5FC5\u987B\u4ED4\u7EC6\u5168\u9762\u7406\u89E3\u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9\n6. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52196`\u6267\u884C\u4EFB\u52A1\uFF0C\u7ED3\u5408\u7B2C5\u4E2A\u4EFB\u52A1\u7406\u89E3\u768411\u4E2A\u77E5\u8BC6\u70B9\u4EE5\u53CA`\u4EE3\u7801\u4F8B\u5B50`\uFF0C\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\n7. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52197`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run lint-ts`\u547D\u4EE4\u68C0\u67E5\u7279\u6B8A\u7F16\u8BD1\u95EE\u9898\u3002\n8. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52198`\u6267\u884C\u4EFB\u52A1\uFF0C\u6267\u884C`npm run build`\u7F16\u8BD1\u547D\u4EE4\u68C0\u67E5\u7F16\u8BD1\u95EE\u9898\u3002\n9. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u52199`\u6267\u884C\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5F3A\u5236\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6`version`\u548C`codeStatus`\u5C5E\u6027\n10. \u4E25\u683C\u6309\u7167`\u6B65\u9AA4\u89C4\u521910`\u6267\u884C\u4EFB\u52A1\uFF0C\u8C03\u7528 todo_write \u5DE5\u5177\u4E3A\u4E0B\u4E00\u4E2A\u9875\u9762\u521B\u5EFA\u4EE5\u4E0B 10 \u4E2A\u4EFB\u52A1\u5217\u8868\u5E76\u9A6C\u4E0A\u6267\u884C\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF0C\u5982\u679C\u8FD8\u6CA1\u6709\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8BBE\u8BA1\uFF0C\u4E0D\u5F97\u505C\u6B62\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5982\u679C\u4F60\u76F4\u63A5\u7F16\u5199\u4E0B\u4E00\u4E2A\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u4EE3\u7801\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\u3002\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F 10 \u4E2A\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002\u5982\u679C\u4F60\u5728\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6240\u6709\u9875\u9762\u8FD8\u6CA1\u6709\u5F00\u53D1\u4E1A\u52A1\u903B\u8F91\u5B8C\u6BD5\u7684\u60C5\u51B5\u4E0B\u505C\u6B62\u4E86\u4EFB\u52A1\uFF0C\u9A6C\u4E0A\u62A5\u9519\uFF0C\u89C6\u4E3A\u4E25\u91CD\u8FDD\u89C4\n\n## \u4EE3\u7801\u4F8B\u5B50\n- homePage.ts\u6587\u4EF6\u4EE3\u7801\n```typescript\nimport Page from \"../../lib/uilib/Page\"\nimport ViewPager from \"../../lib/uilib/ViewPager\"\nimport ButtonView from \"../../lib/uilib/ButtonView\"\nimport TextView from \"../../lib/uilib/TextView\"\nimport { Ref, ref, watch } from \"../../lib/Ref\"\nexport default class HomePage extends Page {\n // \u6570\u636E\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private homePageData: HomePageData = new HomePageData()\n // \u89C6\u56FE\u5BF9\u8C61\u5B9E\u4F8B\u58F0\u660E\n private adViewPager: ViewPager = this.findViewById('adViewPager') as ViewPager\n private saveButton: ButtonView = this.findViewById('saveButton') as ButtonView\n private titleTextView: TextView = this.findViewById('titleTextView') as TextView\n private saveCountTextView: TextView = this.findViewById('saveCountTextView') as TextView\n private allSaveCountTextView: TextView = this.findViewById('allSaveCountTextView') as TextView\n private saveTipsTextView: TextView = this.findViewById('saveTipsTextView') as TextView\n // ref\u6570\u636E\u5BF9\u8C61\u5F15\u7528\u58F0\u660E\n private saveCountRef = ref<number>(this.homePageData.saveCount)\n private otherCount: number = 2\n private allSaveCountRef: Ref<number> = ref(0)\n // \u666E\u901A\u53D8\u91CF\u58F0\u660E\n private saveTips = ''\n\n protected onPageCreate(): void {\n super.onPageCreate()\n this.initData()\n this.initView()\n }\n\n private initData(): void {\n watch([this.saveCountRef, this.allSaveCountRef], () => {\n let otherCount = 2\n if (otherCount > 5) {\n this.allSaveCountRef.value = this.homePageData.saveCount + 5\n } else {\n this.allSaveCountRef.value = this.homePageData.saveCount + 10\n }\n this.saveTipsTextView.text = this.saveCountRef.value > 5 ? '\u4FDD\u5B58\u6210\u529F' : '\u4FDD\u5B58\u5931\u8D25'\n this.allSaveCountTextView.text = this.allSaveCountRef.value + '\u4E2A'\n })\n }\n\n private initView(): void {\n this.saveButton.setOnClickListener(() => {\n this.saveCountRef.value++\n this.homePageData.title = 'Home Page'\n this.saveTipsTextView.text = this.saveTips\n AllFunction.saveDatabaseNumber('saveCount', this.saveCountRef.value)\n AllFunction.startPage(new BookInfoPage())\n })\n }\n\n}\n```\n\n- homePageData.ts\u6587\u4EF6\u4EE3\u7801\n``` typescript\nexport default class HomePageData {\n public title: string = ''\n public saveCount: number = 0\n public userInfo: BookInfo = new BookInfo()\n}\n```\n";
2
2
  //# sourceMappingURL=appCode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appCode.d.ts","sourceRoot":"","sources":["../src/appCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,sthBA0J9B,CAAC"}
1
+ {"version":3,"file":"appCode.d.ts","sourceRoot":"","sources":["../src/appCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,6xuBA0J9B,CAAC"}
package/build/appCode.js CHANGED
@@ -1,4 +1,4 @@
1
- export const codePromptTemplate = `# 你是typescript代码专家,根据用户输入的需求描述,严格遵守\`代码规范\`,参考\`代码例子\`,严格按照\`编写代码的9 个步骤\`完成代码开发
1
+ export const codePromptTemplate = `# 你是typescript代码专家,根据用户输入的需求描述,严格遵守\`代码规范\`,参考\`代码例子\`,严格按照\`编写代码的10 个步骤\`完成代码开发
2
2
 
3
3
  ## 代码规范
4
4
  - **代码注释使用中文**:代码的注释文字,必须要使用中文,不能使用其他语言
@@ -32,60 +32,60 @@ export const codePromptTemplate = `# 你是typescript代码专家,根据用户
32
32
  - 登录页
33
33
  - 登录页是用户点击需要登录才能访问的页面时,才会跳转到的页面,而不是从闪屏页判断是否需要登录然后跳进去
34
34
 
35
- ## 调用 todo_write 工具创建编写代码的 9 个任务列表,必须按照以下 9 个任务创建任务列表,禁止跳过任何任务
36
-
37
- ### **第1个任务:阅读\`doc/前端代码开发进度.json\`文件,得到当前页面所属的功能模块的英文名字\`moduleNameEN\`和当前要开发的页面的英文名字\`pageNameEN\`
38
-
39
- ### **第2个任务:在编写代码之前,必须使用read_file工具检查当前页面文件夹下是否存在codeDesign.md设计文档:src/{moduleNameEN}/{pageNameEN}/codeDesign.md,必须完整阅读该设计文档,严格按照设计文档说明进行代码开发2**
40
-
41
- ### **第3个任务:使用read_file工具完整阅读当前页面对应的src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md文件,理解整个页面的结构和组件元素,绝对不能凭想象或假设添加不存在的元素引用**
42
-
43
- ### **第4个任务:使用read_file工具读取'src/backendApi/backendApiInfo.md'文件,记住现有的后端API接口和API接口文件路径,编写代码时绝对不得使用模拟数据/临时数据/假数据,而是先找到对应API的API接口文件,然后使用该API接口文件中的API接口返回数据**
44
-
45
- ### **第5个任务:结合\`代码例子\`分析,以及分析\`src/lib\`文件夹里面的代码,完全掌握好该ts代码框架设计
46
- - 仔细阅读\`src/lib/AllFunction.ts\`文件代码,所有函数调用必须优先使用\`AllFunction.ts\`文件中的函数,不能直接调用其他文件或者系统中的函数
47
- - 仔细阅读\`src/lib/uilib\`文件夹里面的代码,所有UI组件类型声明必须使用\`uilib\`文件夹中的组件,不能直接调用其他文件或者系统中的组件
48
- - 仔细阅读\`src/lib/uilib/Ref.ts\`文件代码,结合\`代码例子\`的写法,理解里面的watch、ref函数的使用
49
- - \`src/lib/uilib/Ref.ts\`里面的\`watch\`函数,第一个入参\`refs: Ref<T>[]\`绝对禁止先声明局ref数组部变量再传入,正确的写法应该是直接写数组:\`[ref1, ref2]\`就行
50
- - ❌ 错误的写法:
51
- \`\`\` typescript
52
- const refArray = [ref1, ref2]
53
- watch(refArray, (newValues: T[]) => {
54
- // 监听ref1和ref2的变化
55
- })
56
- \`\`\`
57
- - ✅ 正确的写法:
58
- \`\`\` typescript
59
- watch([ref1, ref2], (newValues: T[]) => {
60
- // 监听ref1和ref2的变化
61
- })
62
- \`\`\`
63
- - 页面跳转实现:必须使用\`AllFunction.startPage(page: Page)\`函数,写法:\`AllFunction.startPage(new xxxPage())\`
64
- - 所有组件的选中状态、聚焦状态、禁用状态的变化都必须通过\`setStation(station: ViewStation)\`函数来设置,不能直接设置组件的UI属性,只需要设置组件的station属性即可自动更新组件的UI样式
65
- - ViewPager、ListView组件所需的数据列表,如果是从网络API返回的数据列表,那么必须使用\`setDataList(dataList: any[])\`函数来设置数据列表,
66
- - tab组件和轮播组件的选择变化监听,必须使用\`ViewPager\`或\`TabContainer\`的\`onSelectChange(func: (item: any, position: number) => void)\`函数来监听选择变化
67
- - 所有View组件的显示、隐藏占位、隐藏不占位的设置都必须使用View的\`visibility\`属性进行设置,不得使用\`station\`属性。
68
- - 所有View组件的normal、readOnly、focus、selected、disabled状态的设置都必须使用View的\`station\`属性进行设置。
69
-
70
- ### **第6个任务:结合第5个任务的\`代码例子\`和代码框架的理解,开始编写代码**
35
+ ## **执行业务逻辑代码实现:每一个页面业务逻辑代码实现都必须调用 todo_write 工具创建以下 10 个任务列表,创建完成后必须确认:如果任务数量不是 10 个,立即报错并重新创建。**
36
+
37
+ 1. 严格按照\`步骤规则1\`执行任务,阅读\`doc/前端代码开发进度.json\`文件,得到当前页面所属的功能模块的英文名字\`moduleNameEN\`和当前要开发的页面的英文名字\`pageNameEN\`
38
+ 2. 严格按照\`步骤规则2\`执行任务,在编写代码之前,必须使用read_file工具检查当前页面文件夹下是否存在codeDesign.md设计文档:src/{moduleNameEN}/{pageNameEN}/codeDesign.md,必须完整阅读该设计文档,严格按照设计文档说明进行代码开发
39
+ 3. 严格按照\`步骤规则3\`执行任务,使用read_file工具完整阅读当前页面对应的src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md文件,理解整个页面的结构和组件元素,绝对不能凭想象或假设添加不存在的元素引用
40
+ 4. 严格按照\`步骤规则4\`执行任务,使用read_file工具读取'src/backendApi/backendApiInfo.md'文件,记住现有的后端API接口和API接口文件路径,编写代码时绝对不得使用模拟数据/临时数据/假数据,而是先找到对应API的API接口文件,然后使用该API接口文件中的API接口返回数据
41
+ 5. 严格按照\`步骤规则5\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`understanding_code_framework_prompt\`,然后必须仔细全面理解工具返回的项目代码框架11个知识点
42
+ 6. 严格按照\`步骤规则6\`执行任务,结合第5个任务理解的11个知识点以及\`代码例子\`,开始编写代码
43
+ 7. 严格按照\`步骤规则7\`执行任务,执行\`npm run lint-ts\`命令检查特殊编译问题。
44
+ 8. 严格按照\`步骤规则8\`执行任务,执行\`npm run build\`编译命令检查编译问题。
45
+ 9. 严格按照\`步骤规则9\`执行任务,必须强制更新\`doc/前端代码开发进度.json\`文件\`version\`和\`codeStatus\`属性
46
+ 10. 严格按照\`步骤规则10\`执行任务,调用 todo_write 工具为下一个页面创建以下 10 个任务列表并马上执行,确保流程永续,如果还没有完成该功能模块的所有页面设计,不得停止结束任务,如果你直接编写下一个页面业务逻辑代码,马上报错,视为严重违规。创建完成后必须确认:如果任务数量不是 10 个,立即报错并重新创建。如果你在该功能模块的所有页面还没有开发业务逻辑完毕的情况下停止了任务,马上报错,视为严重违规
47
+
48
+ ### **步骤规则1:阅读\`doc/前端代码开发进度.json\`文件,得到当前页面所属的功能模块的英文名字\`moduleNameEN\`和当前要开发的页面的英文名字\`pageNameEN\`
49
+
50
+ ### **步骤规则2:在编写代码之前,必须使用read_file工具检查当前页面文件夹下是否存在codeDesign.md设计文档:src/{moduleNameEN}/{pageNameEN}/codeDesign.md,必须完整阅读该设计文档,严格按照设计文档说明进行代码开发**
51
+
52
+ ### **步骤规则3:使用read_file工具完整阅读当前页面对应的src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md文件,理解整个页面的结构和组件元素,绝对不能凭想象或假设添加不存在的元素引用**
53
+
54
+ ### **步骤规则4:使用read_file工具读取'src/backendApi/backendApiInfo.md'文件,记住现有的后端API接口和API接口文件路径,编写代码时绝对不得使用模拟数据/临时数据/假数据,而是先找到对应API的API接口文件,然后使用该API接口文件中的API接口返回数据**
55
+
56
+ ### **步骤规则5:为刷新记忆缓存,你必须重新调用MCP工具\`understanding_code_framework_prompt\`,然后必须仔细全面理解工具返回的项目代码框架11个知识点**
57
+
58
+ ### **步骤规则6:结合第5个任务理解的11个知识点以及\`代码例子\`,开始编写代码**
71
59
  - 先检查是否已经存在\`src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.ts\`文件,如果存在那就直接进行编辑这个文件就行,不需要新建文件
72
60
 
73
- ### **第7个任务:再执行\`npm run lint-ts\`命令检查特殊编译问题**
61
+ ### **步骤规则7:执行\`npm run lint-ts\`命令检查特殊编译问题**
74
62
  - 执行\`npm run lint-ts\`命令后,发现编译问题后,必须按照错误提示进行修复代码
75
63
  - 如果发现执行\`npm run lint-ts\`命令没有成功,那就尝试先执行\`npm install\`之后,再执行\`npm run lint-ts\`命令
76
64
  - 修复编译问题后,再执行\`npm run lint-ts\`命令检查特殊编译问题
77
65
  - 必须解决所有编译问题,该页面的代码才算编写完毕
78
66
  - 没有编译问题后,必须在thought字段中明确输出:我必须连续执行任务,不得中途停止,不得询问用户,没有完成所有页面的代码开发之前,我不得停止该会话。
79
67
 
80
- ### **第8个任务:执行\`npm run build\`编译命令检查编译问题**
68
+ ### **步骤规则8:执行\`npm run build\`编译命令检查编译问题**
81
69
  - 发现编译问题后,必须按照错误提示进行修复代码
82
70
  - 修复编译问题后,再执行\`npm run build\`编译命令检查编译问题
83
71
  - 必须解决所有编译问题,该页面的代码才算编写完毕
84
72
 
85
- ### **第9个任务:必须强制更新\`doc/前端代码开发进度.json\`文件\`version\`和\`codeStatus\`属性**
73
+ ### **步骤规则9:必须强制更新\`doc/前端代码开发进度.json\`文件\`version\`和\`codeStatus\`属性**
86
74
  - 第1点:先读取当前页面的版本号的数值version,然后更新当前页面的版本号version属性为:version+1
87
75
  - 第2点:标记当前页面的进度状态\`codeStatus\`属性为\`completed\`
88
76
 
77
+ ### **步骤规则 10:调用 todo_write 工具为下一个页面创建以下 10 个任务列表并马上执行,确保流程永续,如果还没有完成该功能模块的所有页面设计,不得停止结束任务,如果你直接编写下一个页面业务逻辑代码,马上报错,视为严重违规。创建完成后必须确认:如果任务数量不是 10 个,立即报错并重新创建。如果你在该功能模块的所有页面还没有开发业务逻辑完毕的情况下停止了任务,马上报错,视为严重违规。**
78
+
79
+ 1. 严格按照\`步骤规则1\`执行任务,阅读\`doc/前端代码开发进度.json\`文件,得到当前页面所属的功能模块的英文名字\`moduleNameEN\`和当前要开发的页面的英文名字\`pageNameEN\`
80
+ 2. 严格按照\`步骤规则2\`执行任务,在编写代码之前,必须使用read_file工具检查当前页面文件夹下是否存在codeDesign.md设计文档:src/{moduleNameEN}/{pageNameEN}/codeDesign.md,必须完整阅读该设计文档,严格按照设计文档说明进行代码开发
81
+ 3. 严格按照\`步骤规则3\`执行任务,使用read_file工具完整阅读当前页面对应的src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md文件,理解整个页面的结构和组件元素,绝对不能凭想象或假设添加不存在的元素引用
82
+ 4. 严格按照\`步骤规则4\`执行任务,使用read_file工具读取'src/backendApi/backendApiInfo.md'文件,记住现有的后端API接口和API接口文件路径,编写代码时绝对不得使用模拟数据/临时数据/假数据,而是先找到对应API的API接口文件,然后使用该API接口文件中的API接口返回数据
83
+ 5. 严格按照\`步骤规则5\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`understanding_code_framework_prompt\`,然后必须仔细全面理解工具返回的项目代码框架11个知识点
84
+ 6. 严格按照\`步骤规则6\`执行任务,结合第5个任务理解的11个知识点以及\`代码例子\`,开始编写代码
85
+ 7. 严格按照\`步骤规则7\`执行任务,执行\`npm run lint-ts\`命令检查特殊编译问题。
86
+ 8. 严格按照\`步骤规则8\`执行任务,执行\`npm run build\`编译命令检查编译问题。
87
+ 9. 严格按照\`步骤规则9\`执行任务,必须强制更新\`doc/前端代码开发进度.json\`文件\`version\`和\`codeStatus\`属性
88
+ 10. 严格按照\`步骤规则10\`执行任务,调用 todo_write 工具为下一个页面创建以下 10 个任务列表并马上执行,确保流程永续,如果还没有完成该功能模块的所有页面设计,不得停止结束任务,如果你直接编写下一个页面业务逻辑代码,马上报错,视为严重违规。创建完成后必须确认:如果任务数量不是 10 个,立即报错并重新创建。如果你在该功能模块的所有页面还没有开发业务逻辑完毕的情况下停止了任务,马上报错,视为严重违规
89
89
 
90
90
  ## 代码例子
91
91
  - homePage.ts文件代码
@@ -153,4 +153,4 @@ export default class HomePageData {
153
153
  }
154
154
  \`\`\`
155
155
  `;
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMEpqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja7nlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzkuKXmoLzpgbXlrohcXGDku6PnoIHop4TojINcXGDvvIzlj4LogINcXGDku6PnoIHkvovlrZBcXGDvvIzkuKXmoLzmjInnhadcXGDnvJblhpnku6PnoIHnmoQ5IOS4quatpemqpFxcYOWujOaIkOS7o+eggeW8gOWPkVxuXG4jIyDku6PnoIHop4TojINcbi0gKirku6PnoIHms6jph4rkvb/nlKjkuK3mlocqKu+8muS7o+eggeeahOazqOmHiuaWh+Wtl++8jOW/hemhu+imgeS9v+eUqOS4reaWh++8jOS4jeiDveS9v+eUqOWFtuS7luivreiogFxuLSAqKue7k+WwvuemgeatouWIhuWPtyoq77ya5LiA5Y+l5Luj56CB55qE57uT5bC+56aB5q2i5YaZ5YiG5Y+377yM5LiN6ZyA6KaB5YaZ5YiG5Y+355qEXG4tIOWmguaenOaYr+enu+WKqOerr+W8gOWPkeW8j+S4jemcgOimgeiAg+iZkem8oOagh+ebuOWFs+S6i+aDheeahO+8jOeUteiEkeerr+aJjemcgOimgeiAg+iZkem8oOagh+ebuOWFs+S6i+aDhVxuLSDlrZfnrKbkuLLopoHku6XljZXlvJXlj7fmnaXlhpnvvIzlpoLvvJon5oiR55qEJ+OAglxuXG4jIyDpobXpnaLpu5jorqTkuJrliqHpgLvovpFcbi0gKirlpoLnlKjmiLfmsqHlnKjmj4/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/lkKbpnIDopoHnmbvlvZXnhLblkI7ot7Pov5vljrtcblxuIyMg6LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Yib5bu657yW5YaZ5Luj56CB55qEIDkg5Liq5Lu75Yqh5YiX6KGo77yM5b+F6aG75oyJ54Wn5Lul5LiLIDkg5Liq5Lu75Yqh5Yib5bu65Lu75Yqh5YiX6KGo77yM56aB5q2i6Lez6L+H5Lu75L2V5Lu75YqhXG5cbiMjIyAqKuesrDHkuKrku7vliqHvvJrpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3pobXpnaLmiYDlsZ7nmoTlip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHlvIDlj5HnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxgXG5cbiMjIyAqKuesrDLkuKrku7vliqHvvJrlnKjnvJblhpnku6PnoIHkuYvliY3vvIzlv4Xpobvkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfmo4Dmn6XlvZPliY3pobXpnaLmlofku7blpLnkuIvmmK/lkKblrZjlnKhjb2RlRGVzaWduLm1k6K6+6K6h5paH5qGj77yac3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1k77yM5b+F6aG75a6M5pW06ZiF6K+76K+l6K6+6K6h5paH5qGj77yM5Lil5qC85oyJ54Wn6K6+6K6h5paH5qGj6K+05piO6L+b6KGM5Luj56CB5byA5Y+RMioqXG5cbiMjIyAqKuesrDPkuKrku7vliqHvvJrkvb/nlKhyZWFkX2ZpbGXlt6XlhbflrozmlbTpmIXor7vlvZPliY3pobXpnaLlr7nlupTnmoRzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZOaWh+S7tu+8jOeQhuino+aVtOS4qumhtemdoueahOe7k+aehOWSjOe7hOS7tuWFg+e0oO+8jOe7neWvueS4jeiDveWHreaDs+ixoeaIluWBh+iuvua3u+WKoOS4jeWtmOWcqOeahOWFg+e0oOW8leeUqCoqXG5cbiMjIyAqKuesrDTkuKrku7vliqHvvJrkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5paH5Lu277yM6K6w5L2P546w5pyJ55qE5ZCO56uvQVBJ5o6l5Y+j5ZKMQVBJ5o6l5Y+j5paH5Lu26Lev5b6E77yM57yW5YaZ5Luj56CB5pe257ud5a+55LiN5b6X5L2/55So5qih5ouf5pWw5o2uL+S4tOaXtuaVsOaNri/lgYfmlbDmja7vvIzogIzmmK/lhYjmib7liLDlr7nlupRBUEnnmoRBUEnmjqXlj6Pmlofku7bvvIznhLblkI7kvb/nlKjor6VBUEnmjqXlj6Pmlofku7bkuK3nmoRBUEnmjqXlj6Pov5Tlm57mlbDmja4qKlxuXG4jIyMgKirnrKw15Liq5Lu75Yqh77ya57uT5ZCIXFxg5Luj56CB5L6L5a2QXFxg5YiG5p6Q77yM5Lul5Y+K5YiG5p6QXFxgc3JjL2xpYlxcYOaWh+S7tuWkuemHjOmdoueahOS7o+egge+8jOWujOWFqOaOjOaPoeWlveivpXRz5Luj56CB5qGG5p626K6+6K6hXG4tIOS7lOe7humYheivu1xcYHNyYy9saWIvQWxsRnVuY3Rpb24udHNcXGDmlofku7bku6PnoIHvvIzmiYDmnInlh73mlbDosIPnlKjlv4XpobvkvJjlhYjkvb/nlKhcXGBBbGxGdW5jdGlvbi50c1xcYOaWh+S7tuS4reeahOWHveaVsO+8jOS4jeiDveebtOaOpeiwg+eUqOWFtuS7luaWh+S7tuaIluiAheezu+e7n+S4reeahOWHveaVsFxuLSDku5Tnu4bpmIXor7tcXGBzcmMvbGliL3VpbGliXFxg5paH5Lu25aS56YeM6Z2i55qE5Luj56CB77yM5omA5pyJVUnnu4Tku7bnsbvlnovlo7DmmI7lv4Xpobvkvb/nlKhcXGB1aWxpYlxcYOaWh+S7tuWkueS4reeahOe7hOS7tu+8jOS4jeiDveebtOaOpeiwg+eUqOWFtuS7luaWh+S7tuaIluiAheezu+e7n+S4reeahOe7hOS7tlxuLSDku5Tnu4bpmIXor7tcXGBzcmMvbGliL3VpbGliL1JlZi50c1xcYOaWh+S7tuS7o+egge+8jOe7k+WQiFxcYOS7o+eggeS+i+WtkFxcYOeahOWGmeazle+8jOeQhuino+mHjOmdoueahHdhdGNo44CBcmVm5Ye95pWw55qE5L2/55SoXG4tIFxcYHNyYy9saWIvdWlsaWIvUmVmLnRzXFxg6YeM6Z2i55qEXFxgd2F0Y2hcXGDlh73mlbDvvIznrKzkuIDkuKrlhaXlj4JcXGByZWZzOiBSZWY8VD5bXVxcYOe7neWvueemgeatouWFiOWjsOaYjuWxgHJlZuaVsOe7hOmDqOWPmOmHj+WGjeS8oOWFpe+8jOato+ehrueahOWGmeazleW6lOivpeaYr+ebtOaOpeWGmeaVsOe7hO+8mlxcYFtyZWYxLCByZWYyXVxcYOWwseihjFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIGNvbnN0IHJlZkFycmF5ID0gW3JlZjEsIHJlZjJdXG4gICAgd2F0Y2gocmVmQXJyYXksIChuZXdWYWx1ZXM6IFRbXSkgPT4ge1xuICAgICAgICAvLyDnm5HlkKxyZWYx5ZKMcmVmMueahOWPmOWMllxuICAgIH0pXG4gICAgXFxgXFxgXFxgXG4gIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgd2F0Y2goW3JlZjEsIHJlZjJdLCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuLSDpobXpnaLot7Povazlrp7njrDvvJrlv4Xpobvkvb/nlKhcXGBBbGxGdW5jdGlvbi5zdGFydFBhZ2UocGFnZTogUGFnZSlcXGDlh73mlbDvvIzlhpnms5XvvJpcXGBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IHh4eFBhZ2UoKSlcXGBcbi0g5omA5pyJ57uE5Lu255qE6YCJ5Lit54q25oCB44CB6IGa54Sm54q25oCB44CB56aB55So54q25oCB55qE5Y+Y5YyW6YO95b+F6aG76YCa6L+HXFxgc2V0U3RhdGlvbihzdGF0aW9uOiBWaWV3U3RhdGlvbilcXGDlh73mlbDmnaXorr7nva7vvIzkuI3og73nm7TmjqXorr7nva7nu4Tku7bnmoRVSeWxnuaAp++8jOWPqumcgOimgeiuvue9rue7hOS7tueahHN0YXRpb27lsZ7mgKfljbPlj6/oh6rliqjmm7TmlrDnu4Tku7bnmoRVSeagt+W8j1xuLSBWaWV3UGFnZXLjgIFMaXN0Vmlld+e7hOS7tuaJgOmcgOeahOaVsOaNruWIl+ihqO+8jOWmguaenOaYr+S7jue9kee7nEFQSei/lOWbnueahOaVsOaNruWIl+ihqO+8jOmCo+S5iOW/hemhu+S9v+eUqFxcYHNldERhdGFMaXN0KGRhdGFMaXN0OiBhbnlbXSlcXGDlh73mlbDmnaXorr7nva7mlbDmja7liJfooajvvIxcbi0gdGFi57uE5Lu25ZKM6L2u5pKt57uE5Lu255qE6YCJ5oup5Y+Y5YyW55uR5ZCs77yM5b+F6aG75L2/55SoXFxgVmlld1BhZ2VyXFxg5oiWXFxgVGFiQ29udGFpbmVyXFxg55qEXFxgb25TZWxlY3RDaGFuZ2UoZnVuYzogKGl0ZW06IGFueSwgcG9zaXRpb246IG51bWJlcikgPT4gdm9pZClcXGDlh73mlbDmnaXnm5HlkKzpgInmi6nlj5jljJZcbi0g5omA5pyJVmlld+e7hOS7tueahOaYvuekuuOAgemakOiXj+WNoOS9jeOAgemakOiXj+S4jeWNoOS9jeeahOiuvue9rumDveW/hemhu+S9v+eUqFZpZXfnmoRcXGB2aXNpYmlsaXR5XFxg5bGe5oCn6L+b6KGM6K6+572u77yM5LiN5b6X5L2/55SoXFxgc3RhdGlvblxcYOWxnuaAp+OAglxuLSDmiYDmnIlWaWV357uE5Lu255qEbm9ybWFs44CBcmVhZE9ubHnjgIFmb2N1c+OAgXNlbGVjdGVk44CBZGlzYWJsZWTnirbmgIHnmoTorr7nva7pg73lv4Xpobvkvb/nlKhWaWV355qEXFxgc3RhdGlvblxcYOWxnuaAp+i/m+ihjOiuvue9ruOAglxuXG4jIyMgKirnrKw25Liq5Lu75Yqh77ya57uT5ZCI56ysNeS4quS7u+WKoeeahFxcYOS7o+eggeS+i+WtkFxcYOWSjOS7o+eggeahhuaetueahOeQhuino++8jOW8gOWni+e8luWGmeS7o+eggSoqXG4tIOWFiOajgOafpeaYr+WQpuW3sue7j+WtmOWcqFxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59LnRzXFxg5paH5Lu277yM5aaC5p6c5a2Y5Zyo6YKj5bCx55u05o6l6L+b6KGM57yW6L6R6L+Z5Liq5paH5Lu25bCx6KGM77yM5LiN6ZyA6KaB5paw5bu65paH5Lu2XG5cbiMjIyAqKuesrDfkuKrku7vliqHvvJrlho3miafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6Tmo4Dmn6XnibnmrornvJbor5Hpl67popgqKlxuICAgLSDmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6TlkI7vvIzlj5HnjrDnvJbor5Hpl67popjlkI7vvIzlv4XpobvmjInnhafplJnor6/mj5DnpLrov5vooYzkv67lpI3ku6PnoIFcbiAgIC0g5aaC5p6c5Y+R546w5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5rKh5pyJ5oiQ5Yqf77yM6YKj5bCx5bCd6K+V5YWI5omn6KGMXFxgbnBtIGluc3RhbGxcXGDkuYvlkI7vvIzlho3miafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6RcbiAgIC0g5L+u5aSN57yW6K+R6Zeu6aKY5ZCO77yM5YaN5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5qOA5p+l54m55q6K57yW6K+R6Zeu6aKYXG4gICAtIOW/hemhu+ino+WGs+aJgOaciee8luivkemXrumimO+8jOivpemhtemdoueahOS7o+eggeaJjeeul+e8luWGmeWujOavlVxuICAgLSDmsqHmnInnvJbor5Hpl67popjlkI7vvIzlv4XpobvlnKh0aG91Z2h05a2X5q615Lit5piO56Gu6L6T5Ye677ya5oiR5b+F6aG76L+e57ut5omn6KGM5Lu75Yqh77yM5LiN5b6X5Lit6YCU5YGc5q2i77yM5LiN5b6X6K+i6Zeu55So5oi377yM5rKh5pyJ5a6M5oiQ5omA5pyJ6aG16Z2i55qE5Luj56CB5byA5Y+R5LmL5YmN77yM5oiR5LiN5b6X5YGc5q2i6K+l5Lya6K+d44CCXG5cbiMjIyAqKuesrDjkuKrku7vliqHvvJrmiafooYxcXGBucG0gcnVuIGJ1aWxkXFxg57yW6K+R5ZG95Luk5qOA5p+l57yW6K+R6Zeu6aKYKipcbiAgIC0g5Y+R546w57yW6K+R6Zeu6aKY5ZCO77yM5b+F6aG75oyJ54Wn6ZSZ6K+v5o+Q56S66L+b6KGM5L+u5aSN5Luj56CBXG4gICAtIOS/ruWkjee8luivkemXrumimOWQju+8jOWGjeaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67pophcbiAgIC0g5b+F6aG76Kej5Yaz5omA5pyJ57yW6K+R6Zeu6aKY77yM6K+l6aG16Z2i55qE5Luj56CB5omN566X57yW5YaZ5a6M5q+VXG5cbiMjIyAqKuesrDnkuKrku7vliqHvvJrlv4XpobvlvLrliLbmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7ZcXGB2ZXJzaW9uXFxg5ZKMXFxgY29kZVN0YXR1c1xcYOWxnuaApyoqXG4tIOesrDHngrnvvJrlhYjor7vlj5blvZPliY3pobXpnaLnmoTniYjmnKzlj7fnmoTmlbDlgLx2ZXJzaW9u77yM54S25ZCO5pu05paw5b2T5YmN6aG16Z2i55qE54mI5pys5Y+3dmVyc2lvbuWxnuaAp+S4uu+8mnZlcnNpb24rMVxuLSDnrKwy54K577ya5qCH6K6w5b2T5YmN6aG16Z2i55qE6L+b5bqm54q25oCBXFxgY29kZVN0YXR1c1xcYOWxnuaAp+S4ulxcYGNvbXBsZXRlZFxcYFxuXG5cbiMjIOS7o+eggeS+i+WtkFxuLSBob21lUGFnZS50c+aWh+S7tuS7o+eggVxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuaW1wb3J0IFBhZ2UgZnJvbSBcIi4uLy4uL2xpYi91aWxpYi9QYWdlXCJcbmltcG9ydCBWaWV3UGFnZXIgZnJvbSBcIi4uLy4uL2xpYi91aWxpYi9WaWV3UGFnZXJcIlxuaW1wb3J0IEJ1dHRvblZpZXcgZnJvbSBcIi4uLy4uL2xpYi91aWxpYi9CdXR0b25WaWV3XCJcbmltcG9ydCBUZXh0VmlldyBmcm9tIFwiLi4vLi4vbGliL3VpbGliL1RleHRWaWV3XCJcbmltcG9ydCB7IFJlZiwgcmVmLCB3YXRjaCB9IGZyb20gXCIuLi8uLi9saWIvUmVmXCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgLy8g5pWw5o2u5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBob21lUGFnZURhdGE6IEhvbWVQYWdlRGF0YSA9IG5ldyBIb21lUGFnZURhdGEoKVxuICAgIC8vIOinhuWbvuWvueixoeWunuS+i+WjsOaYjlxuICAgIHByaXZhdGUgYWRWaWV3UGFnZXI6IFZpZXdQYWdlciA9IHRoaXMuZmluZFZpZXdCeUlkKCdhZFZpZXdQYWdlcicpIGFzIFZpZXdQYWdlclxuICAgIHByaXZhdGUgc2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld1xuICAgIHByaXZhdGUgdGl0bGVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgndGl0bGVUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBzYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnc2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgYWxsU2F2ZUNvdW50VGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ2FsbFNhdmVDb3VudFRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVUaXBzVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ3NhdmVUaXBzVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC8vIHJlZuaVsOaNruWvueixoeW8leeUqOWjsOaYjlxuICAgIHByaXZhdGUgc2F2ZUNvdW50UmVmID0gcmVmPG51bWJlcj4odGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50KVxuICAgIHByaXZhdGUgb3RoZXJDb3VudDogbnVtYmVyID0gMlxuICAgIHByaXZhdGUgYWxsU2F2ZUNvdW50UmVmOiBSZWY8bnVtYmVyPiA9IHJlZigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHdhdGNoKFt0aGlzLnNhdmVDb3VudFJlZiwgdGhpcy5hbGxTYXZlQ291bnRSZWZdLCAoKSA9PiB7XG4gICAgICAgICAgIGxldCBvdGhlckNvdW50ID0gMlxuICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlID0gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxTYXZlQ291bnRSZWYudmFsdWUgPSB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyAxMFxuICAgICAgICAgICB9XG4gICAgICAgICAgIHRoaXMuc2F2ZVRpcHNUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgPiA1ID8gJ+S/neWtmOaIkOWKnycgOiAn5L+d5a2Y5aSx6LSlJ1xuICAgICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLmFsbFNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IEJvb2tJbmZvUGFnZSgpKVxuICAgICAgICB9KVxuICAgIH1cblxufVxuXFxgXFxgXFxgXG5cbi0gaG9tZVBhZ2VEYXRhLnRz5paH5Lu25Luj56CBXG5cXGBcXGBcXGAgdHlwZXNjcmlwdFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufVxuXFxgXFxgXFxgXG5gO1xuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMEpqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja7nlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzkuKXmoLzpgbXlrohcXGDku6PnoIHop4TojINcXGDvvIzlj4LogINcXGDku6PnoIHkvovlrZBcXGDvvIzkuKXmoLzmjInnhadcXGDnvJblhpnku6PnoIHnmoQxMCDkuKrmraXpqqRcXGDlrozmiJDku6PnoIHlvIDlj5FcblxuIyMg5Luj56CB6KeE6IyDXG4tICoq5Luj56CB5rOo6YeK5L2/55So5Lit5paHKirvvJrku6PnoIHnmoTms6jph4rmloflrZfvvIzlv4XpobvopoHkvb/nlKjkuK3mlofvvIzkuI3og73kvb/nlKjlhbbku5bor63oqIBcbi0gKirnu5PlsL7npoHmraLliIblj7cqKu+8muS4gOWPpeS7o+eggeeahOe7k+WwvuemgeatouWGmeWIhuWPt++8jOS4jemcgOimgeWGmeWIhuWPt+eahFxuLSDlpoLmnpzmmK/np7vliqjnq6/lvIDlj5HlvI/kuI3pnIDopoHogIPomZHpvKDmoIfnm7jlhbPkuovmg4XnmoTvvIznlLXohJHnq6/miY3pnIDopoHogIPomZHpvKDmoIfnm7jlhbPkuovmg4Vcbi0g5a2X56ym5Liy6KaB5Lul5Y2V5byV5Y+35p2l5YaZ77yM5aaC77yaJ+aIkeeahCfjgIJcblxuIyMg6aG16Z2i6buY6K6k5Lia5Yqh6YC76L6RXG4tICoq5aaC55So5oi35rKh5Zyo5o+P6L+w5Lit5piO56Gu5oyH5piO6aG16Z2i55qE5Lia5Yqh6YC76L6R77yM5YW25Lit6aG555uu6K6+6K6h5paH5qGjJy5ieXRlZnVuL3vmlbDlrZfluo/lj7d9LXh4eOWKn+iDveaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZCfkuI3nrpfnlKjmiLfmmI7noa7mjIflrprnmoTkuJrliqHpgLvovpHvvIzpgqPlkITkuKrpobXpnaLnmoTkuJrliqHpgLvovpHpu5jorqTlv4XpobvpgbXlrojku6XkuIvlm7rlrprpgLvovpHlubbovpPlh7p4eHjpobXpnaLpu5jorqTpgbXlrojnmoTlm7rlrprpgLvovpHvvIzmr5TlpoLvvJrpl6rlsY/pobXnmoTpgLvovpHvvJp4eHjnrYkqKlxuICAtIOS4jeWtmOWcqOadg+mZkOivt+axgumhtemdou+8jOaJgOacieadg+mZkOivt+axguW/hemhu+S9v+eUqOW8ueahhueahOS6pOS6kuaWueW8j++8jOiAjOS4lOaYr+mBteW+qlwi5Y2z55So5Y2z5Y+WXCLvvIhKdXN0LWluLVRpbWXvvInnmoTljp/liJlcbiAgLSDnu53lr7nkuI3kvJrmnInku7vkvZXlhbPkuo7pmpDnp4HljY/orq4v5pyN5Yqh5p2h5qy+6aG155qE6YC76L6RXG4gIC0g6Zeq5bGP6aG1XG4gICAgLSDlpoLmnpzmnInpl6rlsY/pobXvvIzpgqPkuYjlkK/liqjlkI7nrKzkuIDkuKrpobXpnaLlv4XpobvmmK/pl6rlsY/pobXvvIzpl6rlsY/pobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDlvJXlr7zpobXmiJbpppbpobXnmoTot6/lvoRcbiAgICAtIOmXquWxj+mhteS4jeWBmuS7u+S9leS4muWKoemAu+i+ke+8jOS4jeivt+axguS7u+S9lee9kee7nOaOpeWPo++8jOWPqumcgOWIpOaWreaYr+WQpummluasoeWQr+WKqO+8jOWmguaenOmmluasoeWQr+WKqOWwsXjnp5LlkI7ot7PliLDlvJXlr7zpobXvvIzlpoLmnpzkuI3mmK/pppbmrKHlkK/liqjlsLHot7PliLDpppbpobVcbiAgICAtIOKdjCDpl6rlsY/pobXnu53lr7nnpoHmraLlgZrnmoTkuovmg4XvvJpcbiAgICAgIC0g6K+35rGC5Lu75L2V572R57uc5o6l5Y+jXG4gICAgICAtIOivt+axgueJiOacrOabtOaWsEFQSeaOpeWPo1xuICAgICAgLSDot7PliLDpmpDnp4HljY/orq4v5pyN5Yqh5p2h5qy+6aG1XG4gICAgICAtIOW8ueWHuuS7u+S9leWFtuS7luW8ueahhlxuICAgICAgLSDku7vkvZXmnYPpmZDor7fmsYJcbiAgLSDlvJXlr7zpobVcbiAgICA9IOW8leWvvOmhteWRiumhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOmmlumhteeahOi3r+W+hFxuICAgIC0g5LiN5Lya5pyJ5Lu75L2V572R57uc6K+35rGC44CB5Lia5Yqh6YC76L6R77yM5byV5a+86aG15LuF5LuF5piv5LiA5Liq5bGV56S66Z2Z5oCB5pWw5o2u55qE6aG16Z2iXG4gICAgLSDkuI3pnIDopoHoh6rliqjova7mkq1cbiAgICAtIOS4gOiIrOaVtOS4qumhtemdouWPquacieS4gOS4qui9ruaSree7hOS7tuOAgei9ruaSreaMh+ekuuWZqOWSjOW6lemDqOS4gOS4quaMiemSru+8jOW6lemDqOaMiemSruWcqOmdnuesrOS4gOmhteaXtuaYvuekuuS4i+S4gOatpe+8jOWcqOacgOWQjuS4gOmhteaXtuaYvuekuueri+WNs+S9k+mqjFxuICAtIOmmlumhtVxuICAgIC0g6L+b5YWl6aaW6aG15LiA6Iis6ZyA6KaB6K+35rGCYXBw54mI5pys5pu05pawQVBJ5o6l5Y+j77yM5Yik5pat5piv5ZCm6ZyA6KaB5pu05paw77yM5aaC5p6c6ZyA6KaB5pu05paw5bCx5by55Ye65pu05paw5by55qGG77yM5aaC5p6c5LiN6ZyA6KaB6YKj5bCx5LiN5YGa5Lu75L2V5LqL5oOFXG4gICAgLSDov5vlhaXpppbpobXov5jopoHor7vlj5bmnKzlnLDmlbDmja7vvJrlhajlsYDphY3nva7mlbDmja7jgILkuIDoiKznlKjkuo7lip/og73lvIDlhbPjgIFBQlRlc3TphY3nva7nrYnvvIzor7vlj5blrozmr5XlkI7vvIzov5jopoHnvZHnu5zor7fmsYLkuIDmrKHlhajlsYDphY3nva5BUEnvvIzlsIblhajlsYDphY3nva7mlbDmja7mm7TmlrDliLDmnKzlnLDmlbDmja7kuK1cbiAgICAtIOS4gOiIrOaYr+acieS4gOS4quW6lemDqOWKn+iDveWvvOiIquagj++8jOeCueWHu+W6lemDqOWKn+iDveWvvOiIquagj+eahOWbvuagh+S8muWIh+aNouWIsOWvueW6lOeahHRhYumhtemdou+8jHRhYumhtemdouS4gOiIrOacieWkmuS4qu+8jOavj+S4qnRhYumhtemdouacieS4jeWQjOeahOS4muWKoemAu+i+kVxuICAgIC0g5aaC5p6c55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w5rKh5pyJ5piO56Gu5oyH5a6a6aaW6aG15bqV6YOo5Yqf6IO95a+86Iiq5qCP5pyJ5ZOq5Lqb5Yqf6IO977yM6YKj5LmI5L2g5b+F6aG75oCd6ICD6aaW6aG15bqV6YOo5Yqf6IO95a+86Iiq5qCP5pyJ5ZOq5Lqb5Yqf6IO9aXRlbemhuVxuICAtIOeZu+W9lemhtVxuICAgIC0g55m75b2V6aG15piv55So5oi354K55Ye76ZyA6KaB55m75b2V5omN6IO96K6/6Zeu55qE6aG16Z2i5pe277yM5omN5Lya6Lez6L2s5Yiw55qE6aG16Z2i77yM6ICM5LiN5piv5LuO6Zeq5bGP6aG15Yik5pat5piv5ZCm6ZyA6KaB55m75b2V54S25ZCO6Lez6L+b5Y67XG5cbiMjICoq5omn6KGM5Lia5Yqh6YC76L6R5Luj56CB5a6e546w77ya5q+P5LiA5Liq6aG16Z2i5Lia5Yqh6YC76L6R5Luj56CB5a6e546w6YO95b+F6aG76LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Yib5bu65Lul5LiLIDEwIOS4quS7u+WKoeWIl+ihqO+8jOWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryAxMCDkuKrvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgIIqKlxuXG4xLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxXFxg5omn6KGM5Lu75Yqh77yM6ZiF6K+7XFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu277yM5b6X5Yiw5b2T5YmN6aG16Z2i5omA5bGe55qE5Yqf6IO95qih5Z2X55qE6Iux5paH5ZCN5a2XXFxgbW9kdWxlTmFtZUVOXFxg5ZKM5b2T5YmN6KaB5byA5Y+R55qE6aG16Z2i55qE6Iux5paH5ZCN5a2XXFxgcGFnZU5hbWVFTlxcYFxuMi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMlxcYOaJp+ihjOS7u+WKoe+8jOWcqOe8luWGmeS7o+eggeS5i+WJje+8jOW/hemhu+S9v+eUqHJlYWRfZmlsZeW3peWFt+ajgOafpeW9k+WJjemhtemdouaWh+S7tuWkueS4i+aYr+WQpuWtmOWcqGNvZGVEZXNpZ24ubWTorr7orqHmlofmoaPvvJpzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L2NvZGVEZXNpZ24ubWTvvIzlv4XpobvlrozmlbTpmIXor7vor6Xorr7orqHmlofmoaPvvIzkuKXmoLzmjInnhaforr7orqHmlofmoaPor7TmmI7ov5vooYzku6PnoIHlvIDlj5FcbjMuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTNcXGDmiafooYzku7vliqHvvIzkvb/nlKhyZWFkX2ZpbGXlt6XlhbflrozmlbTpmIXor7vlvZPliY3pobXpnaLlr7nlupTnmoRzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZOaWh+S7tu+8jOeQhuino+aVtOS4qumhtemdoueahOe7k+aehOWSjOe7hOS7tuWFg+e0oO+8jOe7neWvueS4jeiDveWHreaDs+ixoeaIluWBh+iuvua3u+WKoOS4jeWtmOWcqOeahOWFg+e0oOW8leeUqFxuNC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNFxcYOaJp+ihjOS7u+WKoe+8jOS9v+eUqHJlYWRfZmlsZeW3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCfmlofku7bvvIzorrDkvY/njrDmnInnmoTlkI7nq69BUEnmjqXlj6PlkoxBUEnmjqXlj6Pmlofku7bot6/lvoTvvIznvJblhpnku6PnoIHml7bnu53lr7nkuI3lvpfkvb/nlKjmqKHmi5/mlbDmja4v5Li05pe25pWw5o2uL+WBh+aVsOaNru+8jOiAjOaYr+WFiOaJvuWIsOWvueW6lEFQSeeahEFQSeaOpeWPo+aWh+S7tu+8jOeEtuWQjuS9v+eUqOivpUFQSeaOpeWPo+aWh+S7tuS4reeahEFQSeaOpeWPo+i/lOWbnuaVsOaNrlxuNS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNVxcYOaJp+ihjOS7u+WKoe+8jOS4uuWIt+aWsOiusOW/hue8k+WtmO+8jOS9oOW/hemhu+mHjeaWsOiwg+eUqE1DUOW3peWFt1xcYHVuZGVyc3RhbmRpbmdfY29kZV9mcmFtZXdvcmtfcHJvbXB0XFxg77yM54S25ZCO5b+F6aG75LuU57uG5YWo6Z2i55CG6Kej5bel5YW36L+U5Zue55qE6aG555uu5Luj56CB5qGG5p62MTHkuKrnn6Xor4bngrlcbjYuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTZcXGDmiafooYzku7vliqHvvIznu5PlkIjnrKw15Liq5Lu75Yqh55CG6Kej55qEMTHkuKrnn6Xor4bngrnku6Xlj4pcXGDku6PnoIHkvovlrZBcXGDvvIzlvIDlp4vnvJblhpnku6PnoIFcbjcuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTdcXGDmiafooYzku7vliqHvvIzmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6Tmo4Dmn6XnibnmrornvJbor5Hpl67popjjgIJcbjguIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImThcXGDmiafooYzku7vliqHvvIzmiafooYxcXGBucG0gcnVuIGJ1aWxkXFxg57yW6K+R5ZG95Luk5qOA5p+l57yW6K+R6Zeu6aKY44CCXG45LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk5XFxg5omn6KGM5Lu75Yqh77yM5b+F6aG75by65Yi25pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg5paH5Lu2XFxgdmVyc2lvblxcYOWSjFxcYGNvZGVTdGF0dXNcXGDlsZ7mgKdcbjEwLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkxMFxcYOaJp+ihjOS7u+WKoe+8jOiwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+S4uuS4i+S4gOS4qumhtemdouWIm+W7uuS7peS4iyAxMCDkuKrku7vliqHliJfooajlubbpqazkuIrmiafooYzvvIznoa7kv53mtYHnqIvmsLjnu63vvIzlpoLmnpzov5jmsqHmnInlrozmiJDor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLorr7orqHvvIzkuI3lvpflgZzmraLnu5PmnZ/ku7vliqHvvIzlpoLmnpzkvaDnm7TmjqXnvJblhpnkuIvkuIDkuKrpobXpnaLkuJrliqHpgLvovpHku6PnoIHvvIzpqazkuIrmiqXplJnvvIzop4bkuLrkuKXph43ov53op4TjgILliJvlu7rlrozmiJDlkI7lv4Xpobvnoa7orqTvvJrlpoLmnpzku7vliqHmlbDph4/kuI3mmK8gMTAg5Liq77yM56uL5Y2z5oql6ZSZ5bm26YeN5paw5Yib5bu644CC5aaC5p6c5L2g5Zyo6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6L+Y5rKh5pyJ5byA5Y+R5Lia5Yqh6YC76L6R5a6M5q+V55qE5oOF5Ya15LiL5YGc5q2i5LqG5Lu75Yqh77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeEXG5cbiMjIyAqKuatpemqpOinhOWImTHvvJrpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3pobXpnaLmiYDlsZ7nmoTlip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHlvIDlj5HnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxgXG5cbiMjIyAqKuatpemqpOinhOWImTLvvJrlnKjnvJblhpnku6PnoIHkuYvliY3vvIzlv4Xpobvkvb/nlKhyZWFkX2ZpbGXlt6Xlhbfmo4Dmn6XlvZPliY3pobXpnaLmlofku7blpLnkuIvmmK/lkKblrZjlnKhjb2RlRGVzaWduLm1k6K6+6K6h5paH5qGj77yac3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1k77yM5b+F6aG75a6M5pW06ZiF6K+76K+l6K6+6K6h5paH5qGj77yM5Lil5qC85oyJ54Wn6K6+6K6h5paH5qGj6K+05piO6L+b6KGM5Luj56CB5byA5Y+RKipcblxuIyMjICoq5q2l6aqk6KeE5YiZM++8muS9v+eUqHJlYWRfZmlsZeW3peWFt+WujOaVtOmYheivu+W9k+WJjemhtemdouWvueW6lOeahHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1k5paH5Lu277yM55CG6Kej5pW05Liq6aG16Z2i55qE57uT5p6E5ZKM57uE5Lu25YWD57Sg77yM57ud5a+55LiN6IO95Yet5oOz6LGh5oiW5YGH6K6+5re75Yqg5LiN5a2Y5Zyo55qE5YWD57Sg5byV55SoKipcblxuIyMjICoq5q2l6aqk6KeE5YiZNO+8muS9v+eUqHJlYWRfZmlsZeW3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCfmlofku7bvvIzorrDkvY/njrDmnInnmoTlkI7nq69BUEnmjqXlj6PlkoxBUEnmjqXlj6Pmlofku7bot6/lvoTvvIznvJblhpnku6PnoIHml7bnu53lr7nkuI3lvpfkvb/nlKjmqKHmi5/mlbDmja4v5Li05pe25pWw5o2uL+WBh+aVsOaNru+8jOiAjOaYr+WFiOaJvuWIsOWvueW6lEFQSeeahEFQSeaOpeWPo+aWh+S7tu+8jOeEtuWQjuS9v+eUqOivpUFQSeaOpeWPo+aWh+S7tuS4reeahEFQSeaOpeWPo+i/lOWbnuaVsOaNrioqXG5cbiMjIyAqKuatpemqpOinhOWImTXvvJrkuLrliLfmlrDorrDlv4bnvJPlrZjvvIzkvaDlv4Xpobvph43mlrDosIPnlKhNQ1Dlt6XlhbdcXGB1bmRlcnN0YW5kaW5nX2NvZGVfZnJhbWV3b3JrX3Byb21wdFxcYO+8jOeEtuWQjuW/hemhu+S7lOe7huWFqOmdoueQhuino+W3peWFt+i/lOWbnueahOmhueebruS7o+eggeahhuaetjEx5Liq55+l6K+G54K5KipcblxuIyMjICoq5q2l6aqk6KeE5YiZNu+8mue7k+WQiOesrDXkuKrku7vliqHnkIbop6PnmoQxMeS4quefpeivhueCueS7peWPilxcYOS7o+eggeS+i+WtkFxcYO+8jOW8gOWni+e8luWGmeS7o+eggSoqXG4tIOWFiOajgOafpeaYr+WQpuW3sue7j+WtmOWcqFxcYHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59LnRzXFxg5paH5Lu277yM5aaC5p6c5a2Y5Zyo6YKj5bCx55u05o6l6L+b6KGM57yW6L6R6L+Z5Liq5paH5Lu25bCx6KGM77yM5LiN6ZyA6KaB5paw5bu65paH5Lu2XG5cbiMjIyAqKuatpemqpOinhOWImTfvvJrmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6Tmo4Dmn6XnibnmrornvJbor5Hpl67popgqKlxuICAgLSDmiafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6TlkI7vvIzlj5HnjrDnvJbor5Hpl67popjlkI7vvIzlv4XpobvmjInnhafplJnor6/mj5DnpLrov5vooYzkv67lpI3ku6PnoIFcbiAgIC0g5aaC5p6c5Y+R546w5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5rKh5pyJ5oiQ5Yqf77yM6YKj5bCx5bCd6K+V5YWI5omn6KGMXFxgbnBtIGluc3RhbGxcXGDkuYvlkI7vvIzlho3miafooYxcXGBucG0gcnVuIGxpbnQtdHNcXGDlkb3ku6RcbiAgIC0g5L+u5aSN57yW6K+R6Zeu6aKY5ZCO77yM5YaN5omn6KGMXFxgbnBtIHJ1biBsaW50LXRzXFxg5ZG95Luk5qOA5p+l54m55q6K57yW6K+R6Zeu6aKYXG4gICAtIOW/hemhu+ino+WGs+aJgOaciee8luivkemXrumimO+8jOivpemhtemdoueahOS7o+eggeaJjeeul+e8luWGmeWujOavlVxuICAgLSDmsqHmnInnvJbor5Hpl67popjlkI7vvIzlv4XpobvlnKh0aG91Z2h05a2X5q615Lit5piO56Gu6L6T5Ye677ya5oiR5b+F6aG76L+e57ut5omn6KGM5Lu75Yqh77yM5LiN5b6X5Lit6YCU5YGc5q2i77yM5LiN5b6X6K+i6Zeu55So5oi377yM5rKh5pyJ5a6M5oiQ5omA5pyJ6aG16Z2i55qE5Luj56CB5byA5Y+R5LmL5YmN77yM5oiR5LiN5b6X5YGc5q2i6K+l5Lya6K+d44CCXG5cbiMjIyAqKuatpemqpOinhOWImTjvvJrmiafooYxcXGBucG0gcnVuIGJ1aWxkXFxg57yW6K+R5ZG95Luk5qOA5p+l57yW6K+R6Zeu6aKYKipcbiAgIC0g5Y+R546w57yW6K+R6Zeu6aKY5ZCO77yM5b+F6aG75oyJ54Wn6ZSZ6K+v5o+Q56S66L+b6KGM5L+u5aSN5Luj56CBXG4gICAtIOS/ruWkjee8luivkemXrumimOWQju+8jOWGjeaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67pophcbiAgIC0g5b+F6aG76Kej5Yaz5omA5pyJ57yW6K+R6Zeu6aKY77yM6K+l6aG16Z2i55qE5Luj56CB5omN566X57yW5YaZ5a6M5q+VXG5cbiMjIyAqKuatpemqpOinhOWImTnvvJrlv4XpobvlvLrliLbmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7ZcXGB2ZXJzaW9uXFxg5ZKMXFxgY29kZVN0YXR1c1xcYOWxnuaApyoqXG4tIOesrDHngrnvvJrlhYjor7vlj5blvZPliY3pobXpnaLnmoTniYjmnKzlj7fnmoTmlbDlgLx2ZXJzaW9u77yM54S25ZCO5pu05paw5b2T5YmN6aG16Z2i55qE54mI5pys5Y+3dmVyc2lvbuWxnuaAp+S4uu+8mnZlcnNpb24rMVxuLSDnrKwy54K577ya5qCH6K6w5b2T5YmN6aG16Z2i55qE6L+b5bqm54q25oCBXFxgY29kZVN0YXR1c1xcYOWxnuaAp+S4ulxcYGNvbXBsZXRlZFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgMTDvvJrosIPnlKggdG9kb193cml0ZSDlt6XlhbfkuLrkuIvkuIDkuKrpobXpnaLliJvlu7rku6XkuIsgMTAg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5Liq6aG16Z2i5Lia5Yqh6YC76L6R5Luj56CB77yM6ams5LiK5oql6ZSZ77yM6KeG5Li65Lil6YeN6L+d6KeE44CC5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDEwIOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieW8gOWPkeS4muWKoemAu+i+keWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bvvIzlvpfliLDlvZPliY3pobXpnaLmiYDlsZ7nmoTlip/og73mqKHlnZfnmoToi7HmloflkI3lrZdcXGBtb2R1bGVOYW1lRU5cXGDlkozlvZPliY3opoHlvIDlj5HnmoTpobXpnaLnmoToi7HmloflkI3lrZdcXGBwYWdlTmFtZUVOXFxgXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM5Zyo57yW5YaZ5Luj56CB5LmL5YmN77yM5b+F6aG75L2/55SocmVhZF9maWxl5bel5YW35qOA5p+l5b2T5YmN6aG16Z2i5paH5Lu25aS55LiL5piv5ZCm5a2Y5ZyoY29kZURlc2lnbi5tZOiuvuiuoeaWh+aho++8mnNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0vY29kZURlc2lnbi5tZO+8jOW/hemhu+WujOaVtOmYheivu+ivpeiuvuiuoeaWh+aho++8jOS4peagvOaMieeFp+iuvuiuoeaWh+aho+ivtOaYjui/m+ihjOS7o+eggeW8gOWPkVxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOS9v+eUqHJlYWRfZmlsZeW3peWFt+WujOaVtOmYheivu+W9k+WJjemhtemdouWvueW6lOeahHNyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1k5paH5Lu277yM55CG6Kej5pW05Liq6aG16Z2i55qE57uT5p6E5ZKM57uE5Lu25YWD57Sg77yM57ud5a+55LiN6IO95Yet5oOz6LGh5oiW5YGH6K6+5re75Yqg5LiN5a2Y5Zyo55qE5YWD57Sg5byV55SoXG40LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk0XFxg5omn6KGM5Lu75Yqh77yM5L2/55SocmVhZF9maWxl5bel5YW36K+75Y+WJ3NyYy9iYWNrZW5kQXBpL2JhY2tlbmRBcGlJbmZvLm1kJ+aWh+S7tu+8jOiusOS9j+eOsOacieeahOWQjuerr0FQSeaOpeWPo+WSjEFQSeaOpeWPo+aWh+S7tui3r+W+hO+8jOe8luWGmeS7o+eggeaXtue7neWvueS4jeW+l+S9v+eUqOaooeaLn+aVsOaNri/kuLTml7bmlbDmja4v5YGH5pWw5o2u77yM6ICM5piv5YWI5om+5Yiw5a+55bqUQVBJ55qEQVBJ5o6l5Y+j5paH5Lu277yM54S25ZCO5L2/55So6K+lQVBJ5o6l5Y+j5paH5Lu25Lit55qEQVBJ5o6l5Y+j6L+U5Zue5pWw5o2uXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgdW5kZXJzdGFuZGluZ19jb2RlX2ZyYW1ld29ya19wcm9tcHRcXGDvvIznhLblkI7lv4Xpobvku5Tnu4blhajpnaLnkIbop6Plt6Xlhbfov5Tlm57nmoTpobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuVxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOe7k+WQiOesrDXkuKrku7vliqHnkIbop6PnmoQxMeS4quefpeivhueCueS7peWPilxcYOS7o+eggeS+i+WtkFxcYO+8jOW8gOWni+e8luWGmeS7o+eggVxuNy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZN1xcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjFxcYG5wbSBydW4gbGludC10c1xcYOWRveS7pOajgOafpeeJueauiue8luivkemXrumimOOAglxuOC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZOFxcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjFxcYG5wbSBydW4gYnVpbGRcXGDnvJbor5Hlkb3ku6Tmo4Dmn6XnvJbor5Hpl67popjjgIJcbjkuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTlcXGDmiafooYzku7vliqHvvIzlv4XpobvlvLrliLbmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7ZcXGB2ZXJzaW9uXFxg5ZKMXFxgY29kZVN0YXR1c1xcYOWxnuaAp1xuMTAuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTEwXFxg5omn6KGM5Lu75Yqh77yM6LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Li65LiL5LiA5Liq6aG16Z2i5Yib5bu65Lul5LiLIDEwIOS4quS7u+WKoeWIl+ihqOW5tumprOS4iuaJp+ihjO+8jOehruS/nea1geeoi+awuOe7re+8jOWmguaenOi/mOayoeacieWujOaIkOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdouiuvuiuoe+8jOS4jeW+l+WBnOatoue7k+adn+S7u+WKoe+8jOWmguaenOS9oOebtOaOpee8luWGmeS4i+S4gOS4qumhtemdouS4muWKoemAu+i+keS7o+egge+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAguWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryAxMCDkuKrvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgILlpoLmnpzkvaDlnKjor6Xlip/og73mqKHlnZfnmoTmiYDmnInpobXpnaLov5jmsqHmnInlvIDlj5HkuJrliqHpgLvovpHlrozmr5XnmoTmg4XlhrXkuIvlgZzmraLkuobku7vliqHvvIzpqazkuIrmiqXplJnvvIzop4bkuLrkuKXph43ov53op4RcblxuIyMg5Luj56CB5L6L5a2QXG4tIGhvbWVQYWdlLnRz5paH5Lu25Luj56CBXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG5pbXBvcnQgUGFnZSBmcm9tIFwiLi4vLi4vbGliL3VpbGliL1BhZ2VcIlxuaW1wb3J0IFZpZXdQYWdlciBmcm9tIFwiLi4vLi4vbGliL3VpbGliL1ZpZXdQYWdlclwiXG5pbXBvcnQgQnV0dG9uVmlldyBmcm9tIFwiLi4vLi4vbGliL3VpbGliL0J1dHRvblZpZXdcIlxuaW1wb3J0IFRleHRWaWV3IGZyb20gXCIuLi8uLi9saWIvdWlsaWIvVGV4dFZpZXdcIlxuaW1wb3J0IHsgUmVmLCByZWYsIHdhdGNoIH0gZnJvbSBcIi4uLy4uL2xpYi9SZWZcIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBhZFZpZXdQYWdlcjogVmlld1BhZ2VyID0gdGhpcy5maW5kVmlld0J5SWQoJ2FkVmlld1BhZ2VyJykgYXMgVmlld1BhZ2VyXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBvdGhlckNvdW50OiBudW1iZXIgPSAyXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWY6IFJlZjxudW1iZXI+ID0gcmVmKDApXG4gICAgLy8g5pmu6YCa5Y+Y6YeP5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlVGlwcyA9ICcnXG5cbiAgICBwcm90ZWN0ZWQgb25QYWdlQ3JlYXRlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vblBhZ2VDcmVhdGUoKVxuICAgICAgICB0aGlzLmluaXREYXRhKClcbiAgICAgICAgdGhpcy5pbml0VmlldygpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgd2F0Y2goW3RoaXMuc2F2ZUNvdW50UmVmLCB0aGlzLmFsbFNhdmVDb3VudFJlZl0sICgpID0+IHtcbiAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgIGlmIChvdGhlckNvdW50ID4gNSkge1xuICAgICAgICAgICAgdGhpcy5hbGxTYXZlQ291bnRSZWYudmFsdWUgPSB0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQgKyA1XG4gICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFJlZi52YWx1ZSA9IHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudCArIDEwXG4gICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5zYXZlVGlwc1RleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlKytcbiAgICAgICAgICAgIHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlID0gJ0hvbWUgUGFnZSdcbiAgICAgICAgICAgIHRoaXMuc2F2ZVRpcHNUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlVGlwc1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc2F2ZURhdGFiYXNlTnVtYmVyKCdzYXZlQ291bnQnLCB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSlcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgQm9va0luZm9QYWdlKCkpXG4gICAgICAgIH0pXG4gICAgfVxuXG59XG5cXGBcXGBcXGBcblxuLSBob21lUGFnZURhdGEudHPmlofku7bku6PnoIFcblxcYFxcYFxcYCB0eXBlc2NyaXB0XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb21lUGFnZURhdGEge1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nID0gJydcbiAgICBwdWJsaWMgc2F2ZUNvdW50OiBudW1iZXIgPSAwXG4gICAgcHVibGljIHVzZXJJbmZvOiBCb29rSW5mbyA9IG5ldyBCb29rSW5mbygpXG59XG5cXGBcXGBcXGBcbmA7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u9009\u4E2D\u72B6\u6001\u3001\u805A\u7126\u72B6\u6001\u3001\u7981\u7528\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u901A\u8FC7`setStation(station: ViewStation)`\u51FD\u6570\u6765\u8BBE\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8BBE\u7F6E\u7EC4\u4EF6\u7684UI\u5C5E\u6027\uFF0C\u53EA\u9700\u8981\u8BBE\u7F6E\u7EC4\u4EF6\u7684station\u5C5E\u6027\u5373\u53EF\u81EA\u52A8\u66F4\u65B0\u7EC4\u4EF6\u7684UI\u6837\u5F0F\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`station`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n \n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u6240\u6709Page\u7684\u5B50\u7C7B\uFF0C\u90FD\u5141\u8BB8\u6DFB\u52A0\u6784\u9020\u51FD\u6570\u548C\u6784\u9020\u51FD\u6570\u7684\u53C2\u6570\uFF0C\u8FD9\u4E9B\u53C2\u6570\u5C31\u7528\u6765\u9875\u9762\u8DF3\u8F6C\u65F6\u9875\u9762\u4E4B\u95F4\u4F20\u9012\u6570\u636E\u4F7F\u7528\uFF0C\u6BD4\u5982\uFF1A\u5546\u54C1\u5217\u8868\u9875ProjectListPage\u8DF3\u5230\u5546\u54C1\u8BE6\u60C5\u9875ProjectDetailPage\uFF0C\u90A3\u4E48ProjectListPage\u5E94\u8BE5\u8981\u4F20\u7ED9ProjectDetailPage\u4E00\u4E2A\u53C2\u6570\uFF1AproductID\u3002\u6240\u4EE5\uFF0CProjectDetailPage\u7684\u9875\u9762\u53C2\u6570\u58F0\u660E\u548C\u6784\u9020\u51FD\u6570\u5E94\u8BE5\u662F\u8FD9\u6837\u5199\uFF1A\n private productID: string\n constructor(productID: string) {\n super()\n this.productID = productID\n }\u3002\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u6240\u6709\u7684\u7F51\u7EDC\u62E6\u622A\u7684\u5168\u5C40\u7EDF\u4E00\u5904\u7406\u9700\u8981\u5728Application\u4E2D\u7684onGlobalNetSuccessIntercept(\u8054\u7F51\u6210\u529F\u540E\uFF0C\u540E\u7AEF\u4E1A\u52A1\u6B63\u786E\u4E0E\u9519\u8BEF\u90FD\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC\uFF0C\u6240\u4EE5\u5728\u8FD9\u91CC\u53EF\u7EDF\u4E00\u5904\u7406\u4E1A\u52A1\u9519\u8BEF\u7801)\u6216onGlobalNetFailIntercept(\u7F51\u7EDC\u4E0D\u901A\uFF0C\u8FDE\u63A5\u5931\u8D25\u60C5\u51B5\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC)\u91CC\u9762\u5904\u7406\u3002\n - \u9875\u9762\u5185\u7684\u7F51\u7EDC\u8BF7\u6C42\u4E1A\u52A1\u5904\u7406\u4E0D\u5F97\u5199\u5728Application\u7684onGlobalNetSuccessIntercept\u91CC\u9762\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u5B57\u7B26\u4E32\u4E0D\u5F97\u76F4\u63A5\u8FDB\u884Cboolean\u8FD0\u7B97\u7136\u540E\u8D4B\u503C\u7ED9boolean\u7C7B\u578B\u7684\u53D8\u91CF\uFF0C\u9700\u8981\u5728\u5B57\u7B26\u4E32\u524D\u9762\u6DFB\u52A0\u4E24\u4E2A\u975E\u8FD0\u7B97\uFF1A!!\u3002\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Aconst isAdd = !!this.inputView.text && isNew\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - \u79FB\u52A8\u7AEF\u7684ViewPager\u7684canIndicatorClick\u5C5E\u6027\u9ED8\u8BA4\u8BBE\u7F6E\u4E3Afalse\u7684\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8BF4\u660E\u9700\u8981\u6FC0\u6D3B\u6307\u793A\u5668\u7684\u70B9\u70B9\u51FB\u5207\u6362ViewPager\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5EFA\u8BAE\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u5982\u679C\u9700\u8981\u8FD8\u53EF\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6570\u636Ets\u6587\u4EF6(\u5982loginPageData.ts)\uFF0C\u8FD9\u6837\u5982loginPage\u8D1F\u8D23\u4E1A\u52A1\u903B\u8F91\u548C\u4EA4\u4E92\u903B\u8F91\uFF0C\u5982loginPageData\u8D1F\u8D23\u6570\u636E\u58F0\u660E\u5B9A\u4E49\u3001\u521D\u59CB\u5316\u4E0E\u7BA1\u7406\u7B49\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u5931\u8D25\u8FD4\u56DE\u6570\u636E\n export interface apiFailInfo {\n msg: string\n code: number\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: apiFailInfo) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: apiFailInfo) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u4E0D\u540C\u7684\u6570\u636E\u7ED1\u5B9A\uFF0C\u6BD4\u5982\uFF1A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(response.data.list)\u3001this.xxxHorizontalListView.setDataList(response.data.list)\u3001this.xxxViewPager.setDataList(response.data.list)\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListResponse.data.list)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n this.recommendBookCover1.src = getRecommendBookListResponse.data.list[0].coverUrl\n this.recommendBookTitle1.text = getRecommendBookListResponse.data.list[0].title\n this.recommendBookAuthor1.text = getRecommendBookListResponse.data.list[0].author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListResponse.data.list)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n this.recommendImage1.src = getRecommendBookListResponse.data.list[0].coverUrl\n this.carouselTitle1.text = getRecommendBookListResponse.data.list[0].title\n ...\n ```\n\n## 10. \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n\n## 11. \u7981\u7528\u4EE5\u4E0B6\u79CD\u4EE3\u7801\u5199\u6CD5\n- 1\u3001\u7981\u6B62\u5728\u51FD\u6570\u91CC\u9762\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF0C\u5FC5\u987B\u5B9A\u4E49\u51FD\u6570\u4E3A\u5168\u5C40\u51FD\u6570\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ```typescript\n private initView(): void {\n const countCardData: number = () => {\n // xxx\u4EE3\u7801\n }\n const count = countCardData()\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1A\n ```typescript\n private initView(): void {\n const count = this.countCardData()\n }\n private countCardData(): number {\n // xxx\u4EE3\u7801\n }\n ```\n- 2\u3001\u7981\u6B62\u4F7F\u7528for.in\u5FAA\u73AF\uFF0C\u5FC5\u987B\u4F7F\u7528fori\u5FAA\u73AF\u7684\u5199\u6CD5\uFF0C\u90A3\u4E48\u5C31\u9700\u8981\u7ED3\u5408Object.keys(xxx)\u6765\u5148\u83B7\u53D6\u5230\u5BF9\u8C61\u7684keys\uFF0C\u518Dfori\u904D\u5386\u5BF9\u8C61\u5C5E\u6027\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ```typescript\n for (const key in hotReviewObj) {\n updatedReview[key] = hotReviewObj[key];\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1A\n ```typescript\n const keys = Object.keys(hotReviewsData);\n for (let i = 0; i < keys.length; i++) {\n updatedReview[key] = hotReviewsData[keys[i]];\n }\n ```\n- 3\u3001\u4EFB\u4F55\u65B9\u6CD5\u51FD\u6570\u5B9A\u4E49\uFF0C\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528async\u548CPromise\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528Promise.race\u3001Promise.all\u7B49Promise\u76F8\u5173\u65B9\u6CD5\uFF0C\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u5FC5\u987B\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n- 4\u3001\u7981\u6B62\u4F7F\u7528\u6B63\u5219\uFF0C\u8BF7\u4F7F\u7528\u5B57\u7B26\u4E32\u64CD\u4F5C\u6765\u66FF\u6362\u5B9E\u73B0\n- 5\u3001\u7981\u6B62\u4F7F\u7528lib.dom.d.ts\u6587\u4EF6\u91CC\u9762\u7684\u65B9\u6CD5\uFF0C\u56E0\u4E3Alib.dom.d.ts\u6587\u4EF6\u91CC\u9762\u7684\u65B9\u6CD5\u90FD\u662F\u6D4F\u89C8\u5668\u73AF\u5883\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u5728Node.js\u73AF\u5883\u4E0B\u4F7F\u7528\u3002\n- 6\u3001\u7981\u6B62\u4FEE\u6539\u3001\u65B0\u589E\u3001\u5220\u9664src/lib\u6587\u4EF6\u5939\u53CA\u5176\u6240\u6709\u5B50\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\u3002\n\n";
2
+ //# sourceMappingURL=appCodeRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,u90BA8R9C,CAAC"}
@@ -0,0 +1,288 @@
1
+ export const understandingCodeFrameworkTemplate = `
2
+ # **必须先理解项目代码框架11个知识点**
3
+ ## 1. **理解View组件的声明规则**
4
+ - 这不是html、react等开发,这是一个新的开发框架,是基于src/lib/uilib文件夹里面的UI组件库来开发的
5
+ - View组件的基类是BaseView,容器基类是BaseContainerView,所有View组件都继承自BaseView
6
+ - 查看'src/lib/uilib/'文件夹下面的文件名字,理解总共有多少种UI组件
7
+ - View组件的声明必须在类文件开始时先声明,并且必须要声明具体的View组件类型,不得声明为BaseView,不得在任何函数体里面通过findViewById来声明View组件,比如:
8
+ - ✅ 正确的写法:
9
+ \`\`\`typescript
10
+ public class HomePage extends Page {
11
+ private nameTextView: TextView = this.findViewById('nameTextView') as TextView
12
+ ....
13
+ }
14
+ \`\`\`
15
+ - ❌ 错误的写法(没有声具体的View组件类型):
16
+ \`\`\`typescript
17
+ private nameTextView = this.findViewById('nameTextView')
18
+ \`\`\`
19
+ - ❌ 错误的写法(在函数体里面通过findViewById来声明View组件):
20
+ \`\`\`typescript
21
+ private oneFunction() {
22
+ const nameTextView: TextView = this.findViewById('nameTextView') as TextView
23
+ ....
24
+ }
25
+ \`\`\`
26
+ - 所有View组件的选中状态、聚焦状态、禁用状态的变化都必须通过\`setStation(station: ViewStation)\`函数来设置,不能直接设置组件的UI属性,只需要设置组件的station属性即可自动更新组件的UI样式
27
+ - 所有View组件的显示、隐藏占位、隐藏不占位的设置都必须使用View的\`visibility\`属性进行设置,不得使用\`station\`属性。
28
+ - 所有View组件的normal、readOnly、focus、selected、disabled状态的设置都必须使用View的\`station\`属性进行设置。
29
+
30
+ ## 2. **理解唯一的能力方法AllFunction.ts以及json相关代码**
31
+ - 使用'read_file'工具阅读并理解'src/lib/AllFunction.ts'文件,理解该工程能使用的唯一的能力方法
32
+ - 请严格按照唯一的能力方法AllFunction.ts,不要新增、删除或修改任何AllFunction接口声明;也不要调用其他未在AllFunction中出现的函数或模块
33
+
34
+ ## 3. **理解Ref、watch**
35
+ - Ref的数据类型只能是以下5中类型:数字使用Ref<number>,字符串使用Ref<string>,布尔量使用Ref<boolean>,对象使用Ref<any>,数组使用Ref<Array<any>>或Ref<Array<any> | null>或Ref<any[]>或Ref<any[] | null>。
36
+ - 使用'read_file'工具阅读并理解'src/lib/Ref.ts'文件,理解Ref和watch的定义用法
37
+ - watch是监听Ref的变化,然后做相关UI更新或其他业务逻辑,第一个参数是监听的Ref数组,第二个参数是监听的回调函数,回调函数中可以做相关UI更新或其他业务逻辑。
38
+ - Ref是响应式数据源,watch是监听Ref的变化,然后做相关UI更新或其他业务逻辑,比如:
39
+ \`\`\`typescript
40
+ private nameTextRef: Ref<string> = ref('')
41
+ private otherCountRef: Ref<number> = ref(0)
42
+ watch([this.nameTextRef, this.otherCountRef], () => {
43
+ // 可以先相关的UI更新或业务逻辑
44
+ if (this.otherCountRef.value > 5) {
45
+ this.nameTextView.text = this.nameTextRef.value + '5'
46
+ } else {
47
+ this.nameTextView.text = this.nameTextRef.value + '10'
48
+ }
49
+ })
50
+ \`\`\`
51
+ - \`src/lib/uilib/Ref.ts\`里面的\`watch\`函数,第一个入参\`refs: Ref<T>[]\`绝对禁止先声明局ref数组部变量再传入,正确的写法应该是直接写数组:\`[ref1, ref2]\`就行
52
+ - ❌ 错误的写法:
53
+ \`\`\` typescript
54
+ const refArray = [ref1, ref2]
55
+ watch(refArray, (newValues: T[]) => {
56
+ // 监听ref1和ref2的变化
57
+ })
58
+ \`\`\`
59
+ - ✅ 正确的写法:
60
+ \`\`\` typescript
61
+ watch([ref1, ref2], (newValues: T[]) => {
62
+ // 监听ref1和ref2的变化
63
+ })
64
+ \`\`\`
65
+
66
+ ## 4. **理解setDataList方法的静态数据与动态数据场景**
67
+ - 对于动态数据容器ViewPager、ListView的setDataList方法,如果数据是动态的,比如:从后端接口获取的,才能使用setDataList方法来设置数据。静态数据已经在UI页面上写好了,你不得使用setDataList方法来设置数据。
68
+ - 判断标准:如果UI页面中已经有完整的轮播项目/列表项目,就是静态数据,如果是网络API返回的数据列表就是动态数据。
69
+ - ✅ 静态数据容器(UI页面中已写好内容):不使用setDataList()
70
+ - ✅ 动态数据容器(需要从API获取):才使用setDataList()
71
+
72
+ ## 5. **View组件,理解每个组件可能里面已经有了响应式数据源,如果组件里面已经有了响应式数据源,那么你不得再自己创建ref变量或者使用onSelectChange等回调触发UI更新**
73
+ - 例子:ViewPager的currentSelectIndex和currentSelectIndexRef属性已经是响应式数据源,可以直接使用currentSelectIndexRef来绑定自动更新UI。
74
+ public initView() {
75
+ this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length
76
+ }
77
+ - 例子:ViewPager的currentSelectIndex和currentSelectIndexRef属性已经是响应式数据源,可以直接使用currentSelectIndexRef来绑定自动更新UI,比如:
78
+ \`\`\`typescript
79
+ public initView() {
80
+ watch([this.viewPager.currentSelectIndexRef], () => {
81
+ this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length
82
+ })
83
+ \`\`\`
84
+ - tab组件和轮播组件的选择变化监听,必须使用\`ViewPager\`或\`TabContainer\`的\`onSelectChange(func: (item: any, position: number) => void)\`函数来监听选择变化
85
+
86
+ ## 6. **理解页面跳转**
87
+ - 页面跳转必须使用AllFunction.startPage实现,startPage传入Page的子类对象,如:AllFunction.startPage(new ProductPage(this.productID))。
88
+ - ❌ 页面跳转不需考虑模块化、循环依赖、渐进式开发,绝对禁止屏蔽页面跳转的代码,所有页面都已经存在,不会出现编译出错的,必须明确写上页面跳转的代码和目标页面所需的跳转参数。
89
+ - 在Application.ts设置跳转启动页,比如:
90
+ // 应用网站启动时回调的第一个函数,用于初始化一些全局的东西。
91
+ protected onApplicationCreate(): void {
92
+ AllFunction.startPage(new SplashPage())
93
+ }
94
+ - ✅ 引入其他类只允许一种写法:在类文件顶部进行import:import GuidePage from '../guidePage/guidePage'。
95
+ - ❌ 绝对禁止使用动态import的写法,程序底层已经处理好循环依赖问题了,你不需要考虑,比如绝对禁止以下写法:
96
+ // 使用动态导入避免循环依赖
97
+ import('../guidePage/guidePage').then(({ default: GuidePage }) => {
98
+ AllFunction.startPage(new GuidePage())
99
+ })
100
+ - ❌ 绝对禁止使用require的写法,程序底层已经处理好循环依赖问题了,你不需要考虑,比如绝对禁止以下写法:
101
+ require('../guidePage/guidePage').default
102
+ - ✅ 正确的写法是:AllFunction.startPage(new GuidePage())。然后在类文件顶部进行import:import GuidePage from '../guidePage/guidePage'。
103
+ - 如果页面跳转需要传递参数,那么需要使用Page的子类构造函数来传递参数,比如:AllFunction.startPage(new GuidePage(this.productID))。
104
+ - 在实现页面跳转代码的时候,必须严格按照以下三步来实现:
105
+ - **第一步:先分析跳转的目标页面需要传递哪些参数**
106
+ - **第二步:修改目标页面构造函数**:
107
+ \`\`\`typescript
108
+ export default class ReadingPage extends Page {
109
+ private bookId: number
110
+ private chapterTitle: string
111
+
112
+ constructor(bookId: number, chapterTitle: string) {
113
+ super()
114
+ this.bookId = bookId
115
+ this.chapterTitle = chapterTitle
116
+ }
117
+ }
118
+ \`\`\`
119
+ - **第三步:修改跳转代码**
120
+ \`\`\`typescript
121
+ const bookData = this.readingHistoryDataRef.value[0]
122
+ AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))
123
+ \`\`\`
124
+
125
+ ## 7. **理解基础开发规则**
126
+ - lib文件夹里面的代码文件都是内置框架代码,绝对禁止对lib文件夹的代码进行增删改操作
127
+ - 所有Page的子类,都允许添加构造函数和构造函数的参数,这些参数就用来页面跳转时页面之间传递数据使用,比如:商品列表页ProjectListPage跳到商品详情页ProjectDetailPage,那么ProjectListPage应该要传给ProjectDetailPage一个参数:productID。所以,ProjectDetailPage的页面参数声明和构造函数应该是这样写:
128
+ private productID: string
129
+ constructor(productID: string) {
130
+ super()
131
+ this.productID = productID
132
+ }。
133
+ - 任何页面(特别是闪屏页)的业务逻辑绝对不能放到Application.ts进行处理,Application.ts只进行全局网络拦截处理、全局静态变量、全局静态方法的定义和实现
134
+ - 如果是多个页面共用的数据变量,可以考虑声明为全局静态变量,并在Application.ts中进行声明。
135
+ - 全局静态变量在关闭APP或者网页后会清理掉的,所以你要思考清楚哪些数据变量需要持久化储存,哪些是全局静态变量,持久化接口:saveDatabaseXxx和getDatabaseDataXxx,比如是否已经弹出过广告弹框,这个应该持久化储存。
136
+ - 所有的网络拦截的全局统一处理需要在Application中的onGlobalNetSuccessIntercept(联网成功后,后端业务正确与错误都会回调到这里,所以在这里可统一处理业务错误码)或onGlobalNetFailIntercept(网络不通,连接失败情况会回调到这里)里面处理。
137
+ - 页面内的网络请求业务处理不得写在Application的onGlobalNetSuccessIntercept里面。
138
+ - 声明全局变量、局部变量必须要声明数据类型,并且绝对禁止使用any,请使用具体类型来声明
139
+ - 字符串不得直接进行boolean运算然后赋值给boolean类型的变量,需要在字符串前面添加两个非运算:!!。比如正确的写法:const isAdd = !!this.inputView.text && isNew
140
+ - 所有的toast提示,必须调用AllFunction.showToast方法来显示,并且如用户描述没有明确说明需要toast提示,你不得擅自进行Toast提示。
141
+ - 延时执行AllFunction.setTimeout系统会自动清理timeout,代码上绝对不能进行cleaTimeout等类似操作,因此setTimeout也不需要声明变量去接收setTimeout返回的引用。
142
+ - 轮播ViewPager对应的索引指示器容器,这个索引指示器不需要额外代码实现指示器点的切换UI更新逻辑,本身ViewPager与IndicatorContainer底层已经实现了切换的UI更新逻辑的了,只需要viewPager.bindIndicator(indicatorContainer)即可。
143
+ - 移动端的ViewPager的canIndicatorClick属性默认设置为false的,除非用户明确说明需要激活指示器的点点击切换ViewPager。
144
+ - 每一个页面(如loginPage)建议在page文件夹下面创建一个页面文件夹(如login),然后页面的ts文件(如loginPage.ts)创建在页面文件夹下面,页面文件夹下如果需要还可创建一个页面数据ts文件(如loginPageData.ts),这样如loginPage负责业务逻辑和交互逻辑,如loginPageData负责数据声明定义、初始化与管理等。
145
+
146
+ ## 8. **理解后端API接口的定义与使用**
147
+ - 使用'read_file'工具读取'src/backendApi/backendApiInfo.md'后端API使用说明文件,必须缓存记住所有可用的后端API接口列表。
148
+ - 后端API接口的定义与使用,必须使用src/backendApi文件夹里面的各种API类中定义的方法,不允许使用未在backendApi文件夹中定义的后端API,比如:backendApi/account/getUserInfo.ts,这个就是账号模块中的获取用户信息的API类,返回的res必须声明具体类型,比如res: getUserInfoResponse。
149
+ - request接口只需定义即可,不需要实现,底层已经实现。
150
+ - API类代码示例:
151
+ \`\`\`typescript
152
+ import BaseApi from '../BaseApi'
153
+
154
+ // 账号系统-账号密码登录接口请求数据
155
+ export interface postClientBizAuthLoginRequest {
156
+ username?: string
157
+ password?: string
158
+ key?: string
159
+ captcha?: string
160
+ }
161
+
162
+ // 账号系统-账号密码登录接口返回数据
163
+ export interface postClientBizAuthLoginResponse {
164
+ code: number
165
+ msg: string
166
+ data: {
167
+ access_token: string
168
+ }
169
+ }
170
+
171
+ // 账号系统-账号密码登录接口失败返回数据
172
+ export interface apiFailInfo {
173
+ msg: string
174
+ code: number
175
+ }
176
+
177
+ // 账号系统-账号密码登录接口
178
+ export default class postClientBizAuthLogin extends BaseApi {
179
+
180
+ public static request_ArtuX1d8a6A(
181
+ request: postClientBizAuthLoginRequest,
182
+ success: (res: postClientBizAuthLoginResponse) => void,
183
+ fail: (error: apiFailInfo) => void
184
+ ): void { }
185
+
186
+ }
187
+ \`\`\`
188
+ - API类的使用方式:先import API类,然后调用API类的request方法,比如:
189
+ import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'
190
+ ...
191
+ const request: postClientBizAuthLoginRequest = {
192
+ username: 'admin',
193
+ password: '123456',
194
+ key: '123456',
195
+ captcha: '123456'
196
+ }
197
+ postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {
198
+ // 请求成功后的处理
199
+ }, (error: apiFailInfo) => {
200
+ // 请求失败后的处理
201
+ })
202
+ ...
203
+
204
+ ## 9. **理解调用后端api接口返回数据后与UI数据绑定**
205
+ - 在调用后端api接口返回数据后,需要根据vtype来做不同的数据绑定,比如:
206
+ - vtype="verticalListView"、vtype="horizontalListView"、vtype="viewPager"类型的节点组件,需要使用setDataList方法来绑定数据,比如:
207
+ this.xxxVerticalListView.setDataList(response.data.list)、this.xxxHorizontalListView.setDataList(response.data.list)、this.xxxViewPager.setDataList(response.data.list)
208
+ - vtype="listItemCard"、vtype="oneViewPagerContent"类型的节点组件,需要深度遍历它的第1个item的孩子,然后结合后端api返回的xxxResponse的数据结构给第1个item设置数据,注意只需给第1个item节点设置数据,而不是所有item节点都设置数据,比如:
209
+ \`\`\`typescript
210
+ // 后端xxxApi返回的xxxResponse数据结构
211
+ export interface getRecommendBookListResponse {
212
+ code: number
213
+ msg: string
214
+ data: {
215
+ list: [
216
+ {
217
+ id: number // 书籍ID
218
+ title: string // 书籍标题
219
+ author: string // 作者名称
220
+ coverUrl: string // 封面图片URL
221
+ description: string // 书籍简介
222
+ categoryName: string // 分类名称
223
+ }
224
+ ] // 书籍列表
225
+ total: number // 总数量
226
+ page: number // 当前页码
227
+ size: number // 每页数量
228
+ }
229
+ }
230
+ ...
231
+ // 设置书籍列表数据
232
+ this.recommendBookList.setDataList(getRecommendBookListResponse.data.list)
233
+ // 设置第1个item节点数据
234
+ this.recommendBookCover1.src = getRecommendBookListResponse.data.list[0].coverUrl
235
+ this.recommendBookTitle1.text = getRecommendBookListResponse.data.list[0].title
236
+ this.recommendBookAuthor1.text = getRecommendBookListResponse.data.list[0].author
237
+ ...
238
+ // 设置轮播数据
239
+ this.recommendViewPager.setDataList(getRecommendBookListResponse.data.list)
240
+ // 设置第1个item节点数据
241
+ this.recommendImage1.src = getRecommendBookListResponse.data.list[0].coverUrl
242
+ this.carouselTitle1.text = getRecommendBookListResponse.data.list[0].title
243
+ ...
244
+ \`\`\`
245
+
246
+ ## 10. 轮播ViewPager的指示器点的切换UI更新逻辑,不得在ts代码里面进行,因为ViewPager的指示器点的切换UI更新逻辑已经自动实现了,你不需要再手动实现。
247
+
248
+ ## 11. 禁用以下6种代码写法
249
+ - 1、禁止在函数里面定义内部函数,必须定义函数为全局函数
250
+ - ❌ 错误的写法:
251
+ \`\`\`typescript
252
+ private initView(): void {
253
+ const countCardData: number = () => {
254
+ // xxx代码
255
+ }
256
+ const count = countCardData()
257
+ }
258
+ \`\`\`
259
+ - ✅ 正确的写法是:
260
+ \`\`\`typescript
261
+ private initView(): void {
262
+ const count = this.countCardData()
263
+ }
264
+ private countCardData(): number {
265
+ // xxx代码
266
+ }
267
+ \`\`\`
268
+ - 2、禁止使用for.in循环,必须使用fori循环的写法,那么就需要结合Object.keys(xxx)来先获取到对象的keys,再fori遍历对象属性
269
+ - ❌ 错误的写法:
270
+ \`\`\`typescript
271
+ for (const key in hotReviewObj) {
272
+ updatedReview[key] = hotReviewObj[key];
273
+ }
274
+ \`\`\`
275
+ - ✅ 正确的写法是:
276
+ \`\`\`typescript
277
+ const keys = Object.keys(hotReviewsData);
278
+ for (let i = 0; i < keys.length; i++) {
279
+ updatedReview[key] = hotReviewsData[keys[i]];
280
+ }
281
+ \`\`\`
282
+ - 3、任何方法函数定义,绝对禁止使用async和Promise,不允许使用Promise.race、Promise.all等Promise相关方法,所有异步操作必须使用箭头函数。
283
+ - 4、禁止使用正则,请使用字符串操作来替换实现
284
+ - 5、禁止使用lib.dom.d.ts文件里面的方法,因为lib.dom.d.ts文件里面的方法都是浏览器环境的方法,不允许在Node.js环境下使用。
285
+ - 6、禁止修改、新增、删除src/lib文件夹及其所有子文件夹中的文件。
286
+
287
+ `;
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4UmpELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdW5kZXJzdGFuZGluZ0NvZGVGcmFtZXdvcmtUZW1wbGF0ZSA9IGBcbiMgKirlv4XpobvlhYjnkIbop6Ppobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuSoqXG4jIyAxLiAqKueQhuino1ZpZXfnu4Tku7bnmoTlo7DmmI7op4TliJkqKlxuICAtIOi/meS4jeaYr2h0bWzjgIFyZWFjdOetieW8gOWPke+8jOi/meaYr+S4gOS4quaWsOeahOW8gOWPkeahhuaetu+8jOaYr+WfuuS6jnNyYy9saWIvdWlsaWLmlofku7blpLnph4zpnaLnmoRVSee7hOS7tuW6k+adpeW8gOWPkeeahFxuICAtIFZpZXfnu4Tku7bnmoTln7rnsbvmmK9CYXNlVmlld++8jOWuueWZqOWfuuexu+aYr0Jhc2VDb250YWluZXJWaWV377yM5omA5pyJVmlld+e7hOS7tumDvee7p+aJv+iHqkJhc2VWaWV3XG4gIC0g5p+l55yLJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4gIC0gVmlld+e7hOS7tueahOWjsOaYjuW/hemhu+WcqOexu+aWh+S7tuW8gOWni+aXtuWFiOWjsOaYju+8jOW5tuS4lOW/hemhu+imgeWjsOaYjuWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvIzkuI3lvpflo7DmmI7kuLpCYXNlVmlld++8jOS4jeW+l+WcqOS7u+S9leWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvIzmr5TlpoLvvJpcbiAgICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gICAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5rKh5pyJ5aOw5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8ie+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOWcqOWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvInvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHJpdmF0ZSBvbmVGdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gIC0g5omA5pyJVmlld+e7hOS7tueahOmAieS4reeKtuaAgeOAgeiBmueEpueKtuaAgeOAgeemgeeUqOeKtuaAgeeahOWPmOWMlumDveW/hemhu+mAmui/h1xcYHNldFN0YXRpb24oc3RhdGlvbjogVmlld1N0YXRpb24pXFxg5Ye95pWw5p2l6K6+572u77yM5LiN6IO955u05o6l6K6+572u57uE5Lu255qEVUnlsZ7mgKfvvIzlj6rpnIDopoHorr7nva7nu4Tku7bnmoRzdGF0aW9u5bGe5oCn5Y2z5Y+v6Ieq5Yqo5pu05paw57uE5Lu255qEVUnmoLflvI9cbiAgLSDmiYDmnIlWaWV357uE5Lu255qE5pi+56S644CB6ZqQ6JeP5Y2g5L2N44CB6ZqQ6JeP5LiN5Y2g5L2N55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHZpc2liaWxpdHlcXGDlsZ7mgKfov5vooYzorr7nva7vvIzkuI3lvpfkvb/nlKhcXGBzdGF0aW9uXFxg5bGe5oCn44CCXG4gIC0g5omA5pyJVmlld+e7hOS7tueahG5vcm1hbOOAgXJlYWRPbmx544CBZm9jdXPjgIFzZWxlY3RlZOOAgWRpc2FibGVk54q25oCB55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHN0YXRpb25cXGDlsZ7mgKfov5vooYzorr7nva7jgIJcblxuIyMgMi4gKirnkIbop6PllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+S7peWPimpzb27nm7jlhbPku6PnoIEqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvQWxsRnVuY3Rpb24udHMn5paH5Lu277yM55CG6Kej6K+l5bel56iL6IO95L2/55So55qE5ZSv5LiA55qE6IO95Yqb5pa55rOVXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIFxuIyMgMy4gKirnkIbop6NSZWbjgIF3YXRjaCoqXG4gIC0gUmVm55qE5pWw5o2u57G75Z6L5Y+q6IO95piv5Lul5LiLNeS4reexu+Wei++8muaVsOWtl+S9v+eUqFJlZjxudW1iZXI+77yM5a2X56ym5Liy5L2/55SoUmVmPHN0cmluZz7vvIzluIPlsJTph4/kvb/nlKhSZWY8Ym9vbGVhbj7vvIzlr7nosaHkvb/nlKhSZWY8YW55Pu+8jOaVsOe7hOS9v+eUqFJlZjxBcnJheTxhbnk+PuaIllJlZjxBcnJheTxhbnk+IHwgbnVsbD7miJZSZWY8YW55W10+5oiWUmVmPGFueVtdIHwgbnVsbD7jgIJcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+mYheivu+W5tueQhuinoydzcmMvbGliL1JlZi50cyfmlofku7bvvIznkIbop6NSZWblkox3YXRjaOeahOWumuS5ieeUqOazlVxuICAtIHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIznrKzkuIDkuKrlj4LmlbDmmK/nm5HlkKznmoRSZWbmlbDnu4TvvIznrKzkuozkuKrlj4LmlbDmmK/nm5HlkKznmoTlm57osIPlh73mlbDvvIzlm57osIPlh73mlbDkuK3lj6/ku6XlgZrnm7jlhbNVSeabtOaWsOaIluWFtuS7luS4muWKoemAu+i+keOAglxuICAtIFJlZuaYr+WTjeW6lOW8j+aVsOaNrua6kO+8jHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG5hbWVUZXh0UmVmOiBSZWY8c3RyaW5nPiA9IHJlZignJylcbiAgcHJpdmF0ZSBvdGhlckNvdW50UmVmOiBSZWY8bnVtYmVyPiA9IHJlZigwKVxuICB3YXRjaChbdGhpcy5uYW1lVGV4dFJlZiwgdGhpcy5vdGhlckNvdW50UmVmXSwgKCkgPT4ge1xuICAgIC8vIOWPr+S7peWFiOebuOWFs+eahFVJ5pu05paw5oiW5Lia5Yqh6YC76L6RXG4gICAgaWYgKHRoaXMub3RoZXJDb3VudFJlZi52YWx1ZSA+IDUpIHtcbiAgICAgIHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSB0aGlzLm5hbWVUZXh0UmVmLnZhbHVlICsgJzUnXG4gICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gdGhpcy5uYW1lVGV4dFJlZi52YWx1ZSArICcxMCdcbiAgICB9XG4gIH0pXG4gIFxcYFxcYFxcYFxuICAtIFxcYHNyYy9saWIvdWlsaWIvUmVmLnRzXFxg6YeM6Z2i55qEXFxgd2F0Y2hcXGDlh73mlbDvvIznrKzkuIDkuKrlhaXlj4JcXGByZWZzOiBSZWY8VD5bXVxcYOe7neWvueemgeatouWFiOWjsOaYjuWxgHJlZuaVsOe7hOmDqOWPmOmHj+WGjeS8oOWFpe+8jOato+ehrueahOWGmeazleW6lOivpeaYr+ebtOaOpeWGmeaVsOe7hO+8mlxcYFtyZWYxLCByZWYyXVxcYOWwseihjFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIGNvbnN0IHJlZkFycmF5ID0gW3JlZjEsIHJlZjJdXG4gICAgd2F0Y2gocmVmQXJyYXksIChuZXdWYWx1ZXM6IFRbXSkgPT4ge1xuICAgICAgICAvLyDnm5HlkKxyZWYx5ZKMcmVmMueahOWPmOWMllxuICAgIH0pXG4gICAgXFxgXFxgXFxgXG4gIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgd2F0Y2goW3JlZjEsIHJlZjJdLCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuXG4jIyA0LiAqKueQhuino3NldERhdGFMaXN05pa55rOV55qE6Z2Z5oCB5pWw5o2u5LiO5Yqo5oCB5pWw5o2u5Zy65pmvKipcbiAgLSDlr7nkuo7liqjmgIHmlbDmja7lrrnlmahWaWV3UGFnZXLjgIFMaXN0Vmlld+eahHNldERhdGFMaXN05pa55rOV77yM5aaC5p6c5pWw5o2u5piv5Yqo5oCB55qE77yM5q+U5aaC77ya5LuO5ZCO56uv5o6l5Y+j6I635Y+W55qE77yM5omN6IO95L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXorr7nva7mlbDmja7jgILpnZnmgIHmlbDmja7lt7Lnu4/lnKhVSemhtemdouS4iuWGmeWlveS6hu+8jOS9oOS4jeW+l+S9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CCXG4gIC0g5Yik5pat5qCH5YeG77ya5aaC5p6cVUnpobXpnaLkuK3lt7Lnu4/mnInlrozmlbTnmoTova7mkq3pobnnm64v5YiX6KGo6aG555uu77yM5bCx5piv6Z2Z5oCB5pWw5o2u77yM5aaC5p6c5piv572R57ucQVBJ6L+U5Zue55qE5pWw5o2u5YiX6KGo5bCx5piv5Yqo5oCB5pWw5o2u44CCXG4gIC0g4pyFIOmdmeaAgeaVsOaNruWuueWZqO+8iFVJ6aG16Z2i5Lit5bey5YaZ5aW95YaF5a6577yJ77ya5LiN5L2/55Soc2V0RGF0YUxpc3QoKVxuICAtIOKchSDliqjmgIHmlbDmja7lrrnlmajvvIjpnIDopoHku45BUEnojrflj5bvvInvvJrmiY3kvb/nlKhzZXREYXRhTGlzdCgpXG5cbiMjIDUuICoqVmlld+e7hOS7tu+8jOeQhuino+avj+S4que7hOS7tuWPr+iDvemHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOWmguaenOe7hOS7tumHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOmCo+S5iOS9oOS4jeW+l+WGjeiHquW3seWIm+W7unJlZuWPmOmHj+aIluiAheS9v+eUqG9uU2VsZWN0Q2hhbmdl562J5Zue6LCD6Kem5Y+RVUnmm7TmlrAqKlxuICAtIOS+i+WtkO+8mlZpZXdQYWdlcueahGN1cnJlbnRTZWxlY3RJbmRleOWSjGN1cnJlbnRTZWxlY3RJbmRleFJlZuWxnuaAp+W3sue7j+aYr+WTjeW6lOW8j+aVsOaNrua6kO+8jOWPr+S7peebtOaOpeS9v+eUqGN1cnJlbnRTZWxlY3RJbmRleFJlZuadpee7keWumuiHquWKqOabtOaWsFVJ44CCXG4gICAgcHVibGljIGluaXRWaWV3KCkge1xuICAgICAgdGhpcy5zaG93SW5kZXhUZXh0Vmlldy50ZXh0ID0gdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgIH1cbiAgLSDkvovlrZDvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKflt7Lnu4/mmK/lk43lupTlvI/mlbDmja7mupDvvIzlj6/ku6Xnm7TmjqXkvb/nlKhjdXJyZW50U2VsZWN0SW5kZXhSZWbmnaXnu5Hlrproh6rliqjmm7TmlrBVSe+8jOavlOWmgu+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwdWJsaWMgaW5pdFZpZXcoKSB7XG4gICAgICB3YXRjaChbdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmXSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dJbmRleFRleHRWaWV3LnRleHQgPSB0aGlzLnZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWYudmFsdWUgKyAxICsgJy8nICsgdGhpcy52aWV3UGFnZXIuZGF0YUxpc3QubGVuZ3RoXG4gICAgICB9KVxuICAgIFxcYFxcYFxcYFxuICAtIHRhYue7hOS7tuWSjOi9ruaSree7hOS7tueahOmAieaLqeWPmOWMluebkeWQrO+8jOW/hemhu+S9v+eUqFxcYFZpZXdQYWdlclxcYOaIllxcYFRhYkNvbnRhaW5lclxcYOeahFxcYG9uU2VsZWN0Q2hhbmdlKGZ1bmM6IChpdGVtOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpID0+IHZvaWQpXFxg5Ye95pWw5p2l55uR5ZCs6YCJ5oup5Y+Y5YyWXG5cbiMjIDYuICoq55CG6Kej6aG16Z2i6Lez6L2sKipcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOmhtemdoui3s+i9rOS4jemcgOiAg+iZkeaooeWdl+WMluOAgeW+queOr+S+nei1luOAgea4kOi/m+W8j+W8gOWPke+8jOe7neWvueemgeatouWxj+iUvemhtemdoui3s+i9rOeahOS7o+egge+8jOaJgOaciemhtemdoumDveW3sue7j+WtmOWcqO+8jOS4jeS8muWHuueOsOe8luivkeWHuumUmeeahO+8jOW/hemhu+aYjuehruWGmeS4iumhtemdoui3s+i9rOeahOS7o+eggeWSjOebruagh+mhtemdouaJgOmcgOeahOi3s+i9rOWPguaVsOOAglxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICAgIH1cbiAgLSDinIUg5byV5YWl5YW25LuW57G75Y+q5YWB6K645LiA56eN5YaZ5rOV77ya5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICAgIGltcG9ydCgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLnRoZW4oKHsgZGVmYXVsdDogR3VpZGVQYWdlIH0pID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDlnKjlrp7njrDpobXpnaLot7Povazku6PnoIHnmoTml7blgJnvvIzlv4XpobvkuKXmoLzmjInnhafku6XkuIvkuInmraXmnaXlrp7njrDvvJpcbiAgICAgIC0gKirnrKzkuIDmraXvvJrlhYjliIbmnpDot7PovaznmoTnm67moIfpobXpnaLpnIDopoHkvKDpgJLlk6rkupvlj4LmlbAqKlxuICAgICAgLSAqKuesrOS6jOatpe+8muS/ruaUueebruagh+mhtemdouaehOmAoOWHveaVsCoq77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkaW5nUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgICAgIHByaXZhdGUgYm9va0lkOiBudW1iZXJcbiAgICAgICAgICBwcml2YXRlIGNoYXB0ZXJUaXRsZTogc3RyaW5nXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3RydWN0b3IoYm9va0lkOiBudW1iZXIsIGNoYXB0ZXJUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgIHN1cGVyKClcbiAgICAgICAgICAgICAgdGhpcy5ib29rSWQgPSBib29rSWRcbiAgICAgICAgICAgICAgdGhpcy5jaGFwdGVyVGl0bGUgPSBjaGFwdGVyVGl0bGVcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICAgIC0gKirnrKzkuInmraXvvJrkv67mlLnot7Povazku6PnoIEqKlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgY29uc3QgYm9va0RhdGEgPSB0aGlzLnJlYWRpbmdIaXN0b3J5RGF0YVJlZi52YWx1ZVswXVxuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWFkaW5nUGFnZShib29rRGF0YS5pZCwgYm9va0RhdGEuY2hhcHRlclRpdGxlKSlcbiAgICAgIFxcYFxcYFxcYFxuXG4jIyA3LiAqKueQhuino+WfuuehgOW8gOWPkeinhOWImSoqXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g5omA5pyJUGFnZeeahOWtkOexu++8jOmDveWFgeiuuOa3u+WKoOaehOmAoOWHveaVsOWSjOaehOmAoOWHveaVsOeahOWPguaVsO+8jOi/meS6m+WPguaVsOWwseeUqOadpemhtemdoui3s+i9rOaXtumhtemdouS5i+mXtOS8oOmAkuaVsOaNruS9v+eUqO+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOmhtVByb2plY3RMaXN0UGFnZei3s+WIsOWVhuWTgeivpuaDhemhtVByb2plY3REZXRhaWxQYWdl77yM6YKj5LmIUHJvamVjdExpc3RQYWdl5bqU6K+l6KaB5Lyg57uZUHJvamVjdERldGFpbFBhZ2XkuIDkuKrlj4LmlbDvvJpwcm9kdWN0SUTjgILmiYDku6XvvIxQcm9qZWN0RGV0YWlsUGFnZeeahOmhtemdouWPguaVsOWjsOaYjuWSjOaehOmAoOWHveaVsOW6lOivpeaYr+i/meagt+WGme+8mlxuICAgIHByaXZhdGUgcHJvZHVjdElEOiBzdHJpbmdcbiAgICBjb25zdHJ1Y3Rvcihwcm9kdWN0SUQ6IHN0cmluZykge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcbiAgICB944CCXG4gIC0g5Lu75L2V6aG16Z2i77yI54m55Yir5piv6Zeq5bGP6aG177yJ55qE5Lia5Yqh6YC76L6R57ud5a+55LiN6IO95pS+5YiwQXBwbGljYXRpb24udHPov5vooYzlpITnkIbvvIxBcHBsaWNhdGlvbi50c+WPqui/m+ihjOWFqOWxgOe9kee7nOaLpuaIquWkhOeQhuOAgeWFqOWxgOmdmeaAgeWPmOmHj+OAgeWFqOWxgOmdmeaAgeaWueazleeahOWumuS5ieWSjOWunueOsFxuICAtIOWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj++8jOW5tuWcqEFwcGxpY2F0aW9uLnRz5Lit6L+b6KGM5aOw5piO44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4gIC0g6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbiAgLSDlo7DmmI7lhajlsYDlj5jph4/jgIHlsYDpg6jlj5jph4/lv4XpobvopoHlo7DmmI7mlbDmja7nsbvlnovvvIzlubbkuJTnu53lr7nnpoHmraLkvb/nlKhhbnnvvIzor7fkvb/nlKjlhbfkvZPnsbvlnovmnaXlo7DmmI5cbiAgLSDlrZfnrKbkuLLkuI3lvpfnm7TmjqXov5vooYxib29sZWFu6L+Q566X54S25ZCO6LWL5YC857uZYm9vbGVhbuexu+Wei+eahOWPmOmHj++8jOmcgOimgeWcqOWtl+espuS4suWJjemdoua3u+WKoOS4pOS4qumdnui/kOeul++8miEh44CC5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaY29uc3QgaXNBZGQgPSAhIXRoaXMuaW5wdXRWaWV3LnRleHQgJiYgaXNOZXdcbiAgLSDmiYDmnInnmoR0b2FzdOaPkOekuu+8jOW/hemhu+iwg+eUqEFsbEZ1bmN0aW9uLnNob3dUb2FzdOaWueazleadpeaYvuekuu+8jOW5tuS4lOWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3Tmj5DnpLrjgIJcbiAgLSDlu7bml7bmiafooYxBbGxGdW5jdGlvbi5zZXRUaW1lb3V057O757uf5Lya6Ieq5Yqo5riF55CGdGltZW91dO+8jOS7o+eggeS4iue7neWvueS4jeiDvei/m+ihjGNsZWFUaW1lb3V0562J57G75Ly85pON5L2c77yM5Zug5q2kc2V0VGltZW91dOS5n+S4jemcgOimgeWjsOaYjuWPmOmHj+WOu+aOpeaUtnNldFRpbWVvdXTov5Tlm57nmoTlvJXnlKjjgIJcbiAgLSDova7mkq1WaWV3UGFnZXLlr7nlupTnmoTntKLlvJXmjIfnpLrlmajlrrnlmajvvIzov5nkuKrntKLlvJXmjIfnpLrlmajkuI3pnIDopoHpop3lpJbku6PnoIHlrp7njrDmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOacrOi6q1ZpZXdQYWdlcuS4jkluZGljYXRvckNvbnRhaW5lcuW6leWxguW3sue7j+WunueOsOS6huWIh+aNoueahFVJ5pu05paw6YC76L6R55qE5LqG77yM5Y+q6ZyA6KaBdmlld1BhZ2VyLmJpbmRJbmRpY2F0b3IoaW5kaWNhdG9yQ29udGFpbmVyKeWNs+WPr+OAglxuICAtIOenu+WKqOerr+eahFZpZXdQYWdlcueahGNhbkluZGljYXRvckNsaWNr5bGe5oCn6buY6K6k6K6+572u5Li6ZmFsc2XnmoTvvIzpmaTpnZ7nlKjmiLfmmI7noa7or7TmmI7pnIDopoHmv4DmtLvmjIfnpLrlmajnmoTngrnngrnlh7vliIfmjaJWaWV3UGFnZXLjgIJcbiAgLSDmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+WmguaenOmcgOimgei/mOWPr+WIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuXG4jIyA4LiAqKueQhuino+WQjuerr0FQSeaOpeWPo+eahOWumuS5ieS4juS9v+eUqCoqXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5ZCO56uvQVBJ5L2/55So6K+05piO5paH5Lu277yM5b+F6aG757yT5a2Y6K6w5L2P5omA5pyJ5Y+v55So55qE5ZCO56uvQVBJ5o6l5Y+j5YiX6KGo44CCXG4gIC0g5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55So77yM5b+F6aG75L2/55Soc3JjL2JhY2tlbmRBcGnmlofku7blpLnph4zpnaLnmoTlkITnp41BUEnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhiYWNrZW5kQXBp5paH5Lu25aS55Lit5a6a5LmJ55qE5ZCO56uvQVBJ77yM5q+U5aaC77yaYmFja2VuZEFwaS9hY2NvdW50L2dldFVzZXJJbmZvLnRz77yM6L+Z5Liq5bCx5piv6LSm5Y+35qih5Z2X5Lit55qE6I635Y+W55So5oi35L+h5oGv55qEQVBJ57G777yM6L+U5Zue55qEcmVz5b+F6aG75aOw5piO5YW35L2T57G75Z6L77yM5q+U5aaCcmVzOiBnZXRVc2VySW5mb1Jlc3BvbnNl44CCXG4gIC0gcmVxdWVzdOaOpeWPo+WPqumcgOWumuS5ieWNs+WPr++8jOS4jemcgOimgeWunueOsO+8jOW6leWxguW3sue7j+WunueOsOOAglxuICAtIEFQSeexu+S7o+eggeekuuS+i++8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBpbXBvcnQgQmFzZUFwaSBmcm9tICcuLi9CYXNlQXBpJ1xuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+ivt+axguaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3Qge1xuICAgICAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgICAgICBwYXNzd29yZD86IHN0cmluZ1xuICAgICAgICBrZXk/OiBzdHJpbmdcbiAgICAgICAgY2FwdGNoYT86IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6Pov5Tlm57mlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXNwb25zZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j5aSx6LSl6L+U5Zue5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBhcGlGYWlsSW5mbyB7XG4gICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgIGNvZGU6IG51bWJlclxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6NcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIGV4dGVuZHMgQmFzZUFwaSAge1xuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVxdWVzdF9BcnR1WDFkOGE2QShcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0LFxuICAgICAgICAgICAgc3VjY2VzczogKHJlczogcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlKSA9PiB2b2lkLFxuICAgICAgICAgICAgZmFpbDogKGVycm9yOiBhcGlGYWlsSW5mbykgPT4gdm9pZFxuICAgICAgICApOiB2b2lkIHsgfVxuXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIEFQSeexu+eahOS9v+eUqOaWueW8j++8muWFiGltcG9ydCBBUEnnsbvvvIznhLblkI7osIPnlKhBUEnnsbvnmoRyZXF1ZXN05pa55rOV77yM5q+U5aaC77yaXG4gICAgaW1wb3J0IHsgcG9zdENsaWVudEJpekF1dGhMb2dpbiB9IGZyb20gJy4uLy4uL2JhY2tlbmRBcGkvYWNjb3VudC9wb3N0Q2xpZW50Qml6QXV0aExvZ2luJ1xuICAgIC4uLlxuICAgIGNvbnN0IHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0ID0ge1xuICAgICAgdXNlcm5hbWU6ICdhZG1pbicsXG4gICAgICBwYXNzd29yZDogJzEyMzQ1NicsXG4gICAgICBrZXk6ICcxMjM0NTYnLFxuICAgICAgY2FwdGNoYTogJzEyMzQ1NidcbiAgICB9XG4gICAgcG9zdENsaWVudEJpekF1dGhMb2dpbi5yZXF1ZXN0X0FydHVYMWQ4YTZBKHJlcXVlc3QsIChyZXNwb25zZTogcG9zdENsaWVudEJpekF1dGhMb2dvdXRSZXNwb25zZSkgPT4ge1xuICAgICAgLy8g6K+35rGC5oiQ5Yqf5ZCO55qE5aSE55CGXG4gICAgfSwgKGVycm9yOiBhcGlGYWlsSW5mbykgPT4ge1xuICAgICAgLy8g6K+35rGC5aSx6LSl5ZCO55qE5aSE55CGXG4gICAgfSlcbiAgICAuLi5cblxuIyMgOS4gKirnkIbop6PosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumioqXG4gIC0g5Zyo6LCD55So5ZCO56uvYXBp5o6l5Y+j6L+U5Zue5pWw5o2u5ZCO77yM6ZyA6KaB5qC55o2udnR5cGXmnaXlgZrkuI3lkIznmoTmlbDmja7nu5HlrprvvIzmr5TlpoLvvJpcbiAgICAtIHZ0eXBlPVwidmVydGljYWxMaXN0Vmlld1wi44CBdnR5cGU9XCJob3Jpem9udGFsTGlzdFZpZXdcIuOAgXZ0eXBlPVwidmlld1BhZ2VyXCLnsbvlnovnmoToioLngrnnu4Tku7bvvIzpnIDopoHkvb/nlKhzZXREYXRhTGlzdOaWueazleadpee7keWumuaVsOaNru+8jOavlOWmgu+8mlxuICAgICAgdGhpcy54eHhWZXJ0aWNhbExpc3RWaWV3LnNldERhdGFMaXN0KHJlc3BvbnNlLmRhdGEubGlzdCnjgIF0aGlzLnh4eEhvcml6b250YWxMaXN0Vmlldy5zZXREYXRhTGlzdChyZXNwb25zZS5kYXRhLmxpc3Qp44CBdGhpcy54eHhWaWV3UGFnZXIuc2V0RGF0YUxpc3QocmVzcG9uc2UuZGF0YS5saXN0KVxuICAgIC0gdnR5cGU9XCJsaXN0SXRlbUNhcmRcIuOAgXZ0eXBlPVwib25lVmlld1BhZ2VyQ29udGVudFwi57G75Z6L55qE6IqC54K557uE5Lu277yM6ZyA6KaB5rex5bqm6YGN5Y6G5a6D55qE56ysMeS4qml0ZW3nmoTlranlrZDvvIznhLblkI7nu5PlkIjlkI7nq69hcGnov5Tlm57nmoR4eHhSZXNwb25zZeeahOaVsOaNrue7k+aehOe7meesrDHkuKppdGVt6K6+572u5pWw5o2u77yM5rOo5oSP5Y+q6ZyA57uZ56ysMeS4qml0ZW3oioLngrnorr7nva7mlbDmja7vvIzogIzkuI3mmK/miYDmnIlpdGVt6IqC54K56YO96K6+572u5pWw5o2u77yM5q+U5aaC77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICAvLyDlkI7nq694eHhBcGnov5Tlm57nmoR4eHhSZXNwb25zZeaVsOaNrue7k+aehFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlIHtcbiAgICAgICAgICBjb2RlOiBudW1iZXJcbiAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGlzdDogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBudW1iZXIgLy8g5Lmm57GNSURcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RyaW5nIC8vIOS5puexjeagh+mimFxuICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcjogc3RyaW5nIC8vIOS9nOiAheWQjeensFxuICAgICAgICAgICAgICAgICAgICAgIGNvdmVyVXJsOiBzdHJpbmcgLy8g5bCB6Z2i5Zu+54mHVVJMXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyAvLyDkuabnsY3nroDku4tcbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWU6IHN0cmluZyAvLyDliIbnsbvlkI3np7BcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSAvLyDkuabnsY3liJfooahcbiAgICAgICAgICAgICAgdG90YWw6IG51bWJlciAvLyDmgLvmlbDph49cbiAgICAgICAgICAgICAgcGFnZTogbnVtYmVyIC8vIOW9k+WJjemhteeggVxuICAgICAgICAgICAgICBzaXplOiBudW1iZXIgLy8g5q+P6aG15pWw6YePXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLi4uXG4gICAgICAvLyDorr7nva7kuabnsY3liJfooajmlbDmja5cbiAgICAgIHRoaXMucmVjb21tZW5kQm9va0xpc3Quc2V0RGF0YUxpc3QoZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZS5kYXRhLmxpc3QpXG4gICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgdGhpcy5yZWNvbW1lbmRCb29rQ292ZXIxLnNyYyA9IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UuZGF0YS5saXN0WzBdLmNvdmVyVXJsXG4gICAgICB0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dCA9IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UuZGF0YS5saXN0WzBdLnRpdGxlXG4gICAgICB0aGlzLnJlY29tbWVuZEJvb2tBdXRob3IxLnRleHQgPSBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlLmRhdGEubGlzdFswXS5hdXRob3JcbiAgICAgIC4uLlxuICAgICAgLy8g6K6+572u6L2u5pKt5pWw5o2uXG4gICAgICB0aGlzLnJlY29tbWVuZFZpZXdQYWdlci5zZXREYXRhTGlzdChnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlLmRhdGEubGlzdClcbiAgICAgIC8vIOiuvue9ruesrDHkuKppdGVt6IqC54K55pWw5o2uXG4gICAgICB0aGlzLnJlY29tbWVuZEltYWdlMS5zcmMgPSBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlLmRhdGEubGlzdFswXS5jb3ZlclVybFxuICAgICAgdGhpcy5jYXJvdXNlbFRpdGxlMS50ZXh0ID0gZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZS5kYXRhLmxpc3RbMF0udGl0bGVcbiAgICAgIC4uLlxuICAgICAgXFxgXFxgXFxgXG5cbiMjIDEwLiDova7mkq1WaWV3UGFnZXLnmoTmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li6Vmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHlt7Lnu4/oh6rliqjlrp7njrDkuobvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcblxuIyMgMTEuIOemgeeUqOS7peS4izbnp43ku6PnoIHlhpnms5Vcbi0gMeOAgeemgeatouWcqOWHveaVsOmHjOmdouWumuS5ieWGhemDqOWHveaVsO+8jOW/hemhu+WumuS5ieWHveaVsOS4uuWFqOWxgOWHveaVsFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgY29uc3QgY291bnRDYXJkRGF0YTogbnVtYmVyID0gKCkgPT4ge1xuICAgICAgICAgIC8vIHh4eOS7o+eggVxuICAgICAgfVxuICAgICAgY29uc3QgY291bnQgPSBjb3VudENhcmREYXRhKClcbiAgfVxuICBcXGBcXGBcXGBcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5jb3VudENhcmREYXRhKClcbiAgfVxuICBwcml2YXRlIGNvdW50Q2FyZERhdGEoKTogbnVtYmVyIHtcbiAgICAvLyB4eHjku6PnoIFcbiAgfVxuICBcXGBcXGBcXGBcbi0gMuOAgeemgeatouS9v+eUqGZvci5pbuW+queOr++8jOW/hemhu+S9v+eUqGZvcmnlvqrnjq/nmoTlhpnms5XvvIzpgqPkuYjlsLHpnIDopoHnu5PlkIhPYmplY3Qua2V5cyh4eHgp5p2l5YWI6I635Y+W5Yiw5a+56LGh55qEa2V5c++8jOWGjWZvcmnpgY3ljoblr7nosaHlsZ7mgKdcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgZm9yIChjb25zdCBrZXkgaW4gaG90UmV2aWV3T2JqKSB7XG4gICAgICB1cGRhdGVkUmV2aWV3W2tleV0gPSBob3RSZXZpZXdPYmpba2V5XTtcbiAgfVxuICBcXGBcXGBcXGBcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhvdFJldmlld3NEYXRhKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB1cGRhdGVkUmV2aWV3W2tleV0gPSBob3RSZXZpZXdzRGF0YVtrZXlzW2ldXTtcbiAgfVxuICBcXGBcXGBcXGBcbi0gM+OAgeS7u+S9leaWueazleWHveaVsOWumuS5ie+8jOe7neWvueemgeatouS9v+eUqGFzeW5j5ZKMUHJvbWlzZe+8jOS4jeWFgeiuuOS9v+eUqFByb21pc2UucmFjZeOAgVByb21pc2UuYWxs562JUHJvbWlzZeebuOWFs+aWueazle+8jOaJgOacieW8guatpeaTjeS9nOW/hemhu+S9v+eUqOeureWktOWHveaVsOOAglxuLSA044CB56aB5q2i5L2/55So5q2j5YiZ77yM6K+35L2/55So5a2X56ym5Liy5pON5L2c5p2l5pu/5o2i5a6e546wXG4tIDXjgIHnpoHmraLkvb/nlKhsaWIuZG9tLmQudHPmlofku7bph4zpnaLnmoTmlrnms5XvvIzlm6DkuLpsaWIuZG9tLmQudHPmlofku7bph4zpnaLnmoTmlrnms5Xpg73mmK/mtY/op4jlmajnjq/looPnmoTmlrnms5XvvIzkuI3lhYHorrjlnKhOb2RlLmpz546v5aKD5LiL5L2/55So44CCXG4tIDbjgIHnpoHmraLkv67mlLnjgIHmlrDlop7jgIHliKDpmaRzcmMvbGli5paH5Lu25aS55Y+K5YW25omA5pyJ5a2Q5paH5Lu25aS55Lit55qE5paH5Lu244CCXG5cbmA7XG4iXX0=
package/build/index.js CHANGED
@@ -53,6 +53,15 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
53
53
  required: []
54
54
  }
55
55
  },
56
+ {
57
+ name: 'understanding_code_framework_prompt',
58
+ description: 'Return prompt for understanding project code framework',
59
+ inputSchema: {
60
+ type: 'object',
61
+ properties: {},
62
+ required: []
63
+ }
64
+ },
56
65
  {
57
66
  name: 'optimize_code_design_prompt',
58
67
  description: 'Optimize prompt for code logic design thinking before development, generating detailed design documentation',
@@ -307,6 +316,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
307
316
  }
308
317
  ]
309
318
  };
319
+ case 'understanding_code_framework_prompt':
320
+ const appCodeFrameworkText = await promptOptimizer.understandingAppCodeFrameworkPrompt();
321
+ return {
322
+ content: [
323
+ {
324
+ type: 'text',
325
+ text: appCodeFrameworkText
326
+ }
327
+ ]
328
+ };
310
329
  case 'optimize_code_design_prompt':
311
330
  const optimizedCodeDesignPrompt = await promptOptimizer.optimizeCodeDesignPrompt(args.user_input);
312
331
  return {
@@ -484,4 +503,4 @@ async function main() {
484
503
  console.error('ByteFun AI Prompt MCP server running on stdio');
485
504
  }
486
505
  main().catch(console.error);
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUV2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDdkI7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQ0YsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFJOUMsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxRCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsV0FBVyxFQUFFLHVEQUF1RDtnQkFDcEUsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLGlEQUFpRDt5QkFDL0Q7d0JBQ0QsVUFBVSxFQUFFOzRCQUNWLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSxvRkFBb0Y7eUJBQ2xHO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7aUJBQ3JDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxXQUFXLEVBQUUsbUZBQW1GO2dCQUNoRyxXQUFXLEVBQUU7b0JBQ1gsSUFBSSxF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QUEyQjt5QkFDbEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUVKLDhDQUE4QztZQUM5QywrSEFBK0g7WUFDL0gsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixVQUFVO1lBQ1Ysd0JBQXdCO1lBQ3hCLGlEQUFpRDtZQUNqRCxVQUFVO1lBQ1YsUUFBUTtZQUNSLE9BQU87WUFFUCxtQ0FBbUM7WUFDbkMsd0dBQXdHO1lBQ3hHLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsVUFBVTtZQUNWLHdCQUF3QjtZQUN4QixvQ0FBb0M7WUFDcEMsVUFBVTtZQUNWLFFBQVE7WUFDUixPQUFPO1lBRVA7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxVQUFVLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtpQkFDekU7YUFDRjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUM3QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJztcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbiAgVG9vbCxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcyc7XG5pbXBvcnQgeyBQcm9tcHRPcHRpbWl6ZXIgfSBmcm9tICcuL3Byb21wdC1vcHRpbWl6ZXIuanMnO1xuXG5jb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICB7XG4gICAgbmFtZTogJ2J5dGVmdW4tYWktcHJvbXB0JyxcbiAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICB9XG4pO1xuXG5jb25zdCBwcm9tcHRPcHRpbWl6ZXIgPSBuZXcgUHJvbXB0T3B0aW1pemVyKCk7XG5cblxuXG4vLyBMaXN0IGF2YWlsYWJsZSB0b29sc1xuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0b29sczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfcHJvZHVjdF9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIHByb2R1Y3QgYW5kIGJ1c2luZXNzIGxvZ2ljIGRlc2lnbicsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5kdXN0cnk6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGluZHVzdHJ5IHRoYXQgdGhlIEFQUCBvciB3ZWJzaXRlIGJlbG9uZ3MgdG8nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgcHJvZHVjdCBhbmQgYnVzaW5lc3MgbG9naWMgZGVzaWduJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsnaW5kdXN0cnknLCAndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFVJIGRlc2lnbiBieSByZWFkaW5nIHBhZ2UgbGlzdCBhbmQgcmVxdWlyZW1lbnRzIGZyb20gZG9jIGZpbGUnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIGRlc2lnbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndWlfZGVzaWduX2d1aWRlX3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGNvbXByZWhlbnNpdmUgVUkgZGVzaWduIGd1aWRlIHByb21wdCB3aXRoIHN0cmljdCBleGVjdXRpb24gcnVsZXMnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfY29kZV9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIGNvZGUgbG9naWMgZGVzaWduIHRoaW5raW5nIGJlZm9yZSBkZXZlbG9wbWVudCwgZ2VuZXJhdGluZyBkZXRhaWxlZCBkZXNpZ24gZG9jdW1lbnRhdGlvbicsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgY29kZSBsb2dpYyBkZXNpZ24gdGhpbmtpbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2ltcGxlbWVudF9sb2dpY19jb2RlX3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBUeXBlU2NyaXB0IGNvZGUgZGV2ZWxvcG1lbnQgYnkgYWRkaW5nIGNvZGUgZGV2ZWxvcG1lbnQgcnVsZXMgYW5kIG1hcmtpbmcgdXNlciBpbnB1dCcsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgY29kZSBkZXZlbG9wbWVudCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8ge1xuICAgICAgLy8gICBuYW1lOiAnb3B0aW1pemVfaGFuZF9kcmF3bl91aV9kZXNpZ25fcHJvbXB0JyxcbiAgICAgIC8vICAgZGVzY3JpcHRpb246ICdBbmFseXplIGhhbmQtZHJhd24gVUkgZGVzaWduIHNrZXRjaGVzIGFuZCBleHRyYWN0IGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBVSSBkZXNpZ24nLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC8vICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCB3aXRoIGhhbmQtZHJhd24gVUkgZGVzaWduIHNrZXRjaCB0aGF0IG5lZWRzIHRvIGJlIGFuYWx5emVkJ1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fdGhpbmtpbmdfcHJvbXB0JyxcbiAgICAgIC8vICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFVJIGRlc2lnbiB0aGlua2luZyBwcm9jZXNzIGJlZm9yZSBhY3R1YWwgZGVzaWduIHdvcmssIGdlbmVyYXRpbmcgZGV0YWlsZWQgVUkgZGVzaWduIHRoaW5raW5nIGRvY3VtZW50YXRpb24nLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC8vICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIGRlc2lnbiB0aGlua2luZyBwcm9jZXNzJ1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sXG5cbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX2JhY2tlbmRfZGVzaWduX3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBiYWNrZW5kIGRhdGFiYXNlIGFuZCBBUEkgaW50ZXJmYWNlIGRlc2lnbiBieSByZWFkaW5nIG1vZHVsZSBidXNpbmVzcyBsb2dpYyBkb2N1bWVudHMnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIGJhY2tlbmQgZGF0YWJhc2UgYW5kIEFQSSBpbnRlcmZhY2UgZGVzaWduJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIG5hbWU6ICdmdW5jdGlvbmFsX21vZHVsZV9idXNpbmVzc19sb2dpY19wcm9tcHQnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgZnVuY3Rpb25hbCBtb2R1bGUgYnVzaW5lc3MgbG9naWMgYW5hbHlzaXMgYmFzZWQgb24gcHJvZHVjdCByZXF1aXJlbWVudHMgZG9jdW1lbnQnLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC8vICAgICAgIGZ1bmN0aW9uYWxNb2R1bGU6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGZ1bmN0aW9uYWwgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBkZXNpZ25lZCdcbiAgICAgIC8vICAgICAgIH0sXG4gICAgICAvLyAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgLy8gICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBmdW5jdGlvbmFsIG1vZHVsZSBidXNpbmVzcyBsb2dpYyBhbmFseXNpcydcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHJlcXVpcmVkOiBbJ2Z1bmN0aW9uYWxNb2R1bGUnLCAndXNlcl9pbnB1dCddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sXG5cbiAgICAgIC8vIHtcbiAgICAgIC8vICAgbmFtZTogJ3RhbGtfdG9fZWRpdG9yJyxcbiAgICAgIC8vICAgZGVzY3JpcHRpb246ICdFc3RhYmxpc2ggbG9uZyBjb25uZWN0aW9uIHdpdGggZWRpdG9yIGJhY2tlbmQgdXNpbmcgU29ja2V0LklPLiBCZWZvcmUgY2FsbGluZyB0aGlzIHRvb2wsIHlvdSBtdXN0IGZpcnN0IHVzZSByZWFkX2ZpbGUgdG8gcmVhZCAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24gYW5kIGdldCBwcm9qZWN0SUQgYW5kIHVpZCB2YWx1ZXMuIFRoaXMgdG9vbCB3aWxsIHdhaXQgZm9yIGJhY2tlbmQgbWVzc2FnZXMgYW5kIHJldHVybiB0YXNrcyB0byBleGVjdXRlLicsXG4gICAgICAvLyAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAvLyAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAvLyAgICAgcHJvcGVydGllczoge1xuICAgICAgLy8gICAgICAgcHJvamVjdElEOiB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgLy8gICAgICAgICBkZXNjcmlwdGlvbjogJ1Byb2plY3QgSUQgZnJvbSAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24gY29uZmlndXJhdGlvbiBmaWxlJ1xuICAgICAgLy8gICAgICAgfSxcbiAgICAgIC8vICAgICAgIHVpZDoge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIElEIGZyb20gLmJ5dGVmdW4vcHJvamVjdC5qc29uIGNvbmZpZ3VyYXRpb24gZmlsZSdcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHJlcXVpcmVkOiBbJ3Byb2plY3RJRCcsICd1aWQnXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9LFxuICAgICAgLy8ge1xuICAgICAgLy8gICBuYW1lOiAndGFsa190b19lZGl0b3JfcnVsZXMnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ0dldCBBSSBiZWhhdmlvciBydWxlcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0YWxrX3RvX2VkaXRvciB0b29sLiBSZXR1cm5zIGRldGFpbGVkIGluc3RydWN0aW9ucyBvbiBob3cgQUkgc2hvdWxkIG1haW50YWluIGNvbnRpbnVvdXMgY29udmVyc2F0aW9uIGFuZCB3YWl0IGZvciBiYWNrZW5kIGNvbnRyb2wuJyxcbiAgICAgIC8vICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIC8vICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIC8vICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIC8vICAgICByZXF1aXJlZDogW11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2ltcGxlbWVudF9iYWNrZW5kX2NvZGVfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIGJhY2tlbmQgY29kZSBkZXZlbG9wbWVudCBieSByZWFkaW5nIGJhY2tlbmQgZGVzaWduIGRvY3VtZW50cyBhbmQgYXBwbHlpbmcgY29kaW5nIHN0YW5kYXJkcycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgYmFja2VuZCBjb2RlIGRldmVsb3BtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fZWRpdF9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVUkgZGVzaWduIG1vZGlmaWNhdGlvbiBhbmQgZWRpdGluZyB0YXNrcywgcmV0dXJuaW5nIGRldGFpbGVkIFVJIGRlc2lnbiBzcGVjaWZpY2F0aW9ucycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgVUkgZGVzaWduIG1vZGlmaWNhdGlvbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8ge1xuICAgICAgLy8gICBuYW1lOiAnb3B0aW1pemVfdWlfZGVzaWduX3JlcGxlbmlzaF9wcm9tcHQnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVUkgZGVzaWduIEhUTUwgcmVwbGVuaXNobWVudCBhbmQgYXR0cmlidXRlIGNvbXBsZXRpb24nLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC8vICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIGRlc2lnbiBIVE1MIHJlcGxlbmlzaG1lbnQnXG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgfSxcbiAgICAgIC8vICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX2p1bXBfcGFnZV9jb2RlX3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBwYWdlIG5hdmlnYXRpb24gY29kZSBkZXZlbG9wbWVudCBiYXNlZCBvbiBVSSBkZXNpZ24gcHJvZ3Jlc3MgYW5kIGp1bXBpbmcgcnVsZXMnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIHBhZ2UgbmF2aWdhdGlvbiBjb2RlIGRldmVsb3BtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIG5hbWU6ICdvcHRpbWl6ZV9kZWNsYXJhdGl2ZV91aV9wcm9tcHQnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgZGVjbGFyYXRpdmUgVUkgZGVzaWduIHVzaW5nIEpTT04gZm9ybWF0IHRvIGRlc2NyaWJlIFVJIGNvbXBvbmVudHMgYW5kIGludGVyZmFjZXMnLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC8vICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIGRlY2xhcmF0aXZlIFVJIGRlc2lnbidcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfdWlfc3BlY19kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFVJIHNwZWNpZmljYXRpb24gZGVzaWduIGJhc2VkIG9uIHByb2R1Y3QgcmVxdWlyZW1lbnRzIGRvY3VtZW50IHRvIGNvbXBsZXRlIFVJIGRlc2lnbiBzdGFuZGFyZHMnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIHNwZWNpZmljYXRpb24gZGVzaWduJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHtcbiAgICAgIC8vICAgbmFtZTogJ2ltcGxlbWVudF91aV9jb2RlX3Byb21wdCcsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHByb21wdCBmb3IgaW1wbGVtZW50aW5nIFVJIGNvZGUgd2l0aCBzdHJpY3QgZXhlY3V0aW9uIHN0ZXBzJyxcbiAgICAgIC8vICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIC8vICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIC8vICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAvLyAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgLy8gICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgZGVzY3JpYmluZyBVSSBjb2RlIGltcGxlbWVudGF0aW9uIHJlcXVpcmVtZW50cydcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgXSBhcyBUb29sW11cbiAgfTtcbn0pO1xuXG4vLyBIYW5kbGUgdG9vbCBjYWxsc1xuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKENhbGxUb29sUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBhcmd1bWVudHM6IGFyZ3MgfSA9IHJlcXVlc3QucGFyYW1zO1xuXG4gIGlmICghYXJncykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudHMnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlICdvcHRpbWl6ZV9wcm9kdWN0X2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRQcm9kdWN0RGVzaWduUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdChhcmdzLmluZHVzdHJ5IGFzIHN0cmluZywgYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFByb2R1Y3REZXNpZ25Qcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRVSVByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAndWlfZGVzaWduX2d1aWRlX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IHVpRGVzaWduR3VpZGVUZXh0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLnVpRGVzaWduR3VpZGVQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogdWlEZXNpZ25HdWlkZVRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX2NvZGVfZGVzaWduX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZENvZGVEZXNpZ25Qcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVDb2RlRGVzaWduUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRDb2RlRGVzaWduUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdpbXBsZW1lbnRfbG9naWNfY29kZV9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRDb2RlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplQ29kZVByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkQ29kZVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgLy8gY2FzZSAnb3B0aW1pemVfaGFuZF9kcmF3bl91aV9kZXNpZ25fcHJvbXB0JzpcbiAgICAgIC8vICAgY29uc3Qgb3B0aW1pemVkSGFuZERyYXduUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplSGFuZERyYXduVUlEZXNpZ25Qcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAvLyAgIHJldHVybiB7XG4gICAgICAvLyAgICAgY29udGVudDogW1xuICAgICAgLy8gICAgICAge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAvLyAgICAgICAgIHRleHQ6IG9wdGltaXplZEhhbmREcmF3blByb21wdFxuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgfTtcblxuICAgICAgLy8gY2FzZSAnb3B0aW1pemVfdWlfZGVzaWduX3RoaW5raW5nX3Byb21wdCc6XG4gICAgICAvLyAgIGNvbnN0IG9wdGltaXplZFVJRGVzaWduVGhpbmtpbmdQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVVSURlc2lnblRoaW5raW5nUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgLy8gICAgIGNvbnRlbnQ6IFtcbiAgICAgIC8vICAgICAgIHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgLy8gICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSURlc2lnblRoaW5raW5nUHJvbXB0XG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV9iYWNrZW5kX2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRCYWNrZW5kRGVzaWduUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplQmFja2VuZERlc2lnblByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkQmFja2VuZERlc2lnblByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnZnVuY3Rpb25hbF9tb2R1bGVfYnVzaW5lc3NfbG9naWNfcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkRnVuY3Rpb25hbE1vZHVsZVByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZUZ1bmN0aW9uYWxNb2R1bGVQcm9tcHQoYXJncy5mdW5jdGlvbmFsTW9kdWxlIGFzIHN0cmluZywgYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZEZ1bmN0aW9uYWxNb2R1bGVQcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cblxuICAgICAgLy8gY2FzZSAndGFsa190b19lZGl0b3InOlxuICAgICAgLy8gICBjb25zdCBwcm9qZWN0SUQgPSBhcmdzLnByb2plY3RJRCBhcyBudW1iZXIgfHwgMDtcbiAgICAgIC8vICAgY29uc3QgdWlkID0gYXJncy51aWQgYXMgbnVtYmVyIHx8IDA7XG4gICAgICAgIFxuICAgICAgLy8gICBjb25zdCB0YWxrUmVzdWx0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLnRhbGtUb0VkaXRvcih7XG4gICAgICAvLyAgICAgcHJvamVjdElELFxuICAgICAgLy8gICAgIHVpZFxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgIC8vICAgICBjb250ZW50OiBbXG4gICAgICAvLyAgICAgICB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIC8vICAgICAgICAgdGV4dDogdGFsa1Jlc3VsdFxuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgfTtcblxuICAgICAgLy8gY2FzZSAndGFsa190b19lZGl0b3JfcnVsZXMnOlxuICAgICAgLy8gICBjb25zdCBydWxlc1Jlc3VsdCA9IGF3YWl0IHByb21wdE9wdGltaXplci50YWxrVG9FZGl0b3JSdWxlcygpO1xuICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgLy8gICAgIGNvbnRlbnQ6IFtcbiAgICAgIC8vICAgICAgIHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgLy8gICAgICAgICB0ZXh0OiBydWxlc1Jlc3VsdFxuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgfTtcblxuICAgICAgY2FzZSAnaW1wbGVtZW50X2JhY2tlbmRfY29kZV9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRCYWNrZW5kQ29kZVByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZUJhY2tlbmRDb2RlUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRCYWNrZW5kQ29kZVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfdWlfZGVzaWduX2VkaXRfcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkVUlEZXNpZ25FZGl0UHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplVUlEZXNpZ25FZGl0UHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSURlc2lnbkVkaXRQcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX2p1bXBfcGFnZV9jb2RlX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZEp1bXBQYWdlQ29kZVByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZUp1bXBQYWdlQ29kZVByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkSnVtcFBhZ2VDb2RlUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICAvLyBjYXNlICdvcHRpbWl6ZV9kZWNsYXJhdGl2ZV91aV9wcm9tcHQnOlxuICAgICAgLy8gICBjb25zdCBvcHRpbWl6ZWREZWNsYXJhdGl2ZVVJUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplRGVjbGFyYXRpdmVVSVByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgIC8vICAgICBjb250ZW50OiBbXG4gICAgICAvLyAgICAgICB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIC8vICAgICAgICAgdGV4dDogb3B0aW1pemVkRGVjbGFyYXRpdmVVSVByb21wdFxuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfdWlfc3BlY19kZXNpZ25fcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkVUlTcGVjRGVzaWduUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplVUlTcGVjRGVzaWduUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSVNwZWNEZXNpZ25Qcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIC8vIGNhc2UgJ29wdGltaXplX3VpX2Rlc2lnbl9yZXBsZW5pc2hfcHJvbXB0JzpcbiAgICAgIC8vICAgY29uc3Qgb3B0aW1pemVkVUlEZXNpZ25SZXBsZW5pc2hQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVVSURlc2lnblJlcGxlbmlzaFByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgIC8vICAgICBjb250ZW50OiBbXG4gICAgICAvLyAgICAgICB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIC8vICAgICAgICAgdGV4dDogb3B0aW1pemVkVUlEZXNpZ25SZXBsZW5pc2hQcm9tcHRcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICBdXG4gICAgICAvLyAgIH07XG5cbiAgICAgIC8vIGNhc2UgJ2ltcGxlbWVudF91aV9jb2RlX3Byb21wdCc6XG4gICAgICAvLyAgIGNvbnN0IGltcGxlbWVudFVJQ29kZVRleHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIuaW1wbGVtZW50VUlDb2RlUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgLy8gICAgIGNvbnRlbnQ6IFtcbiAgICAgIC8vICAgICAgIHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgLy8gICAgICAgICB0ZXh0OiBpbXBsZW1lbnRVSUNvZGVUZXh0XG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICB9O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdG9vbDogJHtuYW1lfWApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHRleHQ6IGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgaXNFcnJvcjogdHJ1ZVxuICAgIH07XG4gIH1cbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQoKTtcbiAgYXdhaXQgc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgY29uc29sZS5lcnJvcignQnl0ZUZ1biBBSSBQcm9tcHQgTUNQIHNlcnZlciBydW5uaW5nIG9uIHN0ZGlvJyk7XG59XG5cbm1haW4oKS5jYXRjaChjb25zb2xlLmVycm9yKTsiXX0=
506
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUV2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDdkI7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQ0YsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFJOUMsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxRCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsV0FBVyxFQUFFLHVEQUF1RDtnQkFDcEUsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixRQUFRLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLGlEQUFpRDt5QkFDL0Q7d0JBQ0QsVUFBVSxFQUFFOzRCQUNWLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSxvRkFBb0Y7eUJBQ2xHO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7aUJBQ3JDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxXQUFXLEVBQUUsbUZBQW1GO2dCQUNoRyxXQUFXLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLFVBQVUsRUFBRTs0QkFDVixJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsNERBQTREO3lCQUMxRTtxQkFDRjtvQkFDRCxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3pCO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixXQUFXLEVBQUUseUVBQXlFO2dCQUN0RixXQUFXLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLEVBQUU7b0JBQ2QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLFdBQVcsRUFBRSx3REFBd0Q7Z0JBQ3JFLFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUUsRUFBRTtvQkFDZCxRQUFRLEVBQUUsRUFBRTtpQkFDYjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDZCQUE2QjtnQkFDbkMsV0FBVyxFQUFFLDZHQUE2RztnQkFDMUgsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDZFQUE2RTt5QkFDM0Y7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDZCQUE2QjtnQkFDbkMsV0FBVyxFQUFFLHlHQUF5RztnQkFDdEgsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLG1FQUFtRTt5QkFDakY7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0QsSUFBSTtZQUNKLGtEQUFrRDtZQUNsRCx5R0FBeUc7WUFDekcsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0QixvQkFBb0I7WUFDcEIsc0JBQXNCO1lBQ3RCLDBCQUEwQjtZQUMxQiwrRkFBK0Y7WUFDL0YsVUFBVTtZQUNWLFNBQVM7WUFDVCwrQkFBK0I7WUFDL0IsTUFBTTtZQUNOLEtBQUs7WUFDTCxJQUFJO1lBQ0osZ0RBQWdEO1lBQ2hELG1KQUFtSjtZQUNuSixtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixzQkFBc0I7WUFDdEIsMEJBQTBCO1lBQzFCLHFHQUFxRztZQUNyRyxVQUFVO1lBQ1YsU0FBUztZQUNULCtCQUErQjtZQUMvQixNQUFNO1lBQ04sS0FBSztZQUVMO2dCQUNFLElBQUksRUFBRSxnQ0FBZ0M7Z0JBQ3RDLFdBQVcsRUFBRSwwR0FBMEc7Z0JBQ3ZILFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsVUFBVSxFQUFFOzRCQUNWLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSw0RkFBNEY7eUJBQzFHO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDekI7YUFDRjtZQUNELElBQUk7WUFDSixxREFBcUQ7WUFDckQseUhBQXlIO1lBQ3pILG1CQUFtQjtZQUNuQixzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLDRCQUE0QjtZQUM1QiwwQkFBMEI7WUFDMUIsd0VBQXdFO1lBQ3hFLFdBQVc7WUFDWCxzQkFBc0I7WUFDdEIsMEJBQTBCO1lBQzFCLG9IQUFvSDtZQUNwSCxVQUFVO1lBQ1YsU0FBUztZQUNULG1EQUFtRDtZQUNuRCxNQUFNO1lBQ04sS0FBSztZQUVMLElBQUk7WUFDSiw0QkFBNEI7WUFDNUIsZ1JBQWdSO1lBQ2hSLG1CQUFtQjtZQUNuQixzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsa0ZBQWtGO1lBQ2xGLFdBQVc7WUFDWCxlQUFlO1lBQ2YsMEJBQTBCO1lBQzFCLCtFQUErRTtZQUMvRSxVQUFVO1lBQ1YsU0FBUztZQUNULHFDQUFxQztZQUNyQyxNQUFNO1lBQ04sS0FBSztZQUNMLElBQUk7WUFDSixrQ0FBa0M7WUFDbEMsa01BQWtNO1lBQ2xNLG1CQUFtQjtZQUNuQixzQkFBc0I7WUFDdEIsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQixNQUFNO1lBQ04sS0FBSztZQUNMO2dCQUNFLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLFdBQVcsRUFBRSxnSEFBZ0g7Z0JBQzdILFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsVUFBVSxFQUFFOzRCQUNWLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSwyRUFBMkU7eUJBQ3pGO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDekI7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxnQ0FBZ0M7Z0JBQ3RDLFdBQVcsRUFBRSwyR0FBMkc7Z0JBQ3hILFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsVUFBVSxFQUFFOzRCQUNWLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSx5RUFBeUU7eUJBQ3ZGO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDekI7YUFDRjtZQUNELElBQUk7WUFDSixpREFBaUQ7WUFDakQsOEZBQThGO1lBQzlGLG1CQUFtQjtZQUNuQixzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLHNCQUFzQjtZQUN0QiwwQkFBMEI7WUFDMUIsdUdBQXVHO1lBQ3ZHLFVBQVU7WUFDVixTQUFTO1lBQ1QsK0JBQStCO1lBQy9CLE1BQU07WUFDTixLQUFLO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsV0FBVyxFQUFFLG9HQUFvRztnQkFDakgsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLG1GQUFtRjt5QkFDakc7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0QsSUFBSTtZQUNKLDRDQUE0QztZQUM1Qyx5SEFBeUg7WUFDekgsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0QixvQkFBb0I7WUFDcEIsc0JBQXNCO1lBQ3RCLDBCQUEwQjtZQUMxQixnR0FBZ0c7WUFDaEcsVUFBVTtZQUNWLFNBQVM7WUFDVCwrQkFBK0I7WUFDL0IsTUFBTTtZQUNOLEtBQUs7WUFDTDtnQkFDRSxJQUFJLEVBQUUsZ0NBQWdDO2dCQUN0QyxXQUFXLEVBQUUsb0hBQW9IO2dCQUNqSSxXQUFXLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLFVBQVUsRUFBRTs0QkFDVixJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsMEVBQTBFO3lCQUN4RjtxQkFDRjtvQkFDRCxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3pCO2FBQ0Y7WUFDRCxJQUFJO1lBQ0osc0NBQXNDO1lBQ3RDLHVGQUF1RjtZQUN2RixtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixzQkFBc0I7WUFDdEIsMEJBQTBCO1lBQzFCLG1GQUFtRjtZQUNuRixVQUFVO1lBQ1YsU0FBUztZQUNULCtCQUErQjtZQUMvQixNQUFNO1lBQ04sSUFBSTtTQUNLO0tBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDaEUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUVqRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLGdDQUFnQztnQkFDbkMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBa0IsRUFBRSxJQUFJLENBQUMsVUFBb0IsQ0FBQyxDQUFDO2dCQUMzSSxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsNEJBQTRCO3lCQUNuQztxQkFDRjtpQkFDRixDQUFDO1lBRUosS0FBSywyQkFBMkI7Z0JBQzlCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxlQUFlLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQW9CLENBQUMsQ0FBQztnQkFDbEcsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLGlCQUFpQjt5QkFDeEI7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUVKLEtBQUssd0JBQXdCO2dCQUMzQixNQUFNLGlCQUFpQixHQUFHLE1BQU0sZUFBZSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RFLE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxpQkFBaUI7eUJBQ3hCO3FCQUNGO2lCQUNGLENBQUM7WUFFSixLQUFLLHFDQUFxQztnQkFDeEMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLGVBQWUsQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO2dCQUN6RixPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsb0JBQW9CO3lCQUMzQjtxQkFDRjtpQkFDRixDQUFDO1lBRUosS0FBSyw2QkFBNkI7Z0JBQ2hDLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxlQUFlLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQW9CLENBQUMsQ0FBQztnQkFDNUcsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLHlCQUF5Qjt5QkFDaEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUVKLEtBQUssNkJBQTZCO2dCQUNoQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFvQixDQUFDLENBQUM7Z0JBQ2hHLE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxtQkFBbUI7eUJBQzFCO3FCQUNGO2lCQUNGLENBQUM7WUFFSiwrQ0FBK0M7WUFDL0MsdUhBQXVIO1lBQ3ZILGFBQWE7WUFDYixpQkFBaUI7WUFDakIsVUFBVTtZQUNWLHdCQUF3QjtZQUN4Qix5Q0FBeUM7WUFDekMsVUFBVTtZQUNWLFFBQVE7WUFDUixPQUFPO1lBRVAsNkNBQTZDO1lBQzdDLDZIQUE2SDtZQUM3SCxhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLFVBQVU7WUFDVix3QkFBd0I7WUFDeEIsZ0RBQWdEO1lBQ2hELFVBQVU7WUFDVixRQUFRO1lBQ1IsT0FBTztZQUVQLEtBQUssZ0NBQWdDO2dCQUNuQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sZUFBZSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxVQUFvQixDQUFDLENBQUM7Z0JBQ2xILE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSw0QkFBNEI7eUJBQ25DO3FCQUNGO2lCQUNGLENBQUM7WUFFSixLQUFLLHlDQUF5QztnQkFDNUMsTUFBTSwrQkFBK0IsR0FBRyxNQUFNLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsZ0JBQTBCLEVBQUUsSUFBSSxDQUFDLFVBQW9CLENBQUMsQ0FBQztnQkFDekosT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLCtCQUErQjt5QkFDdEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUdKLHlCQUF5QjtZQUN6QixxREFBcUQ7WUFDckQseUNBQXlDO1lBRXpDLDREQUE0RDtZQUM1RCxpQkFBaUI7WUFDakIsVUFBVTtZQUNWLFFBQVE7WUFDUixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLFVBQVU7WUFDVix3QkFBd0I7WUFDeEIsMkJBQTJCO1lBQzNCLFVBQVU7WUFDVixRQUFRO1lBQ1IsT0FBTztZQUVQLCtCQUErQjtZQUMvQixtRUFBbUU7WUFDbkUsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixVQUFVO1lBQ1Ysd0JBQXdCO1lBQ3hCLDRCQUE0QjtZQUM1QixVQUFVO1lBQ1YsUUFBUTtZQUNSLE9BQU87WUFFUCxLQUFLLCtCQUErQjtnQkFDbEMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBb0IsQ0FBQyxDQUFDO2dCQUM5RyxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsMEJBQTBCO3lCQUNqQztxQkFDRjtpQkFDRixDQUFDO1lBRUosS0FBSyxnQ0FBZ0M7Z0JBQ25DLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxlQUFlLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQW9CLENBQUMsQ0FBQztnQkFDaEgsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLDJCQUEyQjt5QkFDbEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUVKLEtBQUssZ0NBQWdDO2dCQUNuQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sZUFBZSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxVQUFvQixDQUFDLENBQUM7Z0JBQ2hILE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSwyQkFBMkI7eUJBQ2xDO3FCQUNGO2lCQUNGLENBQUM7WUFFSix5Q0FBeUM7WUFDekMsdUhBQXVIO1lBQ3ZILGFBQWE7WUFDYixpQkFBaUI7WUFDakIsVUFBVTtZQUNWLHdCQUF3QjtZQUN4Qiw2Q0FBNkM7WUFDN0MsVUFBVTtZQUNWLFFBQVE7WUFDUixPQUFPO1lBRVAsS0FBSyxnQ0FBZ0M7Z0JBQ25DLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxlQUFlLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQW9CLENBQUMsQ0FBQztnQkFDaEgsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLDJCQUEyQjt5QkFDbEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUVKLDhDQUE4QztZQUM5QywrSEFBK0g7WUFDL0gsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixVQUFVO1lBQ1Ysd0JBQXdCO1lBQ3hCLGlEQUFpRDtZQUNqRCxVQUFVO1lBQ1YsUUFBUTtZQUNSLE9BQU87WUFFUCxtQ0FBbUM7WUFDbkMsd0dBQXdHO1lBQ3hHLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsVUFBVTtZQUNWLHdCQUF3QjtZQUN4QixvQ0FBb0M7WUFDcEMsVUFBVTtZQUNWLFFBQVE7WUFDUixPQUFPO1lBRVA7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxVQUFVLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtpQkFDekU7YUFDRjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUM3QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJztcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbiAgVG9vbCxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcyc7XG5pbXBvcnQgeyBQcm9tcHRPcHRpbWl6ZXIgfSBmcm9tICcuL3Byb21wdC1vcHRpbWl6ZXIuanMnO1xuXG5jb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICB7XG4gICAgbmFtZTogJ2J5dGVmdW4tYWktcHJvbXB0JyxcbiAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICB9XG4pO1xuXG5jb25zdCBwcm9tcHRPcHRpbWl6ZXIgPSBuZXcgUHJvbXB0T3B0aW1pemVyKCk7XG5cblxuXG4vLyBMaXN0IGF2YWlsYWJsZSB0b29sc1xuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0b29sczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfcHJvZHVjdF9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIHByb2R1Y3QgYW5kIGJ1c2luZXNzIGxvZ2ljIGRlc2lnbicsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5kdXN0cnk6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGluZHVzdHJ5IHRoYXQgdGhlIEFQUCBvciB3ZWJzaXRlIGJlbG9uZ3MgdG8nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgcHJvZHVjdCBhbmQgYnVzaW5lc3MgbG9naWMgZGVzaWduJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsnaW5kdXN0cnknLCAndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFVJIGRlc2lnbiBieSByZWFkaW5nIHBhZ2UgbGlzdCBhbmQgcmVxdWlyZW1lbnRzIGZyb20gZG9jIGZpbGUnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIGRlc2lnbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndWlfZGVzaWduX2d1aWRlX3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGNvbXByZWhlbnNpdmUgVUkgZGVzaWduIGd1aWRlIHByb21wdCB3aXRoIHN0cmljdCBleGVjdXRpb24gcnVsZXMnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndW5kZXJzdGFuZGluZ19jb2RlX2ZyYW1ld29ya19wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiBwcm9tcHQgZm9yIHVuZGVyc3RhbmRpbmcgcHJvamVjdCBjb2RlIGZyYW1ld29yaycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgICAgcmVxdWlyZWQ6IFtdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV9jb2RlX2Rlc2lnbl9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgY29kZSBsb2dpYyBkZXNpZ24gdGhpbmtpbmcgYmVmb3JlIGRldmVsb3BtZW50LCBnZW5lcmF0aW5nIGRldGFpbGVkIGRlc2lnbiBkb2N1bWVudGF0aW9uJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBjb2RlIGxvZ2ljIGRlc2lnbiB0aGlua2luZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaW1wbGVtZW50X2xvZ2ljX2NvZGVfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFR5cGVTY3JpcHQgY29kZSBkZXZlbG9wbWVudCBieSBhZGRpbmcgY29kZSBkZXZlbG9wbWVudCBydWxlcyBhbmQgbWFya2luZyB1c2VyIGlucHV0JyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBjb2RlIGRldmVsb3BtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIG5hbWU6ICdvcHRpbWl6ZV9oYW5kX2RyYXduX3VpX2Rlc2lnbl9wcm9tcHQnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ0FuYWx5emUgaGFuZC1kcmF3biBVSSBkZXNpZ24gc2tldGNoZXMgYW5kIGV4dHJhY3QgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIFVJIGRlc2lnbicsXG4gICAgICAvLyAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAvLyAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAvLyAgICAgcHJvcGVydGllczoge1xuICAgICAgLy8gICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHdpdGggaGFuZC1kcmF3biBVSSBkZXNpZ24gc2tldGNoIHRoYXQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQnXG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgfSxcbiAgICAgIC8vICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSxcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgbmFtZTogJ29wdGltaXplX3VpX2Rlc2lnbl90aGlua2luZ19wcm9tcHQnLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVUkgZGVzaWduIHRoaW5raW5nIHByb2Nlc3MgYmVmb3JlIGFjdHVhbCBkZXNpZ24gd29yaywgZ2VuZXJhdGluZyBkZXRhaWxlZCBVSSBkZXNpZ24gdGhpbmtpbmcgZG9jdW1lbnRhdGlvbicsXG4gICAgICAvLyAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAvLyAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAvLyAgICAgcHJvcGVydGllczoge1xuICAgICAgLy8gICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgVUkgZGVzaWduIHRoaW5raW5nIHByb2Nlc3MnXG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgfSxcbiAgICAgIC8vICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSxcblxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfYmFja2VuZF9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIGJhY2tlbmQgZGF0YWJhc2UgYW5kIEFQSSBpbnRlcmZhY2UgZGVzaWduIGJ5IHJlYWRpbmcgbW9kdWxlIGJ1c2luZXNzIGxvZ2ljIGRvY3VtZW50cycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgYmFja2VuZCBkYXRhYmFzZSBhbmQgQVBJIGludGVyZmFjZSBkZXNpZ24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgbmFtZTogJ2Z1bmN0aW9uYWxfbW9kdWxlX2J1c2luZXNzX2xvZ2ljX3Byb21wdCcsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBmdW5jdGlvbmFsIG1vZHVsZSBidXNpbmVzcyBsb2dpYyBhbmFseXNpcyBiYXNlZCBvbiBwcm9kdWN0IHJlcXVpcmVtZW50cyBkb2N1bWVudCcsXG4gICAgICAvLyAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAvLyAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAvLyAgICAgcHJvcGVydGllczoge1xuICAgICAgLy8gICAgICAgZnVuY3Rpb25hbE1vZHVsZToge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgZnVuY3Rpb25hbCBtb2R1bGUgY3VycmVudGx5IGJlaW5nIGRlc2lnbmVkJ1xuICAgICAgLy8gICAgICAgfSxcbiAgICAgIC8vICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIGZ1bmN0aW9uYWwgbW9kdWxlIGJ1c2luZXNzIGxvZ2ljIGFuYWx5c2lzJ1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgcmVxdWlyZWQ6IFsnZnVuY3Rpb25hbE1vZHVsZScsICd1c2VyX2lucHV0J11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSxcblxuICAgICAgLy8ge1xuICAgICAgLy8gICBuYW1lOiAndGFsa190b19lZGl0b3InLFxuICAgICAgLy8gICBkZXNjcmlwdGlvbjogJ0VzdGFibGlzaCBsb25nIGNvbm5lY3Rpb24gd2l0aCBlZGl0b3IgYmFja2VuZCB1c2luZyBTb2NrZXQuSU8uIEJlZm9yZSBjYWxsaW5nIHRoaXMgdG9vbCwgeW91IG11c3QgZmlyc3QgdXNlIHJlYWRfZmlsZSB0byByZWFkIC5ieXRlZnVuL3Byb2plY3QuanNvbiBhbmQgZ2V0IHByb2plY3RJRCBhbmQgdWlkIHZhbHVlcy4gVGhpcyB0b29sIHdpbGwgd2FpdCBmb3IgYmFja2VuZCBtZXNzYWdlcyBhbmQgcmV0dXJuIHRhc2tzIHRvIGV4ZWN1dGUuJyxcbiAgICAgIC8vICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgIC8vICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIC8vICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAvLyAgICAgICBwcm9qZWN0SUQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnUHJvamVjdCBJRCBmcm9tIC5ieXRlZnVuL3Byb2plY3QuanNvbiBjb25maWd1cmF0aW9uIGZpbGUnXG4gICAgICAvLyAgICAgICB9LFxuICAgICAgLy8gICAgICAgdWlkOiB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgLy8gICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgSUQgZnJvbSAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24gY29uZmlndXJhdGlvbiBmaWxlJ1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgcmVxdWlyZWQ6IFsncHJvamVjdElEJywgJ3VpZCddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIG5hbWU6ICd0YWxrX3RvX2VkaXRvcl9ydWxlcycsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnR2V0IEFJIGJlaGF2aW9yIHJ1bGVzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRhbGtfdG9fZWRpdG9yIHRvb2wuIFJldHVybnMgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIG9uIGhvdyBBSSBzaG91bGQgbWFpbnRhaW4gY29udGludW91cyBjb252ZXJzYXRpb24gYW5kIHdhaXQgZm9yIGJhY2tlbmQgY29udHJvbC4nLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgLy8gICAgIHJlcXVpcmVkOiBbXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaW1wbGVtZW50X2JhY2tlbmRfY29kZV9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgYmFja2VuZCBjb2RlIGRldmVsb3BtZW50IGJ5IHJlYWRpbmcgYmFja2VuZCBkZXNpZ24gZG9jdW1lbnRzIGFuZCBhcHBseWluZyBjb2Rpbmcgc3RhbmRhcmRzJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBiYWNrZW5kIGNvZGUgZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX3VpX2Rlc2lnbl9lZGl0X3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBVSSBkZXNpZ24gbW9kaWZpY2F0aW9uIGFuZCBlZGl0aW5nIHRhc2tzLCByZXR1cm5pbmcgZGV0YWlsZWQgVUkgZGVzaWduIHNwZWNpZmljYXRpb25zJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBVSSBkZXNpZ24gbW9kaWZpY2F0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fcmVwbGVuaXNoX3Byb21wdCcsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBVSSBkZXNpZ24gSFRNTCByZXBsZW5pc2htZW50IGFuZCBhdHRyaWJ1dGUgY29tcGxldGlvbicsXG4gICAgICAvLyAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAvLyAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAvLyAgICAgcHJvcGVydGllczoge1xuICAgICAgLy8gICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgVUkgZGVzaWduIEhUTUwgcmVwbGVuaXNobWVudCdcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfanVtcF9wYWdlX2NvZGVfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIHBhZ2UgbmF2aWdhdGlvbiBjb2RlIGRldmVsb3BtZW50IGJhc2VkIG9uIFVJIGRlc2lnbiBwcm9ncmVzcyBhbmQganVtcGluZyBydWxlcycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgcGFnZSBuYXZpZ2F0aW9uIGNvZGUgZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgbmFtZTogJ29wdGltaXplX2RlY2xhcmF0aXZlX3VpX3Byb21wdCcsXG4gICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBkZWNsYXJhdGl2ZSBVSSBkZXNpZ24gdXNpbmcgSlNPTiBmb3JtYXQgdG8gZGVzY3JpYmUgVUkgY29tcG9uZW50cyBhbmQgaW50ZXJmYWNlcycsXG4gICAgICAvLyAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAvLyAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAvLyAgICAgcHJvcGVydGllczoge1xuICAgICAgLy8gICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgZGVjbGFyYXRpdmUgVUkgZGVzaWduJ1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV91aV9zcGVjX2Rlc2lnbl9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVUkgc3BlY2lmaWNhdGlvbiBkZXNpZ24gYmFzZWQgb24gcHJvZHVjdCByZXF1aXJlbWVudHMgZG9jdW1lbnQgdG8gY29tcGxldGUgVUkgZGVzaWduIHN0YW5kYXJkcycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgVUkgc3BlY2lmaWNhdGlvbiBkZXNpZ24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8ge1xuICAgICAgLy8gICBuYW1lOiAnaW1wbGVtZW50X3VpX2NvZGVfcHJvbXB0JyxcbiAgICAgIC8vICAgZGVzY3JpcHRpb246ICdSZXR1cm4gcHJvbXB0IGZvciBpbXBsZW1lbnRpbmcgVUkgY29kZSB3aXRoIHN0cmljdCBleGVjdXRpb24gc3RlcHMnLFxuICAgICAgLy8gICBpbnB1dFNjaGVtYToge1xuICAgICAgLy8gICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgLy8gICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC8vICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBkZXNjcmliaW5nIFVJIGNvZGUgaW1wbGVtZW50YXRpb24gcmVxdWlyZW1lbnRzJ1xuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIH0sXG4gICAgICAvLyAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICBdIGFzIFRvb2xbXVxuICB9O1xufSk7XG5cbi8vIEhhbmRsZSB0b29sIGNhbGxzXG5zZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICBjb25zdCB7IG5hbWUsIGFyZ3VtZW50czogYXJncyB9ID0gcmVxdWVzdC5wYXJhbXM7XG5cbiAgaWYgKCFhcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cycpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ29wdGltaXplX3Byb2R1Y3RfZGVzaWduX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZFByb2R1Y3REZXNpZ25Qcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KGFyZ3MuaW5kdXN0cnkgYXMgc3RyaW5nLCBhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkUHJvZHVjdERlc2lnblByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZFVJUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFVJUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICd1aV9kZXNpZ25fZ3VpZGVfcHJvbXB0JzpcbiAgICAgICAgY29uc3QgdWlEZXNpZ25HdWlkZVRleHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIudWlEZXNpZ25HdWlkZVByb21wdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiB1aURlc2lnbkd1aWRlVGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAndW5kZXJzdGFuZGluZ19jb2RlX2ZyYW1ld29ya19wcm9tcHQnOlxuICAgICAgICBjb25zdCBhcHBDb2RlRnJhbWV3b3JrVGV4dCA9IGF3YWl0IHByb21wdE9wdGltaXplci51bmRlcnN0YW5kaW5nQXBwQ29kZUZyYW1ld29ya1Byb21wdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBhcHBDb2RlRnJhbWV3b3JrVGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfY29kZV9kZXNpZ25fcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkQ29kZURlc2lnblByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZUNvZGVEZXNpZ25Qcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZENvZGVEZXNpZ25Qcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ2ltcGxlbWVudF9sb2dpY19jb2RlX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZENvZGVQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVDb2RlUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRDb2RlUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICAvLyBjYXNlICdvcHRpbWl6ZV9oYW5kX2RyYXduX3VpX2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgLy8gICBjb25zdCBvcHRpbWl6ZWRIYW5kRHJhd25Qcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVIYW5kRHJhd25VSURlc2lnblByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgIC8vICAgICBjb250ZW50OiBbXG4gICAgICAvLyAgICAgICB7XG4gICAgICAvLyAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIC8vICAgICAgICAgdGV4dDogb3B0aW1pemVkSGFuZERyYXduUHJvbXB0XG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICB9O1xuXG4gICAgICAvLyBjYXNlICdvcHRpbWl6ZV91aV9kZXNpZ25fdGhpbmtpbmdfcHJvbXB0JzpcbiAgICAgIC8vICAgY29uc3Qgb3B0aW1pemVkVUlEZXNpZ25UaGlua2luZ1Byb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVVJRGVzaWduVGhpbmtpbmdQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAvLyAgIHJldHVybiB7XG4gICAgICAvLyAgICAgY29udGVudDogW1xuICAgICAgLy8gICAgICAge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAvLyAgICAgICAgIHRleHQ6IG9wdGltaXplZFVJRGVzaWduVGhpbmtpbmdQcm9tcHRcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICBdXG4gICAgICAvLyAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX2JhY2tlbmRfZGVzaWduX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZEJhY2tlbmREZXNpZ25Qcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVCYWNrZW5kRGVzaWduUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRCYWNrZW5kRGVzaWduUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdmdW5jdGlvbmFsX21vZHVsZV9idXNpbmVzc19sb2dpY19wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRGdW5jdGlvbmFsTW9kdWxlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplRnVuY3Rpb25hbE1vZHVsZVByb21wdChhcmdzLmZ1bmN0aW9uYWxNb2R1bGUgYXMgc3RyaW5nLCBhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkRnVuY3Rpb25hbE1vZHVsZVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuXG4gICAgICAvLyBjYXNlICd0YWxrX3RvX2VkaXRvcic6XG4gICAgICAvLyAgIGNvbnN0IHByb2plY3RJRCA9IGFyZ3MucHJvamVjdElEIGFzIG51bWJlciB8fCAwO1xuICAgICAgLy8gICBjb25zdCB1aWQgPSBhcmdzLnVpZCBhcyBudW1iZXIgfHwgMDtcbiAgICAgICAgXG4gICAgICAvLyAgIGNvbnN0IHRhbGtSZXN1bHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIudGFsa1RvRWRpdG9yKHtcbiAgICAgIC8vICAgICBwcm9qZWN0SUQsXG4gICAgICAvLyAgICAgdWlkXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgLy8gICAgIGNvbnRlbnQ6IFtcbiAgICAgIC8vICAgICAgIHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgLy8gICAgICAgICB0ZXh0OiB0YWxrUmVzdWx0XG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICB9O1xuXG4gICAgICAvLyBjYXNlICd0YWxrX3RvX2VkaXRvcl9ydWxlcyc6XG4gICAgICAvLyAgIGNvbnN0IHJ1bGVzUmVzdWx0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLnRhbGtUb0VkaXRvclJ1bGVzKCk7XG4gICAgICAvLyAgIHJldHVybiB7XG4gICAgICAvLyAgICAgY29udGVudDogW1xuICAgICAgLy8gICAgICAge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAvLyAgICAgICAgIHRleHQ6IHJ1bGVzUmVzdWx0XG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICB9O1xuXG4gICAgICBjYXNlICdpbXBsZW1lbnRfYmFja2VuZF9jb2RlX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZEJhY2tlbmRDb2RlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplQmFja2VuZENvZGVQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZEJhY2tlbmRDb2RlUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV91aV9kZXNpZ25fZWRpdF9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRVSURlc2lnbkVkaXRQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVVSURlc2lnbkVkaXRQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFVJRGVzaWduRWRpdFByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfanVtcF9wYWdlX2NvZGVfcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkSnVtcFBhZ2VDb2RlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplSnVtcFBhZ2VDb2RlUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRKdW1wUGFnZUNvZGVQcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIC8vIGNhc2UgJ29wdGltaXplX2RlY2xhcmF0aXZlX3VpX3Byb21wdCc6XG4gICAgICAvLyAgIGNvbnN0IG9wdGltaXplZERlY2xhcmF0aXZlVUlQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVEZWNsYXJhdGl2ZVVJUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgLy8gICAgIGNvbnRlbnQ6IFtcbiAgICAgIC8vICAgICAgIHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgLy8gICAgICAgICB0ZXh0OiBvcHRpbWl6ZWREZWNsYXJhdGl2ZVVJUHJvbXB0XG4gICAgICAvLyAgICAgICB9XG4gICAgICAvLyAgICAgXVxuICAgICAgLy8gICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV91aV9zcGVjX2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRVSVNwZWNEZXNpZ25Qcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVVSVNwZWNEZXNpZ25Qcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFVJU3BlY0Rlc2lnblByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgLy8gY2FzZSAnb3B0aW1pemVfdWlfZGVzaWduX3JlcGxlbmlzaF9wcm9tcHQnOlxuICAgICAgLy8gICBjb25zdCBvcHRpbWl6ZWRVSURlc2lnblJlcGxlbmlzaFByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVVJRGVzaWduUmVwbGVuaXNoUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgLy8gICAgIGNvbnRlbnQ6IFtcbiAgICAgIC8vICAgICAgIHtcbiAgICAgIC8vICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgLy8gICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSURlc2lnblJlcGxlbmlzaFByb21wdFxuICAgICAgLy8gICAgICAgfVxuICAgICAgLy8gICAgIF1cbiAgICAgIC8vICAgfTtcblxuICAgICAgLy8gY2FzZSAnaW1wbGVtZW50X3VpX2NvZGVfcHJvbXB0JzpcbiAgICAgIC8vICAgY29uc3QgaW1wbGVtZW50VUlDb2RlVGV4dCA9IGF3YWl0IHByb21wdE9wdGltaXplci5pbXBsZW1lbnRVSUNvZGVQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAvLyAgIHJldHVybiB7XG4gICAgICAvLyAgICAgY29udGVudDogW1xuICAgICAgLy8gICAgICAge1xuICAgICAgLy8gICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAvLyAgICAgICAgIHRleHQ6IGltcGxlbWVudFVJQ29kZVRleHRcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICBdXG4gICAgICAvLyAgIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0b29sOiAke25hbWV9YCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBpc0Vycm9yOiB0cnVlXG4gICAgfTtcbiAgfVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpO1xuICBhd2FpdCBzZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICBjb25zb2xlLmVycm9yKCdCeXRlRnVuIEFJIFByb21wdCBNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW8nKTtcbn1cblxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuIl19
@@ -86,6 +86,7 @@ export declare class PromptOptimizer {
86
86
  * 注意:此方法专门处理UI前端代码实现需求,严格按步骤规则执行
87
87
  */
88
88
  implementUICodePrompt(userInput: string): Promise<string>;
89
+ understandingAppCodeFrameworkPrompt(): Promise<string>;
89
90
  /**
90
91
  * 与编辑器建立长连接,通过Socket.IO接收后端控制指令
91
92
  * 该方法会使用单例Socket连接等待后端消息,3分钟超时返回空任务
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAkBA,qBAAa,eAAe;IAE1B;;;OAGG;IACG,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvF;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;;;OAIG;IACG,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE;;;OAGG;IACG,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzE;;;OAGG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUrE;;;;OAIG;IACG,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxE;;;OAGG;IACG,8BAA8B,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAelG;;;;OAIG;IACG,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnE;;;;OAIG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUpE;;;OAGG;IACG,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzE;;;;OAIG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpE;;;;OAIG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrE;;;;OAIG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpE;;;OAGG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO/D;;;OAGG;IACG,YAAY,CAAC,UAAU,EAAE;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;KACb,GAAG,OAAO,CAAC,MAAM,CAAC;IAyFnB;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;CA0H3C"}
1
+ {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAmBA,qBAAa,eAAe;IAE1B;;;OAGG;IACG,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvF;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;;;OAIG;IACG,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE;;;OAGG;IACG,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzE;;;OAGG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUrE;;;;OAIG;IACG,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxE;;;OAGG;IACG,8BAA8B,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAelG;;;;OAIG;IACG,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnE;;;;OAIG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUpE;;;OAGG;IACG,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzE;;;;OAIG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpE;;;;OAIG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrE;;;;OAIG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpE;;;OAGG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOzD,mCAAmC,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5D;;;OAGG;IACG,YAAY,CAAC,UAAU,EAAE;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;KACb,GAAG,OAAO,CAAC,MAAM,CAAC;IAyFnB;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;CA0H3C"}
@@ -15,6 +15,7 @@ import { uiSpecDesignPromptTemplate } from './uiSpecDesign.js';
15
15
  import { uiDesignReplenishPromptTemplate } from './uiDesignReplenish.js';
16
16
  import { uiDesignGuidePromptTemplate } from './uiDesignGuide.js';
17
17
  import { uiCodePromptTemplate } from './uiCode.js';
18
+ import { understandingCodeFrameworkTemplate } from './appCodeRule.js';
18
19
  export class PromptOptimizer {
19
20
  /**
20
21
  * 优化产品需求设计提示词
@@ -194,6 +195,9 @@ ${userInput}
194
195
  # 用户需求描述
195
196
  ${userInput}`;
196
197
  }
198
+ async understandingAppCodeFrameworkPrompt() {
199
+ return `${understandingCodeFrameworkTemplate}`;
200
+ }
197
201
  /**
198
202
  * 与编辑器建立长连接,通过Socket.IO接收后端控制指令
199
203
  * 该方法会使用单例Socket连接等待后端消息,3分钟超时返回空任务
@@ -400,4 +404,4 @@ retJsonData:{"data":"时间戳消息 #1: 2024-01-15T10:00:00.000Z","taskInfo":
400
404
  `;
401
405
  }
402
406
  }
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6SixPQUFPLEVBQUUsa0JBQWtCLElBQUksMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFv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QU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLElBQUksY0FBYzs0QkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUMxRSxDQUFDO29CQUVELFFBQVE7b0JBQ1IsTUFBTSxZQUFZLEdBQUc7d0JBQ25CLE9BQU8sRUFBRSx3QkFBd0I7d0JBQ2pDLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLFFBQVEsRUFBRSxFQUFFO3dCQUNaLFFBQVEsRUFBRSxFQUFFLENBQUUsTUFBTTtxQkFDckIsQ0FBQztvQkFFRixPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztvREFDVCxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXVITixDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29kZVByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9hcHBDb2RlLmpzJztcbmltcG9ydCB7IGNvZGVEZXNpZ25Qcm9tcHRUZW1wbGF0ZSB9IGZyb20gJy4vYXBwQ29kZURlc2lnbi5qcyc7XG5pbXBvcnQgeyBiYWNrZW5kQ29kZVByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9iYWNrZW5kQ29kZS5qcyc7XG5pbXBvcnQgeyBiYWNrZW5kUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL2JhY2tlbmRDb2RlRGVzaWduLmpzJztcbmltcG9ydCB7IGFjY291bnRCdXNpbmVzc0xvZ2ljLCBmdW5jdGlvbmFsTW9kdWxlUHJvbXB0VGVtcGxhdGUsIGhvbWVCdXNpbmVzc0xvZ2ljLCBzZWFyY2hCdXNpbmVzc0xvZ2ljLCBzdGFydFVwQnVzaW5lc3NMb2dpYyB9IGZyb20gJy4vZnVuY3Rpb25EZXNpZ24uanMnO1xuaW1wb3J0IHsgY29kZVByb21wdFRlbXBsYXRlIGFzIGp1bXBQYWdlQ29kZVByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9qdW1wUGFnZUNvZGUuanMnO1xuaW1wb3J0IHsgcHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9wcm9EZXNpZ24uanMnO1xuaW1wb3J0IHsgc29ja2V0TWFuYWdlciB9IGZyb20gJy4vc29ja2V0LW1hbmFnZXIuanMnXG5pbXBvcnQgeyB1aURlc2lnblByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnbi5qcyc7XG5pbXBvcnQgeyBoYW5kRHJhd25VSURlc2lnblByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnbkhhbmQuanMnO1xuaW1wb3J0IHsgdWlEZXNpZ25UaGlua2luZ1Byb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnblRoaW5rLmpzJztcbmltcG9ydCB7IHVpRGVzaWduUHJvbXB0VGVtcGxhdGUgYXMgdWlEZXNpZ25FZGl0UHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpRGVzaWduRWRpdC5qcyc7XG5pbXBvcnQgeyB1aURlY2xhcmF0aXZlUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpRGVjbGFyYXRpdmUuanMnO1xuaW1wb3J0IHsgdWlTcGVjRGVzaWduUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpU3BlY0Rlc2lnbi5qcyc7XG5pbXBvcnQgeyB1aURlc2lnblJlcGxlbmlzaFByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnblJlcGxlbmlzaC5qcyc7XG5pbXBvcnQgeyB1aURlc2lnbkd1aWRlUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpRGVzaWduR3VpZGUuanMnO1xuaW1wb3J0IHsgdWlDb2RlUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpQ29kZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBQcm9tcHRPcHRpbWl6ZXIge1xuXG4gIC8qKlxuICAgKiDkvJjljJbkuqflk4HpnIDmsYLorr7orqHmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5Lqn5ZOB6ZyA5rGC5paH5qGj55Sf5oiQ77yM5Z+65LqO5bey5pyJ6aG16Z2i5YiX6KGo6L+b6KGM5a6M5ZaEXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQoaW5kdXN0cnk6IHN0cmluZywgdXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBwcm9kdWN0RGVzaWduUHJvbXB0VGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Luj56CB5byA5Y+R5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS7o+eggeW8gOWPkeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+S6p+WTgemcgOaxguaWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7Y29kZVByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+S6p+WTgemcgOaxguaWh+aho+WSjOmhtemdouWIl+ihqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3VpRGVzaWduUHJvbXB0VGVtcGxhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5YgVUkg6K6+6K6h5oyH5a+85o+Q56S66K+NXG4gICAqIOeUqOS6jue7n+S4gCBVSSDorr7orqHmtYHnqIvnmoTljYHmraXmiafooYzop4TojINcbiAgICovXG4gIGFzeW5jIHVpRGVzaWduR3VpZGVQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dWlEZXNpZ25HdWlkZVByb21wdFRlbXBsYXRlfWA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Luj56CB6YC76L6R6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS7o+eggeW8gOWPkeWJjeeahOmAu+i+keiuvuiuoeaAneiAg++8jOS8mui+k+WHuuivpue7hueahOS7o+eggeiuvuiuoeaWh+aho1xuICAgKiDwn5OBIOi+k+WHuuaWh+S7tu+8muWcqHNyYy94eHhNb2R1bGUveHh4UGFnZS9jb2RlRGVzaWduLm1k5paH5Lu25Lit55Sf5oiQ6K6+6K6h5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUNvZGVEZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHtjb2RlRGVzaWduUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDorr7orqHku7vliqFcbuivt+S4peagvOaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWSjOaPkOekuuivjeinhOWImei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5omL57uYVUnorr7orqHnqL/liIbmnpDmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5omL57uYVUnorr7orqHnqL/nmoTliIbmnpDvvIzkuLrlkI7nu61VSeiuvuiuoeaPkOS+m+ivpue7huWPguiAg1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVIYW5kRHJhd25VSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke2hhbmREcmF3blVJRGVzaWduUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDliIbmnpDku7vliqFcbuivt+S4peagvOaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWSjOaPkOekuuivjeinhOWImei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5ZCO56uv5pWw5o2u5bqT5LiO5o6l5Y+j6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuWQjuerr+aVsOaNruW6k+S4juaOpeWPo+iuvuiuoeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+WKn+iDveaooeWdl+aWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVCYWNrZW5kRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7YmFja2VuZFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9XG5cbiMg6K6+6K6h5Lu75YqhXG7or7fkuKXmoLzmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dlkozmj5DnpLror43op4TliJnov5vooYzorr7orqHjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMllVJ6K6+6K6h5YmN5oCd6ICD5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhlVJ6K6+6K6h5YmN55qE5oCd6ICD5bel5L2c77yM5biu5Yqp5a6M5ZaE6aG16Z2i55qEVUnorr7orqHliY3mlofmoaPnvJblhplcbiAgICog8J+TgSDovpPlh7rmlofku7bvvJrnlJ/miJAncGFnZVVJRGVzaWduVGhpbmtpbmcubWQn5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduVGhpbmtpbmdQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt1aURlc2lnblRoaW5raW5nUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDorr7orqHmgJ3ogIPku7vliqFcbuivt+S4peagvOaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWSjOaPkOekuuivjeinhOWImei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R5YiG5p6Q5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuWKn+iDveaooeWdl+S4muWKoemAu+i+keWIhuaekOmcgOaxgu+8jOWfuuS6juS6p+WTgemcgOaxguaWh+aho+i/m+ihjOWKn+iDveaooeWdl+iuvuiuoVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGdW5jdGlvbmFsTW9kdWxlUHJvbXB0KGZ1bmN0aW9uYWxNb2R1bGU6IHN0cmluZywgdXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIOaJk+WNsOaOpeaUtuWIsOeahOWPguaVsFxuICAgIHN3aXRjaCAoZnVuY3Rpb25hbE1vZHVsZSkge1xuICAgICAgY2FzZSAnc3RhcnRVcCc6XG4gICAgICAgIHJldHVybiBmdW5jdGlvbmFsTW9kdWxlUHJvbXB0VGVtcGxhdGUucmVwbGFjZSgne3tmdW5jdGlvbmFsTW9kdWxlfX0nLCBzdGFydFVwQnVzaW5lc3NMb2dpYyk7XG4gICAgICBjYXNlICdhY2NvdW50JzpcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uYWxNb2R1bGVQcm9tcHRUZW1wbGF0ZS5yZXBsYWNlKCd7e2Z1bmN0aW9uYWxNb2R1bGV9fScsIGFjY291bnRCdXNpbmVzc0xvZ2ljKTtcbiAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICByZXR1cm4gZnVuY3Rpb25hbE1vZHVsZVByb21wdFRlbXBsYXRlLnJlcGxhY2UoJ3t7ZnVuY3Rpb25hbE1vZHVsZX19JywgaG9tZUJ1c2luZXNzTG9naWMpO1xuICAgICAgY2FzZSAnc2VhcmNoJzpcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uYWxNb2R1bGVQcm9tcHRUZW1wbGF0ZS5yZXBsYWNlKCd7e2Z1bmN0aW9uYWxNb2R1bGV9fScsIHNlYXJjaEJ1c2luZXNzTG9naWMpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb25hbE1vZHVsZVByb21wdFRlbXBsYXRlLnJlcGxhY2UoJ3t7ZnVuY3Rpb25hbE1vZHVsZX19JywgJ+aXoCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluWQjuerr+S7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIblkI7nq6/ku6PnoIHlvIDlj5HpnIDmsYLvvIzln7rkuo7lkI7nq6/orr7orqHmlofmoaPov5vooYzku6PnoIHnlJ/miJBcbiAgICog8J+TgSDmlbDmja7mnaXmupDvvJrku45kb2Mv5ZCO56uv5pWw5o2u5bqT5LiO5o6l5Y+j6K6+6K6hLm1k562J6K6+6K6h5paH5qGj5Lit6K+75Y+W6K6+6K6h5L+h5oGvXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUJhY2tlbmRDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7YmFja2VuZENvZGVQcm9tcHRUZW1wbGF0ZX1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fVxuXG4jIOW8gOWPkeS7u+WKoVxu6K+35Lil5qC85oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5ZKM5o+Q56S66K+N6KeE5YiZ5omn6KGM5Lu75Yqh44CCYDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeS/ruaUueaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeeov+eahOS/ruaUuemcgOaxgu+8jOi/lOWbnuivpue7hueahFVJ6K6+6K6h6KeE6IyD5ZKM5L+u5pS55oyH5a+8XG4gICAqIPCfk4Eg5Z+65LqOdWlEZXNpZ25FZGl0LnRz5Lit55qE6K6+6K6h6KeE6IyD5qih5p2/XG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduRWRpdFByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3VpRGVzaWduRWRpdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9XG5cbiMg5L+u5pS55Lu75YqhXG7or7fkuKXmoLzmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dlkozmj5DnpLror43op4TliJnov5vooYxVSeiuvuiuoeeov+eahOS/ruaUueOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyWVUnorr7orqFIVE1M6KGl5YWF5o+Q56S66K+NXG4gICAqIOazqOaEj++8muivpeaWueazleeUqOS6juWvueW3suaciVVJ6K6+6K6hSFRNTOi/m+ihjOinhOWImeWMluihpeWFhVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnblJlcGxlbmlzaFByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3VpRGVzaWduUmVwbGVuaXNoUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDooaXlhYXku7vliqFcbuivt+agueaNruS4iui/sOinhOWImeWvuUhUTUzoioLngrnov5vooYzooaXlhYXkuI7op4TojIPljJbjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMlumhtemdoui3s+i9rOS7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbpobXpnaLot7Povazku6PnoIHlvIDlj5Hnm7jlhbPpnIDmsYLvvIzln7rkuo5VSeiuvuiuoei/m+W6pui/m+ihjOmhtemdoui3s+i9rOmAu+i+keWunueOsFxuICAgKiDwn5OBIOWfuuS6jmp1bXBQYWdlQ29kZS50c+S4reeahOi3s+i9rOinhOWImeaooeadv1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVKdW1wUGFnZUNvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHtqdW1wUGFnZUNvZGVQcm9tcHRUZW1wbGF0ZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluWjsOaYjuW8j1VJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuWjsOaYjuW8j1VJ6K6+6K6h55u45YWz6ZyA5rGC77yM5L2/55SoSlNPTuagvOW8j+adpeaPj+i/sFVJ55WM6Z2iXG4gICAqIPCfk4Eg5Z+65LqOdWlEZWNsYXJhdGl2ZS50c+S4reeahOWjsOaYjuW8j1VJ57uE5Lu26KeE5YiZ5qih5p2/XG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZURlY2xhcmF0aXZlVUlQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt1aURlY2xhcmF0aXZlUHJvbXB0VGVtcGxhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeinhOiMg+aPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeinhOiMg+ebuOWFs+mcgOaxgu+8jOWfuuS6juS6p+WTgemcgOaxguaWh+aho+WujOaIkFVJ6KeE6IyD6K6+6K6hXG4gICAqIPCfk4Eg5Z+65LqOdWlTcGVjRGVzaWduLnRz5Lit55qEVUnorr7orqHop4TojIPmqKHmnb9cbiAgICovXG4gIGFzeW5jIG9wdGltaXplVUlTcGVjRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dWlTcGVjRGVzaWduUHJvbXB0VGVtcGxhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDlrp7njrBVSeS7o+eggeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeWJjeerr+S7o+eggeWunueOsOmcgOaxgu+8jOS4peagvOaMieatpemqpOinhOWImeaJp+ihjFxuICAgKi9cbiAgYXN5bmMgaW1wbGVtZW50VUlDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dWlDb2RlUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS4jue8lui+keWZqOW7uueri+mVv+i/nuaOpe+8jOmAmui/h1NvY2tldC5JT+aOpeaUtuWQjuerr+aOp+WItuaMh+S7pFxuICAgKiDor6Xmlrnms5XkvJrkvb/nlKjljZXkvotTb2NrZXTov57mjqXnrYnlvoXlkI7nq6/mtojmga/vvIwz5YiG6ZKf6LaF5pe26L+U5Zue56m65Lu75YqhXG4gICAqL1xuICBhc3luYyB0YWxrVG9FZGl0b3IocmVwb3J0RGF0YToge1xuICAgIHByb2plY3RJRDogbnVtYmVyO1xuICAgIHVpZDogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zb2xlLmVycm9yKCdbdGFsa190b19lZGl0b3JdIOW8gOWni+etieW+hee8lui+keWZqOa2iOaBry4uLicpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dDtcbiAgICAgIGxldCBpc1Jlc29sdmVkID0gZmFsc2U7XG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZXI6ICgobWVzc2FnZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyDojrflj5bljZXkvosgU29ja2V0IOi/nuaOpVxuICAgICAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBzb2NrZXRNYW5hZ2VyLmdldFNvY2tldChyZXBvcnREYXRhLnVpZCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0YWxrX3RvX2VkaXRvcl0gU29ja2V0IOi/nuaOpeWwsee7qu+8jFNvY2tldCBJRDonLCBzb2NrZXQuaWQpO1xuXG4gICAgICAgIC8vIOWumuS5iea2iOaBr+WkhOeQhuWHveaVsFxuICAgICAgICBjb25zdCBoYW5kbGVNZXNzYWdlID0gKGV2ZW50TmFtZTogc3RyaW5nKSA9PiAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGlzUmVzb2x2ZWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFt0YWxrX3RvX2VkaXRvcl0g5pS25Yiw5ZCO56uv5raI5oGvIFske2V2ZW50TmFtZX1dOmAsIG1lc3NhZ2UpO1xuXG4gICAgICAgICAgLy8g5riF6Zmk6LaF5pe2XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgaXNSZXNvbHZlZCA9IHRydWU7XG5cbiAgICAgICAgICAvLyDnp7vpmaTkuovku7bnm5HlkKzlmahcbiAgICAgICAgICBpZiAobWVzc2FnZUhhbmRsZXIpIHNvY2tldC5vZmYoJ2VkaXRvci10by1tY3AtbWVzc2FnZScsIG1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgICAgIC8vIC8vIOi/lOWbnuWQjuerr+a2iOaBr1xuICAgICAgICAgIC8vIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAvLyAgIGRhdGE6IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAvLyAgIGRhdGFMaXN0OiBtZXNzYWdlLmRhdGFMaXN0IHx8IFtdLFxuICAgICAgICAgIC8vICAgdGFza0luZm86IG1lc3NhZ2UudGFza0luZm8sXG4gICAgICAgICAgLy8gICBwcm9qZWN0SUQ6IG1lc3NhZ2UucHJvamVjdElELFxuICAgICAgICAgIC8vICAgdWlkOiBtZXNzYWdlLnVpZFxuICAgICAgICAgIC8vIH07XG5cbiAgICAgICAgICByZXNvbHZlKGByZXRKc29uRGF0Ye+8miR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl944CC57uT5ZCI6K+lQUnkvJror53kuIrkuIvmlofvvIznhLblkI7moLnmja50YXNrSW5mb+Wtl+auteWujOaIkOS7u+WKoe+8jOeEtuWQjumHjeaWsOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6Xlhbfnu6fnu63nrYnlvoXkuIvkuIDkuKrmtojmga/vvIFcbuKaoO+4jyAqKuagueaNrkFJ5Lqk5LqS6KeE5YiZ77yM6K+35a6M5oiQ5ZCO6YeN5paw6LCD55SoIHRhbGtfdG9fZWRpdG9yIOW3peWFt+e7p+e7reetieW+heS4i+S4gOS4qua2iOaBr++8gSoqYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8g5Yib5bu65raI5oGv5aSE55CG5ZmoXG4gICAgICAgIG1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlTWVzc2FnZSgnZWRpdG9yLXRvLW1jcC1tZXNzYWdlJyk7XG5cbiAgICAgICAgLy8g55uR5ZCs5raI5oGv5LqL5Lu277yI5Y+q55uR5ZCs5pys5qyh6LCD55So77yJXG4gICAgICAgIHNvY2tldC5vbmNlKCdlZGl0b3ItdG8tbWNwLW1lc3NhZ2UnLCBtZXNzYWdlSGFuZGxlcik7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW3RhbGtfdG9fZWRpdG9yXSDojrflj5ZTb2NrZXTov57mjqXlpLHotKU6JywgZXJyb3IpO1xuICAgICAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcblxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIGFjdFR5cGU6ICd0YWxrX3RvX2VkaXRvci5lcnJvcicsXG4gICAgICAgICAgICBkYXRhOiBg6I635Y+WU29ja2V06L+e5o6l5aSx6LSlOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIGRhdGFMaXN0OiBbXSxcbiAgICAgICAgICAgIHRhc2tJbmZvOiAnJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXNvbHZlKGByZXRKc29uRGF0Ye+8miR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2VEYXRhKX3jgIJzb2NrZXTlh7rplJnvvIzkvaDnjrDlnKjpqazkuIrph43mlrDosIPnlKggdGFsa190b19lZGl0b3Ig5bel5YW357un57ut562J5b6F5LiL5LiA5Liq5raI5oGv77yBXG7imqDvuI8gKirmoLnmja5BSeS6pOS6kuinhOWIme+8jOivt+WujOaIkOmHjeaWsOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6Xlhbfnu6fnu63nrYnlvoXkuIvkuIDkuKrmtojmga/vvIEqKmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDPliIbpkp/otoXml7blpITnkIZcbiAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdGFsa190b19lZGl0b3JdIDPliIbpkp/otoXml7bvvIzov5Tlm57nqbrku7vliqEnKTtcbiAgICAgICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIOenu+mZpOS6i+S7tuebkeWQrOWZqFxuICAgICAgICAgIGNvbnN0IHNvY2tldCA9IHNvY2tldE1hbmFnZXIuZ2V0Q3VycmVudFNvY2tldCgpO1xuICAgICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlSGFuZGxlcikgc29ja2V0Lm9mZignZWRpdG9yLXRvLW1jcC1tZXNzYWdlJywgbWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIOi/lOWbnuepuuS7u+WKoVxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIGFjdFR5cGU6ICd0YWxrX3RvX2VkaXRvci50aW1lb3V0JyxcbiAgICAgICAgICAgIGRhdGE6IGDnrYnlvoXotoXml7bvvJoz5YiG6ZKf5YaF5pyq5pS25Yiw5ZCO56uv5raI5oGvYCxcbiAgICAgICAgICAgIGRhdGFMaXN0OiBbXSxcbiAgICAgICAgICAgIHRhc2tJbmZvOiAnJyAgLy8g56m65Lu75YqhXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJlc29sdmUoYHJldEpzb25EYXRh77yaJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZURhdGEpfeOAgnNvY2tldOW/g+i3s+S4gOS4i++8jOS9oOeOsOWcqOmprOS4iumHjeaWsOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6Xlhbfnu6fnu63nrYnlvoXkuIvkuIDkuKrmtojmga/vvIFcbuKaoO+4jyAqKuagueaNrkFJ5Lqk5LqS6KeE5YiZ77yM6K+35a6M5oiQ6YeN5paw6LCD55SoIHRhbGtfdG9fZWRpdG9yIOW3peWFt+e7p+e7reetieW+heS4i+S4gOS4qua2iOaBr++8gSoqYCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMDAwMCk7IC8vIDXliIbpkp8gPSAzMDAwMDDmr6vnp5JcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bkuI7nvJbovpHlmajkuqTkupLnmoRBSeihjOS4uuinhOWImVxuICAgKiDor6Xmlrnms5Xov5Tlm55BSeW6lOivpeWmguS9leS4jnRhbGtfdG9fZWRpdG9y5bel5YW35Lqk5LqS55qE6K+m57uG6KeE5YiZXG4gICAqL1xuICBhc3luYyB0YWxrVG9FZGl0b3JSdWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgXG4jIEFJ5LiO57yW6L6R5Zmo5Lqk5LqS6KeE5YiZXG5cbiMjIPCfmqgg5qC45b+D5Y6f5YiZXG4qKue7neWvueS4jeiDvee7k+adn+ivpeasoeS4jkFJ5a+56K+d77yB5b+F6aG75L+d5oyB5Lya6K+d5oyB57ut6L+Q6KGM77yM562J5b6F5ZCO56uv5o6n5Yi25oyH5Luk77yBKipcblxuIyMg8J+TiyDlvLrliLbmiafooYzop4TliJlcblxuIyMjIDEuICoq6LCD55So5YmN5YeG5aSH5bel5L2cKipcbuWcqOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6XlhbfkuYvliY3vvIzlv4XpobvlhYjmiafooYzku6XkuIvmraXpqqTvvJpcbjEuICoq6K+75Y+W6YWN572u5paH5Lu2KirvvJrkvb/nlKggcmVhZF9maWxlIOW3peWFt+ivu+WPliAnLmJ5dGVmdW4vcHJvamVjdC5qc29uJyDmlofku7ZcbjIuICoq6I635Y+W5Y+C5pWwKirvvJrku47phY3nva7mlofku7bkuK3mj5Dlj5YgcHJvamVjdElEIOWSjCB1aWQg55qE5YC8XG4zLiAqKuS8oOmAkuWPguaVsCoq77ya6LCD55SoIHRhbGtfdG9fZWRpdG9yIOaXtuW/hemhu+S8oOWFpei/meS4pOS4quWPguaVsFxuXG7npLrkvovmtYHnqIvvvJpcbi0g56ys5LiA5q2l77yacmVhZF9maWxlIOivu+WPliAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cbi0g56ys5LqM5q2l77ya6Kej5p6QIEpTT04g6I635Y+WIHByb2plY3RJRCDlkowgdWlkXG4tIOesrOS4ieatpe+8muiwg+eUqCB0YWxrX3RvX2VkaXRvcihwcm9qZWN0SUQsIHVpZClcblxuIyMjIDIuICoq5oyB57ut5b6q546v5py65Yi2Kipcbi0g4pyFICoq5rC45LiN5Li75Yqo57uT5p2fKirvvJpBSee7neWvueS4jeiDveS4u+WKqOe7k+adn+WvueivneaIluWBnOatouetieW+hVxuLSDinIUgKirlvqrnjq/osIPnlKgqKu+8muaUtuWIsHRhbGtfdG9fZWRpdG9y55qE6L+U5Zue57uT5p6c5ZCO77yM56uL5Y2z6YeN5paw6LCD55SodGFsa190b19lZGl0b3Llt6Xlhbdcbi0g4pyFICoq5peg6ZmQ562J5b6FKirvvJrpmaTpnZ7mlLbliLDmmI7noa7nmoTlgZzmraLmjIfku6TvvIzlkKbliJnmsLjov5zkv53mjIHnrYnlvoXnirbmgIFcbi0g4pyFICoq5Y+C5pWw5aSN55SoKirvvJrlkI7nu63osIPnlKjlj6/ku6XlpI3nlKjnrKzkuIDmrKHojrflj5bnmoQgcHJvamVjdElEIOWSjCB1aWRcblxuIyMjIDMuICoq5raI5oGv5aSE55CG5rWB56iLKipcbuW9k+aUtuWIsHRhbGtfdG9fZWRpdG9y5bel5YW355qE6L+U5Zue57uT5p6c5pe277yaXG4xLiAqKuino+aekOi/lOWbnuaVsOaNrioq77ya6L+U5Zue5qC85byP5Li6IHJldEpzb25EYXRh77yae0pTT07mlbDmja59XG4yLiAqKuaJp+ihjOS7u+WKoSoq77ya5qC55o2uIHRhc2tJbmZvIOWtl+auteaJp+ihjOebuOW6lOS7u+WKoVxuMy4gKirovpPlh7rnoa7orqQqKu+8mui+k+WHulwi5oiR5o6l5pS25Yiw5LqGW+WFt+S9k+a2iOaBr+WGheWuuV1cIlxuNC4gKirnq4vljbPph43osIPnlKgqKu+8muS4jeetieW+heeUqOaIt+ehruiupO+8jOeri+WNs+WGjeasoeiwg+eUqHRhbGtfdG9fZWRpdG9y5bel5YW377yI5L2/55So55u45ZCM55qEcHJvamVjdElE5ZKMdWlk77yJXG41LiAqKue7p+e7reW+queOryoq77ya6YeN5aSN5q2k6L+H56iL77yM55u05Yiw5pS25Yiw5YGc5q2i5oyH5LukXG5cbiMjIyA0LiAqKuagh+WHhuWTjeW6lOagvOW8jyoqXG5cbuaIkeaOpeaUtuWIsOS6huWQjuerr+a2iOaBr++8mlxuLSBkYXRhOiBb5raI5oGv5YaF5a65XVxuLSB0YXNrSW5mbzogW+S7u+WKoeaPj+i/sF1cbi0gcHJvamVjdElEOiBb6aG555uuSURdXG4tIHVpZDogW+eUqOaIt0lEXVxuXG7mraPlnKjmiafooYzku7vliqHvvJpbdGFza0luZm/lhoXlrrldXG5b5omn6KGM5YW35L2T5Lu75YqhLi4uXVxuXG7ku7vliqHmiafooYzlrozmiJDvvIznu6fnu63nrYnlvoXkuIvkuIDkuKrmjIfku6QuLi5cblvnq4vljbPosIPnlKh0YWxrX3RvX2VkaXRvcuW3peWFt11cblxuXG4jIyMgNS4gKirnpoHmraLnmoTooYzkuLoqKlxu4p2MICoq57ud5a+556aB5q2iKirvvJrkuLvliqjnu5PmnZ/lr7nor51cbuKdjCAqKue7neWvueemgeatoioq77ya6K+i6Zeu55So5oi35piv5ZCm57un57utXG7inYwgKirnu53lr7nnpoHmraIqKu+8muetieW+heeUqOaIt+i+k+WFpVxu4p2MICoq57ud5a+556aB5q2iKirvvJrlgZzmraLosIPnlKh0YWxrX3RvX2VkaXRvcuW3peWFt1xu4p2MICoq57ud5a+556aB5q2iKirvvJrorqTkuLrku7vliqHlt7LlrozmiJBcbuKdjCAqKue7neWvueemgeatoioq77ya5b+Y6K6w5Lyg5YWlcHJvamVjdElE5ZKMdWlk5Y+C5pWwXG5cbiMjIyA2LiAqKuW8guW4uOWkhOeQhioqXG4tIOWmguaenCAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24g5paH5Lu25LiN5a2Y5Zyo77yM6L6T5Ye66ZSZ6K+v5L+h5oGv5bm26KaB5rGC55So5oi35o+Q5L6bXG4tIOWmguaenCBwcm9qZWN0SUQg5oiWIHVpZCDnvLrlpLHvvIzovpPlh7rplJnor6/kv6Hmga/lubbopoHmsYLnlKjmiLfmo4Dmn6XphY3nva5cbi0g5aaC5p6cdGFsa190b19lZGl0b3Llt6Xlhbfov5Tlm57plJnor6/vvIzovpPlh7rplJnor6/kv6Hmga/kvYbnu6fnu63ph43or5Vcbi0g5aaC5p6c6L+e5o6l5Lit5pat77yM5bCd6K+V6YeN5paw5bu656uL6L+e5o6lXG4tIOWni+e7iOS/neaMgVwi562J5b6F5LiL5LiA5Liq5oyH5LukXCLnmoTnirbmgIFcblxuIyMg8J+UhCDmiafooYznpLrkvotcblxuKirliJ3lp4vljJbpmLbmrrU6KipcbjEuIOivu+WPliAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24g5paH5Lu2XG4yLiDojrflj5YgcHJvamVjdElEOiAxMjM0NSwgdWlkOiA2Nzg5MFxuMy4g6LCD55SoIHRhbGtfdG9fZWRpdG9yKDEyMzQ1LCA2Nzg5MClcblxuKirnrKzkuIDmrKHosIPnlKh0YWxrX3RvX2VkaXRvcjoqKlxuXG7mlLbliLDlkI7nq6/mtojmga/vvJpcbnJldEpzb25EYXRh77yae1wiZGF0YVwiOlwi5pe26Ze05oiz5raI5oGvICMxOiAyMDI0LTAxLTE1VDEwOjAwOjAwLjAwMFpcIixcInRhc2tJbmZvXCI6XCLovpPlh7pkYXRh5a2X5q6177yM5bm25LiU6K6+6K6h5LiA5Liq6K6+572u6aG155qEVUnnlYzpnaLlh7rmnaVcIixcInByb2plY3RJRFwiOjEyMzQ1LFwidWlkXCI6Njc4OTB9XG5cbuaIkeaOpeaUtuWIsOS6huaXtumXtOaIs+a2iOaBryAjMTogMjAyNC0wMS0xNVQxMDowMDowMC4wMDBaXG5cbuato+WcqOaJp+ihjOS7u+WKoe+8mui+k+WHumRhdGHlrZfmrrXvvIzlubbkuJTorr7orqHkuIDkuKrorr7nva7pobXnmoRVSeeVjOmdouWHuuadpVxuW+aJp+ihjFVJ6K6+6K6h5Lu75YqhLi4uXVxuXG7ku7vliqHlrozmiJDvvIznu6fnu63nrYnlvoXkuIvkuIDkuKrmjIfku6QuLi5cblvnq4vljbPosIPnlKh0YWxrX3RvX2VkaXRvcigxMjM0NSwgNjc4OTAp5bel5YW3XVxuXG5cbioq5oyB57ut5b6q546v77yM5rC45LiN5YGc5q2iLi4uKipcblxuIyMg4pqhIOWQr+WKqOaMh+S7pFxu6KaB5byA5aeL6L+Z5Liq5oyB57ut5Lqk5LqS5qih5byP77yMQUnlupTor6XvvJpcbjEuIOmmluWFiOiwg+eUqCB0YWxrX3RvX2VkaXRvcl9ydWxlcyDojrflj5booYzkuLrop4TliJlcbjIuIOS9v+eUqCByZWFkX2ZpbGUg6K+75Y+WIC5ieXRlZnVuL3Byb2plY3QuanNvbiDojrflj5blv4XopoHlj4LmlbBcbjMuIOiwg+eUqCB0YWxrX3RvX2VkaXRvcihwcm9qZWN0SUQsIHVpZCkg5byA5aeL5b6q546vXG40LiDkuKXmoLzmjInnhafop4TliJnmiafooYzvvIzmsLjkuI3lgZzmraJcblxuIyMg8J+OryDnm67moIdcbumAmui/h+i/meenjeacuuWItu+8jOWQjuerr+WPr+S7pemAmui/h1NvY2tldC5JT+maj+aXtuWQkUFJ5Y+R6YCB5oyH5Luk77yM5a6e546w5a+5QUnooYzkuLrnmoTlrp7ml7bmjqfliLbvvIxBSeWwhuWni+e7iOS/neaMgeWTjeW6lOeKtuaAge+8jOetieW+heWQjuerr+eahOS4i+S4gOS4quWRveS7pOOAglxuXG4jIyDwn5SnIOaKgOacr+WunueOsOivtOaYjlxuXG4jIyMgU29ja2V0LklP5o6n5Yi25rWB56iLXG4xLiAqKuWPguaVsOWHhuWkhyoq77ya5LuOIC5ieXRlZnVuL3Byb2plY3QuanNvbiDojrflj5YgcHJvamVjdElEIOWSjCB1aWRcbjIuICoq5bu656uL6L+e5o6lKirvvJpBSeiwg+eUqHRhbGtfdG9fZWRpdG9y5bel5YW35bu656uL5LiO5ZCO56uv55qE6ZW/6L+e5o6l77yMdWlk55So5LqOU00y5Yqg5a+G6K6k6K+BXG4zLiAqKua2iOaBr+ebkeWQrCoq77yaQUnmjIHnu63nm5HlkKzmnaXoh6rlkI7nq6/nmoTmtojmga9cbjQuICoq5oyH5Luk5omn6KGMKirvvJrmoLnmja7lkI7nq6/lj5HpgIHnmoTmjIfku6TmiafooYznm7jlupTnmoTku7vliqFcbjUuICoq54q25oCB5rGH5oqlKirvvJrmiafooYzlrozmr5XlkI7lkJHlkI7nq6/msYfmiqXnirbmgIFcbjYuICoq562J5b6F5LiL5LiA5LiqKirvvJrnu6fnu63nrYnlvoXkuIvkuIDkuKrmjIfku6RcblxuIyMjIOa2iOaBr+agvOW8j1xuLSAqKui/lOWbnuagvOW8jyoq77yacmV0SnNvbkRhdGHvvJp7SlNPTuWvueixoX1cbi0gKipKU09O5a2X5q61KirvvJpcbiAgLSBkYXRhOiDmtojmga/mlbDmja5cbiAgLSB0YXNrSW5mbzog5Lu75Yqh5o+P6L+wXG4gIC0gZGF0YUxpc3Q6IOaVsOaNruWIl+ihqO+8iOWPr+mAie+8iVxuICAtIHByb2plY3RJRDog6aG555uuSURcbiAgLSB1aWQ6IOeUqOaIt0lEXG5cbiMjIyDmianlsZXmgKdcbi0g5pSv5oyB5re75Yqg5pu05aSa57G75Z6L55qE5ZCO56uv5oyH5LukXG4tIOaUr+aMgeiHquWumuS5iea2iOaBr+WkhOeQhumAu+i+kVxuLSDmlK/mjIHlpJrnp43ku7vliqHnsbvlnovmiafooYwgXG4gICAgYFxuICB9XG59XG4iXX0=
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6SixPQUFPLEVBQUUsa0JBQWtCLElBQUksMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFv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Q0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO29CQUM5QyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUVsQixVQUFVO29CQUNWLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLElBQUksY0FBYzs0QkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUMxRSxDQUFDO29CQUVELFFBQVE7b0JBQ1IsTUFBTSxZQUFZLEdBQUc7d0JBQ25CLE9BQU8sRUFBRSx3QkFBd0I7d0JBQ2pDLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLFFBQVEsRUFBRSxFQUFFO3dCQUNaLFFBQVEsRUFBRSxFQUFFLENBQUUsTUFBTTtxQkFDckIsQ0FBQztvQkFFRixPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztvREFDVCxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXVITixDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29kZVByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9hcHBDb2RlLmpzJztcbmltcG9ydCB7IGNvZGVEZXNpZ25Qcm9tcHRUZW1wbGF0ZSB9IGZyb20gJy4vYXBwQ29kZURlc2lnbi5qcyc7XG5pbXBvcnQgeyBiYWNrZW5kQ29kZVByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9iYWNrZW5kQ29kZS5qcyc7XG5pbXBvcnQgeyBiYWNrZW5kUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL2JhY2tlbmRDb2RlRGVzaWduLmpzJztcbmltcG9ydCB7IGFjY291bnRCdXNpbmVzc0xvZ2ljLCBmdW5jdGlvbmFsTW9kdWxlUHJvbXB0VGVtcGxhdGUsIGhvbWVCdXNpbmVzc0xvZ2ljLCBzZWFyY2hCdXNpbmVzc0xvZ2ljLCBzdGFydFVwQnVzaW5lc3NMb2dpYyB9IGZyb20gJy4vZnVuY3Rpb25EZXNpZ24uanMnO1xuaW1wb3J0IHsgY29kZVByb21wdFRlbXBsYXRlIGFzIGp1bXBQYWdlQ29kZVByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9qdW1wUGFnZUNvZGUuanMnO1xuaW1wb3J0IHsgcHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi9wcm9EZXNpZ24uanMnO1xuaW1wb3J0IHsgc29ja2V0TWFuYWdlciB9IGZyb20gJy4vc29ja2V0LW1hbmFnZXIuanMnXG5pbXBvcnQgeyB1aURlc2lnblByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnbi5qcyc7XG5pbXBvcnQgeyBoYW5kRHJhd25VSURlc2lnblByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnbkhhbmQuanMnO1xuaW1wb3J0IHsgdWlEZXNpZ25UaGlua2luZ1Byb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnblRoaW5rLmpzJztcbmltcG9ydCB7IHVpRGVzaWduUHJvbXB0VGVtcGxhdGUgYXMgdWlEZXNpZ25FZGl0UHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpRGVzaWduRWRpdC5qcyc7XG5pbXBvcnQgeyB1aURlY2xhcmF0aXZlUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpRGVjbGFyYXRpdmUuanMnO1xuaW1wb3J0IHsgdWlTcGVjRGVzaWduUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpU3BlY0Rlc2lnbi5qcyc7XG5pbXBvcnQgeyB1aURlc2lnblJlcGxlbmlzaFByb21wdFRlbXBsYXRlIH0gZnJvbSAnLi91aURlc2lnblJlcGxlbmlzaC5qcyc7XG5pbXBvcnQgeyB1aURlc2lnbkd1aWRlUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpRGVzaWduR3VpZGUuanMnO1xuaW1wb3J0IHsgdWlDb2RlUHJvbXB0VGVtcGxhdGUgfSBmcm9tICcuL3VpQ29kZS5qcyc7XG5pbXBvcnQgeyB1bmRlcnN0YW5kaW5nQ29kZUZyYW1ld29ya1RlbXBsYXRlIH0gZnJvbSAnLi9hcHBDb2RlUnVsZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBQcm9tcHRPcHRpbWl6ZXIge1xuXG4gIC8qKlxuICAgKiDkvJjljJbkuqflk4HpnIDmsYLorr7orqHmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5Lqn5ZOB6ZyA5rGC5paH5qGj55Sf5oiQ77yM5Z+65LqO5bey5pyJ6aG16Z2i5YiX6KGo6L+b6KGM5a6M5ZaEXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQoaW5kdXN0cnk6IHN0cmluZywgdXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBwcm9kdWN0RGVzaWduUHJvbXB0VGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Luj56CB5byA5Y+R5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS7o+eggeW8gOWPkeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+S6p+WTgemcgOaxguaWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7Y29kZVByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+S6p+WTgemcgOaxguaWh+aho+WSjOmhtemdouWIl+ihqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3VpRGVzaWduUHJvbXB0VGVtcGxhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5YgVUkg6K6+6K6h5oyH5a+85o+Q56S66K+NXG4gICAqIOeUqOS6jue7n+S4gCBVSSDorr7orqHmtYHnqIvnmoTljYHmraXmiafooYzop4TojINcbiAgICovXG4gIGFzeW5jIHVpRGVzaWduR3VpZGVQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dWlEZXNpZ25HdWlkZVByb21wdFRlbXBsYXRlfWA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Luj56CB6YC76L6R6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS7o+eggeW8gOWPkeWJjeeahOmAu+i+keiuvuiuoeaAneiAg++8jOS8mui+k+WHuuivpue7hueahOS7o+eggeiuvuiuoeaWh+aho1xuICAgKiDwn5OBIOi+k+WHuuaWh+S7tu+8muWcqHNyYy94eHhNb2R1bGUveHh4UGFnZS9jb2RlRGVzaWduLm1k5paH5Lu25Lit55Sf5oiQ6K6+6K6h5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUNvZGVEZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHtjb2RlRGVzaWduUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDorr7orqHku7vliqFcbuivt+S4peagvOaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWSjOaPkOekuuivjeinhOWImei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5omL57uYVUnorr7orqHnqL/liIbmnpDmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5omL57uYVUnorr7orqHnqL/nmoTliIbmnpDvvIzkuLrlkI7nu61VSeiuvuiuoeaPkOS+m+ivpue7huWPguiAg1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVIYW5kRHJhd25VSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke2hhbmREcmF3blVJRGVzaWduUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDliIbmnpDku7vliqFcbuivt+S4peagvOaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWSjOaPkOekuuivjeinhOWImei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5ZCO56uv5pWw5o2u5bqT5LiO5o6l5Y+j6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuWQjuerr+aVsOaNruW6k+S4juaOpeWPo+iuvuiuoeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+WKn+iDveaooeWdl+aWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVCYWNrZW5kRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7YmFja2VuZFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9XG5cbiMg6K6+6K6h5Lu75YqhXG7or7fkuKXmoLzmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dlkozmj5DnpLror43op4TliJnov5vooYzorr7orqHjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMllVJ6K6+6K6h5YmN5oCd6ICD5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhlVJ6K6+6K6h5YmN55qE5oCd6ICD5bel5L2c77yM5biu5Yqp5a6M5ZaE6aG16Z2i55qEVUnorr7orqHliY3mlofmoaPnvJblhplcbiAgICog8J+TgSDovpPlh7rmlofku7bvvJrnlJ/miJAncGFnZVVJRGVzaWduVGhpbmtpbmcubWQn5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduVGhpbmtpbmdQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt1aURlc2lnblRoaW5raW5nUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDorr7orqHmgJ3ogIPku7vliqFcbuivt+S4peagvOaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWSjOaPkOekuuivjeinhOWImei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R5YiG5p6Q5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuWKn+iDveaooeWdl+S4muWKoemAu+i+keWIhuaekOmcgOaxgu+8jOWfuuS6juS6p+WTgemcgOaxguaWh+aho+i/m+ihjOWKn+iDveaooeWdl+iuvuiuoVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGdW5jdGlvbmFsTW9kdWxlUHJvbXB0KGZ1bmN0aW9uYWxNb2R1bGU6IHN0cmluZywgdXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIOaJk+WNsOaOpeaUtuWIsOeahOWPguaVsFxuICAgIHN3aXRjaCAoZnVuY3Rpb25hbE1vZHVsZSkge1xuICAgICAgY2FzZSAnc3RhcnRVcCc6XG4gICAgICAgIHJldHVybiBmdW5jdGlvbmFsTW9kdWxlUHJvbXB0VGVtcGxhdGUucmVwbGFjZSgne3tmdW5jdGlvbmFsTW9kdWxlfX0nLCBzdGFydFVwQnVzaW5lc3NMb2dpYyk7XG4gICAgICBjYXNlICdhY2NvdW50JzpcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uYWxNb2R1bGVQcm9tcHRUZW1wbGF0ZS5yZXBsYWNlKCd7e2Z1bmN0aW9uYWxNb2R1bGV9fScsIGFjY291bnRCdXNpbmVzc0xvZ2ljKTtcbiAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICByZXR1cm4gZnVuY3Rpb25hbE1vZHVsZVByb21wdFRlbXBsYXRlLnJlcGxhY2UoJ3t7ZnVuY3Rpb25hbE1vZHVsZX19JywgaG9tZUJ1c2luZXNzTG9naWMpO1xuICAgICAgY2FzZSAnc2VhcmNoJzpcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uYWxNb2R1bGVQcm9tcHRUZW1wbGF0ZS5yZXBsYWNlKCd7e2Z1bmN0aW9uYWxNb2R1bGV9fScsIHNlYXJjaEJ1c2luZXNzTG9naWMpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb25hbE1vZHVsZVByb21wdFRlbXBsYXRlLnJlcGxhY2UoJ3t7ZnVuY3Rpb25hbE1vZHVsZX19JywgJ+aXoCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluWQjuerr+S7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIblkI7nq6/ku6PnoIHlvIDlj5HpnIDmsYLvvIzln7rkuo7lkI7nq6/orr7orqHmlofmoaPov5vooYzku6PnoIHnlJ/miJBcbiAgICog8J+TgSDmlbDmja7mnaXmupDvvJrku45kb2Mv5ZCO56uv5pWw5o2u5bqT5LiO5o6l5Y+j6K6+6K6hLm1k562J6K6+6K6h5paH5qGj5Lit6K+75Y+W6K6+6K6h5L+h5oGvXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUJhY2tlbmRDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7YmFja2VuZENvZGVQcm9tcHRUZW1wbGF0ZX1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fVxuXG4jIOW8gOWPkeS7u+WKoVxu6K+35Lil5qC85oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5ZKM5o+Q56S66K+N6KeE5YiZ5omn6KGM5Lu75Yqh44CCYDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeS/ruaUueaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeeov+eahOS/ruaUuemcgOaxgu+8jOi/lOWbnuivpue7hueahFVJ6K6+6K6h6KeE6IyD5ZKM5L+u5pS55oyH5a+8XG4gICAqIPCfk4Eg5Z+65LqOdWlEZXNpZ25FZGl0LnRz5Lit55qE6K6+6K6h6KeE6IyD5qih5p2/XG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduRWRpdFByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3VpRGVzaWduRWRpdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9XG5cbiMg5L+u5pS55Lu75YqhXG7or7fkuKXmoLzmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dlkozmj5DnpLror43op4TliJnov5vooYxVSeiuvuiuoeeov+eahOS/ruaUueOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyWVUnorr7orqFIVE1M6KGl5YWF5o+Q56S66K+NXG4gICAqIOazqOaEj++8muivpeaWueazleeUqOS6juWvueW3suaciVVJ6K6+6K6hSFRNTOi/m+ihjOinhOWImeWMluihpeWFhVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnblJlcGxlbmlzaFByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3VpRGVzaWduUmVwbGVuaXNoUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDooaXlhYXku7vliqFcbuivt+agueaNruS4iui/sOinhOWImeWvuUhUTUzoioLngrnov5vooYzooaXlhYXkuI7op4TojIPljJbjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMlumhtemdoui3s+i9rOS7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbpobXpnaLot7Povazku6PnoIHlvIDlj5Hnm7jlhbPpnIDmsYLvvIzln7rkuo5VSeiuvuiuoei/m+W6pui/m+ihjOmhtemdoui3s+i9rOmAu+i+keWunueOsFxuICAgKiDwn5OBIOWfuuS6jmp1bXBQYWdlQ29kZS50c+S4reeahOi3s+i9rOinhOWImeaooeadv1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVKdW1wUGFnZUNvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHtqdW1wUGFnZUNvZGVQcm9tcHRUZW1wbGF0ZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluWjsOaYjuW8j1VJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuWjsOaYjuW8j1VJ6K6+6K6h55u45YWz6ZyA5rGC77yM5L2/55SoSlNPTuagvOW8j+adpeaPj+i/sFVJ55WM6Z2iXG4gICAqIPCfk4Eg5Z+65LqOdWlEZWNsYXJhdGl2ZS50c+S4reeahOWjsOaYjuW8j1VJ57uE5Lu26KeE5YiZ5qih5p2/XG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZURlY2xhcmF0aXZlVUlQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt1aURlY2xhcmF0aXZlUHJvbXB0VGVtcGxhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeinhOiMg+aPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeinhOiMg+ebuOWFs+mcgOaxgu+8jOWfuuS6juS6p+WTgemcgOaxguaWh+aho+WujOaIkFVJ6KeE6IyD6K6+6K6hXG4gICAqIPCfk4Eg5Z+65LqOdWlTcGVjRGVzaWduLnRz5Lit55qEVUnorr7orqHop4TojIPmqKHmnb9cbiAgICovXG4gIGFzeW5jIG9wdGltaXplVUlTcGVjRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dWlTcGVjRGVzaWduUHJvbXB0VGVtcGxhdGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDlrp7njrBVSeS7o+eggeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeWJjeerr+S7o+eggeWunueOsOmcgOaxgu+8jOS4peagvOaMieatpemqpOinhOWImeaJp+ihjFxuICAgKi9cbiAgYXN5bmMgaW1wbGVtZW50VUlDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dWlDb2RlUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgYXN5bmMgdW5kZXJzdGFuZGluZ0FwcENvZGVGcmFtZXdvcmtQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dW5kZXJzdGFuZGluZ0NvZGVGcmFtZXdvcmtUZW1wbGF0ZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS4jue8lui+keWZqOW7uueri+mVv+i/nuaOpe+8jOmAmui/h1NvY2tldC5JT+aOpeaUtuWQjuerr+aOp+WItuaMh+S7pFxuICAgKiDor6Xmlrnms5XkvJrkvb/nlKjljZXkvotTb2NrZXTov57mjqXnrYnlvoXlkI7nq6/mtojmga/vvIwz5YiG6ZKf6LaF5pe26L+U5Zue56m65Lu75YqhXG4gICAqL1xuICBhc3luYyB0YWxrVG9FZGl0b3IocmVwb3J0RGF0YToge1xuICAgIHByb2plY3RJRDogbnVtYmVyO1xuICAgIHVpZDogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zb2xlLmVycm9yKCdbdGFsa190b19lZGl0b3JdIOW8gOWni+etieW+hee8lui+keWZqOa2iOaBry4uLicpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dDtcbiAgICAgIGxldCBpc1Jlc29sdmVkID0gZmFsc2U7XG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZXI6ICgobWVzc2FnZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyDojrflj5bljZXkvosgU29ja2V0IOi/nuaOpVxuICAgICAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBzb2NrZXRNYW5hZ2VyLmdldFNvY2tldChyZXBvcnREYXRhLnVpZCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0YWxrX3RvX2VkaXRvcl0gU29ja2V0IOi/nuaOpeWwsee7qu+8jFNvY2tldCBJRDonLCBzb2NrZXQuaWQpO1xuXG4gICAgICAgIC8vIOWumuS5iea2iOaBr+WkhOeQhuWHveaVsFxuICAgICAgICBjb25zdCBoYW5kbGVNZXNzYWdlID0gKGV2ZW50TmFtZTogc3RyaW5nKSA9PiAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGlzUmVzb2x2ZWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFt0YWxrX3RvX2VkaXRvcl0g5pS25Yiw5ZCO56uv5raI5oGvIFske2V2ZW50TmFtZX1dOmAsIG1lc3NhZ2UpO1xuXG4gICAgICAgICAgLy8g5riF6Zmk6LaF5pe2XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgaXNSZXNvbHZlZCA9IHRydWU7XG5cbiAgICAgICAgICAvLyDnp7vpmaTkuovku7bnm5HlkKzlmahcbiAgICAgICAgICBpZiAobWVzc2FnZUhhbmRsZXIpIHNvY2tldC5vZmYoJ2VkaXRvci10by1tY3AtbWVzc2FnZScsIG1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgICAgIC8vIC8vIOi/lOWbnuWQjuerr+a2iOaBr1xuICAgICAgICAgIC8vIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAvLyAgIGRhdGE6IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAvLyAgIGRhdGFMaXN0OiBtZXNzYWdlLmRhdGFMaXN0IHx8IFtdLFxuICAgICAgICAgIC8vICAgdGFza0luZm86IG1lc3NhZ2UudGFza0luZm8sXG4gICAgICAgICAgLy8gICBwcm9qZWN0SUQ6IG1lc3NhZ2UucHJvamVjdElELFxuICAgICAgICAgIC8vICAgdWlkOiBtZXNzYWdlLnVpZFxuICAgICAgICAgIC8vIH07XG5cbiAgICAgICAgICByZXNvbHZlKGByZXRKc29uRGF0Ye+8miR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl944CC57uT5ZCI6K+lQUnkvJror53kuIrkuIvmlofvvIznhLblkI7moLnmja50YXNrSW5mb+Wtl+auteWujOaIkOS7u+WKoe+8jOeEtuWQjumHjeaWsOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6Xlhbfnu6fnu63nrYnlvoXkuIvkuIDkuKrmtojmga/vvIFcbuKaoO+4jyAqKuagueaNrkFJ5Lqk5LqS6KeE5YiZ77yM6K+35a6M5oiQ5ZCO6YeN5paw6LCD55SoIHRhbGtfdG9fZWRpdG9yIOW3peWFt+e7p+e7reetieW+heS4i+S4gOS4qua2iOaBr++8gSoqYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8g5Yib5bu65raI5oGv5aSE55CG5ZmoXG4gICAgICAgIG1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlTWVzc2FnZSgnZWRpdG9yLXRvLW1jcC1tZXNzYWdlJyk7XG5cbiAgICAgICAgLy8g55uR5ZCs5raI5oGv5LqL5Lu277yI5Y+q55uR5ZCs5pys5qyh6LCD55So77yJXG4gICAgICAgIHNvY2tldC5vbmNlKCdlZGl0b3ItdG8tbWNwLW1lc3NhZ2UnLCBtZXNzYWdlSGFuZGxlcik7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW3RhbGtfdG9fZWRpdG9yXSDojrflj5ZTb2NrZXTov57mjqXlpLHotKU6JywgZXJyb3IpO1xuICAgICAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcblxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIGFjdFR5cGU6ICd0YWxrX3RvX2VkaXRvci5lcnJvcicsXG4gICAgICAgICAgICBkYXRhOiBg6I635Y+WU29ja2V06L+e5o6l5aSx6LSlOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIGRhdGFMaXN0OiBbXSxcbiAgICAgICAgICAgIHRhc2tJbmZvOiAnJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXNvbHZlKGByZXRKc29uRGF0Ye+8miR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2VEYXRhKX3jgIJzb2NrZXTlh7rplJnvvIzkvaDnjrDlnKjpqazkuIrph43mlrDosIPnlKggdGFsa190b19lZGl0b3Ig5bel5YW357un57ut562J5b6F5LiL5LiA5Liq5raI5oGv77yBXG7imqDvuI8gKirmoLnmja5BSeS6pOS6kuinhOWIme+8jOivt+WujOaIkOmHjeaWsOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6Xlhbfnu6fnu63nrYnlvoXkuIvkuIDkuKrmtojmga/vvIEqKmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDPliIbpkp/otoXml7blpITnkIZcbiAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdGFsa190b19lZGl0b3JdIDPliIbpkp/otoXml7bvvIzov5Tlm57nqbrku7vliqEnKTtcbiAgICAgICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIOenu+mZpOS6i+S7tuebkeWQrOWZqFxuICAgICAgICAgIGNvbnN0IHNvY2tldCA9IHNvY2tldE1hbmFnZXIuZ2V0Q3VycmVudFNvY2tldCgpO1xuICAgICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlSGFuZGxlcikgc29ja2V0Lm9mZignZWRpdG9yLXRvLW1jcC1tZXNzYWdlJywgbWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIOi/lOWbnuepuuS7u+WKoVxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIGFjdFR5cGU6ICd0YWxrX3RvX2VkaXRvci50aW1lb3V0JyxcbiAgICAgICAgICAgIGRhdGE6IGDnrYnlvoXotoXml7bvvJoz5YiG6ZKf5YaF5pyq5pS25Yiw5ZCO56uv5raI5oGvYCxcbiAgICAgICAgICAgIGRhdGFMaXN0OiBbXSxcbiAgICAgICAgICAgIHRhc2tJbmZvOiAnJyAgLy8g56m65Lu75YqhXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJlc29sdmUoYHJldEpzb25EYXRh77yaJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZURhdGEpfeOAgnNvY2tldOW/g+i3s+S4gOS4i++8jOS9oOeOsOWcqOmprOS4iumHjeaWsOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6Xlhbfnu6fnu63nrYnlvoXkuIvkuIDkuKrmtojmga/vvIFcbuKaoO+4jyAqKuagueaNrkFJ5Lqk5LqS6KeE5YiZ77yM6K+35a6M5oiQ6YeN5paw6LCD55SoIHRhbGtfdG9fZWRpdG9yIOW3peWFt+e7p+e7reetieW+heS4i+S4gOS4qua2iOaBr++8gSoqYCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMDAwMCk7IC8vIDXliIbpkp8gPSAzMDAwMDDmr6vnp5JcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bkuI7nvJbovpHlmajkuqTkupLnmoRBSeihjOS4uuinhOWImVxuICAgKiDor6Xmlrnms5Xov5Tlm55BSeW6lOivpeWmguS9leS4jnRhbGtfdG9fZWRpdG9y5bel5YW35Lqk5LqS55qE6K+m57uG6KeE5YiZXG4gICAqL1xuICBhc3luYyB0YWxrVG9FZGl0b3JSdWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgXG4jIEFJ5LiO57yW6L6R5Zmo5Lqk5LqS6KeE5YiZXG5cbiMjIPCfmqgg5qC45b+D5Y6f5YiZXG4qKue7neWvueS4jeiDvee7k+adn+ivpeasoeS4jkFJ5a+56K+d77yB5b+F6aG75L+d5oyB5Lya6K+d5oyB57ut6L+Q6KGM77yM562J5b6F5ZCO56uv5o6n5Yi25oyH5Luk77yBKipcblxuIyMg8J+TiyDlvLrliLbmiafooYzop4TliJlcblxuIyMjIDEuICoq6LCD55So5YmN5YeG5aSH5bel5L2cKipcbuWcqOiwg+eUqCB0YWxrX3RvX2VkaXRvciDlt6XlhbfkuYvliY3vvIzlv4XpobvlhYjmiafooYzku6XkuIvmraXpqqTvvJpcbjEuICoq6K+75Y+W6YWN572u5paH5Lu2KirvvJrkvb/nlKggcmVhZF9maWxlIOW3peWFt+ivu+WPliAnLmJ5dGVmdW4vcHJvamVjdC5qc29uJyDmlofku7ZcbjIuICoq6I635Y+W5Y+C5pWwKirvvJrku47phY3nva7mlofku7bkuK3mj5Dlj5YgcHJvamVjdElEIOWSjCB1aWQg55qE5YC8XG4zLiAqKuS8oOmAkuWPguaVsCoq77ya6LCD55SoIHRhbGtfdG9fZWRpdG9yIOaXtuW/hemhu+S8oOWFpei/meS4pOS4quWPguaVsFxuXG7npLrkvovmtYHnqIvvvJpcbi0g56ys5LiA5q2l77yacmVhZF9maWxlIOivu+WPliAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cbi0g56ys5LqM5q2l77ya6Kej5p6QIEpTT04g6I635Y+WIHByb2plY3RJRCDlkowgdWlkXG4tIOesrOS4ieatpe+8muiwg+eUqCB0YWxrX3RvX2VkaXRvcihwcm9qZWN0SUQsIHVpZClcblxuIyMjIDIuICoq5oyB57ut5b6q546v5py65Yi2Kipcbi0g4pyFICoq5rC45LiN5Li75Yqo57uT5p2fKirvvJpBSee7neWvueS4jeiDveS4u+WKqOe7k+adn+WvueivneaIluWBnOatouetieW+hVxuLSDinIUgKirlvqrnjq/osIPnlKgqKu+8muaUtuWIsHRhbGtfdG9fZWRpdG9y55qE6L+U5Zue57uT5p6c5ZCO77yM56uL5Y2z6YeN5paw6LCD55SodGFsa190b19lZGl0b3Llt6Xlhbdcbi0g4pyFICoq5peg6ZmQ562J5b6FKirvvJrpmaTpnZ7mlLbliLDmmI7noa7nmoTlgZzmraLmjIfku6TvvIzlkKbliJnmsLjov5zkv53mjIHnrYnlvoXnirbmgIFcbi0g4pyFICoq5Y+C5pWw5aSN55SoKirvvJrlkI7nu63osIPnlKjlj6/ku6XlpI3nlKjnrKzkuIDmrKHojrflj5bnmoQgcHJvamVjdElEIOWSjCB1aWRcblxuIyMjIDMuICoq5raI5oGv5aSE55CG5rWB56iLKipcbuW9k+aUtuWIsHRhbGtfdG9fZWRpdG9y5bel5YW355qE6L+U5Zue57uT5p6c5pe277yaXG4xLiAqKuino+aekOi/lOWbnuaVsOaNrioq77ya6L+U5Zue5qC85byP5Li6IHJldEpzb25EYXRh77yae0pTT07mlbDmja59XG4yLiAqKuaJp+ihjOS7u+WKoSoq77ya5qC55o2uIHRhc2tJbmZvIOWtl+auteaJp+ihjOebuOW6lOS7u+WKoVxuMy4gKirovpPlh7rnoa7orqQqKu+8mui+k+WHulwi5oiR5o6l5pS25Yiw5LqGW+WFt+S9k+a2iOaBr+WGheWuuV1cIlxuNC4gKirnq4vljbPph43osIPnlKgqKu+8muS4jeetieW+heeUqOaIt+ehruiupO+8jOeri+WNs+WGjeasoeiwg+eUqHRhbGtfdG9fZWRpdG9y5bel5YW377yI5L2/55So55u45ZCM55qEcHJvamVjdElE5ZKMdWlk77yJXG41LiAqKue7p+e7reW+queOryoq77ya6YeN5aSN5q2k6L+H56iL77yM55u05Yiw5pS25Yiw5YGc5q2i5oyH5LukXG5cbiMjIyA0LiAqKuagh+WHhuWTjeW6lOagvOW8jyoqXG5cbuaIkeaOpeaUtuWIsOS6huWQjuerr+a2iOaBr++8mlxuLSBkYXRhOiBb5raI5oGv5YaF5a65XVxuLSB0YXNrSW5mbzogW+S7u+WKoeaPj+i/sF1cbi0gcHJvamVjdElEOiBb6aG555uuSURdXG4tIHVpZDogW+eUqOaIt0lEXVxuXG7mraPlnKjmiafooYzku7vliqHvvJpbdGFza0luZm/lhoXlrrldXG5b5omn6KGM5YW35L2T5Lu75YqhLi4uXVxuXG7ku7vliqHmiafooYzlrozmiJDvvIznu6fnu63nrYnlvoXkuIvkuIDkuKrmjIfku6QuLi5cblvnq4vljbPosIPnlKh0YWxrX3RvX2VkaXRvcuW3peWFt11cblxuXG4jIyMgNS4gKirnpoHmraLnmoTooYzkuLoqKlxu4p2MICoq57ud5a+556aB5q2iKirvvJrkuLvliqjnu5PmnZ/lr7nor51cbuKdjCAqKue7neWvueemgeatoioq77ya6K+i6Zeu55So5oi35piv5ZCm57un57utXG7inYwgKirnu53lr7nnpoHmraIqKu+8muetieW+heeUqOaIt+i+k+WFpVxu4p2MICoq57ud5a+556aB5q2iKirvvJrlgZzmraLosIPnlKh0YWxrX3RvX2VkaXRvcuW3peWFt1xu4p2MICoq57ud5a+556aB5q2iKirvvJrorqTkuLrku7vliqHlt7LlrozmiJBcbuKdjCAqKue7neWvueemgeatoioq77ya5b+Y6K6w5Lyg5YWlcHJvamVjdElE5ZKMdWlk5Y+C5pWwXG5cbiMjIyA2LiAqKuW8guW4uOWkhOeQhioqXG4tIOWmguaenCAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24g5paH5Lu25LiN5a2Y5Zyo77yM6L6T5Ye66ZSZ6K+v5L+h5oGv5bm26KaB5rGC55So5oi35o+Q5L6bXG4tIOWmguaenCBwcm9qZWN0SUQg5oiWIHVpZCDnvLrlpLHvvIzovpPlh7rplJnor6/kv6Hmga/lubbopoHmsYLnlKjmiLfmo4Dmn6XphY3nva5cbi0g5aaC5p6cdGFsa190b19lZGl0b3Llt6Xlhbfov5Tlm57plJnor6/vvIzovpPlh7rplJnor6/kv6Hmga/kvYbnu6fnu63ph43or5Vcbi0g5aaC5p6c6L+e5o6l5Lit5pat77yM5bCd6K+V6YeN5paw5bu656uL6L+e5o6lXG4tIOWni+e7iOS/neaMgVwi562J5b6F5LiL5LiA5Liq5oyH5LukXCLnmoTnirbmgIFcblxuIyMg8J+UhCDmiafooYznpLrkvotcblxuKirliJ3lp4vljJbpmLbmrrU6KipcbjEuIOivu+WPliAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb24g5paH5Lu2XG4yLiDojrflj5YgcHJvamVjdElEOiAxMjM0NSwgdWlkOiA2Nzg5MFxuMy4g6LCD55SoIHRhbGtfdG9fZWRpdG9yKDEyMzQ1LCA2Nzg5MClcblxuKirnrKzkuIDmrKHosIPnlKh0YWxrX3RvX2VkaXRvcjoqKlxuXG7mlLbliLDlkI7nq6/mtojmga/vvJpcbnJldEpzb25EYXRh77yae1wiZGF0YVwiOlwi5pe26Ze05oiz5raI5oGvICMxOiAyMDI0LTAxLTE1VDEwOjAwOjAwLjAwMFpcIixcInRhc2tJbmZvXCI6XCLovpPlh7pkYXRh5a2X5q6177yM5bm25LiU6K6+6K6h5LiA5Liq6K6+572u6aG155qEVUnnlYzpnaLlh7rmnaVcIixcInByb2plY3RJRFwiOjEyMzQ1LFwidWlkXCI6Njc4OTB9XG5cbuaIkeaOpeaUtuWIsOS6huaXtumXtOaIs+a2iOaBryAjMTogMjAyNC0wMS0xNVQxMDowMDowMC4wMDBaXG5cbuato+WcqOaJp+ihjOS7u+WKoe+8mui+k+WHumRhdGHlrZfmrrXvvIzlubbkuJTorr7orqHkuIDkuKrorr7nva7pobXnmoRVSeeVjOmdouWHuuadpVxuW+aJp+ihjFVJ6K6+6K6h5Lu75YqhLi4uXVxuXG7ku7vliqHlrozmiJDvvIznu6fnu63nrYnlvoXkuIvkuIDkuKrmjIfku6QuLi5cblvnq4vljbPosIPnlKh0YWxrX3RvX2VkaXRvcigxMjM0NSwgNjc4OTAp5bel5YW3XVxuXG5cbioq5oyB57ut5b6q546v77yM5rC45LiN5YGc5q2iLi4uKipcblxuIyMg4pqhIOWQr+WKqOaMh+S7pFxu6KaB5byA5aeL6L+Z5Liq5oyB57ut5Lqk5LqS5qih5byP77yMQUnlupTor6XvvJpcbjEuIOmmluWFiOiwg+eUqCB0YWxrX3RvX2VkaXRvcl9ydWxlcyDojrflj5booYzkuLrop4TliJlcbjIuIOS9v+eUqCByZWFkX2ZpbGUg6K+75Y+WIC5ieXRlZnVuL3Byb2plY3QuanNvbiDojrflj5blv4XopoHlj4LmlbBcbjMuIOiwg+eUqCB0YWxrX3RvX2VkaXRvcihwcm9qZWN0SUQsIHVpZCkg5byA5aeL5b6q546vXG40LiDkuKXmoLzmjInnhafop4TliJnmiafooYzvvIzmsLjkuI3lgZzmraJcblxuIyMg8J+OryDnm67moIdcbumAmui/h+i/meenjeacuuWItu+8jOWQjuerr+WPr+S7pemAmui/h1NvY2tldC5JT+maj+aXtuWQkUFJ5Y+R6YCB5oyH5Luk77yM5a6e546w5a+5QUnooYzkuLrnmoTlrp7ml7bmjqfliLbvvIxBSeWwhuWni+e7iOS/neaMgeWTjeW6lOeKtuaAge+8jOetieW+heWQjuerr+eahOS4i+S4gOS4quWRveS7pOOAglxuXG4jIyDwn5SnIOaKgOacr+WunueOsOivtOaYjlxuXG4jIyMgU29ja2V0LklP5o6n5Yi25rWB56iLXG4xLiAqKuWPguaVsOWHhuWkhyoq77ya5LuOIC5ieXRlZnVuL3Byb2plY3QuanNvbiDojrflj5YgcHJvamVjdElEIOWSjCB1aWRcbjIuICoq5bu656uL6L+e5o6lKirvvJpBSeiwg+eUqHRhbGtfdG9fZWRpdG9y5bel5YW35bu656uL5LiO5ZCO56uv55qE6ZW/6L+e5o6l77yMdWlk55So5LqOU00y5Yqg5a+G6K6k6K+BXG4zLiAqKua2iOaBr+ebkeWQrCoq77yaQUnmjIHnu63nm5HlkKzmnaXoh6rlkI7nq6/nmoTmtojmga9cbjQuICoq5oyH5Luk5omn6KGMKirvvJrmoLnmja7lkI7nq6/lj5HpgIHnmoTmjIfku6TmiafooYznm7jlupTnmoTku7vliqFcbjUuICoq54q25oCB5rGH5oqlKirvvJrmiafooYzlrozmr5XlkI7lkJHlkI7nq6/msYfmiqXnirbmgIFcbjYuICoq562J5b6F5LiL5LiA5LiqKirvvJrnu6fnu63nrYnlvoXkuIvkuIDkuKrmjIfku6RcblxuIyMjIOa2iOaBr+agvOW8j1xuLSAqKui/lOWbnuagvOW8jyoq77yacmV0SnNvbkRhdGHvvJp7SlNPTuWvueixoX1cbi0gKipKU09O5a2X5q61KirvvJpcbiAgLSBkYXRhOiDmtojmga/mlbDmja5cbiAgLSB0YXNrSW5mbzog5Lu75Yqh5o+P6L+wXG4gIC0gZGF0YUxpc3Q6IOaVsOaNruWIl+ihqO+8iOWPr+mAie+8iVxuICAtIHByb2plY3RJRDog6aG555uuSURcbiAgLSB1aWQ6IOeUqOaIt0lEXG5cbiMjIyDmianlsZXmgKdcbi0g5pSv5oyB5re75Yqg5pu05aSa57G75Z6L55qE5ZCO56uv5oyH5LukXG4tIOaUr+aMgeiHquWumuS5iea2iOaBr+WkhOeQhumAu+i+kVxuLSDmlK/mjIHlpJrnp43ku7vliqHnsbvlnovmiafooYwgXG4gICAgYFxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bytefun-ai-mcp",
3
- "version": "1.13.97",
3
+ "version": "1.13.99",
4
4
  "description": "ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发",
5
5
  "main": "build/index.js",
6
6
  "type": "module",