@acquiredintelligence/attend 0.0.0-stage → 0.2.0
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.
- package/LICENSE +21 -0
- package/README.md +174 -2
- package/dist/attend.d.ts +30 -0
- package/dist/attend.d.ts.map +1 -0
- package/dist/attend.js +464 -0
- package/dist/attend.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/ids.d.ts +12 -0
- package/dist/core/ids.d.ts.map +1 -0
- package/dist/core/ids.js +97 -0
- package/dist/core/ids.js.map +1 -0
- package/dist/core/reducer.d.ts +26 -0
- package/dist/core/reducer.d.ts.map +1 -0
- package/dist/core/reducer.js +437 -0
- package/dist/core/reducer.js.map +1 -0
- package/dist/core/seen.d.ts +22 -0
- package/dist/core/seen.d.ts.map +1 -0
- package/dist/core/seen.js +61 -0
- package/dist/core/seen.js.map +1 -0
- package/dist/core/state.d.ts +12 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +90 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/step.d.ts +14 -0
- package/dist/core/step.d.ts.map +1 -0
- package/dist/core/step.js +17 -0
- package/dist/core/step.js.map +1 -0
- package/dist/core/threshold.d.ts +40 -0
- package/dist/core/threshold.d.ts.map +1 -0
- package/dist/core/threshold.js +72 -0
- package/dist/core/threshold.js.map +1 -0
- package/dist/core/types.d.ts +704 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +24 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/window.d.ts +38 -0
- package/dist/core/window.d.ts.map +1 -0
- package/dist/core/window.js +322 -0
- package/dist/core/window.js.map +1 -0
- package/dist/decisions.d.ts +53 -0
- package/dist/decisions.d.ts.map +1 -0
- package/dist/decisions.js +115 -0
- package/dist/decisions.js.map +1 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +53 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/adapter.d.ts +21 -0
- package/dist/internal/adapter.d.ts.map +1 -0
- package/dist/internal/adapter.js +62 -0
- package/dist/internal/adapter.js.map +1 -0
- package/dist/internal/assert.d.ts +5 -0
- package/dist/internal/assert.d.ts.map +1 -0
- package/dist/internal/assert.js +14 -0
- package/dist/internal/assert.js.map +1 -0
- package/dist/internal/clock.d.ts +8 -0
- package/dist/internal/clock.d.ts.map +1 -0
- package/dist/internal/clock.js +38 -0
- package/dist/internal/clock.js.map +1 -0
- package/dist/internal/http.d.ts +42 -0
- package/dist/internal/http.d.ts.map +1 -0
- package/dist/internal/http.js +122 -0
- package/dist/internal/http.js.map +1 -0
- package/dist/internal/images.d.ts +18 -0
- package/dist/internal/images.d.ts.map +1 -0
- package/dist/internal/images.js +75 -0
- package/dist/internal/images.js.map +1 -0
- package/dist/internal/json.d.ts +3 -0
- package/dist/internal/json.d.ts.map +1 -0
- package/dist/internal/json.js +5 -0
- package/dist/internal/json.js.map +1 -0
- package/dist/internal/prompt.d.ts +31 -0
- package/dist/internal/prompt.d.ts.map +1 -0
- package/dist/internal/prompt.js +149 -0
- package/dist/internal/prompt.js.map +1 -0
- package/dist/internal/shared.d.ts +12 -0
- package/dist/internal/shared.d.ts.map +1 -0
- package/dist/internal/shared.js +138 -0
- package/dist/internal/shared.js.map +1 -0
- package/dist/jev.d.ts +74 -0
- package/dist/jev.d.ts.map +1 -0
- package/dist/jev.js +156 -0
- package/dist/jev.js.map +1 -0
- package/dist/llm.d.ts +164 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +79 -0
- package/dist/llm.js.map +1 -0
- package/dist/mcp.d.ts +130 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +550 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +10 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +50 -0
- package/dist/memory.js.map +1 -0
- package/dist/postgres.d.ts +25 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +56 -0
- package/dist/postgres.js.map +1 -0
- package/dist/redis.d.ts +20 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +83 -0
- package/dist/redis.js.map +1 -0
- package/dist/server/compat.d.ts +13 -0
- package/dist/server/compat.d.ts.map +1 -0
- package/dist/server/compat.js +5 -0
- package/dist/server/compat.js.map +1 -0
- package/dist/server/cursor.d.ts +15 -0
- package/dist/server/cursor.d.ts.map +1 -0
- package/dist/server/cursor.js +50 -0
- package/dist/server/cursor.js.map +1 -0
- package/dist/server/events.d.ts +42 -0
- package/dist/server/events.d.ts.map +1 -0
- package/dist/server/events.js +189 -0
- package/dist/server/events.js.map +1 -0
- package/dist/server/fanout.d.ts +28 -0
- package/dist/server/fanout.d.ts.map +1 -0
- package/dist/server/fanout.js +184 -0
- package/dist/server/fanout.js.map +1 -0
- package/dist/server/guard.d.ts +19 -0
- package/dist/server/guard.d.ts.map +1 -0
- package/dist/server/guard.js +27 -0
- package/dist/server/guard.js.map +1 -0
- package/dist/server/http.d.ts +4 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +323 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/ingest.d.ts +4 -0
- package/dist/server/ingest.d.ts.map +1 -0
- package/dist/server/ingest.js +400 -0
- package/dist/server/ingest.js.map +1 -0
- package/dist/server/install.d.ts +5 -0
- package/dist/server/install.d.ts.map +1 -0
- package/dist/server/install.js +91 -0
- package/dist/server/install.js.map +1 -0
- package/dist/server/poll.d.ts +4 -0
- package/dist/server/poll.d.ts.map +1 -0
- package/dist/server/poll.js +45 -0
- package/dist/server/poll.js.map +1 -0
- package/dist/server/serve.d.ts +19 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +238 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/sessions.d.ts +14 -0
- package/dist/server/sessions.d.ts.map +1 -0
- package/dist/server/sessions.js +54 -0
- package/dist/server/sessions.js.map +1 -0
- package/dist/server/stream.d.ts +11 -0
- package/dist/server/stream.d.ts.map +1 -0
- package/dist/server/stream.js +216 -0
- package/dist/server/stream.js.map +1 -0
- package/dist/server/tools.d.ts +22 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +55 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/server/types.d.ts +351 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +5 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +10 -0
- package/dist/server.js.map +1 -0
- package/dist/shell/budget.d.ts +4 -0
- package/dist/shell/budget.d.ts.map +1 -0
- package/dist/shell/budget.js +5 -0
- package/dist/shell/budget.js.map +1 -0
- package/dist/shell/copy.d.ts +20 -0
- package/dist/shell/copy.d.ts.map +1 -0
- package/dist/shell/copy.js +73 -0
- package/dist/shell/copy.js.map +1 -0
- package/dist/shell/decisions.d.ts +6 -0
- package/dist/shell/decisions.d.ts.map +1 -0
- package/dist/shell/decisions.js +42 -0
- package/dist/shell/decisions.js.map +1 -0
- package/dist/shell/read.d.ts +7 -0
- package/dist/shell/read.d.ts.map +1 -0
- package/dist/shell/read.js +21 -0
- package/dist/shell/read.js.map +1 -0
- package/dist/shell/scheduler.d.ts +4 -0
- package/dist/shell/scheduler.d.ts.map +1 -0
- package/dist/shell/scheduler.js +90 -0
- package/dist/shell/scheduler.js.map +1 -0
- package/dist/shell/scope.d.ts +27 -0
- package/dist/shell/scope.d.ts.map +1 -0
- package/dist/shell/scope.js +343 -0
- package/dist/shell/scope.js.map +1 -0
- package/dist/shell/types.d.ts +168 -0
- package/dist/shell/types.d.ts.map +1 -0
- package/dist/shell/types.js +2 -0
- package/dist/shell/types.js.map +1 -0
- package/dist/sqlite.d.ts +14 -0
- package/dist/sqlite.d.ts.map +1 -0
- package/dist/sqlite.js +39 -0
- package/dist/sqlite.js.map +1 -0
- package/dist/step.d.ts +18 -0
- package/dist/step.d.ts.map +1 -0
- package/dist/step.js +14 -0
- package/dist/step.js.map +1 -0
- package/dist/store/memory.d.ts +12 -0
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +264 -0
- package/dist/store/memory.js.map +1 -0
- package/dist/store/postgres.d.ts +24 -0
- package/dist/store/postgres.d.ts.map +1 -0
- package/dist/store/postgres.js +364 -0
- package/dist/store/postgres.js.map +1 -0
- package/dist/store/redis.d.ts +12 -0
- package/dist/store/redis.d.ts.map +1 -0
- package/dist/store/redis.js +540 -0
- package/dist/store/redis.js.map +1 -0
- package/dist/store/sqlite-worker.d.ts +91 -0
- package/dist/store/sqlite-worker.d.ts.map +1 -0
- package/dist/store/sqlite-worker.js +322 -0
- package/dist/store/sqlite-worker.js.map +1 -0
- package/dist/store/sqlite.d.ts +34 -0
- package/dist/store/sqlite.d.ts.map +1 -0
- package/dist/store/sqlite.js +238 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/store/types.d.ts +137 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/testing/conformance.d.ts +13 -0
- package/dist/testing/conformance.d.ts.map +1 -0
- package/dist/testing/conformance.js +542 -0
- package/dist/testing/conformance.js.map +1 -0
- package/dist/testing/wire.d.ts +16 -0
- package/dist/testing/wire.d.ts.map +1 -0
- package/dist/testing/wire.js +304 -0
- package/dist/testing/wire.js.map +1 -0
- package/dist/testing.d.ts +113 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +655 -0
- package/dist/testing.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +130 -4
- package/skills/attend/SKILL.md +231 -0
- package/skills/attend/references/judges.md +283 -0
- package/skills/attend/references/kinds.md +62 -0
- package/skills/attend/references/mcp.md +132 -0
- package/skills/attend/references/sinks.md +73 -0
- package/skills/attend/references/stores.md +90 -0
- package/skills/attend/references/testing.md +120 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../src/testing/conformance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI9D,MAAM,MAAM,GAAiB;IAC3B,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM;IACnF,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;IACtF,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI;IAClF,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM;CACtE,CAAC;AAEF,SAAS,MAAM,CAAC,EAAU,EAAE,GAAG,GAAG,IAAI;IACpC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;AACvH,CAAC;AAED,SAAS,MAAM,CAAC,EAAU;IACxB,OAAO;QACL,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACjK,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,KAAa,EAAE,KAAK,GAAmB,WAAW,EAAE,EAAE,GAAG,IAAI;IACzF,OAAO;QACL,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;QACxF,aAAa,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KACzF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,EAAU,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAmB,WAAW,EAAE,EAAE,GAAG,IAAI;IACrF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED,SAAS,MAAM,CAAC,EAAU,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAqB,OAAO,EAAE,EAAE,GAAG,IAAI;IACnF,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,OAAO;QACL,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE;QAC/D,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;KAClI,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,OAAe;IAC5C,OAAO;QACL,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI;KACjF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,eAAe,GAAG,CAAC,EAAE,OAAO,GAAyE,EAAE;IACnI,MAAM,MAAM,GAAe;QACzB,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO;KACjH,CAAC;IACF,MAAM,CAAC,UAAU,GAAG;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3D,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClF,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC/D,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAA2B;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAID;;;;GAIG;AACH,SAAS,OAAO,CAAC,KAAiB;IAChC,MAAM,IAAI,GAAyB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,EAAK,OAAmB,EAAc,EAAE;QACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,KAAK,GAAe;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC,GAAG,EAAE;YACH,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;YACxB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;YAClE,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;SACrC;QACD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC;AAChJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAA4C,EAAE,KAAkB;IAChF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI;QACJ,KAAK,CAAC,GAAG;YACP,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC/C,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjB,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvD,KAAK,EAAE,CAAC;YACV,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,MAAM;oBAAE,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,qBAAqB,CAAC,IAA4C;IAChF,OAAO,QAAQ,CAAC,IAAI,EAAE;QACpB,CAAC,iCAAiC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAClD,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACzD,CAAC,CAAC;QACF,CAAC,8EAA8E,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC/F,MAAM,MAAM,GAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/G,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChF,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACrG,CAAC,CAAC;QACF,CAAC,4CAA4C,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC7D,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;gBAC5F,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC;gBAC9F,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC7G,CAAC,CAAC;QACF,CAAC,0DAA0D,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3E,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;gBACnH,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBACxD,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBAChF,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;YAC7D,CAAC,CAAC;QACF,CAAC,qDAAqD,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;gBAC5E,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC1D,CAAC,CAAC;QACF,CAAC,yDAAyD,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9B,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9G,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;gBAC5F,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC;gBACzE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAClC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAChH,CAAC,CAAC;QACF,CAAC,0FAA0F,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3G,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;gBACrI,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;gBAChE,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC1D,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;gBAClG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;YAC3F,CAAC,CAAC;QACF,CAAC,4DAA4D,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC7E,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;oBACzD,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;iBACtE,CAAC,CAAC,CAAC;gBACJ,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACrD,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBACrD,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;gBACnH,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;YAC9D,CAAC,CAAC;QACF,CAAC,uDAAuD,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACxE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,QAAQ,GAAa,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/G,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtF,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;gBACnG,MAAM,WAAW,GAAa,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACzF,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/D,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,yBAAyB,CAAC,CAAC;YACjH,CAAC,CAAC;QACF,CAAC,gGAAgG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACjH,MAAM,OAAO,GAAY,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBACxM,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACrE,MAAM,QAAQ,GAAa;oBACzB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC9B,MAAM,EAAE;wBACN,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC7H,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;wBACrE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;wBAC1H,MAAM,EAAE;4BACN,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;4BAC3I,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;yBAC3I;wBACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI;qBAC7D;iBACF,CAAC;gBACF,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;gBACxD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACzF,CAAC,CAAC;QACF,CAAC,+EAA+E,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAChG,MAAM,KAAK,CAAC,MAAM,CAAC;oBACjB,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;oBACxF,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;iBACzF,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9H,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;gBAC9D,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;gBACxE,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrE,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACnG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;gBAClG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;YACxD,CAAC,CAAC;QACF,CAAC,gEAAgE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACjF,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;gBACrF,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnD,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;YAC5D,CAAC,CAAC;QACF,CAAC,yDAAyD,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1E,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnD,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBACpD,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;gBACtD,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;YACrE,CAAC,CAAC;QACF,CAAC,0EAA0E,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3F,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACjE,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;oBAAE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1G,KAAK,MAAM,KAAK,IAAI,MAAM;oBAAE,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACtI,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;YACpG,CAAC,CAAC;QACF,CAAC,uEAAuE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACxF,MAAM,IAAI,GAAyB,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,EAAK,OAAmB,EAAc,EAAE;oBACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;oBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBACF,MAAM,KAAK,GAAa,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACnF,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/K,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9C,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,YAAqB,CAAC,EAAE,CAAC;oBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrK,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9E,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChC,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,0BAA0B,CAAC,CAAC;gBAChO,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;gBAC3I,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAC9O,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;gBAC3K,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI;oBAAE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;YAC5F,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,KAAiB,EAAE,IAAsB;IAC3D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;QAC5D,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACnG,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,IAA4B;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,IAA4B,EAAE,KAAa;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,QAAQ,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,OAAsB,EAAE,EAAU;IACtD,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA4C,EAAE,OAAkE;IACrJ,MAAM,KAAK,GAAgB;QACzB,CAAC,8CAA8C,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC/D,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;gBACnF,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC;YACxH,CAAC,CAAC;QACF,CAAC,2CAA2C,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5D,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;gBAC1G,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC9G,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBACnF,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBACnF,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC7G,CAAC,CAAC;QACF,CAAC,mEAAmE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpF,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;gBACpG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;gBAC5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;oBAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC;gBAC1I,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACzG,CAAC,CAAC;QACF,CAAC,gEAAgE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACjF,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3E,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzE,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;gBACnG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;gBAClJ,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAC;YAC9J,CAAC,CAAC;QACF,CAAC,iGAAiG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAClH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACvG,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpE,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAC;gBACpK,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjG,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;gBACtF,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC7L,CAAC,CAAC;QACF,CAAC,wCAAwC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACzD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/K,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;gBAC7C,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;YACrJ,CAAC,CAAC;QACF,CAAC,oFAAoF,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClH,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/F,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;gBACnG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC3L,CAAC,CAAC;QACF,CAAC,8DAA8D,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC/E,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrD,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/D,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAgC,EAAE,CAAC;oBACvI,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;gBAC/H,CAAC;YACH,CAAC,CAAC;QACF,CAAC,uCAAuC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACxD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjN,MAAM,KAAK,GAAG,KAAK,EAAE,MAA8B,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;gBAC/F,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;gBAClF,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,qBAAqB,CAAC,CAAC;gBAClG,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;gBACzF,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAC1F,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;YAClH,CAAC,CAAC;QACF,CAAC,mCAAmC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpE,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC1E,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;gBAC/E,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5E,CAAC,CAAC;QACF,CAAC,uFAAuF,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACxG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChE,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC;gBACjI,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBACrE,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;YAC9F,CAAC,CAAC;QACF,CAAC,yDAAyD,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1E,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;gBAC9C,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtC,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,EAAE,qBAAqB,CAAC,CAAC;oBAC3D,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;oBAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE,iCAAiC,CAAC,CAAC;oBAC1E,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,EAAE,kBAAkB,CAAC,CAAC;oBAC5D,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC/D,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,MAAM,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC3B,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjE,CAAC;wBAAS,CAAC;oBACT,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC;QACF,CAAC,qEAAqE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;gBACzC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtG,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpE,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjG,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBAC7G,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;gBACzG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7G,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;gBAClD,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC1F,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrD,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC;YAC7G,CAAC,CAAC;QACF,CAAC,2EAA2E,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5F,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACtC,QAAQ,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBAC1E,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,EAAE,uBAAuB,CAAC,CAAC;oBACvE,CAAC;4BAAS,CAAC;wBACT,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;KACH,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,GAAoD,EAAmB,EAAE,CAAC,CAAC;YACzG,IAAI;YACJ,KAAK,CAAC,GAAG;gBACP,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;gBACxC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9C,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC1D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvD,CAAC,CAAC,KAAK,EAAE,CAAC;oBACV,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,MAAM;wBAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kDAAkD,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACtF,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAClC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC7C,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kEAAkE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACtG,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrF,MAAM,KAAK,GAAG,UAAU,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC,CAAC;YACJ,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,IAAI,KAAK,GAAoB,IAAI,CAAC;YAClC,IAAI,QAAQ,GAAoB,IAAI,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;YAChC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;oBAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC5B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;wBACjD,IAAI,QAAQ,KAAK,IAAI;4BAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,6BAA6B,CAAC,CAAC;wBAC1G,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;wBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnB,CAAC;oBACD,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;wBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;oBACxH,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,IAAI;wBAAE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBACD,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5G,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,iCAAiC,CAAC,CAAC;YACpF,CAAC;oBAAS,CAAC;gBACT,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;gBAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;wBAAE,MAAM,OAAO,CAAC,MAAM,CAAC;oBACxD,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DecisionAppend, JsonObject } from '../core/types.js';
|
|
2
|
+
import type { Retention } from '../store/types.js';
|
|
3
|
+
import type { Principal } from '../server/types.js';
|
|
4
|
+
import type { ConformanceCase } from '../testing.js';
|
|
5
|
+
/** A running server under test, seen through one MCP client, plus the log behind it. */
|
|
6
|
+
export interface WireTarget {
|
|
7
|
+
/** One JSON-RPC request; resolves with the raw wire result, or rejects with an Error carrying code and data. */
|
|
8
|
+
request(method: string, params: JsonObject): Promise<Record<string, unknown>>;
|
|
9
|
+
/** Commits rows to the decision log the server reads, as the shell would. */
|
|
10
|
+
commit(appends: DecisionAppend[]): Promise<void>;
|
|
11
|
+
trim(retention: Retention): Promise<void>;
|
|
12
|
+
stop(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
/** The SEP-3415 MUSTs for events/list, events/poll and the tools, as cases. `start` gives each case a fresh server and empty log, serving `principal`. */
|
|
15
|
+
export declare function eventsWireConformance(start: (principal: Principal) => Promise<WireTarget>): ConformanceCase[];
|
|
16
|
+
//# sourceMappingURL=wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/testing/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,gHAAgH;IAChH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9E,6EAA6E;IAC7E,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AA0CD,0JAA0J;AAC1J,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,eAAe,EAAE,CA+O7G"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { assertEqual, assertOk } from '../internal/assert.js';
|
|
2
|
+
function decision(id, scope = 's', route = 'interrupt', at = Date.now()) {
|
|
3
|
+
return { kind: 'decision', id, scope, route, at, body: {
|
|
4
|
+
id, scope, route, at, confidence: null, probabilities: { interrupt: 0.8, queue: 0.1, note: 0.05, ask: 0.05, skip: 0, wait: 0 }, predicates: { relevant: 0.9 },
|
|
5
|
+
window: { id, events: [{ id: `event:${id}`, at: at - 2, name: 'changed', data: { nested: ['hello', 1] }, kind: 'closing', seenAt: at - 1 }], reason: 'closing', settledAt: at - 1, waits: 2, dropped: 3, gap: true },
|
|
6
|
+
} };
|
|
7
|
+
}
|
|
8
|
+
function letter(id, stage = 'judge', at = Date.now()) {
|
|
9
|
+
const row = decision(id, 's', 'interrupt', at);
|
|
10
|
+
if (row.kind !== 'decision')
|
|
11
|
+
throw new Error('Expected decision');
|
|
12
|
+
return { kind: 'deadLetter', id, scope: row.scope, route: stage === 'sink' ? row.route : null, at: row.at, body: { id, scope: row.scope, at: row.at, window: row.body.window, stage, message: 'could not deliver', permanent: true, attempts: 3, decision: stage === 'sink' ? row.body : null } };
|
|
13
|
+
}
|
|
14
|
+
function record(value) {
|
|
15
|
+
assertOk(typeof value === 'object' && value !== null && !Array.isArray(value), 'object');
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function events(result) {
|
|
19
|
+
assertOk(Array.isArray(result.events), 'events array');
|
|
20
|
+
return result.events.map(record);
|
|
21
|
+
}
|
|
22
|
+
function ids(result) { return events(result).map((e) => e.eventId); }
|
|
23
|
+
async function error(run, code, field, expected) {
|
|
24
|
+
try {
|
|
25
|
+
await run();
|
|
26
|
+
}
|
|
27
|
+
catch (caught) {
|
|
28
|
+
const value = record(caught);
|
|
29
|
+
assertEqual(value.code, code, 'error code');
|
|
30
|
+
const data = record(value.data);
|
|
31
|
+
if (expected === undefined)
|
|
32
|
+
assertOk(typeof data[field] === 'string', field);
|
|
33
|
+
else
|
|
34
|
+
assertEqual(data[field], expected, field);
|
|
35
|
+
return data[field];
|
|
36
|
+
}
|
|
37
|
+
throw new Error('Expected rejection');
|
|
38
|
+
}
|
|
39
|
+
const all = { id: 'local', scopes: [''] };
|
|
40
|
+
/** The SEP-3415 MUSTs for events/list, events/poll and the tools, as cases. `start` gives each case a fresh server and empty log, serving `principal`. */
|
|
41
|
+
export function eventsWireConformance(start) {
|
|
42
|
+
const checked = async (principal) => {
|
|
43
|
+
const target = await start(principal);
|
|
44
|
+
return { ...target, async request(method, params) {
|
|
45
|
+
const result = await target.request(method, params);
|
|
46
|
+
assertEqual(result.resultType, 'complete', `${method} resultType`);
|
|
47
|
+
return result;
|
|
48
|
+
} };
|
|
49
|
+
};
|
|
50
|
+
const poll = (target, params = {}) => target.request('events/poll', { name: 'attention.decision', ...params });
|
|
51
|
+
const head = async (target) => (await poll(target, { cursor: null })).cursor;
|
|
52
|
+
const cases = [
|
|
53
|
+
['events/list describes attention.decision and attention.deadLetter', async (t) => {
|
|
54
|
+
const result = await t.request('events/list', {});
|
|
55
|
+
const descriptors = result.events.map(record);
|
|
56
|
+
assertEqual(descriptors.map((d) => d.name), ['attention.decision', 'attention.deadLetter'], 'names');
|
|
57
|
+
for (const d of descriptors) {
|
|
58
|
+
assertEqual(d.delivery, ['poll', 'push'], 'delivery');
|
|
59
|
+
assertEqual(record(d.inputSchema).additionalProperties, false, 'strict arguments');
|
|
60
|
+
}
|
|
61
|
+
assertEqual(record(descriptors[0].payloadSchema).required, ['decisionId', 'scope', 'route', 'probabilities', 'predicates', 'confidence', 'reason', 'settledAt', 'decidedAt', 'eventCount', 'eventIds', 'dropped', 'gap', 'waits', 'notice'], 'required fields');
|
|
62
|
+
assertOk(!('nextCursor' in result), 'one page');
|
|
63
|
+
await error(() => t.request('events/list', { cursor: 'page-2' }), -32602, 'field', 'cursor');
|
|
64
|
+
}],
|
|
65
|
+
['a null cursor starts from now', async (t) => {
|
|
66
|
+
await t.commit([decision('old')]);
|
|
67
|
+
const result = await poll(t, { cursor: null });
|
|
68
|
+
assertEqual(ids(result), [], 'no replay');
|
|
69
|
+
assertEqual(result.truncated, false, 'not truncated');
|
|
70
|
+
assertEqual(result.hasMore, false, 'no more');
|
|
71
|
+
assertOk(typeof result.nextPollMs === 'number' && result.nextPollMs >= 1000, 'poll interval');
|
|
72
|
+
assertOk(typeof result.cursor === 'string', 'cursor');
|
|
73
|
+
await t.commit([decision('new')]);
|
|
74
|
+
assertEqual(ids(await poll(t, { cursor: result.cursor })), ['new'], 'new row');
|
|
75
|
+
assertEqual(ids(await poll(t)), [], 'absent cursor starts now');
|
|
76
|
+
}],
|
|
77
|
+
['the cursor from an empty log replays the first rows', async (t) => {
|
|
78
|
+
const cursor = await head(t);
|
|
79
|
+
await t.commit([decision('a'), decision('b')]);
|
|
80
|
+
assertEqual(ids(await poll(t, { cursor })), ['a', 'b'], 'commit order');
|
|
81
|
+
}],
|
|
82
|
+
['occurrences carry the payload fields and no per-event cursor', async (t) => {
|
|
83
|
+
const cursor = await head(t);
|
|
84
|
+
const rows = [decision('a'), decision('b', 's', 'queue'), letter('c', 'sink', 1000), letter('d', 'judge', 1000)];
|
|
85
|
+
await t.commit(rows);
|
|
86
|
+
const decisions = events(await poll(t, { cursor }));
|
|
87
|
+
const letters = events(await poll(t, { cursor, name: 'attention.deadLetter' }));
|
|
88
|
+
for (const [i, event] of [...decisions, ...letters].entries()) {
|
|
89
|
+
const row = rows[i];
|
|
90
|
+
const body = row.body;
|
|
91
|
+
const data = record(event.data);
|
|
92
|
+
assertEqual(event.eventId, row.id, 'event id');
|
|
93
|
+
assertEqual(event.name, row.kind === 'decision' ? 'attention.decision' : 'attention.deadLetter', 'event name');
|
|
94
|
+
assertEqual(event.timestamp, new Date(row.at).toISOString(), 'timestamp');
|
|
95
|
+
assertOk(!('cursor' in event), 'no occurrence cursor');
|
|
96
|
+
assertEqual(data.scope, body.scope, 'scope');
|
|
97
|
+
assertEqual(data.eventIds, body.window.events.map((e) => e.id), 'event ids');
|
|
98
|
+
assertEqual(data.eventCount, body.window.events.length, 'event count');
|
|
99
|
+
assertEqual(data.reason, body.window.reason, 'reason');
|
|
100
|
+
if (row.kind === 'decision') {
|
|
101
|
+
assertEqual(data.decisionId, row.id, 'decision id');
|
|
102
|
+
assertEqual(data.route, row.body.route, 'route');
|
|
103
|
+
assertEqual(data.probabilities, row.body.probabilities, 'probabilities');
|
|
104
|
+
assertEqual(data.predicates, row.body.predicates, 'predicates');
|
|
105
|
+
assertEqual(data.settledAt, new Date(body.window.settledAt).toISOString(), 'settled at');
|
|
106
|
+
assertEqual(data.decidedAt, new Date(body.at).toISOString(), 'decided at');
|
|
107
|
+
assertEqual(data.confidence, null, 'confidence');
|
|
108
|
+
assertEqual([data.dropped, data.gap, data.waits], [3, true, 2], 'window fields');
|
|
109
|
+
assertOk(typeof data.notice === 'string' && data.notice.length > 0, 'notice');
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
assertEqual(data, row.id === 'c'
|
|
113
|
+
? { letterId: 'c', scope: 's', stage: 'sink', message: 'could not deliver', permanent: true, attempts: 3, decisionId: 'c', route: 'interrupt', reason: 'closing', eventCount: 1, eventIds: ['event:c'], at: '1970-01-01T00:00:01.000Z' }
|
|
114
|
+
: { letterId: 'd', scope: 's', stage: 'judge', message: 'could not deliver', permanent: true, attempts: 3, decisionId: null, route: null, reason: 'closing', eventCount: 1, eventIds: ['event:d'], at: '1970-01-01T00:00:01.000Z' }, 'letter payload');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}],
|
|
118
|
+
['a full page sets hasMore and the next poll continues after it', async (t) => {
|
|
119
|
+
let cursor = await head(t);
|
|
120
|
+
await t.commit(['a', 'b', 'c', 'd', 'e'].map((id) => decision(id)));
|
|
121
|
+
for (const [expected, more] of [[['a', 'b'], true], [['c', 'd'], true], [['e'], false]]) {
|
|
122
|
+
const result = await poll(t, { cursor, maxEvents: 2 });
|
|
123
|
+
assertEqual(ids(result), expected, 'page');
|
|
124
|
+
assertEqual(result.hasMore, more, 'hasMore');
|
|
125
|
+
cursor = result.cursor;
|
|
126
|
+
}
|
|
127
|
+
await t.commit([decision('f'), decision('g')]);
|
|
128
|
+
const result = await poll(t, { cursor, maxEvents: 2 });
|
|
129
|
+
assertEqual(ids(result), ['f', 'g'], 'exact page');
|
|
130
|
+
assertEqual(result.hasMore, false, 'exact head');
|
|
131
|
+
}],
|
|
132
|
+
['a quiet filtered poll still advances the cursor', async (t) => {
|
|
133
|
+
const cursor = await head(t);
|
|
134
|
+
await t.commit(['a', 'b', 'c'].map((id) => decision(id, 'other')));
|
|
135
|
+
const quiet = await poll(t, { cursor, arguments: { scope: 'mine' } });
|
|
136
|
+
assertEqual(ids(quiet), [], 'quiet');
|
|
137
|
+
assertOk(quiet.cursor !== cursor, 'advanced');
|
|
138
|
+
await t.commit([decision('mine', 'mine')]);
|
|
139
|
+
assertEqual(ids(await poll(t, { cursor: quiet.cursor, arguments: { scope: 'mine' } })), ['mine'], 'next');
|
|
140
|
+
}],
|
|
141
|
+
['arguments filter by scope, scopePrefix, routes and minProbability', async (t) => {
|
|
142
|
+
const cursor = await head(t);
|
|
143
|
+
await t.commit([decision('a', 'a/1'), decision('b', 'a/2', 'queue'), decision('c', 'b/1', 'note')]);
|
|
144
|
+
for (const [args, expected] of [[{ scope: 'a/1' }, ['a']], [{ scopePrefix: 'a/' }, ['a', 'b']], [{ routes: ['queue'] }, ['b']], [{ minProbability: 0.5 }, ['a']], [{ minProbability: 0.8 }, ['a']], [{ minProbability: 0.81 }, []], [{ routes: [] }, []]])
|
|
145
|
+
assertEqual(ids(await poll(t, { cursor, arguments: args })), expected, 'filter');
|
|
146
|
+
}],
|
|
147
|
+
['include events carries the window entries', async (t) => {
|
|
148
|
+
const cursor = await head(t);
|
|
149
|
+
const row = decision('a');
|
|
150
|
+
await t.commit([row]);
|
|
151
|
+
assertEqual(record(events(await poll(t, { cursor, arguments: { include: 'events' } }))[0].data).events, row.body.window.events, 'entries');
|
|
152
|
+
assertOk(!('events' in record(events(await poll(t, { cursor }))[0].data)), 'minimal payload');
|
|
153
|
+
}],
|
|
154
|
+
['attention.deadLetter serves dead letters only, filtered by stage', async (t) => {
|
|
155
|
+
const cursor = await head(t);
|
|
156
|
+
await t.commit([decision('a'), letter('b'), letter('c', 'sink')]);
|
|
157
|
+
assertEqual(ids(await poll(t, { cursor, name: 'attention.deadLetter' })), ['b', 'c'], 'letters');
|
|
158
|
+
assertEqual(ids(await poll(t, { cursor, name: 'attention.deadLetter', arguments: { stage: 'sink' } })), ['c'], 'stage');
|
|
159
|
+
}],
|
|
160
|
+
['a cursor from another log incarnation is truncated and resets to the floor', async (t) => {
|
|
161
|
+
await t.commit([decision('a'), decision('b')]);
|
|
162
|
+
const result = await poll(t, { cursor: 'v1.another-epoch.1' });
|
|
163
|
+
assertEqual(ids(result), ['a', 'b'], 'replay');
|
|
164
|
+
assertEqual(result.truncated, true, 'gap');
|
|
165
|
+
assertEqual((await poll(t, { cursor: result.cursor })).truncated, false, 'resumed');
|
|
166
|
+
}],
|
|
167
|
+
['a cursor below the retention floor is truncated', async (t) => {
|
|
168
|
+
const cursor = await head(t);
|
|
169
|
+
await t.commit(['a', 'b', 'c'].map((id) => decision(id)));
|
|
170
|
+
const first = await poll(t, { cursor, maxEvents: 1 });
|
|
171
|
+
await t.trim({ maxRows: 1 });
|
|
172
|
+
const result = await poll(t, { cursor: first.cursor });
|
|
173
|
+
assertEqual(result.truncated, true, 'retention gap');
|
|
174
|
+
assertEqual(ids(result), ['c'], 'retained row');
|
|
175
|
+
}],
|
|
176
|
+
['maxAgeMs skips older rows and says truncated', async (t) => {
|
|
177
|
+
const cursor = await head(t);
|
|
178
|
+
const now = Date.now();
|
|
179
|
+
await t.commit([decision('old', 's', 'interrupt', now - 3_600_000), decision('mid', 's', 'interrupt', now), decision('older', 's', 'interrupt', now - 3_600_000), decision('new', 's', 'interrupt', now)]);
|
|
180
|
+
const mid = await poll(t, { cursor, maxEvents: 2 });
|
|
181
|
+
const older = await poll(t, { cursor, maxEvents: 3 });
|
|
182
|
+
assertEqual(ids(mid), ['old', 'mid'], 'cursor after mid');
|
|
183
|
+
assertEqual(ids(older), ['old', 'mid', 'older'], 'cursor after older');
|
|
184
|
+
const result = await poll(t, { cursor, maxAgeMs: 60_000 });
|
|
185
|
+
assertEqual(ids(result), ['mid', 'new'], 'age filter');
|
|
186
|
+
assertEqual(result.truncated, true, 'age gap');
|
|
187
|
+
const afterMid = await poll(t, { cursor: mid.cursor, maxAgeMs: 60_000 });
|
|
188
|
+
assertEqual(ids(afterMid), ['new'], 'after mid');
|
|
189
|
+
assertEqual(afterMid.truncated, true, 'old next row');
|
|
190
|
+
const afterOlder = await poll(t, { cursor: older.cursor, maxAgeMs: 60_000 });
|
|
191
|
+
assertEqual(ids(afterOlder), ['new'], 'after older');
|
|
192
|
+
assertEqual(afterOlder.truncated, false, 'fresh next row');
|
|
193
|
+
}],
|
|
194
|
+
['errors carry the SEP codes and typed data', async (t, fresh) => {
|
|
195
|
+
await error(() => poll(t, { name: 'unknown' }), -32023, 'kind', 'event');
|
|
196
|
+
for (const cursor of ['garbage', 'v1.', 'v2.x.1'])
|
|
197
|
+
await error(() => poll(t, { cursor }), -32602, 'field', 'cursor');
|
|
198
|
+
for (const args of [{ bogus: 1 }, { scope: 'a', scopePrefix: 'a' }, { routes: ['skip'] }, { minProbability: 2 }]) {
|
|
199
|
+
const field = await error(() => poll(t, { arguments: args }), -32602, 'field');
|
|
200
|
+
assertOk(typeof field === 'string' && field.startsWith('arguments'), 'argument field');
|
|
201
|
+
}
|
|
202
|
+
for (const [args, field] of [[{ routes: ['interrupt'] }, 'arguments.routes'], [{ minProbability: 0.5 }, 'arguments.minProbability'], [{ include: 'events' }, 'arguments.include']]) {
|
|
203
|
+
await error(() => poll(t, { name: 'attention.deadLetter', arguments: args }), -32602, 'field', field);
|
|
204
|
+
}
|
|
205
|
+
await error(() => poll(t, { maxEvents: 0 }), -32602, 'field', 'maxEvents');
|
|
206
|
+
const restricted = await fresh({ id: 'tenant-a', scopes: ['tenant-a/'] });
|
|
207
|
+
try {
|
|
208
|
+
for (const args of [{ scope: 'tenant-b/x' }, { scopePrefix: 'tenant-b/' }])
|
|
209
|
+
await error(() => poll(restricted, { arguments: args }), -32024, 'reason');
|
|
210
|
+
assertEqual(ids(await poll(restricted, { arguments: { scopePrefix: 'tenant-a/x' } })), [], 'granted prefix');
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
await restricted.stop();
|
|
214
|
+
}
|
|
215
|
+
}],
|
|
216
|
+
["a malformed position under the log's own epoch is InvalidParams", async (t) => {
|
|
217
|
+
const cursor = await head(t);
|
|
218
|
+
const epoch = cursor.split('.')[1];
|
|
219
|
+
await error(() => poll(t, { cursor: `v1.${epoch}.not a position` }), -32602, 'field', 'cursor');
|
|
220
|
+
}],
|
|
221
|
+
['a principal with no grants is Forbidden', async (t) => {
|
|
222
|
+
for (const params of [{}, { arguments: { scope: 'a' } }, { name: 'attention.deadLetter' }]) {
|
|
223
|
+
await error(() => poll(t, params), -32024, 'reason');
|
|
224
|
+
}
|
|
225
|
+
const result = await t.request('tools/call', { name: 'attend_wait', arguments: { cursor: null, waitMs: 0 } });
|
|
226
|
+
assertEqual(result.isError, true, 'tool error');
|
|
227
|
+
assertEqual(record(record(result.structuredContent).error).code, -32024, 'Forbidden');
|
|
228
|
+
}, { id: 'none', scopes: [] }],
|
|
229
|
+
['a principal reads only inside its grants', async (t, fresh) => {
|
|
230
|
+
const cursor = await head(t);
|
|
231
|
+
await t.commit([decision('a', 'a/x'), decision('b', 'b/x'), decision('c', 'c/x')]);
|
|
232
|
+
assertEqual(ids(await poll(t, { cursor })), ['a'], 'single grant');
|
|
233
|
+
const multiple = await fresh({ id: 'multi', scopes: ['a/', 'b/'] });
|
|
234
|
+
try {
|
|
235
|
+
const before = await head(multiple);
|
|
236
|
+
await multiple.commit([decision('a', 'a/x'), decision('b', 'b/x'), decision('c', 'c/x')]);
|
|
237
|
+
assertEqual(ids(await poll(multiple, { cursor: before })), ['a', 'b'], 'multiple grants');
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
await multiple.stop();
|
|
241
|
+
}
|
|
242
|
+
}, { id: 'single', scopes: ['a/'] }],
|
|
243
|
+
['a long poll answers as soon as a matching row commits', async (t) => {
|
|
244
|
+
const cursor = await head(t);
|
|
245
|
+
const startAt = Date.now();
|
|
246
|
+
const timer = setTimeout(() => { void t.commit([decision('new')]); }, 100);
|
|
247
|
+
try {
|
|
248
|
+
assertEqual(ids(await poll(t, { cursor, waitMs: 5000 })), ['new'], 'awakened');
|
|
249
|
+
assertOk(Date.now() - startAt < 4000, 'answered early');
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
clearTimeout(timer);
|
|
253
|
+
}
|
|
254
|
+
}],
|
|
255
|
+
['a row that does not match does not end a long poll', async (t) => {
|
|
256
|
+
const cursor = await head(t);
|
|
257
|
+
const startAt = Date.now();
|
|
258
|
+
const timer = setTimeout(() => { void t.commit([decision('other', 'other')]); }, 100);
|
|
259
|
+
let result;
|
|
260
|
+
try {
|
|
261
|
+
result = await poll(t, { cursor, arguments: { scope: 'mine' }, waitMs: 800 });
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
clearTimeout(timer);
|
|
265
|
+
}
|
|
266
|
+
assertEqual(ids(result), [], 'still quiet');
|
|
267
|
+
assertOk(Date.now() - startAt >= 600, 'waited');
|
|
268
|
+
assertOk(result.cursor !== cursor, 'checked other row');
|
|
269
|
+
await t.commit([decision('new', 'mine')]);
|
|
270
|
+
assertEqual(ids(await poll(t, { cursor: result.cursor })), ['new'], 'past other');
|
|
271
|
+
}],
|
|
272
|
+
['attend_wait returns the poll shapes', async (t) => {
|
|
273
|
+
const listed = await t.request('tools/list', {});
|
|
274
|
+
const tools = listed.tools.map(record);
|
|
275
|
+
assertEqual(tools.map((tool) => tool.name), ['attend_wait', 'attend_window'], 'tools');
|
|
276
|
+
for (const tool of tools)
|
|
277
|
+
assertEqual(record(tool.inputSchema).type, 'object', 'schema');
|
|
278
|
+
const initial = record((await t.request('tools/call', { name: 'attend_wait', arguments: { cursor: null, waitMs: 0 } })).structuredContent);
|
|
279
|
+
assertEqual(Object.keys(initial).sort(), ['cursor', 'events', 'truncated'], 'shape');
|
|
280
|
+
await t.commit([decision('a')]);
|
|
281
|
+
const result = record((await t.request('tools/call', { name: 'attend_wait', arguments: { cursor: initial.cursor, waitMs: 0 } })).structuredContent);
|
|
282
|
+
assertEqual(ids(result), ['a'], 'wait result');
|
|
283
|
+
}],
|
|
284
|
+
['attend_window returns the full window inside the grants only', async (t) => {
|
|
285
|
+
const row = decision('allowed', 'a/x');
|
|
286
|
+
await t.commit([row, decision('hidden', 'b/x')]);
|
|
287
|
+
const call = (decisionId) => t.request('tools/call', { name: 'attend_window', arguments: { decisionId } });
|
|
288
|
+
assertEqual(record((await call('allowed')).structuredContent).events, row.body.window.events, 'window');
|
|
289
|
+
const missing = await call('missing');
|
|
290
|
+
assertEqual(missing.isError, true, 'missing');
|
|
291
|
+
assertEqual(await call('hidden'), missing, 'indistinguishable');
|
|
292
|
+
}, { id: 'a', scopes: ['a/'] }],
|
|
293
|
+
];
|
|
294
|
+
return cases.map(([name, run, principal = all]) => ({ name, async run() {
|
|
295
|
+
const target = await checked(principal);
|
|
296
|
+
try {
|
|
297
|
+
await run(target, checked);
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
await target.stop();
|
|
301
|
+
}
|
|
302
|
+
} }));
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/testing/wire.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAY9D,SAAS,QAAQ,CAAC,EAAU,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAmB,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;IAC7F,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE;YACrD,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;YAC7J,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;SACrN,EAAE,CAAC;AACN,CAAC;AAED,SAAS,MAAM,CAAC,EAAU,EAAE,KAAK,GAAqB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAClE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACpS,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,QAAQ,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzF,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,MAAM,CAAC,MAA+B;IAC7C,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;IACvD,OAAQ,MAAM,CAAC,MAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,GAAG,CAAC,MAA+B,IAAe,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEzG,KAAK,UAAU,KAAK,CAAC,GAA2B,EAAE,IAAY,EAAE,KAAa,EAAE,QAAkB;IAC/F,IAAI,CAAC;QAAC,MAAM,GAAG,EAAE,CAAC;IAAC,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,QAAQ,KAAK,SAAS;YAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,KAAK,CAAC,CAAC;;YACxE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,GAAG,GAAc,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAGrD,0JAA0J;AAC1J,MAAM,UAAU,qBAAqB,CAAC,KAAoD;IACxF,MAAM,OAAO,GAAG,KAAK,EAAE,SAAoB,EAAuB,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;gBAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpD,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,aAAa,CAAC,CAAC;gBACnE,OAAO,MAAM,CAAC;YAChB,CAAC,EAAE,CAAC;IACN,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,MAAkB,EAAE,MAAM,GAAe,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACvI,MAAM,IAAI,GAAG,KAAK,EAAE,MAAkB,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAgB,CAAC;IACnG,MAAM,KAAK,GAAe;QACxB,CAAC,mEAAmE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAChF,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBAClD,MAAM,WAAW,GAAI,MAAM,CAAC,MAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7D,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrG,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;oBAC5B,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;oBACtD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;gBACrF,CAAC;gBACD,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACjQ,QAAQ,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;gBAChD,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/F,CAAC,CAAC;QACF,CAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;gBAC1C,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;gBACtD,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC9C,QAAQ,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,eAAe,CAAC,CAAC;gBAC9F,QAAQ,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACtD,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;gBACzF,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,0BAA0B,CAAC,CAAC;YAClE,CAAC,CAAC;QACF,CAAC,qDAAqD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/C,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;YAC1E,CAAC,CAAC;QACF,CAAC,8DAA8D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjH,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;gBAChF,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBACrB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;oBAC/C,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;oBAC/G,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;oBAC1E,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC;oBACvD,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC7C,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;oBAC7E,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBACvE,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACvD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC5B,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;wBACpD,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;wBACjD,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;wBACzE,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;wBAChE,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;wBACzF,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;wBAC3E,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;wBACjD,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;wBACjF,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAChF,CAAC;yBAAM,CAAC;wBACN,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG;4BAC9B,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE;4BACxO,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,0BAA0B,EAAE,EAAE,gBAAgB,CAAC,CAAC;oBAC3P,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;QACF,CAAC,+DAA+D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC5E,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpE,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAU,EAAE,CAAC;oBACjG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC3C,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;oBAC7C,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;gBACnC,CAAC;gBACD,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;gBACnD,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACnD,CAAC,CAAC;QACF,CAAC,iDAAiD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACtE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACrC,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC9C,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3C,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAgB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YACtH,CAAC,CAAC;QACF,CAAC,mEAAmE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAChF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpG,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAoC;oBAAE,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjX,CAAC,CAAC;QACF,CAAC,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC5I,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACjG,CAAC,CAAC;QACF,CAAC,kEAAkE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClE,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBACjG,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1H,CAAC,CAAC;QACF,CAAC,4EAA4E,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACzF,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;gBAC/D,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC/C,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3C,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAChG,CAAC,CAAC;QACF,CAAC,iDAAiD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAgB,EAAE,CAAC,CAAC;gBACjE,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;gBACrD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;YAClD,CAAC,CAAC;QACF,CAAC,8CAA8C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3M,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBAC1D,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3D,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;gBACvD,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnF,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;gBACjD,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvF,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC;gBACrD,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAC7D,CAAC,CAAC;QACF,CAAC,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC/D,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACzE,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC;oBAAE,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACrH,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACjH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC/E,QAAQ,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBACzF,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,0BAA0B,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAkC,EAAE,CAAC;oBACpN,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBACxG,CAAC;gBACD,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC3E,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC;oBACH,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;wBAAE,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBACvJ,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBAC/G,CAAC;wBAAS,CAAC;oBAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;YACxC,CAAC,CAAC;QACF,CAAC,iEAAiE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,iBAAiB,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClG,CAAC,CAAC;QACF,CAAC,yCAAyC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACtD,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAwB,EAAE,CAAC;oBAClH,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9G,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACxF,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC9B,CAAC,0CAA0C,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnF,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;gBACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC1F,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAC5F,CAAC;wBAAS,CAAC;oBAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;YACtC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,CAAC,uDAAuD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC3E,IAAI,CAAC;oBACH,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;oBAC/E,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,CAAC;wBAAS,CAAC;oBAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YACpC,CAAC,CAAC;QACF,CAAC,oDAAoD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACtF,IAAI,MAA+B,CAAC;gBACpC,IAAI,CAAC;oBAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAAC,CAAC;wBAC9E,CAAC;oBAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBAChC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;gBAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAChD,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACxD,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC1C,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;YAC9F,CAAC,CAAC;QACF,CAAC,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM,KAAK,GAAI,MAAM,CAAC,KAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtD,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;gBACvF,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACzF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBAC3I,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrF,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBAC9J,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;YACjD,CAAC,CAAC;QACF,CAAC,8DAA8D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACvC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;gBACnH,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACxG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC9C,WAAW,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAClE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;KAChC,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG;YACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC;gBAAC,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAAC,CAAC;oBAAS,CAAC;gBAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;QACtE,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `attend/testing`: a fake clock, a scripted judge, a recording sink, the port conformance
|
|
3
|
+
* suites, the crash harness and the crash suite. Runner-agnostic: the suites return named
|
|
4
|
+
* async cases that any test runner can register.
|
|
5
|
+
*/
|
|
6
|
+
import type { Clock, DeadLetter, Decision, Event, EventLog, Judge, JudgeInput, Judgment, ScopeRecord, Sink, ScopeStore, Trace } from './types.js';
|
|
7
|
+
import { type Attend, type AttendConfig } from './attend.js';
|
|
8
|
+
export { drain } from './internal/clock.js';
|
|
9
|
+
export interface FakeClock extends Clock {
|
|
10
|
+
/** Move time forward, firing every timer due on the way in order and letting each one's work drain. */
|
|
11
|
+
advance(ms: number): Promise<void>;
|
|
12
|
+
/** Jump to an instant, firing timers the same way. */
|
|
13
|
+
set(at: number): Promise<void>;
|
|
14
|
+
/** The earliest armed timer, or null. */
|
|
15
|
+
nextAt(): number | null;
|
|
16
|
+
}
|
|
17
|
+
export declare function fakeClock(start?: number): FakeClock;
|
|
18
|
+
export type ScriptedAnswer = Judgment | {
|
|
19
|
+
fail: string;
|
|
20
|
+
permanent?: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
hang: true;
|
|
23
|
+
};
|
|
24
|
+
export interface ScriptedJudge extends Judge {
|
|
25
|
+
calls: JudgeInput[];
|
|
26
|
+
}
|
|
27
|
+
/** Answers in order from a script; the last entry repeats. Records every input. */
|
|
28
|
+
export declare function scriptedJudge(script: ScriptedAnswer[]): ScriptedJudge;
|
|
29
|
+
export interface RecordingSink extends Sink {
|
|
30
|
+
delivered: Decision[];
|
|
31
|
+
/** Attempts per decision id, including the failed ones. */
|
|
32
|
+
attempts: Map<string, number>;
|
|
33
|
+
/** Make the next `n` deliveries throw. */
|
|
34
|
+
failNext(n: number, permanent?: boolean): void;
|
|
35
|
+
}
|
|
36
|
+
export declare function recordingSink(): RecordingSink;
|
|
37
|
+
export interface ConformanceCase {
|
|
38
|
+
name: string;
|
|
39
|
+
run(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
/** Every guarantee in `EventLog`'s doc comments. `canBlock` says whether `blockMs` waits. */
|
|
42
|
+
export declare function logConformance(make: () => Promise<EventLog> | EventLog, options?: {
|
|
43
|
+
canBlock?: boolean;
|
|
44
|
+
}): ConformanceCase[];
|
|
45
|
+
export { decisionLogConformance, scopeStoreConformance } from './testing/conformance.js';
|
|
46
|
+
export { eventsWireConformance, type WireTarget } from './testing/wire.js';
|
|
47
|
+
export { suggestThreshold } from './core/threshold.js';
|
|
48
|
+
export type { SuggestThresholdOptions, ThresholdCandidate, ThresholdSuggestion } from './core/threshold.js';
|
|
49
|
+
/** Thrown by a crashed instance's store, and by the harness once a scheduled crash struck. */
|
|
50
|
+
export declare class CrashError extends Error {
|
|
51
|
+
constructor();
|
|
52
|
+
}
|
|
53
|
+
/** Where a scheduled crash strikes relative to the nth commit: before it (nothing written) or after it (written, effects never started). */
|
|
54
|
+
export type CrashPoint = 'before' | 'after';
|
|
55
|
+
export type HarnessConfig = Omit<AttendConfig, 'store' | 'clock' | 'deadLetter'> & {
|
|
56
|
+
/** Optional here: the harness records every letter after the handler, if any, accepted it. */
|
|
57
|
+
deadLetter?: AttendConfig['deadLetter'];
|
|
58
|
+
};
|
|
59
|
+
export interface HarnessOptions {
|
|
60
|
+
/** Default 'scope'. */
|
|
61
|
+
scope?: string;
|
|
62
|
+
/** Default `memoryStore()`. */
|
|
63
|
+
store?: ScopeStore;
|
|
64
|
+
/** The clock's start. Default 0. */
|
|
65
|
+
start?: number;
|
|
66
|
+
/** Default 1000. */
|
|
67
|
+
sweepMs?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface Harness {
|
|
70
|
+
readonly clock: FakeClock;
|
|
71
|
+
readonly store: ScopeStore;
|
|
72
|
+
readonly scope: string;
|
|
73
|
+
/** The current instance; a new one after `restart()`. */
|
|
74
|
+
readonly attend: Attend;
|
|
75
|
+
readonly deadLetters: DeadLetter[];
|
|
76
|
+
readonly traces: Trace[];
|
|
77
|
+
/** Commits so far, across instances. `crashAt` counts the same way. */
|
|
78
|
+
readonly commits: number;
|
|
79
|
+
/** True from a crash until `restart()`. */
|
|
80
|
+
readonly crashed: boolean;
|
|
81
|
+
/** Push into the scope and wait until the runner has nothing left to do. Throws `CrashError` if a crash struck. */
|
|
82
|
+
push(events: Event[]): Promise<void>;
|
|
83
|
+
/** Advance the clock, firing timers one at a time and draining after each. Throws `CrashError` at the instant a crash struck. */
|
|
84
|
+
advance(ms: number): Promise<void>;
|
|
85
|
+
/** Flush the scope and let the runner's tick settle it. */
|
|
86
|
+
flush(): Promise<void>;
|
|
87
|
+
/** Resolve once no store call is in flight. Work that waits on real time is invisible to it. */
|
|
88
|
+
idle(): Promise<void>;
|
|
89
|
+
/** Kill the runner now. The store keeps whatever was committed. */
|
|
90
|
+
crash(): void;
|
|
91
|
+
/** Schedule a crash at the nth commit from now, counting `commits` so far. */
|
|
92
|
+
crashAt(commit: number, point: CrashPoint): void;
|
|
93
|
+
/** Start a fresh runner over the same store, as a restarted process would, and let it recover. */
|
|
94
|
+
restart(): Promise<void>;
|
|
95
|
+
/** Stop the runner gracefully. */
|
|
96
|
+
stop(): Promise<void>;
|
|
97
|
+
inspect(): Promise<ScopeRecord | null>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Runs `createAttend` on one scope with a fake clock over a store it can crash at any
|
|
101
|
+
* commit. Judges, sinks and context must resolve without real time, or `idle()` cannot
|
|
102
|
+
* see them.
|
|
103
|
+
*/
|
|
104
|
+
export declare function harness(config: HarnessConfig, options?: HarnessOptions): Harness;
|
|
105
|
+
/**
|
|
106
|
+
* Whole-runtime guarantee over a real adapter: the scripted session runs once cleanly, then
|
|
107
|
+
* once per commit boundary with a crash injected there, restarting over the same store.
|
|
108
|
+
* Every run must produce the same set of delivered decision ids and dead-letter ids.
|
|
109
|
+
*/
|
|
110
|
+
export declare function crashSuite(make: () => Promise<ScopeStore> | ScopeStore): ConformanceCase[];
|
|
111
|
+
/** Cross-scope recovery, including mixed conflicts, snapshots and effect-start boundaries. */
|
|
112
|
+
export declare function multiScopeCrashSuite(make: () => Promise<ScopeStore> | ScopeStore): ConformanceCase[];
|
|
113
|
+
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|