mirror of
https://github.com/affaan-m/ECC.git
synced 2026-08-17 21:15:40 +02:00
* feat: add council-multi-model skill (heterogeneous Codex review) Rebased onto latest main to resolve the merge conflict (the branch had gone DIRTY as main advanced). Trimmed to just the skill files (no top-level README/AGENTS edits), mirroring the merged #2381. Previously reviewed favorably by greptile/coderabbit/daltino. * feat: add Entry B (independent parallel propose + aggregate, MoA-style) alongside Entry A (review) Splits the skill into two entries depending on what already exists: Entry A (unchanged) reviews an existing draft. New Entry B has every voice (Claude x3 + Codex if available) answer the same question fully independently and in parallel, then aggregates without collapsing disagreement or blending incompatible approaches into one hybrid. For the heaviest decisions the two chain: B first, then A's review step on the aggregation -- with an explicit honesty caveat when Codex already proposed in B and so cannot independently judge the result. * feat: prefer Codex MCP tool over the SDK script when available mcp__codex__codex is now the primary path for both Entry A's heterogeneous review and Entry B's independent proposal -- zero relay, talks directly to OpenAI's backend, no temp file or shell escaping needed. The openai-codex SDK script becomes the fallback for sessions without that MCP tool configured; behavior and guardrails (read-only, verbatim quoting, explicit 'absent' labeling) are unchanged. * fix: register council-multi-model install path * docs: sync skill catalog count * fix: publish council-multi-model skill * fix: harden council multi-model fallback * docs: sync remaining skill count * fix: narrow multi-model council to bounded review * fix: address council adapter review feedback * fix(council-multi-model): enforce tool-less Codex review * fix(council-multi-model): close Codex tool boundary --------- Co-authored-by: haelyra <49814733+haelyra@users.noreply.github.com>
501 lines
17 KiB
JSON
501 lines
17 KiB
JSON
{
|
|
"name": "ecc-universal",
|
|
"version": "2.2.0",
|
|
"description": "Harness-native agent operating system for Codex, OpenCode, Cursor, Gemini, Claude Code, and terminal workflows - skills, hooks, rules, MCP conventions, and operator control-plane patterns",
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"keywords": [
|
|
"ai",
|
|
"agents",
|
|
"skills",
|
|
"hooks",
|
|
"mcp",
|
|
"rules",
|
|
"harness",
|
|
"agent-harness",
|
|
"tdd",
|
|
"code-review",
|
|
"security",
|
|
"automation",
|
|
"best-practices",
|
|
"cursor",
|
|
"cursor-ide",
|
|
"opencode",
|
|
"codex",
|
|
"presentations",
|
|
"slides"
|
|
],
|
|
"author": {
|
|
"name": "Affaan Mustafa",
|
|
"url": "https://x.com/affaan"
|
|
},
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/affaan-m/ECC.git"
|
|
},
|
|
"homepage": "https://github.com/affaan-m/ECC#readme",
|
|
"bugs": {
|
|
"url": "https://github.com/affaan-m/ECC/issues"
|
|
},
|
|
"files": [
|
|
".agents/",
|
|
".claude-plugin/",
|
|
".codex/",
|
|
".codex-plugin/",
|
|
".cursor/",
|
|
".gemini/",
|
|
".github/PULL_REQUEST_TEMPLATE.md",
|
|
".hermes/",
|
|
".kimi/",
|
|
".opencode/",
|
|
".openclaw/",
|
|
".qwen/",
|
|
".zed/",
|
|
".mcp.json",
|
|
"AGENTS.md",
|
|
"COMMANDS-QUICK-REF.md",
|
|
"CONTRIBUTING.md",
|
|
"VERSION",
|
|
"agent.yaml",
|
|
"assets/ecc-icon.svg",
|
|
"assets/hero.png",
|
|
"assets/images/community/",
|
|
"assets/images/sponsors/",
|
|
"agents/",
|
|
"commands/",
|
|
"docs/de-DE/",
|
|
"docs/CODEX-NAVIGATION-GUIDE.md",
|
|
"docs/COMMAND-AGENT-MAP.md",
|
|
"docs/design/ecc-memory-vault.md",
|
|
"docs/ja-JP/",
|
|
"docs/ko-KR/",
|
|
"docs/pt-BR/",
|
|
"docs/ru/",
|
|
"docs/tr/",
|
|
"docs/vi-VN/",
|
|
"docs/zh-CN/",
|
|
"docs/zh-TW/",
|
|
"hooks/",
|
|
"install.ps1",
|
|
"install.sh",
|
|
"manifests/",
|
|
"mcp-configs/",
|
|
"plugins/ecc/",
|
|
"rules/",
|
|
"schemas/",
|
|
"scripts/catalog.js",
|
|
"scripts/ci/scan-supply-chain-iocs.js",
|
|
"scripts/ci/supply-chain-advisory-sources.js",
|
|
"scripts/consult.js",
|
|
"scripts/auto-update.js",
|
|
"scripts/claw.js",
|
|
"scripts/control-pane.js",
|
|
"scripts/codex/check-plugin-cache.js",
|
|
"scripts/codex/merge-codex-config.js",
|
|
"scripts/codex/merge-mcp-config.js",
|
|
"scripts/discussion-audit.js",
|
|
"scripts/doctor.js",
|
|
"scripts/ecc.js",
|
|
"scripts/feedback.js",
|
|
"scripts/memory.js",
|
|
"scripts/memory-mcp.mjs",
|
|
"scripts/gemini-adapt-agents.js",
|
|
"scripts/harness-adapter-compliance.js",
|
|
"scripts/harness-audit.js",
|
|
"scripts/observability-readiness.js",
|
|
"scripts/operator-readiness-dashboard.js",
|
|
"scripts/platform-audit.js",
|
|
"scripts/preview-pack-smoke.js",
|
|
"scripts/release-approval-gate.js",
|
|
"scripts/release-video-suite.js",
|
|
"scripts/dashboard-web.js",
|
|
"scripts/skills-health.js",
|
|
"scripts/hooks/",
|
|
"scripts/install-apply.js",
|
|
"scripts/install-guided.js",
|
|
"scripts/install-plan.js",
|
|
"scripts/ito.js",
|
|
"scripts/lib/",
|
|
"scripts/list-installed.js",
|
|
"scripts/loop-status.js",
|
|
"scripts/plan-canvas.js",
|
|
"scripts/orchestration-status.js",
|
|
"scripts/orchestrate-codex-worker.sh",
|
|
"scripts/orchestrate-worktrees.js",
|
|
"scripts/repair.js",
|
|
"scripts/setup.js",
|
|
"scripts/welcome.js",
|
|
"scripts/session-inspect.js",
|
|
"scripts/sessions-cli.js",
|
|
"scripts/setup-package-manager.js",
|
|
"scripts/skill-create-output.js",
|
|
"scripts/status.js",
|
|
"scripts/sync-ecc-to-codex.sh",
|
|
"scripts/work-items.js",
|
|
"scripts/uninstall.js",
|
|
"skills/agent-architecture-audit/",
|
|
"skills/agent-harness-construction/",
|
|
"skills/agent-introspection-debugging/",
|
|
"skills/agent-sort/",
|
|
"skills/agentic-engineering/",
|
|
"skills/agentic-os/",
|
|
"skills/ai-first-engineering/",
|
|
"skills/ai-regression-testing/",
|
|
"skills/android-clean-architecture/",
|
|
"skills/angular-developer/",
|
|
"skills/api-connector-builder/",
|
|
"skills/api-design/",
|
|
"skills/article-writing/",
|
|
"skills/automation-audit-ops/",
|
|
"skills/autonomous-loops/",
|
|
"skills/backend-patterns/",
|
|
"skills/blender-motion-state-inspection/",
|
|
"skills/blueprint/",
|
|
"skills/brand-voice/",
|
|
"skills/carrier-relationship-management/",
|
|
"skills/claude-devfleet/",
|
|
"skills/cisco-ios-patterns/",
|
|
"skills/clickhouse-io/",
|
|
"skills/code-tour/",
|
|
"skills/coding-standards/",
|
|
"skills/compose-multiplatform-patterns/",
|
|
"skills/configure-ecc/",
|
|
"skills/contract-first/",
|
|
"skills/connections-optimizer/",
|
|
"skills/content-engine/",
|
|
"skills/content-hash-cache-pattern/",
|
|
"skills/continuous-agent-loop/",
|
|
"skills/continuous-learning/",
|
|
"skills/continuous-learning-v2/",
|
|
"skills/cost-aware-llm-pipeline/",
|
|
"skills/cost-tracking/",
|
|
"skills/council/",
|
|
"skills/council-multi-model/",
|
|
"skills/cpp-coding-standards/",
|
|
"skills/cpp-testing/",
|
|
"skills/crosspost/",
|
|
"skills/csharp-testing/",
|
|
"skills/customer-billing-ops/",
|
|
"skills/customs-trade-compliance/",
|
|
"skills/dart-flutter-patterns/",
|
|
"skills/dashboard-builder/",
|
|
"skills/data-throughput-accelerator/",
|
|
"skills/data-scraper-agent/",
|
|
"skills/database-migrations/",
|
|
"skills/deep-research/",
|
|
"skills/defi-amm-security/",
|
|
"skills/deployment-patterns/",
|
|
"skills/dev-team/",
|
|
"skills/django-patterns/",
|
|
"skills/django-security/",
|
|
"skills/django-tdd/",
|
|
"skills/django-verification/",
|
|
"skills/dmux-workflows/",
|
|
"skills/docker-patterns/",
|
|
"skills/dotnet-patterns/",
|
|
"skills/dynamic-workflow-mode/",
|
|
"skills/e2e-testing/",
|
|
"skills/ecc-tools-cost-audit/",
|
|
"skills/email-ops/",
|
|
"skills/energy-procurement/",
|
|
"skills/enterprise-agent-ops/",
|
|
"skills/error-handling/",
|
|
"skills/eval-harness/",
|
|
"skills/evm-token-decimals/",
|
|
"skills/exa-search/",
|
|
"skills/benchmark-optimization-loop/",
|
|
"skills/fal-ai-media/",
|
|
"skills/fastapi-patterns/",
|
|
"skills/finance-billing-ops/",
|
|
"skills/foundation-models-on-device/",
|
|
"skills/frontend-design-direction/",
|
|
"skills/frontend-patterns/",
|
|
"skills/frontend-slides/",
|
|
"skills/fsharp-testing/",
|
|
"skills/github-ops/",
|
|
"skills/golang-patterns/",
|
|
"skills/golang-testing/",
|
|
"skills/google-workspace-ops/",
|
|
"skills/healthcare-phi-compliance/",
|
|
"skills/hipaa-compliance/",
|
|
"skills/homelab-network-readiness/",
|
|
"skills/homelab-network-setup/",
|
|
"skills/hookify-rules/",
|
|
"skills/inventory-demand-planning/",
|
|
"skills/ito-basket-compare/",
|
|
"skills/ito-compute/",
|
|
"skills/ito-data-atlas-agent/",
|
|
"skills/ito-inference/",
|
|
"skills/ito-market-intelligence/",
|
|
"skills/ito-trade-planner/",
|
|
"skills/ito-training/",
|
|
"skills/investor-materials/",
|
|
"skills/investor-outreach/",
|
|
"skills/iterative-retrieval/",
|
|
"skills/java-coding-standards/",
|
|
"skills/jira-integration/",
|
|
"skills/jpa-patterns/",
|
|
"skills/knowledge-ops/",
|
|
"skills/kotlin-coroutines-flows/",
|
|
"skills/kotlin-exposed-patterns/",
|
|
"skills/kotlin-ktor-patterns/",
|
|
"skills/kotlin-patterns/",
|
|
"skills/kotlin-testing/",
|
|
"skills/laravel-patterns/",
|
|
"skills/laravel-plugin-discovery/",
|
|
"skills/laravel-security/",
|
|
"skills/laravel-tdd/",
|
|
"skills/laravel-verification/",
|
|
"skills/lead-intelligence/",
|
|
"skills/liquid-glass-design/",
|
|
"skills/llm-trading-agent-security/",
|
|
"skills/logistics-exception-management/",
|
|
"skills/manim-video/",
|
|
"skills/market-research/",
|
|
"skills/make-interfaces-feel-better/",
|
|
"skills/mcp-server-patterns/",
|
|
"skills/messages-ops/",
|
|
"skills/mle-workflow/",
|
|
"skills/motion-ui/",
|
|
"skills/mysql-patterns/",
|
|
"skills/nanoclaw-repl/",
|
|
"skills/nestjs-patterns/",
|
|
"skills/netmiko-ssh-automation/",
|
|
"skills/network-bgp-diagnostics/",
|
|
"skills/network-config-validation/",
|
|
"skills/network-interface-health/",
|
|
"skills/nodejs-keccak256/",
|
|
"skills/nutrient-document-processing/",
|
|
"skills/latency-critical-systems/",
|
|
"skills/perl-patterns/",
|
|
"skills/perl-security/",
|
|
"skills/perl-testing/",
|
|
"skills/plan-canvas/",
|
|
"skills/plankton-code-quality/",
|
|
"skills/parallel-execution-optimizer/",
|
|
"skills/postgres-patterns/",
|
|
"skills/prisma-patterns/",
|
|
"skills/product-capability/",
|
|
"skills/production-audit/",
|
|
"skills/production-scheduling/",
|
|
"skills/prediction-market-oracle-research/",
|
|
"skills/prediction-market-risk-review/",
|
|
"skills/project-flow-ops/",
|
|
"skills/prompt-optimizer/",
|
|
"skills/python-patterns/",
|
|
"skills/python-testing/",
|
|
"skills/quality-nonconformance/",
|
|
"skills/recursive-decision-ledger/",
|
|
"skills/quarkus-patterns/",
|
|
"skills/quarkus-security/",
|
|
"skills/quarkus-tdd/",
|
|
"skills/quarkus-verification/",
|
|
"skills/ralphinho-rfc-pipeline/",
|
|
"skills/react-patterns/",
|
|
"skills/react-performance/",
|
|
"skills/react-testing/",
|
|
"skills/regex-vs-llm-structured-text/",
|
|
"skills/remotion-video-creation/",
|
|
"skills/research-ops/",
|
|
"skills/scientific-db-pubmed-database/",
|
|
"skills/scientific-db-uspto-database/",
|
|
"skills/scientific-pkg-gget/",
|
|
"skills/scientific-thinking-literature-review/",
|
|
"skills/scientific-thinking-scholar-evaluation/",
|
|
"skills/returns-reverse-logistics/",
|
|
"skills/rust-patterns/",
|
|
"skills/rust-testing/",
|
|
"skills/search-first/",
|
|
"skills/security-bounty-hunter/",
|
|
"skills/security-review/",
|
|
"skills/security-scan/",
|
|
"skills/seo/",
|
|
"skills/skill-scout/",
|
|
"skills/skill-stocktake/",
|
|
"skills/social-graph-ranker/",
|
|
"skills/springboot-patterns/",
|
|
"skills/springboot-security/",
|
|
"skills/springboot-tdd/",
|
|
"skills/springboot-verification/",
|
|
"skills/strategic-compact/",
|
|
"skills/swift-actor-persistence/",
|
|
"skills/swift-concurrency-6-2/",
|
|
"skills/swift-protocol-di-testing/",
|
|
"skills/swiftui-patterns/",
|
|
"skills/tdd-workflow/",
|
|
"skills/team-agent-orchestration/",
|
|
"skills/team-builder/",
|
|
"skills/terminal-opener/",
|
|
"skills/terminal-ops/",
|
|
"skills/token-budget-advisor/",
|
|
"skills/ui-demo/",
|
|
"skills/ui-to-vue/",
|
|
"skills/unified-memory/",
|
|
"skills/unified-notifications-ops/",
|
|
"skills/verification-loop/",
|
|
"skills/video-editing/",
|
|
"skills/videodb/",
|
|
"skills/visa-doc-translate/",
|
|
"skills/vue-patterns/",
|
|
"skills/windows-desktop-e2e/",
|
|
"skills/workspace-surface-audit/",
|
|
"skills/x-api/",
|
|
"skills/accessibility/",
|
|
"skills/agent-eval/",
|
|
"skills/agent-payment-x402/",
|
|
"skills/agent-self-evaluation/",
|
|
"skills/architecture-decision-records/",
|
|
"skills/autonomous-agent-harness/",
|
|
"skills/benchmark/",
|
|
"skills/benchmark-methodology/",
|
|
"skills/brand-discovery/",
|
|
"skills/browser-qa/",
|
|
"skills/bun-runtime/",
|
|
"skills/canary-watch/",
|
|
"skills/ck/",
|
|
"skills/click-path-audit/",
|
|
"skills/codebase-onboarding/",
|
|
"skills/codehealth-mcp/",
|
|
"skills/competitive-platform-analysis/",
|
|
"skills/competitive-report-structure/",
|
|
"skills/config-gc/",
|
|
"skills/context-budget/",
|
|
"skills/delivery-gate/",
|
|
"skills/design-system/",
|
|
"skills/django-celery/",
|
|
"skills/documentation-lookup/",
|
|
"skills/ecc-guide/",
|
|
"skills/ecc-recipes/",
|
|
"skills/flox-environments/",
|
|
"skills/flutter-dart-code-review/",
|
|
"skills/frontend-a11y/",
|
|
"skills/gan-style-harness/",
|
|
"skills/gateguard/",
|
|
"skills/generating-python-installer/",
|
|
"skills/git-workflow/",
|
|
"skills/growth-log/",
|
|
"skills/healthcare-cdss-patterns/",
|
|
"skills/healthcare-emr-patterns/",
|
|
"skills/healthcare-eval-harness/",
|
|
"skills/hermes-imports/",
|
|
"skills/hexagonal-architecture/",
|
|
"skills/homelab-pihole-dns/",
|
|
"skills/homelab-vlan-segmentation/",
|
|
"skills/homelab-wireguard-vpn/",
|
|
"skills/inherit-legacy-style/",
|
|
"skills/intent-driven-development/",
|
|
"skills/ios-icon-gen/",
|
|
"skills/kubernetes-patterns/",
|
|
"skills/living-docs-governance/",
|
|
"skills/loop-design-check/",
|
|
"skills/mailtrap-email-integration/",
|
|
"skills/marketing-campaign/",
|
|
"skills/ml-adoption-playbook/",
|
|
"skills/motion-advanced/",
|
|
"skills/motion-foundations/",
|
|
"skills/motion-patterns/",
|
|
"skills/nextjs-turbopack/",
|
|
"skills/nuxt4-patterns/",
|
|
"skills/openclaw-persona-forge/",
|
|
"skills/opensource-pipeline/",
|
|
"skills/orch-add-feature/",
|
|
"skills/orch-build-mvp/",
|
|
"skills/orch-change-feature/",
|
|
"skills/orch-fix-defect/",
|
|
"skills/orch-pipeline/",
|
|
"skills/orch-refine-code/",
|
|
"skills/plan-orchestrate/",
|
|
"skills/product-lens/",
|
|
"skills/pytorch-patterns/",
|
|
"skills/react-native-patterns/",
|
|
"skills/recsys-pipeline-architect/",
|
|
"skills/redis-patterns/",
|
|
"skills/repo-scan/",
|
|
"skills/rules-distill/",
|
|
"skills/safety-guard/",
|
|
"skills/santa-method/",
|
|
"skills/social-publisher/",
|
|
"skills/taste/",
|
|
"skills/tinystruct-patterns/",
|
|
"skills/uncloud/",
|
|
"skills/vite-patterns/",
|
|
"the-security-guide.md",
|
|
"!**/__pycache__/**",
|
|
"!**/*.pyc",
|
|
"!**/*.pyo",
|
|
"!**/*.pyd",
|
|
"!**/.pytest_cache/**"
|
|
],
|
|
"bin": {
|
|
"ecc": "scripts/ecc.js",
|
|
"ecc-control-pane": "scripts/control-pane.js",
|
|
"ecc-install": "scripts/install-apply.js",
|
|
"ecc-memory-mcp": "scripts/memory-mcp.mjs",
|
|
"ecc-plan-canvas": "scripts/plan-canvas.js",
|
|
"ecc-universal": "scripts/ecc.js"
|
|
},
|
|
"scripts": {
|
|
"welcome": "echo '\\n ecc-universal installed!\\n Run: ecc typescript\\n Compat: ecc-install typescript\\n Docs: https://github.com/affaan-m/ECC\\n Run or self-host any open-source model.\\n Compute: Itô is the preferred compute sponsor — https://compute.itomarkets.com\\n Any GPU provider works. This sponsorship link is passive: it does not invoke an RFQ, reserve capacity, provision compute, or configure serving.\\n Separately, the opt-in ecc ito find bridge invokes the explicitly configured canonical Itô CLI and submits a live authenticated RFQ; it does not reserve capacity.\\n Managed inference through Itô is not live yet.\\n'",
|
|
"catalog:check": "node scripts/ci/catalog.js --text",
|
|
"catalog:sync": "node scripts/ci/catalog.js --write --text",
|
|
"command-registry:generate": "node scripts/ci/generate-command-registry.js",
|
|
"command-registry:write": "node scripts/ci/generate-command-registry.js --write",
|
|
"command-registry:check": "node scripts/ci/generate-command-registry.js --check",
|
|
"lint": "eslint . && markdownlint '**/*.md' --ignore node_modules",
|
|
"harness:adapters": "node scripts/harness-adapter-compliance.js",
|
|
"harness:audit": "node scripts/harness-audit.js",
|
|
"observability:ready": "node scripts/observability-readiness.js",
|
|
"operator:dashboard": "node scripts/operator-readiness-dashboard.js",
|
|
"preview-pack:smoke": "node scripts/preview-pack-smoke.js",
|
|
"release:approval-gate": "node scripts/release-approval-gate.js",
|
|
"release:video-suite": "node scripts/release-video-suite.js",
|
|
"control:pane": "node scripts/control-pane.js",
|
|
"platform:audit": "node scripts/platform-audit.js",
|
|
"discussion:audit": "node scripts/discussion-audit.js",
|
|
"security:ioc-scan": "node scripts/ci/scan-supply-chain-iocs.js",
|
|
"security:advisory-sources": "node scripts/ci/supply-chain-advisory-sources.js",
|
|
"test:plugin-setup-platform": "node docker/plugin-setup/run-platform-tests.js",
|
|
"claw": "node scripts/claw.js",
|
|
"orchestrate:status": "node scripts/orchestration-status.js",
|
|
"orchestrate:worker": "bash scripts/orchestrate-codex-worker.sh",
|
|
"orchestrate:tmux": "node scripts/orchestrate-worktrees.js",
|
|
"test": "node scripts/ci/check-unicode-safety.js && node scripts/ci/validate-agents.js && node scripts/ci/validate-commands.js && node scripts/ci/validate-rules.js && node scripts/ci/validate-skills.js && node scripts/ci/validate-hooks.js && node scripts/ci/validate-install-manifests.js && node scripts/ci/validate-no-personal-paths.js && npm run catalog:check && npm run command-registry:check && node tests/run-all.js",
|
|
"coverage": "c8 --all --include=\"scripts/**/*.js\" --include=\"scripts/**/*.mjs\" --check-coverage --lines 80 --functions 80 --branches 79 --statements 80 --reporter=text --reporter=lcov node tests/run-all.js",
|
|
"build:opencode": "node scripts/build-opencode.js",
|
|
"prepack": "npm run build:opencode",
|
|
"dashboard": "python3 ./ecc_dashboard.py",
|
|
"dashboard:web": "node scripts/dashboard-web.js"
|
|
},
|
|
"dependencies": {
|
|
"@iarna/toml": "2.2.5",
|
|
"ajv": "8.20.0",
|
|
"sql.js": "1.14.1"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "9.39.2",
|
|
"@opencode-ai/plugin": "1.17.3",
|
|
"@types/node": "26.1.2",
|
|
"c8": "11.0.0",
|
|
"eslint": "10.6.0",
|
|
"globals": "17.4.0",
|
|
"markdownlint-cli": "0.48.0",
|
|
"typescript": "6.0.3"
|
|
},
|
|
"engines": {
|
|
"node": ">=18"
|
|
},
|
|
"overrides": {
|
|
"fast-uri": "3.1.5",
|
|
"markdown-it": "14.3.0",
|
|
"js-yaml": "4.3.0"
|
|
},
|
|
"resolutions": {
|
|
"fast-uri": "3.1.5",
|
|
"markdown-it": "14.3.0",
|
|
"js-yaml": "4.3.0"
|
|
},
|
|
"packageManager": "yarn@4.9.2+sha512.1fc009bc09d13cfd0e19efa44cbfc2b9cf6ca61482725eb35bbc5e257e093ebf4130db6dfe15d604ff4b79efd8e1e8e99b25fa7d0a6197c9f9826358d4d65c3c"
|
|
}
|